Window-Schliessen abfangen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Window-Schliessen abfangen

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Window-Schliessen abfangen

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Window-Schliessen abfangen

Beitrag 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.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Window-Schliessen abfangen

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Window-Schliessen abfangen

Beitrag 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.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Window-Schliessen abfangen

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Window-Schliessen abfangen

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Window-Schliessen abfangen

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Antworten