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