[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/privacyprotection/cron/task/anonymize_ip.php on line 83: A non-numeric value encountered
Inoffizielles deutsches Xbase-Forum • UHR
Seite 1 von 1

UHR

Verfasst: So, 21. Okt 2018 4:21
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) 13036 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

Re: UHR

Verfasst: So, 21. Okt 2018 9:32
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.

Re: UHR

Verfasst: Di, 23. Okt 2018 7:36
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.