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

Re: Fenster ändern Normal <-> Borderless
Verfasst: 19.02.2010 01:09
von Kiffi
ts-soft hat geschrieben:Naja, Win7 tauglich ist das nicht

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

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
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!
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!
... 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.