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. :D
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:

Code: Alles auswählen

Until WindowEvent()=#PB_Event_CloseWindow
durch:

Code: Alles auswählen

ForEver
Dann klappt es auch mit der Abfrage.

Re: Window-Schliessen abfangen

Verfasst: 06.03.2019 17:42
von Olafmagne
Gott bin ich doof!!!! :oops:
Macht der Gewohnheit!
Einfach 'Standard-Mässig "Copy'n'Past"...,
Merci :allright: und 'nen schönen Tag noch

Olaf