dategadget() - datum setzen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
coMstructor
Beiträge: 130
Registriert: 04.07.2006 20:10
Kontaktdaten:

dategadget() - datum setzen

Beitrag von coMstructor »

hi,
ich möchte beim dategadget ein bestimmtes datum setzen. ich benutze dafür diesen befehl:

Code: Alles auswählen

SetGadgetState(1393,ParseDate("%dd.%mm.%yyyy",Datum$))
Datum$ ist dann zB "20.08.2008". aber nach diesem aufruf verändert sich im dategadget nichts. ich weis nicht warum??
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Beitrag von sibru »

Dein Code ist korrekt, jedoch fehlt das Umfeld, spez. Gadget-Aufbau.
Ich hab´mal ´n kleines TestProgi um Deine Zeile erstellt: klappt
wunderbar...

Code: Alles auswählen

#DatGad = 1
WinId = OpenWindow(1, 0, 0, 200, 150, "Test DateGad", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WinId)
DateGadget(#DatGad, 10, 10, 120, 20)
Datum$ = "20.08.2008"
SetGadgetState(#DatGad, ParseDate("%dd.%mm.%yyyy", Datum$))

Repeat ;/========== die SteuerSchleife ==========
  EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
Bild Bild
Little John

Beitrag von Little John »

sibru hat geschrieben:klappt wunderbar...
Bei mir auch (PB 4.20 unter Windows XP). Es würde mich allerdings nicht wundern wenn es unter Linux nicht läuft, denn da ist DateGadget() buggy. Ist aber mal wieder alles nur Spekulation, da der OP keinen vollständigen Code angegeben hat.

Gruß, Little John
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Also PB4.20 gehts... da ändert sich die anzeige genau so wie du es gewollt hast.

Code: Alles auswählen

  Datum$="20.08.2008"

  If OpenWindow(0, 0, 0, 200, 250, "DateGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(0))
      DateGadget(0, 10, 10, 180, 25, "Datum: %mm/%dd/%yyyy Zeit: %hh:%ii")
      SetGadgetState(0,ParseDate("%dd.%mm.%yyyy",Datum$))
      Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
    EndIf
  EndIf
Drumrum aus der Hilfe genommen....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
coMstructor
Beiträge: 130
Registriert: 04.07.2006 20:10
Kontaktdaten:

Beitrag von coMstructor »

ja, das mit der schleife und dem drumrum ist klar, die zeile war nur ein auszug. euer code funzt bei mir ja auch. mein ziel ist es halt nach einem event das datum zu verändern. leider geschieht da wie gesagt einfach garnix nach dem aufruf der benannten zeile.

also nochmal genau:

1. ich lese ein string aus ner preference ( das gewünschte datum )
2. benannte zeile wird aufgerufen um diesen string in das gadget zu setzen
3. es passiert nix , das datum ändert sich nicht und zeigt immer noch das aktuelle datum an
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das ändern des datums erzeugt wiederum ein event, das verarbeitet werden muss.
also, wenn du SetGadgetState(1393,ParseDate("%dd.%mm.%yyyy",Datum$))
ausgeführt hast, wird die änderung erst nach dem nächsten durchlauf von (Wait)WindowEvent() sichtbar.

btw, warum 1393? hast du so viele gadgets?


> Es würde mich allerdings nicht wundern wenn es unter Linux nicht läuft, denn da ist DateGadget() buggy.

hat coMstructor denn Linux?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Little John

Beitrag von Little John »

Kaeru Gaman hat geschrieben:> Es würde mich allerdings nicht wundern wenn es unter Linux nicht läuft, denn da ist DateGadget() buggy.

hat coMstructor denn Linux?
Weiß nicht, das war nur'n Schuss ins Blaue. Bleibt ja kaum was anderes übrig, wenn detaillierte Angaben fehlen.

Gruß, Little John
Benutzeravatar
coMstructor
Beiträge: 130
Registriert: 04.07.2006 20:10
Kontaktdaten:

Beitrag von coMstructor »

hat er nicht.

zum einen: ich bin so bei 7000 und noch was gadgets ...

zum anderen: dann hab ich wohl ein problem. in der haupt repeat schleife die die events abfängt wird eine prozedur aufgerufen, in der dann hat die benannte zeile aufgeführt wird. kann ich nicht irgendwie direkt nach dem setgadgetstate updaten??
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

mit einem eventfresser:

Code: Alles auswählen

While WindowEvent() : Went
direkt nach dem SetGadgetState

aber Vorsicht:
!Dirty Workaround!

das frisst wirklich ALLE Events die seit dem letzten (Wait)WindowEvent angefallen sind.
sollten dort Userevents dabei sein, kannst du nicht mehr drauf reagieren.

meistens sind das aber ja nur wenige millisekunden,
und wenn ein Userevent das Aktualisieren ausgelöst hat,
wird es ihm schwer fallen, in den nächsten zwei millisekunden ein weiteres wichtiges Event auszulösen....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
coMstructor
Beiträge: 130
Registriert: 04.07.2006 20:10
Kontaktdaten:

Beitrag von coMstructor »

dein tip ändert leider auch nix. ich bin am verzweifeln :( was kann da nur falsch sein?
Antworten