Seite 4 von 4

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 19:03
von RSBasic
Also bei mir funktionieren alle Codes einwandfrei. (Windows 7 32 Bit)

@ts-soft
Hast du die 32 Bit- oder 64 Bit-Version?

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 19:08
von Kaeru Gaman
ahja... das wird wohl an Win7 x64 liegen (?)
vielleicht liegts aber auch an irgendwas anderem was (nur) du laufen hast...

wärst du denn mal so freundlich, meinen letzten code mal deine Basiswerte für Border und NoBorder debuggen zu lassen?
einfach Interesse- und Vollständigkeits-halber.

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 19:21
von ts-soft
Kaeru Gaman hat geschrieben: wärst du denn mal so freundlich, meinen letzten code mal deine Basiswerte für Border und NoBorder debuggen zu lassen?
einfach Interesse- und Vollständigkeits-halber.
Auch wenn Dein Beispiel nicht lauffähig ist, das #Window nicht definiert:
10010100000000000000000000000000 NoBorder
00000000110000000000000000000000 Border And Not Flag
00010100110010000000000000000000 Border
10010100110000000000000000000000 NoBorder Or Flag
Weiß aber nicht, was das bringen sollte und wieso ein Dialogstil in einem Window sein sollte.

Re: Fenster ändern Normal <-> Borderless

Verfasst: 19.02.2010 20:02
von Kaeru Gaman
hm... kann ja nicht sein.
wenn ich die von dir angegebenen Rückgabewerte für Border und NoBorder mit den Flags verknüpfe,
kommt bei mir schon mal was ganz anderes raus, mit dem identischen snippet wo du das fehlen der konstante angemeckert hast.
tatsächlich unterscheidet sich das nicht von meiner Rückgabe, nur die geflaggten werte unterscheiden sich.

tatsache bleibt aber am Ende, dass sich die geflaggte version bei Bit19 und Bit31 vom gewünschten, nackt ermittelten Ergebnis unterscheidet.
welchen Konstanten diese Bits entsprechen bleibt die Frage.
und wieso ein Dialogstil in einem Window sein sollte.
.... weil er einfach drin ist?

Code: Alles auswählen

10010100000000000000000000000000 NoBorder
00010100110010000000000000000000 Border
00000000010000000000000000000000 #WS_DLGFRAME
00000000100000000000000000000000 #WS_BORDER
die Werte für Border und NoBorder wurden durch die von dir geschriebene Versuchsanordnung ermittelt.
offensichtlich ist #WS_DLGFRAME eines der vier Bits durch die sie sich unterscheiden, warum auch immer.

die Frage bleibt, welche Konstanten die Bits 31 und 19 beschreiben.

Re: Fenster ändern Normal <-> Borderless

Verfasst: 20.02.2010 00:36
von Kaeru Gaman
also, Bit 19 ist #WS_SYSMENU.
und das #WS_DLGFRAME ist gesetzt, weil es zusammen mit #WS_BORDER das doppelflag #WS_CAPTION bildet.
.... vielleicht erinnert sich ein alter Hase bei Microsoft, warum Kopfleiste aus Rahmen und Dialograhmen zusammengesetzt wird.
Bit31 ist #PB_Window_Borderless, das ist #WS_POPUP
und die beiden, die in beiden zuständen gesetzt sind, sind #WS_CLIPSIBLINGS und #WS_VISIBLE

Code: Alles auswählen

#Window = 0

OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 220, "", #PB_Window_BorderLess)
NoBorder  = GetWindowLongPtr_(WindowID(#Window), #GWL_STYLE)
NoBorder1 = #WS_CLIPSIBLINGS | #WS_VISIBLE | #WS_POPUP

OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 220, "", #PB_Window_SystemMenu)
Border    = GetWindowLongPtr_(WindowID(#Window), #GWL_STYLE)
Border1   = #WS_CLIPSIBLINGS | #WS_VISIBLE | #WS_CAPTION | #WS_SYSMENU

Debug RSet( Bin( NoBorder   , #PB_Long ), 32, "0" ) + " NoBorder"
Debug RSet( Bin( NoBorder1  , #PB_Long ), 32, "0" ) + " NoBorder1"
Debug RSet( Bin( Border     , #PB_Long ), 32, "0" ) + " Border"
Debug RSet( Bin( Border1    , #PB_Long ), 32, "0" ) + " Border1"

Debug " "

Debug RSet( Bin( #WS_POPUP            , #PB_Long ), 32, "0" ) + " #WS_POPUP"
Debug RSet( Bin( #WS_VISIBLE          , #PB_Long ), 32, "0" ) + " #WS_VISIBLE"
Debug RSet( Bin( #WS_CLIPSIBLINGS     , #PB_Long ), 32, "0" ) + " #WS_CLIPSIBLINGS"
Debug RSet( Bin( #WS_CAPTION          , #PB_Long ), 32, "0" ) + " #WS_CAPTION"
Debug RSet( Bin( #WS_SYSMENU          , #PB_Long ), 32, "0" ) + " #WS_SYSMENU"
also, der code sollte auch sauber laufen, wenn man diese Flags direkt setzt, ohne vorher Fenster zum testen öffnen zu müssen.

Code: Alles auswählen

EnableExplicit

Define.i  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

#NoBorder = #WS_CLIPSIBLINGS | #WS_VISIBLE | #WS_POPUP
#Border   = #WS_CLIPSIBLINGS | #WS_VISIBLE | #WS_CAPTION | #WS_SYSMENU

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
          WindowBorder(#Window, #Border)
         
        Case #Button_NoBorder
          WindowBorder(#Window, #NoBorder)
         
      EndSelect
     
  EndSelect

Until WWE = #PB_Event_CloseWindow 

Re: Fenster ändern Normal <-> Borderless

Verfasst: 20.02.2010 00:56
von ts-soft
Na endlich gehts :wink:

Meine Variante hat aber auch keinerlei relevante Nachteile gegenüber dieser :mrgreen:

Re: Fenster ändern Normal <-> Borderless

Verfasst: 20.02.2010 01:32
von Kaeru Gaman
nunja, nicht wirklich... das war straight ohne Umwege, einfach ermitteln was es ist.
ich fand bloß das fenster 2x zu öffnen etwas "unprofessionell" ;)

so, und damit man ein Ergebnis sieht wozu der Strumpf, hier die Demo / der Test:
http://www.purebasic.fr/german/viewtopi ... =8&t=21915