Seite 3 von 4

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 01:04
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:

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 01:09
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

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 01:13
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

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 01:24
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

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 01:28
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

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 11:50
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"?

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 12:49
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...

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 16:54
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

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 18:49
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.

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 18:55
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.