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:
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
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.
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.
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.
Dies ist in jedem Fall verkehrt,
da der Vergleich fehlt!
Zu dem EventLoop sag ich lieber nichts, wurde wohl schon gesagt
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.
;-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
@mk-soft
7 Globale Variablen bei dem bissel Source
Nie und Nimmer
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.
;-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()