Window aktualisieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
kocad
Beiträge: 4
Registriert: 30.04.2005 15:53

Window aktualisieren

Beitrag 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
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag 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...
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag 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
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Antworten