Das nächste Entwicklertreffen findet Anfang Mai in Münster statt - weitere Infos bzw. zur Anmeldung!

UHR

Hinweise zu interessanten Quellen und Projekten

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11550
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

UHR

Beitrag von AUGE_OHR » So, 21. Okt 2018 4:21

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) 1941 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) 27-mal heruntergeladen
gruss by OHR
Jimmy

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: UHR

Beitrag von Tom » So, 21. Okt 2018 9:32

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: 11550
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: UHR

Beitrag von AUGE_OHR » Di, 23. Okt 2018 7:36

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