Hallo Leute
ich möchte gerne mit PureBasic eine Bildschrimgroße Digitaluhr programmieren, die im Sekundentakt die Uhrzeit anzeigt
das ganze soll nicht flackern, wenn eine neue Zeit dargestellt wird
derzeit habe ich versucht, es mit einem TextGadget zu lösen. Doch bei jeder neuen Zeit wird der "Text" kurz ausgeblendet
Auf deutsch: es flacker wie s..
wie kann man das besser lösen?
Ach ja
und wie kann ich (ähnlich VB6) einen Timer programmieren, oder dafür sorgen, dass eine Prozedur im 1/10 Sekundetakt aufgerufen wird
Flackerfrei Darstellung
- NicTheQuick
- Ein Admin
- Beiträge: 8838
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Flackerfrei Darstellung
Da ich nicht annehme, dass du das ganze mit DirectX machen willst, würde ich dir das CanvasGadget empfehlen. Das hat Doublebuffering sozusagen schon integriert, d.h. wenn du mittels StartDrawing()-StopDrawing() etwas darauf malst, wird das Neugemalte mit dem Aufruf von StopDrawing() oder bei der entsprechenden internen Event-Verarbeitung ohne Flackern übernommen und angezeigt.
Bezüglich Timern kannst du z.B. 'AddWindowTimer()' nutzen, oder auf Threads umsteigen, aber ersteres ist wohl eher dafür geeignet und ein besserer Einstieg in das ganze.
Bezüglich Timern kannst du z.B. 'AddWindowTimer()' nutzen, oder auf Threads umsteigen, aber ersteres ist wohl eher dafür geeignet und ein besserer Einstieg in das ganze.
Re: Flackerfrei Darstellung
Danke für den Tipp
wie gesagt ich komme aus VB6
wenn ich das richtig sehe, wird mit start und Stopdrawing gezeichnet
wenn ich da einen Text immer auf das gleiche Image ausgebe, wird ja der alte nicht gelöscht
kannst Du mir ein kleines Beispiel geben, wie das geht?
wie gesagt ich komme aus VB6
wenn ich das richtig sehe, wird mit start und Stopdrawing gezeichnet
wenn ich da einen Text immer auf das gleiche Image ausgebe, wird ja der alte nicht gelöscht
kannst Du mir ein kleines Beispiel geben, wie das geht?
- NicTheQuick
- Ein Admin
- Beiträge: 8838
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Flackerfrei Darstellung
Zeichne einfach mit Box() vorher alles weiß oder welche Farbe auch immer.
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: Flackerfrei Darstellung
so was zum Beispiel ?
Code: Alles auswählen
EnableExplicit
Enumeration 1
#Window
#timer1
#button1
EndEnumeration
#fontnr = 1
#windowcolor = $F0F0F0
;LoadFont(#fontnr, "Courier", 28, #PB_Font_Bold)
LoadFont(#fontnr, "Arial", 28, #PB_Font_Bold)
Procedure.i UhrGadget_Draw(pbnr)
Protected time$, timebr, timehh
Protected x, y, rb = 2
Protected width = GadgetWidth(pbnr)
Protected height = GadgetHeight(pbnr)
StartDrawing(CanvasOutput(pbnr))
;Gadget ausmalen mit Rahmen
Box(0, 0, width, height, #windowcolor) ;erst komplett einfärben wegen Roundbox
RoundBox(0, 0, width, height, rb, rb, #Blue) ;dann Roundbox als Rahmen
;Hintergrund
DrawingMode(#PB_2DDrawing_Gradient)
BackColor(#Yellow)
FrontColor(#Magenta)
LinearGradient(0, 0, 0, height)
RoundBox(1, 1, width-2, height-2, rb, rb) ;dann Roundbox innen mit Gradient ausmalen
;Uhrzeit
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(#fontnr))
time$ = FormatDate("%hh:%ii:%ss", Date())
timebr = TextWidth(time$)
timehh = TextHeight(time$)
x = (width - timebr) / 2
y = (height - timehh) / 2
DrawText(x, y, time$, #Blue)
StopDrawing()
EndProcedure
Procedure.i UhrGadget(pbnr, x, y, width, height)
CanvasGadget(pbnr, x, y, width, height, #PB_Canvas_ClipMouse|#PB_Canvas_DrawFocus)
SetGadgetAttribute(pbnr, #PB_Canvas_Cursor, #PB_Cursor_Hand)
UhrGadget_Draw(pbnr)
EndProcedure
Define event
OpenWindow(#Window, 300, 300, 300, 360, "Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
SetWindowColor(#Window, #windowcolor)
AddWindowTimer(#Window, #timer1, 1000)
UhrGadget(#button1, 20, 10, 200, 50)
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Timer
If EventTimer() = #timer1
UhrGadget_Draw(#button1)
EndIf
EndSelect
Until event = #PB_Event_CloseWindow
RemoveWindowTimer(#Window, #timer1)
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Re: Flackerfrei Darstellung
Danke
das hilft schon mal weiter
das hilft schon mal weiter