Seite 1 von 1
Window-Schliessen abfangen
Verfasst: 06.03.2019 16:18
von Olafmagne
Hallo,
Leider habe ich nichts via Suche gefunden,(weiss auch nicht,wonach ich suchen müsste).
Es geht um Folgendes:
Um das('nicht gewollte') Schliessen des Window's zu verhindern,habe ich den Menu-Eintrag,sowie Schliess-Knopf und
System-Menu-Punkt mit 'Bind-Event'/'BindMenuEvent' auf eine Procedure 'umgeleitet.
;********
Procedure ende()
a=MessageRequester("Programm Exit!","Programm schliessen?",#PB_MessageRequester_YesNo|#PB_MessageRequester_Warning)
If a=#PB_MessageRequester_Yes
End
EndIf
EndProcedure
;********
Das funktioniert mit dem Menu,bei "nein" gehts halt im prg weiter
Nicht aber mit dem System-Menu, da endet das prg so oder so.
Frage:
Wie kann ich aus einer Procedure an ein Label springen,bzw wie kann ich Schliessen verhindern?
Ich habe so etwas bis jetzt nur in BlitzPlus programmiert mit 'Goto Sprünge zur Main-Loop
aber das ist wohl aus einer Procedure nicht möglich,da Diese dann nicht ordentlich verlassen würde
(Ich mochte auch kein Goto)
Danke im Vorraus
Olaf
Re: Window-Schliessen abfangen
Verfasst: 06.03.2019 16:36
von RSBasic
Also bei mir kann ich sowohl über X als auch über das Systemmenü das Beenden mit Nein stoppen:
Code: Alles auswählen
EnableExplicit
Procedure ende()
Protected a
a = MessageRequester("Programm Exit!", "Programm schliessen?", #PB_MessageRequester_YesNo | #PB_MessageRequester_Warning)
If a = #PB_MessageRequester_Yes
End
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
BindEvent(#PB_Event_CloseWindow, @ende())
Repeat
Select WaitWindowEvent()
EndSelect
ForEver
EndIf
Re: Window-Schliessen abfangen
Verfasst: 06.03.2019 16:39
von Nino
Ich wöllte auch gerade etwas in der Art posten, aber Du warst schneller.
RSBasic hat geschrieben:Also bei mir kann ich sowohl über X als auch über das Systemmenü das Beenden mit Nein stoppen:
Das funktioniert bei mir ebenfalls.
Re: Window-Schliessen abfangen
Verfasst: 06.03.2019 16:54
von Olafmagne
HALLO
Nun, das eigene Menu sowie das System-Menu arbeiten jetzt korrect,
aber der Schliess-Knopf nicht,das Prg wird auf jeden Fall geschlossen!
Olaf
Re: Window-Schliessen abfangen
Verfasst: 06.03.2019 17:02
von Nino
Olafmagne hat geschrieben:Nun, das eigene Menu sowie das System-Menu arbeiten jetzt korrect,
aber der Schliess-Knopf nicht,das Prg wird auf jeden Fall geschlossen!
Dann hast du da wohl etwas falsch programmiert.
Nur kennt außer dir niemand hier dein Programm.
Du kannst dein Programm soweit kürzen, dass nur noch der Teil übrig ist der das Problem demonstriert, und dann den Code hier posten (aber bitte lauffähigen Code).
Dann können wir dir helfen.
Re: Window-Schliessen abfangen
Verfasst: 06.03.2019 17:27
von Olafmagne
Salut
hier der besagte Code.
Wie gesagt,es geht nur noch um den Schliess-Knopf
Code: Alles auswählen
UsePNGImageDecoder()
scrnx=1018
ExamineDesktops()
InitKeyboard()
InitSprite()
InitMouse()
;****************
Procedure Ende()
Protected a
a=MessageRequester("Programm Exit!","Programm schliessen?",#PB_MessageRequester_YesNo|#PB_MessageRequester_Warning)
If a=#PB_MessageRequester_Yes
End
EndIf
EndProcedure
;****************
; menneu=LoadImage(#PB_Any,"C:\Users\Olaf\Documents\SilkTheme\page.png")
; menopn=LoadImage(#PB_Any,"C:\Users\Olaf\Documents\SilkTheme\folder_page.png")
; mensve=LoadImage(#PB_Any,"C:\Users\Olaf\Documents\SilkTheme\disk.png")
; mensva=LoadImage(#PB_Any,"C:\Users\Olaf\Documents\SilkTheme\page_save.png")
; menstn=LoadImage(#PB_Any,"C:\Users\Olaf\Documents\SilkTheme\wrench.png")
; mendel=LoadImage(#PB_Any,"C:\Users\Olaf\Documents\SilkTheme\folder_delete.png")
;****************
win=OpenWindow(#PB_Any,0,0,DesktopWidth(0),DesktopHeight(0),"Dungeon Game Editor",#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_Maximize)
men=CreateImageMenu(#PB_Any,WindowID(win));,#PB_Menu_ModernLook)
;****
MenuTitle("Datei")
MenuItem(1,"New");,ImageID(menneu))
MenuItem(2,"Open");,ImageID(menopn))
MenuBar()
MenuItem(3,"Save");,ImageID(mensve))
MenuItem(4,"Save as...");,ImageID(mensva))
MenuItem(5,"Delete");,ImageID(mendel))
MenuBar()
MenuItem(6,"Settings");,ImageID(menstn))
MenuBar()
MenuItem(7,"Exit")
;***
;tool=CreateToolBar(#PB_Any,WindowID(win))
; ToolBarImageButton(1,ImageID(menneu))
; ToolBarImageButton(2,ImageID(menopn))
; ToolBarImageButton(3,ImageID(mensve))
; ToolBarSeparator()
; ToolBarImageButton(5,ImageID(mendel))
;******
BindMenuEvent(men,7,@Ende())
BindEvent(#PB_Event_CloseWindow,@Ende())
FrameGadget(0,5,28,1015,640 ,"", #PB_Frame_Flat)
OpenWindowedScreen(WindowID(win),7,30,1011,636)
ClearScreen(RGB(120,120,120))
FlipBuffers()
OpenWindow(twin,scrnx,71,342,613,"Sprite-Settings",#PB_Window_Tool,WindowID(win))
Repeat
WaitWindowEvent()
Until WindowEvent()=#PB_Event_CloseWindow
Olaf
Re: Window-Schliessen abfangen
Verfasst: 06.03.2019 17:32
von RSBasic
Es liegt daran, dass du in deinem Code 2x auf #PB_Event_CloseWindow prüfst. Einmal in deiner Ende-Prozedur und einmal ganz unten in deiner Eventschleife.
Ersetze folgende Zeile:
durch:
Dann klappt es auch mit der Abfrage.
Re: Window-Schliessen abfangen
Verfasst: 06.03.2019 17:42
von Olafmagne
Gott bin ich doof!!!!
Macht der Gewohnheit!
Einfach 'Standard-Mässig "Copy'n'Past"...,
Merci
und 'nen schönen Tag noch
Olaf