UHR

Hinweise zu interessanten Quellen und Projekten

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

UHR

Beitrag von AUGE_OHR »

eigentlich wollte ich nur testen wie schnell die API Function SetWindowRgn() arbeitet und dabei ist diese Uhr entstanden. das Layout ist dem alten 7 Segment LED Style angelehnt die ich als Masken für SetWindowRgn() verwende. ein Image File (Option als Parameter übergeben) für dem Hintergrund dient zur Anzeige denn der Rest ist transparent :D

Dlg8Uhr.jpg
Dlg8Uhr.jpg (29.55 KiB) 13025 mal betrachtet
mit der rechten Maustaste erhält man ein Menu für Zoom/Transparenz
linke Maustaste zum moven gedrückt halten (ala DragDrop)



have Fun
Dateianhänge
DLG8LCD.ZIP
v1.9.355 "pure"
(54.49 KiB) 414-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: UHR

Beitrag von Tom »

Nett. :wink:

Was ich schon seit Jahren auf der Agenda habe, aber ich komme leider nicht dazu: Eine wirklich gut gemachte Uhr mit Fallblattanzeige.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: UHR

Beitrag von AUGE_OHR »

Tom hat geschrieben: So, 21. Okt 2018 9:32 Nett. :wink:
Danke

bei einer Optischen Darstellung hat man oft das Problem mit dem "löschen" vor einer neuen Anzeige.
das führt dann zu einem "flackern" wenn der Aufbau der Anzeige "langsam" ist.

eine "Analoge" Uhr mit GRA Function zu malen gibt wenig Optisch zufriedenstellende Ergebnisse.
wenn man Bitmap zur Anzeige verwendet kann man Optisch sicherlich auch eine Fallblattanzeige gestalten.

mit der API Function SetWindowRgn() bin ich mal einen anderen Weg zu Anzeige gegangen indem eine Maske verwendet wird die Bereiche "abdeckt". man kann SetWindowRgn() z.b. verwenden um einen "runden" Button anzuzeigen. die "abgedeckte" Region wir dabei transparent.

Code: Alles auswählen

#define SM_CXBORDER     5
#define SM_CYBORDER     6
#define SM_CXDLGFRAME   7
#define SM_CYDLGFRAME   8

PROCEDURE MachKreise(oObj)
LOCAL hHwnd
LOCAL aTmp
LOCAL nLeftRect
LOCAL nTopRect
LOCAL nRightRect
LOCAL nBottomRect
LOCAL hRgn
LOCAL nFrame := GetSystemMetrics(SM_CYBORDER)

   hHwnd := oObj:GetHwnd()
   aTmp  := oObj:Currentsize()

   nLeftRect   := 0       +nFrame
   nTopRect    := aTmp[2] -nFrame
   nRightRect  := aTmp[1] -nFrame
   nBottomRect := 0       +nFrame

   // now construct a Region and call its API function
   //
   hRgn := CreateEllipticRgn(nLeftRect,nTopRect,nRightRect,nBottomRect)
   SetWindowRgn(hHwnd,hRgn,.t.)

   // clean up
   //
   IF .NOT. EMPTY(hRgn)
       DeleteObject(hRgn)
   ENDIF

RETURN

DLLFUNCTION GetSystemMetrics( nIndex ) USING STDCALL FROM USER32.DLL
DLLFUNCTION CreateEllipticRgn(nLeftRect,nTopRect,nRightRect,nBottomRect) USING STDCALL FROM GDI32.DLL
DLLFUNCTION SetWindowRgn(hHwnd,hRgn,bRedraw) USING STDCALL FROM USER32.DLL
DLLFUNCTION DeleteObject( hObject ) USING STDCALL FROM GDI32.DLL
ich habe die Masken auf das TopWindow (XbpDialog) angewendet und bekomme damit die "frei schwebende" Uhrzeit.
gruss by OHR
Jimmy
Antworten