EventGadget wird mehrfach aufgerufen

Anfängerfragen zum Programmieren mit PureBasic.
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

EventGadget wird mehrfach aufgerufen

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: EventGadget wird mehrfach aufgerufen

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: EventGadget wird mehrfach aufgerufen

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Re: EventGadget wird mehrfach aufgerufen

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: EventGadget wird mehrfach aufgerufen

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten