Fenster ändern Normal <-> Borderless
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Fenster ändern Normal <-> Borderless
wie kann man - vermutlich nur mit API, deswegen poste ich hier - bei einem Fenster sozusagen den Rahmen an- und abschalten,
also von der Darstellung mit Rahmen und Kopfzeile umschalten auf Borderless und umgekehrt?
eine native PureBasic Funktion gibts da wohl nicht, da gibts anscheinend nur SetWindowState(#Window, Status) für Minimiert, Maximiert und Normal...
die win32.hlp ist nicht so umfangreich....
kann ich einfach per SetWindowLong_ die Window-Flags #PB_Window_BorderLess bzw. #PB_Window_SystemMenu an das Fenster senden?
und ist das dann #GWL_STYLE oder #GWL_EXSTYLE...?
also von der Darstellung mit Rahmen und Kopfzeile umschalten auf Borderless und umgekehrt?
eine native PureBasic Funktion gibts da wohl nicht, da gibts anscheinend nur SetWindowState(#Window, Status) für Minimiert, Maximiert und Normal...
die win32.hlp ist nicht so umfangreich....
kann ich einfach per SetWindowLong_ die Window-Flags #PB_Window_BorderLess bzw. #PB_Window_SystemMenu an das Fenster senden?
und ist das dann #GWL_STYLE oder #GWL_EXSTYLE...?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Fenster ändern Normal <-> Borderless
http://www.rsbasic.q-soft.ch/index.php? ... &Itemid=59
erzeugt zwar nur einen dünnen rahmen, aber vieleicht ist dein problem auf der selben basis zu lösen
erzeugt zwar nur einen dünnen rahmen, aber vieleicht ist dein problem auf der selben basis zu lösen
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Fenster ändern Normal <-> Borderless
ähmn... hu
... aber danke.
... aber danke.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Fenster ändern Normal <-> Borderless
Hab mal bissal gegooglet und rausgekommen ist das hier:
Von Rahmen auf Ohne-Rahmen wechseln klappt schonmal. Nur leider habe ich beim Wiederherstellen des Borders ein Redraw-Problem (siehe Kommentar am Anfang).
Von Rahmen auf Ohne-Rahmen wechseln klappt schonmal. Nur leider habe ich beim Wiederherstellen des Borders ein Redraw-Problem (siehe Kommentar am Anfang).
Code: Alles auswählen
;Da der ReDraw bei mir nicht richtig funkioniert:
;Rechtsklick auf Taskleiste und "Wiederherstellen" verwenden.
;Danach evtl. mit Titelleiste bissal rumschieben^^
EnableExplicit
Enumeration
#Button
#Mode_Border
#Mode_NoBorder
EndEnumeration
Define event.i
Global mode.i = #Mode_Border
Procedure ChangeStyle()
If mode = #Mode_Border
mode = #Mode_NoBorder
SetWindowLongPtr_(WindowID(0),#GWL_STYLE,-1811939260)
SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,327680)
SetWindowPos_(WindowID(0), 0, 0, 0, 0, 0, #SWP_NOSIZE|#SWP_NOMOVE|#SWP_NOZORDER|#SWP_FRAMECHANGED)
ElseIf mode = #Mode_NoBorder
mode = #Mode_Border
SetWindowLongPtr_(WindowID(0),#GWL_STYLE,#WS_BORDER|#WS_CAPTION|#WS_ICONIC|#WS_SYSMENU)
SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,#WS_EX_APPWINDOW)
;- Redraw.
;SetWindowPos sollte eigtl einen Redraw veranlassen. Funzt aber nicht richtig -_-
SetWindowPos_(WindowID(0), 0, 0, 0, 0, 0, #SWP_NOSIZE|#SWP_NOMOVE|#SWP_NOZORDER|#SWP_FRAMECHANGED)
EndIf
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(#Button ,0,0,80,30,"Change Style")
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #Button
ChangeStyle()
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Re: Fenster ändern Normal <-> Borderless
hier mein Vorschlag:
Grüße ... Kiffi
Code: Alles auswählen
#Window=0
#Button_Border=0
#Button_NoBorder=1
OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 220, "")
ButtonGadget(#Button_Border, 5, 5, 290, 100, "Border")
ButtonGadget(#Button_NoBorder, 5, 110, 290, 100, "No Border")
Repeat
WWE=WaitWindowEvent()
Select WWE
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_Border
SetWindowLong_(WindowID(#Window), #GWL_STYLE, GetWindowLong_(WindowID(#Window), #GWL_STYLE) | #WS_DLGFRAME)
SetWindowPos_(WindowID(#Window), 0,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE|#SWP_NOZORDER|#SWP_FRAMECHANGED)
Case #Button_NoBorder
SetWindowLong_(WindowID(#Window), #GWL_STYLE, GetWindowLong_(WindowID(#Window), #GWL_STYLE) &~ #WS_DLGFRAME)
SetWindowPos_(WindowID(#Window), 0,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE|#SWP_NOZORDER|#SWP_FRAMECHANGED)
EndSelect
EndSelect
Until WWE = #PB_Event_CloseWindow
a²+b²=mc²
Re: Fenster ändern Normal <-> Borderless
Oh mann. Und ich dachte & und ~ sind irgendwelche C++ spezifischen Sachen.
Was machen die genau?

Re: Fenster ändern Normal <-> Borderless
TomS hat geschrieben:Was machen die genau?
Alles weitere steht in der Hilfe unter "Variablen, Typen und Operatoren"& = bitweises AND
~ = bitweises NOT

Grüße ... Kiffi
a²+b²=mc²
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Fenster ändern Normal <-> Borderless
Die funktionieren ja alle nicht richtig
Hier mal TomS seiner, leicht geändert, läuft unter Win 7 und XP (solange Ultramon aus ist)
Gruß
Thomas

Hier mal TomS seiner, leicht geändert, läuft unter Win 7 und XP (solange Ultramon aus ist)
Code: Alles auswählen
;Da der ReDraw bei mir nicht richtig funkioniert:
;Rechtsklick auf Taskleiste und "Wiederherstellen" verwenden.
;Danach evtl. mit Titelleiste bissal rumschieben^^
EnableExplicit
Enumeration
#Button
#Mode_Border
#Mode_NoBorder
EndEnumeration
Define event.i
Global mode.i = #Mode_Border
Procedure ChangeStyle()
If mode = #Mode_Border
mode = #Mode_NoBorder
SetWindowLongPtr_(WindowID(0),#GWL_STYLE,-1811939260)
SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,327680)
SetWindowPos_(WindowID(0), 0, 0, 0, 0, 0, #SWP_NOSIZE|#SWP_NOMOVE|#SWP_NOZORDER|#SWP_FRAMECHANGED)
ElseIf mode = #Mode_NoBorder
mode = #Mode_Border
SetWindowLongPtr_(WindowID(0),#GWL_STYLE,#WS_BORDER|#WS_CAPTION|#WS_ICONIC|#WS_SYSMENU)
SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,#WS_EX_APPWINDOW)
SetWindowState(0, #PB_Window_Normal)
EndIf
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(#Button ,0,0,80,30,"Change Style")
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #Button
ChangeStyle()
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Thomas
Re: Fenster ändern Normal <-> Borderless
@Kiffi:
Danke.
Man muss nur wissen, wo man suchen muss^^
@ts-soft: Also Kiffi's Code funzt bei mir gut. Win XP Pro SP3 32bit mit Win7-Aero-Skin
Wow. Du hast die blöde Api-funktion durch ne PB-Funktion ersetzt. Ich muss echt mal öfter in der Hilfe lesen...
Danke.
Man muss nur wissen, wo man suchen muss^^
@ts-soft: Also Kiffi's Code funzt bei mir gut. Win XP Pro SP3 32bit mit Win7-Aero-Skin
Wow. Du hast die blöde Api-funktion durch ne PB-Funktion ersetzt. Ich muss echt mal öfter in der Hilfe lesen...
Re: Fenster ändern Normal <-> Borderless
was funktioniert denn da bei Dir nicht richtig, wenn Du meinen Code ausführst?ts-soft hat geschrieben:Die funktionieren ja alle nicht richtig
Grüße ... Kiffi
a²+b²=mc²