Seite 1 von 2
Hilfe, wie kann ich ein EventGadget() zurücksetzten?
Verfasst: 05.04.2007 17:32
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
Verfasst: 05.04.2007 17:38
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
Verfasst: 05.04.2007 17:41
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
Verfasst: 05.04.2007 17:46
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)
Verfasst: 05.04.2007 18:31
von THEEX
Der Code funktioniert eher nicht wegen der ersten Zeile.
Verfasst: 05.04.2007 18:35
von bobobo
das auch
Verfasst: 05.04.2007 18:38
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.
Dies ist in jedem Fall verkehrt,
da der Vergleich fehlt!
Zu dem EventLoop sag ich lieber nichts, wurde wohl schon gesagt

Verfasst: 05.04.2007 19:27
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

Verfasst: 05.04.2007 19:30
von ts-soft
@mk-soft
7 Globale Variablen bei dem bissel Source
Nie und Nimmer

Verfasst: 05.04.2007 19:54
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
