Hilfe, wie kann ich ein EventGadget() zurücksetzten?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Knight_Rider_2000
Beiträge: 145
Registriert: 05.02.2007 20:46
Kontaktdaten:

Hilfe, wie kann ich ein EventGadget() zurücksetzten?

Beitrag von Knight_Rider_2000 »

Ich habe folgenes Problem, ich lasse in einer Repeat-Until schleife ein bei einem Fenster bestimmte rückgabewerte zurückgeben um verschiedene Ereignisse auszuführen. Dazu gebe ich zuerst WindowEvent() und dann Selectiere ich EventGadget() und bei dem Button "Abbrechen" möchte ich ein MessageRequester öffnen der dann nochmal nachfragt ob man wirklich beenden möchte. Wenn man auf Ja geht endet das Programm, bei Nein und Abbrechen schließt der MessageRequester und das programm geht die Schleife weiter bis dann wieder der Requester kommt. Ich möchte das der EventGadget() sich wieder auf "ZERO" stellt zB:

Code: Alles auswählen

OpenWindow(0,0,0,1024,768,#PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Events gehen nicht zurückzusetzten")
CreateGadgetList(WindowID(0))
 ButtonGadget(1,200,200,100,30,"Abbrechen")
Repeat
event=WindowEvent()
gadget=EventGadget()
Select Gadget
 Case 1
  messagebox=MessageRequester("Frage:","Wollen Sie wirklich abbrechen?", #PB_MessageRequester_YesNoCancel)
 Select messagebox
  Case 1
   End
  Default
 EndSelect
EndSelect
Until #PB_Event_CloseWindow
End
PB 4.20,Blitz3D 1.98,Microsoft Visual Studio 2005 Professional, Microsoft Visual Studio 2008 Professional
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

du hast einige logik fehler in deinem code. schau dir das mal an:

Code: Alles auswählen

If OpenWindow(0,0,0,1024,768,"Events gehen nicht zurückzusetzten", #PB_Window_ScreenCentered | #PB_Window_SystemMenu) And CreateGadgetList(WindowID(0))
  CreateGadgetList(WindowID(0))
  ButtonGadget(1,200,200,100,30,"Abbrechen")
  
  Repeat
    WinEvent = WaitWindowEvent()
    If WinEvent = #PB_Event_Gadget
      Select EventGadget()
        Case 1
          If MessageRequester("Frage:","Wollen Sie wirklich abbrechen?", #PB_MessageRequester_YesNoCancel) = #PB_MessageRequester_Yes
            Break
          EndIf
      EndSelect
    EndIf
  Until WinEvent = #PB_Event_CloseWindow
  
EndIf : End
c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Ich kann mich nicht mehr an 4.01 erinnern, aber funktioniert der Code auchg mit 4.01?
Auf jeden Fall ist es ja so, daß dein Event ja mit jedem WindowEvent() erneuert wird. Also ich würd EventGadget() nur ausführen, wenn Du ein Gadgetevent von WindowEvent bekommst:

Event = #PB_Event_Gadget
Zuletzt geändert von THEEX am 05.04.2007 18:32, insgesamt 2-mal geändert.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

wer bei den Selects bleibt fährt leichter

Code: Alles auswählen

OpenWindow(0,0,0,1024,768, "Events gehen nicht zurückzusetzten",#PB_Window_ScreenCentered | #PB_Window_SystemMenu) 
CreateGadgetList(WindowID(0)) 
ButtonGadget(1,200,200,100,30,"Abbrechen") 

Repeat 
  event=WaitWindowEvent() 
  Select event
    Case #PB_Event_Gadget  ;ein Gadget wurde gedrückt oder sowas
    Select EventGadget(); Auswahl welches Gadget wurde gedrückt
    Case 1
      Select MessageRequester("Frage:","Wollen Sie wirklich abbrechen?", #PB_MessageRequester_YesNoCancel) 
        Case #PB_MessageRequester_Yes    
        End
      EndSelect
    EndSelect  
  EndSelect  
  
Until event=#PB_Event_CloseWindow 
eigentlich fehlte nur ne Abfrage ob ein Gadgetüberhaupt bedient worden ist.

Und funktionieren tut der erste Code nicht weil wegen der Zeile am Ende. Was da drinsteht ist nämlich unkorrekt.
Ich hab nu Urlaub (und brauch den auch)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Der Code funktioniert eher nicht wegen der ersten Zeile.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

das auch
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
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

Beitrag von ts-soft »

CSprengel hat geschrieben:Der Code funktioniert eher nicht wegen der ersten Zeile.
Die ist nur in 3.9x Syntax, was lediglich nicht seiner Signatur entspricht, aber
nicht unbedingt falsch ist.

Code: Alles auswählen

Until #PB_Event_CloseWindow
Dies ist in jedem Fall verkehrt,
da der Vergleich fehlt!
Zu dem EventLoop sag ich lieber nichts, wurde wohl schon gesagt :mrgreen:
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
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Ein sinnvoller Aufbau könnte so aussehen.

Code: Alles auswählen

;-TOP
; Kommentar     : 
; Author        : mk-soft
; Second Author : 
; Datei         : Beispiel.pb
; Version       : 1.01
; Erstellt      : 
; Geändert      :
; 
; Compilermode  :
;
; ***************************************************************************************

;- Konstanten
Enumeration ; Window ID
  #Window
EndEnumeration

Enumeration ; Menu ID
  #Menu
EndEnumeration

Enumeration ; MenuItem ID
  #Menu_Exit
EndEnumeration

Enumeration ; Statusbar ID
  #Statusbar
EndEnumeration

Enumeration ; Gadget ID
  #Edit
EndEnumeration

; ***************************************************************************************

;- Globale Variablen
Global exit = 0
Global winstyle
Global event, window, menu, gadget, type

; ***************************************************************************************

Procedure UpdateWindow()

  Protected x, y, dx, dy, menu, status, toolbar
  
  menu = MenuHeight()
  status = StatusBarHeight(#Statusbar)
  toolbar = 0; ToolBarHeight(#Toolbar)
  x = 0
  y = 0
  dx = WindowWidth(#Window)
  dy = WindowHeight(#Window) - menu - status - toolbar
  ResizeGadget(#Edit, x, y, dx, dy)
  
EndProcedure

; ***************************************************************************************

;- Fenster
winstyle = #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget

If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 400, 300, "Fenster", winstyle)
  ; Menu
  If CreateMenu(#Menu, WindowID(#Window))
    MenuTitle("&Datei")
      MenuItem(#Menu_Exit, "Be&enden")
  EndIf
  ; Statusbar
  CreateStatusBar(#Statusbar, WindowID(#Window))
  ; Gadgets
  If CreateGadgetList(WindowID(#Window))
    EditorGadget(#Edit, 0, 0, 0, 0) ; Grösse erst bei #PB_Event_SizeWindow --> Procedure UpdateWindow()
  EndIf
  
  ;-- Hauptschleife
  Repeat
    event = WaitWindowEvent()
    window = EventWindow()
    Select event
      Case #PB_Event_Menu                       ; ein Menü wurde ausgewählt
        menu = EventMenu()
        Select menu
          Case #Menu_Exit
            Exit = 1
        EndSelect
        
      Case #PB_Event_Gadget                     ; ein Gadget wurde gedrückt
        gadget = EventGadget()
        type = EventType()
        Select gadget
          
        EndSelect
        
      Case #PB_Event_CloseWindow                ; das Schließgadget vom Fenster wurde gedrückt
        Select window
          Case #Window
            Exit = 1
        EndSelect
        
      Case #PB_Event_Repaint                    ; der Fensterinhalt wurde zerstört und muss neu gezeichnet werden (nützlich für 2D Grafik-Operationen) 
      
      Case #PB_Event_SizeWindow                 ; das Fenster wurde in der Größe verändert
        Select window
          Case #Window
            UpdateWindow()
            
        EndSelect
        
      Case #PB_Event_MoveWindow                 ; das Fenster wurde verschoben
      
      Case #PB_Event_ActivateWindow             ; das Fenster wurde aktiviert (hat den Fokus erhalten)
      
      Case #PB_Event_SysTray                    ; das SysTray wurde aktiviert
        type    = EventType()
        Select type
        
        EndSelect
        
    EndSelect
    
  Until Exit
EndIf

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
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

Beitrag von ts-soft »

@mk-soft
7 Globale Variablen bei dem bissel Source :freak:
Nie und Nimmer :wink:
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
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Wenn das Hauptprogramm nicht Global sein soll mal alles in eine Procedure Main() gepackt. Somit keine globale Variablen mehr

Code: Alles auswählen

;-TOP
; Kommentar     : 
; Author        : mk-soft
; Second Author : 
; Datei         : Beispiel.pb
; Version       : 1.01
; Erstellt      : 
; Geändert      :
; 
; Compilermode  :
;
; ***************************************************************************************

;- Konstanten
Enumeration ; Window ID
  #Window
EndEnumeration

Enumeration ; Menu ID
  #Menu
EndEnumeration

Enumeration ; MenuItem ID
  #Menu_Exit
EndEnumeration

Enumeration ; Statusbar ID
  #Statusbar
EndEnumeration

Enumeration ; Gadget ID
  #Edit
EndEnumeration

; ***************************************************************************************

;- Globale Variablen

; ***************************************************************************************

Procedure UpdateWindow()

  Protected x, y, dx, dy, menu, status, toolbar
  
  menu = MenuHeight()
  status = StatusBarHeight(#Statusbar)
  toolbar = 0; ToolBarHeight(#Toolbar)
  x = 0
  y = 0
  dx = WindowWidth(#Window)
  dy = WindowHeight(#Window) - menu - status - toolbar
  ResizeGadget(#Edit, x, y, dx, dy)
  
EndProcedure

; ***************************************************************************************


Procedure Main()

  Protected exit = 0
  Protected winstyle
  Protected event, window, menu, gadget, type

  ;- Fenster
  winstyle = #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget

  If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 400, 300, "Fenster", winstyle)
    ; Menu
    If CreateMenu(#Menu, WindowID(#Window))
      MenuTitle("&Datei")
        MenuItem(#Menu_Exit, "Be&enden")
    EndIf
    ; Statusbar
    CreateStatusBar(#Statusbar, WindowID(#Window))
    ; Gadgets
    If CreateGadgetList(WindowID(#Window))
      EditorGadget(#Edit, 0, 0, 0, 0) ; Grösse erst bei #PB_Event_SizeWindow --> Procedure UpdateWindow()
    EndIf
    
    ;-- Hauptschleife
    Repeat
      event = WaitWindowEvent()
      window = EventWindow()
      Select event
        Case #PB_Event_Menu                       ; ein Menü wurde ausgewählt
          menu = EventMenu()
          Select menu
            Case #Menu_Exit
              Exit = 1
          EndSelect
         
        Case #PB_Event_Gadget                     ; ein Gadget wurde gedrückt
          gadget = EventGadget()
          type = EventType()
          Select gadget
            
          EndSelect
          
        Case #PB_Event_CloseWindow                ; das Schließgadget vom Fenster wurde gedrückt
          Select window
            Case #Window
              Exit = 1
          EndSelect
          
        Case #PB_Event_Repaint                    ; der Fensterinhalt wurde zerstört und muss neu gezeichnet werden (nützlich für 2D Grafik-Operationen) 
        
        Case #PB_Event_SizeWindow                 ; das Fenster wurde in der Größe verändert
          Select window
            Case #Window
              UpdateWindow()
              
          EndSelect
          
        Case #PB_Event_MoveWindow                 ; das Fenster wurde verschoben
        
        Case #PB_Event_ActivateWindow             ; das Fenster wurde aktiviert (hat den Fokus erhalten)
        
        Case #PB_Event_SysTray                    ; das SysTray wurde aktiviert
          type    = EventType()
          Select type
          
          EndSelect
          
      EndSelect
      
    Until Exit
  EndIf

EndProcedure

;- Start Code

Main()

Besser ???

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten