Seite 1 von 1
Window aktualisieren
Verfasst: 02.05.2005 11:58
von kocad
Hallo,
ich wollte mir eine kleine einfache Uhr schreiben, was alles recht gut funktioniert, bis auf den Haken, dass ich nicht so recht weiß wie ich die zeit in einem geöffneten Fenster aktualisieren soll.
Ich nehmen die Api: GetLocalTime_()
und schreibe sie als TextGadget in das Fenster.
Aktualisieren ist nicht wirklich das Problem, sondern das geblinke das das Fenster macht und dadurch den "Schließen" - Knopf überhaupt nicht mehr anzeigt.
Wer weiß Rat?
Danke im voraus,
kocad
Verfasst: 02.05.2005 12:49
von nicolaus
kannst du mal ein wenig code posten damit man sieht wie du was machst? so können wir dir eher helfen.
gruß nico
Verfasst: 02.05.2005 12:49
von Agent
Hallo.
Dein Problem wird mit der Beschreibung nicht so richtig klar. Ich vermute mal, mit "geblinke" meinst Du, die permanente Aktualisierung des Gadgets.
Warum aktualisierst du permanent das Gadget und nicht erst, wenn sich die Zeit geändert hat? Das entlastet den Rechner.
Nach Aktualisierung deines Fensters bzw der Gadgets solltest du noch ein
Repeat : Until Windowevent()=0
einbauen....Nur so als tipp...
Falls das nicht die Lösung ist, poste dochmal den Code, es klingt, als ist er nicht lange...
Verfasst: 02.05.2005 12:52
von Laurin
Das Geblinke kommt daher, dass er das Fenster zu oft aktualisiert. Du müsstest eine "Bremse" einbauen.
Eine Variante wäre,
Delay() zu verwenden. zB so:
Code: Alles auswählen
Repeat
' <- Zeit ins Textgadget schreiben
Delay(100)
Event = WindowEvent()
Until Event = #PB_Event_CloseWindow
Eine zweite Möglichkeit ist, nur dann das Fenster zu aktualisieren, wenn sich die Zeit geändert hat.
Code: Alles auswählen
Repeat
GadgetZeit.s = GetGadgetText(#TextGadget) ' hier die TextGadget-Nummer eintragen
APIZeit.s = GetLocalTime_() ' ??? Ich weiß nicht, wie dieser API-Befehl funzt
If GadgetZeit <> APIZeit
SetGadgetText(#TextGadget, APIZeit)
Endif
Delay(100)
Event = WindowEvent()
Until Event = #PB_Event_CloseWindow
Das kannst du natürlich anpassen, wie du es brauchst.
Greetz Laurin
Verfasst: 02.05.2005 12:58
von Agent
Hier mal meine "Micro-Uhr" die genau das macht, was du benennst (ohne API - unnütz)
Code: Alles auswählen
;
; Micro-Uhr
;
#SW_Name="MicroUhr"
#win_main=1
main_win=OpenWindow(#win_main,0,0,150,30,#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_SystemMenu,#SW_Name)
If main_win
If CreateGadgetList(main_win)
TextGadget(1,5,5,50,20,"Uhrzeit")
StringGadget(2,55,5,90,20,FormatDate("%hh:%ii:%ss",Date()),#PB_Text_Right)
EndIf
Else
MessageRequester("FEHLER","Kein Fenster!",#mb_iconerror)
End
EndIf
timer=ElapsedMilliseconds()
Repeat
If (ElapsedMilliseconds()-timer)>1000 ; Also 1 Sekunde
aktuellezeit$=FormatDate("%hh:%ii:%ss",Date())
SetGadgetText(2,aktuellezeit$)
timer=ElapsedMilliseconds()
Repeat : Until WindowEvent()=0
EndIf
Delay(1) ; Kurz warten für CPU, sonst 100% Auslastung
Until WindowEvent()=#PB_Event_CloseWindow
End