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
mit der rechten Maustaste erhält man ein Menu für Zoom/Transparenz
linke Maustaste zum moven gedrückt halten (ala DragDrop)
have Fun
UHR
Moderator: Moderatoren
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: UHR
Nett.
Was ich schon seit Jahren auf der Agenda habe, aber ich komme leider nicht dazu: Eine wirklich gut gemachte Uhr mit Fallblattanzeige.
Was ich schon seit Jahren auf der Agenda habe, aber ich komme leider nicht dazu: Eine wirklich gut gemachte Uhr mit Fallblattanzeige.
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: UHR
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
gruss by OHR
Jimmy
Jimmy