Fenster ändern Normal <-> Borderless

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fenster ändern Normal <-> Borderless

Beitrag von RSBasic »

Also bei mir funktionieren alle Codes einwandfrei. (Windows 7 32 Bit)

@ts-soft
Hast du die 32 Bit- oder 64 Bit-Version?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Fenster ändern Normal <-> Borderless

Beitrag 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.
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: 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Fenster ändern Normal <-> Borderless

Beitrag 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.
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 »

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 
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 »

Na endlich gehts :wink:

Meine Variante hat aber auch keinerlei relevante Nachteile gegenüber dieser :mrgreen:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Fenster ändern Normal <-> Borderless

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten