EventGadgetID() ändern/manipulieren ...

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
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 »

Nein, das geht nicht.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Allerdings schade ...

Beitrag von Danilo »

hiltwin 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?
Möglich ist so ziemlich alles, aber es ist nicht nötig. Kiffi hat Dir
bereits gesagt was Du falsch machst. Wenn Du eine ordentliche
Nachrichtenbehandlung schreibst, dann hast Du dieses Problem
mit den dauernd kommenden Nachrichten garnicht erst.
AND51 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
Wie Kiffi schon sagte, hier fehlt der Check ob (Wait)WindowEvent
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
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

ne lösung für mein problem habe ich aber noch nicht ...

Beitrag von hiltwin »

...

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
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Das ist doch kein Problem. :wink:

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
ungetestet
Benutzt du halt die Funktion, auch wenn es unnötig ist, wie es schon andere erklärt haben.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
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

Beitrag von PureLust »

Hi hiltwin, ...

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
Gruß, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
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 »

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)
Benutzeravatar
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

Beitrag von PureLust »

NicTheQuick hat geschrieben:So finde ich es schöner und vor allem genauer:
Nunja, auf Genauigkeit war's ja auch nicht programmiert - war ja nur'n Beispiel für 3 Funktionen bei ein und demselben einem Button. ;)

Und ausserdem isses nun ja kein CountDOWN mehr, sondern ein CountUP !!! :mrgreen:
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

ich würde den zähler in einen thread packen, dann kann man WaitWindowEvent() für das fenster verwenden.

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
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 »

nco2k hat geschrieben:ich würde den zähler in einen thread packen, dann kann man WaitWindowEvent() für das fenster verwenden.

c ya,
nco2k
Das wäre eine Möglichkeit, aber so ist das ganze auch mehr
als ausreichend. Man beachte hierbei das [c]Delay(1)[/c] hinter dem [c]Case 0[/c],
was sehr wichtig bei dieser Sache ist
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

Perfekt!!!

Beitrag von hiltwin »

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
Antworten