Seite 1 von 1
Close-Button und Fenstermenü verstecken
Verfasst: 27.05.2009 03:55
von KatSeiko
Ich hab schon mal was ähnliches gesehen, kann es aber nicht wieder finden...
Ich brauche für mein Programm (Unter Windows, es protokolliert den Ablauf eines Programms in einem Editor-Gadget und wartet nachher auf einen "fertig stellen"-Button) eine Funktion, mit der ich den Close-Button und das Fenstermenü deaktivieren bzw. verstecken kann, ohne dass ich auf den Minimize-Button verzichten muss. Leider aktiviert PB die zwei Teile automatisch... Kann mir da jemand weiterhelfen?
Danke schonmal im Voraus...

Verfasst: 27.05.2009 08:30
von Falko
RS-Basic hat in seiner WinApi library,
"Schließbutton deaktivieren", unter den Zweig Open Window
stehen.
Mit dem Fenstermenü weiß ich jetzt nicht genau, was du meinst.
Ein Beispielschnipsel würde das vielleicht verdeutlichen.
Gruß Falko
Verfasst: 27.05.2009 11:52
von Fluid Byte
Das geht nicht. Du kannst nur die Funktionalität deaktivieren, nicht die Anzeige.
Verfasst: 27.05.2009 21:22
von nco2k
@KatSeiko
meinst du so?
Code: Alles auswählen
Procedure DisableWindowCloseButton(hWnd, Disable)
hSysMenu = GetSystemMenu_(hWnd, #False)
If hSysMenu
EnableMenuItem_(hSysMenu, #SC_CLOSE, #MF_BYCOMMAND | Disable)
DrawMenuBar_(hWnd)
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 200, 45, "Test", #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(0, 10, 10, 180, 25, "Disable", #PB_Button_Toggle)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
If EventGadget() = 0
DisableWindowCloseButton(WindowID(0), GetGadgetState(0))
EndIf
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf : End
wer suchet der findet:
http://www.purebasic.fr/german/viewtopic.php?t=6556
c ya,
nco2k
Verfasst: 27.05.2009 21:36
von Fluid Byte
Er will ihn verstecken, das geht nicht.
Verfasst: 28.05.2009 01:08
von Falko
Zwar geht das nicht bezogen auf die Schließbox, aber die Anzeige
kann man schon verstecken. Schließen kann man hierbei nur noch
mit Alt+F4

. Aber dazu wurde ja schon was gepostet
Code: Alles auswählen
Procedure UnHideAccessMenu(hwnd.l=0)
Protected ingStyle.l
lngStyle = GetWindowLong_(WindowID(hwnd), #GWL_STYLE)
lngStyle = lngStyle | #WS_SYSMENU
SetWindowLong_(WindowID(hwnd), #GWL_STYLE, lngStyle)
SetWindowPos_(WindowID(hwnd), #HWND_TOP, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE |#SWP_DRAWFRAME )
EndProcedure
Procedure HideAccessMenu(hwnd.l=0)
Protected ingStyle.l
lngStyle = GetWindowLong_(WindowID(Window), #GWL_STYLE)
lngStyle = lngStyle &~ #WS_SYSMENU
SetWindowLong_(WindowID(hwnd), #GWL_STYLE, lngStyle)
SetWindowPos_(WindowID(hwnd), #HWND_TOP, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE |#SWP_DRAWFRAME )
EndProcedure
If OpenWindow(0, 0, 0, 200, 45, "Test", #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(0, 10, 10, 180, 25, "Disable", #PB_Button_Toggle)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
If EventGadget() = 0
If GetGadgetState(0)=1
HideAccessMenu()
Else
UnHideAccessMenu()
EndIf
EndIf
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf : End
Gruß, Falko
Verfasst: 28.05.2009 01:26
von KatSeiko
Der Code von nco2k ist schon super.
Was ich zusätzlich noch machen wollte ist, dass links der Menübutton verschwindet, der bei dem Programm als Kästchen angezeigt wird. Ohne dass der Minimize-Button verschwindet wie in Falkos Beispiel...
Danke, ich schau mal, ob ich was passendes in dieser Bibliothek finde...

Verfasst: 28.05.2009 02:00
von KatSeiko
Ich hab was gefunden... Das ist es, was ich vorgehabt habe (der Button erscheint im Beispiel nach ein paar Sekunden):
Code: Alles auswählen
Procedure DisableWindowCloseButton(hWnd, Disable)
hSysMenu = GetSystemMenu_(hWnd, #False)
If hSysMenu
EnableMenuItem_(hSysMenu, #SC_CLOSE, #MF_BYCOMMAND | Disable)
DrawMenuBar_(hWnd)
EndIf
EndProcedure
Time.q = ElapsedMilliseconds()
If OpenWindow(0, 0, 0, 200, 45, "Test", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) | #WS_EX_DLGMODALFRAME)
HideWindow(0, 0)
DisableWindowCloseButton(WindowID(0), 1)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow Or (Time+5000) < ElapsedMilliseconds()
DisableWindowCloseButton(WindowID(0), 0)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf : End