Fenster ändern Normal <-> Borderless

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
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

Beitrag von ts-soft »

1 x NoBorder macht er, danach ist das Fenster im Hintergrund bzw. minimiert und reagiert auf nichts mehr.

Naja, Win7 tauglich ist das nicht :mrgreen:
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fenster ändern Normal <-> Borderless

Beitrag von Kiffi »

ts-soft hat geschrieben:Naja, Win7 tauglich ist das nicht :mrgreen:
will ich so generell nicht im Raum stehen lassen.
TomS hat geschrieben:@ts-soft: Also Kiffi's Code funzt bei mir gut. Win XP Pro SP3 32bit mit Win7-Aero-Skin
scheint dann wohl eher eine 64Bit Kiste zu sein.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
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

Beitrag von ts-soft »

Kiffi hat geschrieben:
ts-soft hat geschrieben:Naja, Win7 tauglich ist das nicht :mrgreen:
will ich so generell nicht im Raum stehen lassen.
TomS hat geschrieben:@ts-soft: Also Kiffi's Code funzt bei mir gut. Win XP Pro SP3 32bit mit Win7-Aero-Skin
scheint dann wohl eher eine 64Bit Kiste zu sein.

Grüße ... Kiffi
Ähh?
TomS schreibt von WinXP Pro, egal welchen Skin er dort nutzt, es ist kein Windows 7 deswegen.
Ich nutze zwar Win7 64-Bit, habs aber unter x86 kompiliert, schon alleine deswegen, weil ich keine Ptr_
reinbauen wollte!

Bei mir gehts also nicht, Ultramon hatte ich aus.

Gruß
Thomas
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fenster ändern Normal <-> Borderless

Beitrag von Kiffi »

ts-soft hat geschrieben:Ähh?
mea culpa!

Dachte, er hätte es unter XP und unter Win7 getestet.
Dass er XP mit Win7-Skin schrieb, habe ich überlesen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
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

Beitrag von ts-soft »

Kiffi hat geschrieben:Dass er XP mit Win7-Skin schrieb, habe ich überlesen.
War mir klar :wink:

Hab Kiffis Code mal angepaßt, läuft bei mir Fehlerfrei (XP, 7, x86 und x64)

Code: Alles auswählen

EnableExplicit

Define.i NoBorder, Border, WWE

Procedure WindowBorder(Window, Flag)
  SetWindowLongPtr_(WindowID(Window), #GWL_STYLE, Flag)
  SetWindowPos_(WindowID(Window), 0,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE|#SWP_NOZORDER|#SWP_FRAMECHANGED)
EndProcedure
       
#Window=0
#Button_Border=0
#Button_NoBorder=1
       

OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 220, "", #PB_Window_BorderLess)
NoBorder.i = GetWindowLongPtr_(WindowID(#Window), #GWL_STYLE)
OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 220, "")
Border.i = GetWindowLongPtr_(WindowID(#Window), #GWL_STYLE)
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
          WindowBorder(#Window, Border)
         
        Case #Button_NoBorder
          WindowBorder(#Window, NoBorder)
         
      EndSelect
     
  EndSelect
 
Until WWE = #PB_Event_CloseWindow 
Gruß
Thomas
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Fenster ändern Normal <-> Borderless

Beitrag von Kaeru Gaman »

danke euch für die mannigfaltigen Anregungen! :D
Kiffi hat geschrieben:

Code: Alles auswählen

    SetWindowLong_(WindowID(Window), #GWL_STYLE, GetWindowLong_(WindowID(Window), #GWL_STYLE) &~ #WS_DLGFRAME) 
    SetWindowLong_(WindowID(Window), #GWL_STYLE, GetWindowLong_(WindowID(Window), #GWL_STYLE) &~ #WS_OVERLAPPED ) 
    SetWindowLong_(WindowID(Window), #GWL_STYLE, GetWindowLong_(WindowID(Window), #GWL_STYLE) &~ #WS_BORDER) 
ah... die drei sind also des Pudels Kern...

hm... drei Flags hintereinander umgeschaltet...
würde das nicht auch mit einem Aufruf und

Code: Alles auswählen

 ...  &~ ( #WS_DLGFRAME | #WS_OVERLAPPED | #WS_BORDER )
funktionieren?
... rhetorische Frage ... ich werds ausprobieren.

ts-soft hat geschrieben:

Code: Alles auswählen

OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 220, "", #PB_Window_BorderLess)
NoBorder.i = GetWindowLongPtr_(WindowID(#Window), #GWL_STYLE)
OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 220, "")
Border.i = GetWindowLongPtr_(WindowID(#Window), #GWL_STYLE)
tricky tricky tricky!
ein bissel fishy aber geile Idee! :allright:

... womit auch geklärt wäre, dass man wirklich nur am Style schrauben muss, nicht am ExtendedStyle.

PS: @ts
funktioniert denn die o.a. Version von Kiffi auch bei dir "korrekt"?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Fenster ändern Normal <-> Borderless

Beitrag von Kaeru Gaman »

hm... beide Methoden sind anscheinend nicht dasselbe....

Code: Alles auswählen

checkflag = #WS_DLGFRAME | #WS_OVERLAPPED | #WS_BORDER       

OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 220, "", #PB_Window_BorderLess)
NoBorder.i = GetWindowLongPtr_(WindowID(#Window), #GWL_STYLE)
OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 220, "")
Border.i = GetWindowLongPtr_(WindowID(#Window), #GWL_STYLE)

Debug RSet( Bin( NoBorder , #PB_Long ), 32, "0" ) + " NoBorder"
Debug RSet( Bin( Border & ~ checkflag , #PB_Long ), 32, "0" ) + " Border And Not Flag"
Debug RSet( Bin( Border , #PB_Long ), 32, "0" ) + " Border"
Debug RSet( Bin( NoBorder | checkflag , #PB_Long ), 32, "0" ) + " NoBorder Or Flag"

Code: Alles auswählen

10010100000000000000000000000000 NoBorder
00010100000010000000000000000000 Border And Not Flag

00010100110010000000000000000000 Border
10010100110000000000000000000000 NoBorder Or Flag 
das ist XPx86...
schade eigentlich.

jetzt frage ich mich, ob die Methode mit #WS_DLGFRAME | #WS_OVERLAPPED | #WS_BORDER sicher genug ist,
oder ob ich es vorziehen soll, die StyleFlags vorab zu ermitteln wie von ts demonstriert...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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

Beitrag von ts-soft »

Kaeru Gaman hat geschrieben: jetzt frage ich mich, ob die Methode mit #WS_DLGFRAME | #WS_OVERLAPPED | #WS_BORDER sicher genug ist,
oder ob ich es vorziehen soll, die StyleFlags vorab zu ermitteln wie von ts demonstriert...
Was fragste Dich noch, die Methode kann nicht sicher genug sein, da sie garnicht funktioniert.
Meine Methode ist die einzig funktionierende, alles andere funktioniert nur teilweise. Unter anderem
weil mit Sicherheit die Flags (#WS_DLGFRAME? PB erstellt nur Windows, keine Dialoge usw.) falsch,
bzw. unzureichend sind.

Gruß
Thomas
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Fenster ändern Normal <-> Borderless

Beitrag von Kaeru Gaman »

ts-soft hat geschrieben:Was fragste Dich noch, die Methode kann nicht sicher genug sein, da sie garnicht funktioniert.
:?: ich weiß ja nicht, was du hast, "garnicht funktioniert" ist schlichtweg falsch.
wenn du mir mit richtigen Aussagen kämest wie "bei mir auf Windows 7 ist diese und jene Funktionalität nicht gegeben",
dann könnte ich ja noch etwas damit anfangen, aber auf diese Art und Weise?
von hier aus kann ich nicht einschätzen, was genau bei dir nicht funktioniert oder bei dir anders ist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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

Beitrag von ts-soft »

Einmal click auf no Border funktioniert, danach nimmt das Fenster keinen click mehr an.
Es kann nur in den Vordergrund geholt werden, aber weder was geklickt noch geschlossen werden.
Es ist nur ein Wrack.

Reicht diese Beschreibung?

Weitere werden zwar nicht kommen, da ich es müde bin den Taskmanager zu bemühen,
das Fenster abzuschiessen und desweiteren möchte ich Ultramon auch nicht laufend deaktivieren.
Antworten