EventGadgetID() ändern/manipulieren ...

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

EventGadgetID() ändern/manipulieren ...

Beitrag von hiltwin »

hallo,

ich benötige die möglichkeit, EventGadgetID() zu manipulieren für folgendes:

Code: Alles auswählen

CountDown=500
Repeat 
WindowEvent() 
CountDown - 1 :  
SetGadgetText(8,FormatDate("%ii:%ss",CountDown)) 
if EventGadgetID()=#Button_Reset
CountDown=500 : hier fehlt etwas, was ich nicht weiss
endif
Until CountDown = 0 Or EventGadgetID()=#Button_Stop
Wenn der #Button_Reset gedrückt wurde, bleibt der Wert in EventGadgetID() erhalten, so dass es endlos zum Reset auf CountDown=500 käme. Wie kann ich EventGadgetID() so manipulieren, dass es entweder keinen Wert zurückgibt, oder z.B. #Button_Start?

Danke für alle Anregungen
Hiltwin

Edit by Kiffi: Code-Tags gesetzt
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Dafür musst du nichts manipulieren.

Code: Alles auswählen

CountDown=500
Repeat
Event = WindowEvent()
CountDown - 1 :
SetGadgetText(8,FormatDate("%ii:%ss",CountDown))
if Event = #PB_Event_Gadget and EventGadgetID()=#Button_Reset
CountDown=500 : hier fehlt etwas, was ich nicht weiss
endif
Until CountDown = 0 Or EventGadgetID()=#Button_Stop
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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

Beitrag von NicTheQuick »

Vielleicht sollte man mal in den FAQ erklären wie ein richtiges
Eventhandling funktioniert, das keine unnötige CPU-Zeit frisst und einem
vielleicht sogar den WindowCallback näher bringt.

Es fliegen hier im Forum zwar schon einige gute und brauchbare
Codefetzen rum, aber nicht alle auf einem Haufen.

Also: Wer Zeit und Muße dazu findet, könnte sich dochmal damit bemühen. :wink:
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

Beitrag von hiltwin »

@Batze:

Perfektement! Problem gelöst, das war genau das, was mir gefehlt hat.
Darf ich Dich bei nem Release in die Danksagungsliste aufnehmen? ;o)

@NicTheQuick:

Hast Du eine entsprechende Anregung? ;o) Und was meinst Du in diesem Fall mit WindowCallback?

Frdl. Gruss
Hiltwin
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Solche Eventhandlingfragen tauchen wirklich andauernd auf. :freak:
Ich stimme dir zu Nic.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Hallo!
Entschuldigt, wenn das was ich erfrage schon beantwortet ist, aber nehmen wir mal diesen Code:

Code: Alles auswählen

OpenWindow(0, ...andere Parameter...)
CreateGadgetList(0)
ButtonGadget(0, 5, 5, 100, 25, "Klick mich") ; Knopf wird definiert

Repeat
If EventGadgetID() = 0 [And WindowEvent() = #PB_Event_Gadget]
  MessageRequester("AND51", "Hast mich geklickt",0)
EndIf
Delay(5)
ForEver

End
Also, egal ob ich den Text in den [ eckigen ] Klammern mit in die If-Abfrage schalte oder nicht, in 99,9% aller Fälle beim Kompilieren bleibt der Knopf gedrückt und die Meldung "hast mich geklickt" erscheint immer und immer wieder. Da kann ich das Programm nur gewaltsam mit Hilfe des Taskmanagers oder des Debuggers beenden.

Habe ich etwas falsch gemacht? Etwas nicht bedacht? Nach jedem Schleifendurchlauf wird ja "Delay(5)" ausgeführt, daran kann es doch nicht liegen... Könnt ihr mir sagen, wo hier der springende Punkt ist? Danke!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Könnt ihr mir sagen, wo hier der springende Punkt ist? Danke!

mal abgesehen davon, dass das von Dir beschriebene Problem bei mir
nicht auftritt: Was spricht dagegen, [c]WaitWindowEvent()[/c] anstelle von
[c]WindowEvent()[/c] zu verwenden? Dann bräuchtest Du auch nicht Dein
[c]Delay()[/c].

Code: Alles auswählen

Repeat
  
  Select WaitWindowEvent()
    
    Case #PB_Event_Gadget
      
      Select EventGadgetID()
        
        Case 0
          
          MessageRequester("AND51", "Hast mich geklickt",0)
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      
      Quit = 1
      
  EndSelect
  
Until Quit = 1
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Erst mal den Code. Er stammt aus einem heute fertiggestelltem Projekt:

Code: Alles auswählen

Repeat
If GetGadgetState(6629) = 1 And EventGadgetID() = 6629
     text$=InputRequester("input","Bitte Text eingeben","default wert")
EndIf
;
; weiterer Code
;
Delay(Random(2))
Until WindowEvent() = #PB_Event_CloseWindow
Also, Es wurde ordnungsgemäß ein Fenster mit OpenWindow erstellt. Außerdem die dazu nötige GadgetList(e).
In dieser GadgetList bedindet sich nun eine Checkbox, die die GdgetID 6629 hat.

Problem:
Wenn ich jetzt ein Häkchen in die Checkbox nummer 6629 reinsetze, dann erscheint ordnungsgemäßerweise der inpurequester. Nach eingabe des Textes und klick auf OK erscheint diese Box aber wieder! :cry: Und wieder! :| Und immer, immer wieder :evil: !!! Also unendlich oft. Hilft nur noch heulen und nach Mama schreien oder den Debugger konsultieren.
Daher meine Frage: "Habe ich was falsch gemacht?"

Oh, es ist ja bereit 0:05 Uhr! Dann wurde das Projekt ja gestern fertiggestellt! *gg* Nein, aber die Frage nach der Lösung für mein Problem ist ernst gemeint! Danke für jede Hilfe.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Daher meine Frage: "Habe ich was falsch gemacht?"

manchmal habe ich das Gefühl, als ob ich gegen Wände reden würde...

> Hilft nur noch heulen und nach Mama schreien

oder einfach mal lesen, was andere (jetzt speziell ich) zu diesem Thema schreiben?

> oder den Debugger konsultieren.

ist nie verkehrt.

Grüße ... Kiffi
a²+b²=mc²
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

Allerdings schade ...

Beitrag von hiltwin »

... meine erste Frage hat leider keiner beantwortet - ist es irgendwie möglich, dass man

EventGadgetID() so manipulieren, dass es entweder keinen Wert zurückgibt, oder einen vorgegebenen wie z.B. 15397 oder #Button_Start?

Danke an die Wissenden ;o)

Hiltwin
Antworten