EventGadgetID() ändern/manipulieren ...
- 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
Re: Allerdings schade ...
Möglich ist so ziemlich alles, aber es ist nicht nötig. Kiffi hat Dirhiltwin hat geschrieben:... 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?
bereits gesagt was Du falsch machst. Wenn Du eine ordentliche
Nachrichtenbehandlung schreibst, dann hast Du dieses Problem
mit den dauernd kommenden Nachrichten garnicht erst.
Wie Kiffi schon sagte, hier fehlt der Check ob (Wait)WindowEventAND51 hat geschrieben: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
auch #PB_Event_Gadget zurückgibt.
Nur wenn die Nachricht #PB_Event_Gadget von (Wait)WindowEvent
zurückgegeben wird machst Du mit Deinem Check weiter.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
ne lösung für mein problem habe ich aber noch nicht ...
...
ich möchte mit einem button bei einem countdown mit dem ersten klick den countdown starten, mit dem zweiten klick den countdown stoppen und mit dem dritten klick den countdown resetten ...
(ist allerdings ein anderer fall als der allererste, den ich gepostet hatte)
kriege ich einfach nicht hin - würde ich hinbekommen, wenn ich EventGadgetID() so setzen kann, dass es nicht die letzte Aktion gespeichert behält
ich möchte mit einem button bei einem countdown mit dem ersten klick den countdown starten, mit dem zweiten klick den countdown stoppen und mit dem dritten klick den countdown resetten ...
(ist allerdings ein anderer fall als der allererste, den ich gepostet hatte)
kriege ich einfach nicht hin - würde ich hinbekommen, wenn ich EventGadgetID() so setzen kann, dass es nicht die letzte Aktion gespeichert behält
Das ist doch kein Problem.
ungetestet
Benutzt du halt die Funktion, auch wenn es unnötig ist, wie es schon andere erklärt haben.

Code: Alles auswählen
Procedure EventGadget_ID(Merken.b)
Static GID
if Merken or EventGadgetID() <> GID
GID = EventGadgetID()
else
GID = -1
endif
ProcedureReturn GID
EndProcedure
Benutzt du halt die Funktion, auch wenn es unnötig ist, wie es schon andere erklärt haben.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Counter
Hi hiltwin, ...
anbei mal ein Code der evtl. das macht was Du vorhattest.
Gruß, PL.
anbei mal ein Code der evtl. das macht was Du vorhattest.

Code: Alles auswählen
AktCountdownStatus=1
Counter=1000000
If OpenWindow(0,0,0,120,60,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Countdown") And CreateGadgetList(WindowID(0))
AddKeyboardShortcut(0,#PB_Shortcut_Escape,27)
If TextGadget(1,5,8,WindowWidth()-10,20,Str(Counter),#PB_Text_Center)
If ButtonGadget(2,20,30,WindowWidth()-40,22,"Start")
ActivateGadget(2)
Repeat
Delay(10)
If AktCountdownStatus=2
Counter - 1
SetGadgetText(1,Str(Counter))
EndIf
Event = WindowEvent()
If Event=#PB_Event_Gadget
If EventGadgetID()=2
AktCountdownStatus + 1
If AktCountdownStatus=2
SetGadgetText(2,"Stop")
ElseIf AktCountdownStatus = 3
SetGadgetText(2,"Reset")
Else
AktCountdownStatus = 1
SetGadgetText(2,"Start")
Counter=1000000
SetGadgetText(1,Str(Counter))
EndIf
EndIf
EndIf
Until Event=#PB_Event_CloseWindow Or (Event=#PB_Event_Menu And EventMenuID()=27)
EndIf
EndIf
CloseWindow(0)
EndIf
End
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
- 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
So finde ich es schöner und vor allem genauer:
Code: Alles auswählen
If OpenWindow(0,0,0,120,60,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Countdown") = 0 : End : EndIf
If CreateGadgetList(WindowID(0)) = 0 : End : EndIf
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 27)
TextGadget(1, 5, 8, WindowWidth() - 10, 20, Str(Counter), #PB_Text_Center)
ButtonGadget(2, 20, 30, WindowWidth() - 40, 22, "Start")
ActivateGadget(2)
AktCountdownStatus.l = 1
Counter.l = 0
CountDelay.l = 10
Repeat
If AktCountdownStatus = 2
While ElapsedMilliseconds() > AktDelay
Counter + 1
AktDelay + CountDelay
Wend
SetGadgetText(1, Str(Counter))
EndIf
EventID.l = WindowEvent()
Select EventID
Case #PB_Event_Gadget
If EventGadgetID() = 2
AktCountdownStatus + 1
If AktCountdownStatus = 2
AktDelay = ElapsedMilliseconds() + CountDelay
SetGadgetText(2, "Stop")
ElseIf AktCountdownStatus = 3
SetGadgetText(2, "Reset")
Else
AktCountdownStatus = 1
SetGadgetText(2,"Start")
Counter = 0
SetGadgetText(1, Str(Counter))
EndIf
EndIf
Case 0
Delay(1)
EndSelect
Until EventID = #PB_Event_CloseWindow Or (EventID = #PB_Event_Menu And EventMenuID() = 27)
CloseWindow(0)
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Nunja, auf Genauigkeit war's ja auch nicht programmiert - war ja nur'n Beispiel für 3 Funktionen bei ein und demselben einem Button.NicTheQuick hat geschrieben:So finde ich es schöner und vor allem genauer:

Und ausserdem isses nun ja kein CountDOWN mehr, sondern ein CountUP !!!

[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
- 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
Das wäre eine Möglichkeit, aber so ist das ganze auch mehrnco2k hat geschrieben:ich würde den zähler in einen thread packen, dann kann man WaitWindowEvent() für das fenster verwenden.
c ya,
nco2k
als ausreichend. Man beachte hierbei das [c]Delay(1)[/c] hinter dem [c]Case 0[/c],
was sehr wichtig bei dieser Sache ist
Perfekt!!!
Vielen Dank Euch allen bei der Lösung meines Problems!
@PL:
In der Art hab ich es umgesetzt, klasse.
@NTQ:
Hast Du meine Festplatte gescannt? Der Teil ist bei mir nämlich tatsächlich nen "CountUp" ich hatte nur den Beispielcode als Countdown geschrieben ;o)
Das mit dem Delay/Case 0 - prima Idee!
@nc02k:
Als Anfänger hab ich mit Threads noch nie was gemacht, von daher ist der Hinweis nur eine Anregung, mit der ich mich aber vermutlich wenn erst ab Release 2.0 beschäftige, da derzeit noch genug anderes zu coden ist ;o)
ciao
hiltwin
@PL:
In der Art hab ich es umgesetzt, klasse.
@NTQ:
Hast Du meine Festplatte gescannt? Der Teil ist bei mir nämlich tatsächlich nen "CountUp" ich hatte nur den Beispielcode als Countdown geschrieben ;o)
Das mit dem Delay/Case 0 - prima Idee!
@nc02k:
Als Anfänger hab ich mit Threads noch nie was gemacht, von daher ist der Hinweis nur eine Anregung, mit der ich mich aber vermutlich wenn erst ab Release 2.0 beschäftige, da derzeit noch genug anderes zu coden ist ;o)
ciao
hiltwin