Seite 1 von 1

EventGadget wird mehrfach aufgerufen

Verfasst: 08.10.2013 21:04
von frankmannb
Hallo Jungs,

sagt mal, kann mir jemand von euch erkären, warum bei folgenden Programm der Button "DRUCKEN" nach dessen Betätigung im Debugger 3 mal aufgerufen bzw. angezeigt wird ? Ich verstehe das nicht.

Besten Dank
frankmannb

Code: Alles auswählen

If OpenWindow(0, 0, 0, 1000, 800, "ANTON Wiederholungsdruck", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget) 
  
  ; Button
  ButtonGadget(1, 450, 650, 200, 50, "DRUCKEN [F12]",#PB_Window_ScreenCentered)
  
  Repeat ; In dieser Schleife werden die Aktionen durchgefuehrt.
    EventID = WaitWindowEvent() ; Die Variable EventID wird der Funktion WaitWindowEvent (WarteAufAktion) zugewiesen.
    

    
        ;  Button DRUCKEN
    If EventGadget() = 1
      z = z + 1
      Debug z
    EndIf    
    
    If EventID = #PB_Event_CloseWindow ; Wenn der Benutzer die Aktion schliessen drueckt,
      Quit = 1 ; wird die Quit Variable aktiviert.
    EndIf ; Ende der Abfrage
    
  Until Quit = 1 ; Wenn die Quit Variable aktiviert ist, schliesse das Programm.

EndIf ; IF open Window

Re: EventGadget wird mehrfach aufgerufen

Verfasst: 08.10.2013 21:14
von RSBasic

Code: Alles auswählen

If OpenWindow(0, 0, 0, 1000, 800, "ANTON Wiederholungsdruck", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
  
  ; Button
  ButtonGadget(1, 450, 650, 200, 50, "DRUCKEN [F12]",#PB_Window_ScreenCentered)
  
  Repeat ; In dieser Schleife werden die Aktionen durchgefuehrt.
    EventID = WaitWindowEvent() ; Die Variable EventID wird der Funktion WaitWindowEvent (WarteAufAktion) zugewiesen.
    
    
    
    ;  Button DRUCKEN
    If EventID = #PB_Event_Gadget
      If EventGadget() = 1
        z = z + 1
        Debug z
      EndIf   
    EndIf   
    
    If EventID = #PB_Event_CloseWindow ; Wenn der Benutzer die Aktion schliessen drueckt,
      Quit = 1 ; wird die Quit Variable aktiviert.
    EndIf ; Ende der Abfrage
    
  Until Quit = 1 ; Wenn die Quit Variable aktiviert ist, schliesse das Programm.
  
EndIf ; IF open Window5

Re: EventGadget wird mehrfach aufgerufen

Verfasst: 08.10.2013 21:16
von ts-soft
Weil Dein Eventloop unvollständig ist! Hast Du dasselbe nicht bereits vor 2 Tagen gefragt?
Hier der korrigierte Code:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 1000, 800, "ANTON Wiederholungsdruck", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
  
  ; Button
  ButtonGadget(1, 450, 650, 200, 50, "DRUCKEN [F12]",#PB_Window_ScreenCentered)
  
  Repeat ; In dieser Schleife werden die Aktionen durchgefuehrt.
    EventID = WaitWindowEvent() ; Die Variable EventID wird der Funktion WaitWindowEvent (WarteAufAktion) zugewiesen.
    
    
    
    ;  Button DRUCKEN
    If EventID = #PB_Event_Gadget
      If EventGadget() = 1
        If EventType() = #PB_EventType_LeftClick
          z = z + 1
          Debug z
        EndIf
      EndIf   
    EndIf
    
    If EventID = #PB_Event_CloseWindow ; Wenn der Benutzer die Aktion schliessen drueckt,
      Quit = 1 ; wird die Quit Variable aktiviert.
    EndIf ; Ende der Abfrage
    
  Until Quit = 1 ; Wenn die Quit Variable aktiviert ist, schliesse das Programm.
  
EndIf ; IF open Window 
Gruß
Thomas

Re: EventGadget wird mehrfach aufgerufen

Verfasst: 08.10.2013 21:18
von frankmannb
Vielen Dank. Muss die If-Schleife " If EventID = #PB_Event_Gadget" vor jedem Button eingefügt werden den man abfragen möchte und was macht eigentlich die Zeile ?

Danke im Vorraus
frankmannb
RSBasic hat geschrieben:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 1000, 800, "ANTON Wiederholungsdruck", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
  
  ; Button
  ButtonGadget(1, 450, 650, 200, 50, "DRUCKEN [F12]",#PB_Window_ScreenCentered)
  
  Repeat ; In dieser Schleife werden die Aktionen durchgefuehrt.
    EventID = WaitWindowEvent() ; Die Variable EventID wird der Funktion WaitWindowEvent (WarteAufAktion) zugewiesen.
    
    
    
    ;  Button DRUCKEN
    If EventID = #PB_Event_Gadget
      If EventGadget() = 1
        z = z + 1
        Debug z
      EndIf   
    EndIf   
    
    If EventID = #PB_Event_CloseWindow ; Wenn der Benutzer die Aktion schliessen drueckt,
      Quit = 1 ; wird die Quit Variable aktiviert.
    EndIf ; Ende der Abfrage
    
  Until Quit = 1 ; Wenn die Quit Variable aktiviert ist, schliesse das Programm.
  
EndIf ; IF open Window5

Re: EventGadget wird mehrfach aufgerufen

Verfasst: 08.10.2013 21:23
von RSBasic
Nein, nur einmal und zwar etwa so:

Code: Alles auswählen

EnableExplicit

Define EventID

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(1, 10, 10, 100, 20, "Button 1", 0)
  ButtonGadget(2, 10, 40, 100, 20, "Button 2", 0)
  ButtonGadget(3, 10, 70, 100, 20, "Button 3", 0)
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Debug "Klick auf Button 1"
        Case 2
          Debug "Klick auf Button 2"
        Case 3
          Debug "Klick auf Button 3"
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Es gibt ja mehrere Events, die entstehen, z.B.:
#PB_Event_Gadget: Wenn z.B. auf ein Gadget geklickt wurde.
#PB_Event_Menu: Wenn auf ein Menu-Eintrag geklickt wurde.
#PB_Event_CloseWindow: Wenn man das Fenster schließen möchte.
#PB_Event_SizeWindow: Wenn man die Größe des Fensters ändert.
u.v.m.
Dementsprechend kann man solche Events gezielt abfragen und darauf reagieren, was in solchem Fall gemacht werden soll.