Seite 1 von 1
Cross-platform Z-Order von Gadgets
Verfasst: 13.03.2013 21:06
von Lambda
Wie bereits im Titel, gibt es auch bei Linux und Mac die Möglichkeit Gadgets auf eine feste Ebene zu binden? Es wäre wesentlich sinnvoller Elemente so zu kombinieren anstatt sie in ein Steuerelement mit einzuberechnen.
lG
Re: Cross-platform Z-Order von Gadgets
Verfasst: 13.03.2013 21:54
von STARGÅTE
cOoki3druqs hat geschrieben:gibt es auch bei Linux und Mac die Möglichkeit Gadgets auf eine feste Ebene zu binden?
Wieso auch?
Ich wüsste nicht mal, dass es unter Windows geht.
Pure Basic unterstutzt das eh nicht, von daher würde es ein Chaos im Event-Handling geben.
Re: Cross-platform Z-Order von Gadgets
Verfasst: 14.03.2013 09:23
von Lambda
Wieso nicht? Windows unterstützt es doch. Wenn du, wie erwähnt, Gadgets kombinieren möchtest
(z.B Canvas auf Canvas) dann wäre das sehr hilfreich.
Code: Alles auswählen
SetWindowLongPtr_(hWnd, #GWL_STYLE, GetWindowLongPtr_(hWnd, #GWL_STYLE) | #WS_CLIPSIBLINGS)
SetWindowPos_(hWnd, #HWND_TOP, -1, -1, -1, -1, #SWP_NOSIZE | #SWP_NOMOVE)
Solange es konsequent angewendet wird, ist das kein Problem.
Re: Cross-platform Z-Order von Gadgets
Verfasst: 14.03.2013 13:26
von STARGÅTE
Kannst du das vielleicht an diesem Beispiel mal zeigen, ich weiß nicht, wie ich dein Code anwende:
Code: Alles auswählen
Enumeration
#Window
#Gadget1
#Gadget2
#Gadget3
EndEnumeration
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget1, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
CanvasGadget(#Gadget2, 200, 100, 200, 200)
StartDrawing(CanvasOutput(#Gadget2))
Box(0, 0, OutputWidth(), OutputHeight(), $FF0000)
StopDrawing()
CanvasGadget(#Gadget3, 300, 200, 200, 200)
StartDrawing(CanvasOutput(#Gadget3))
Box(0, 0, OutputWidth(), OutputHeight(), $00FF00)
StopDrawing()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget1, #Gadget2, #Gadget3
Debug EventGadget()
EndSelect
EndSelect
ForEver
Wie du siehst, funktionieren in dem Beispiel die Events noch nicht, denn es wird immer 1 zurückgegeben, auch wenn ich mit der Maus über dem 2. oder 3. Gadget bin.
Re: Cross-platform Z-Order von Gadgets
Verfasst: 14.03.2013 14:01
von Lambda
Code: Alles auswählen
Enumeration
#Window
#Gadget1
#Gadget2
#Gadget3
EndEnumeration
Procedure FixedZOrder(hWnd)
SetWindowLongPtr_(hWnd, #GWL_STYLE, GetWindowLongPtr_(hWnd, #GWL_STYLE) | #WS_CLIPSIBLINGS)
SetWindowPos_(hWnd, #HWND_TOP, -1, -1, -1, -1, #SWP_NOSIZE | #SWP_NOMOVE)
EndProcedure
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget1, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
FixedZOrder(GadgetID(#Gadget1))
CanvasGadget(#Gadget2, 200, 100, 200, 200)
FixedZOrder(GadgetID(#Gadget2))
StartDrawing(CanvasOutput(#Gadget2))
Box(0, 0, OutputWidth(), OutputHeight(), $FF0000)
StopDrawing()
CanvasGadget(#Gadget3, 300, 200, 200, 200)
FixedZOrder(GadgetID(#Gadget3))
StartDrawing(CanvasOutput(#Gadget3))
Box(0, 0, OutputWidth(), OutputHeight(), $00FF00)
StopDrawing()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget1, #Gadget2, #Gadget3
Debug EventGadget()
EndSelect
EndSelect
ForEver
Mit konsequent meine ich eben, dass es für jedes der Gadgets angewendet werden muss, welche sich überlappen. Bei einer Layout Engine ist das dann eben kein Problem, nur müsste es cross-platform sein.
Re: Cross-platform Z-Order von Gadgets
Verfasst: 14.03.2013 14:20
von Josh
Geht auch einfacher, indem du nur das erste Gadget zuordnest. Dann allerdings nicht Top sondern Bottom.
Code: Alles auswählen
Enumeration
#Window
#Gadget1
#Gadget2
#Gadget3
EndEnumeration
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget1, 0, 0, WindowWidth(#Window), WindowHeight(#Window), #PB_Canvas_Keyboard|#PB_Canvas_DrawFocus)
CanvasGadget(#Gadget2, 200, 100, 200, 200)
StartDrawing(CanvasOutput(#Gadget2))
Box(0, 0, OutputWidth(), OutputHeight(), $FF0000)
StopDrawing()
CanvasGadget(#Gadget3, 300, 200, 200, 200)
StartDrawing(CanvasOutput(#Gadget3))
Box(0, 0, OutputWidth(), OutputHeight(), $00FF00)
StopDrawing()
SetWindowLongPtr_(GadgetID(#Gadget1), #GWL_STYLE, GetWindowLongPtr_(GadgetID(#Gadget1), #GWL_STYLE) | #WS_CLIPSIBLINGS)
SetWindowPos_(GadgetID(#Gadget1), #HWND_BOTTOM, -1, -1, -1, -1, #SWP_NOSIZE | #SWP_NOMOVE)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget1, #Gadget2, #Gadget3
Debug EventGadget()
EndSelect
EndSelect
ForEver
Re: Cross-platform Z-Order von Gadgets
Verfasst: 14.03.2013 14:41
von STARGÅTE
@Josh: Ne, es muss scheinbar jedes sein, sonst würde Gadget 2 ausgegeben werden, wenn ich genau über Gadget 3 bin, was ins blaue reinguckt.
@cOoki3druqs:
Sehr interessant, so kann man also ein StringGadget in ein Canvas "einbinden":
Code: Alles auswählen
Enumeration
#Window
#Gadget1
#Gadget2
EndEnumeration
Procedure FixedZOrder(hWnd)
SetWindowLongPtr_(hWnd, #GWL_STYLE, GetWindowLongPtr_(hWnd, #GWL_STYLE) | #WS_CLIPSIBLINGS)
SetWindowPos_(hWnd, #HWND_TOP, -1, -1, -1, -1, #SWP_NOSIZE | #SWP_NOMOVE)
EndProcedure
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget1, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
FixedZOrder(GadgetID(#Gadget1))
StartDrawing(CanvasOutput(#Gadget1))
DrawText(100, 100, "Text hier eingeben:", $FF0000, $FFFFFF)
StopDrawing()
StringGadget(#Gadget2, 250, 100, 200, 20, "irgend ein Text", #PB_String_BorderLess)
FixedZOrder(GadgetID(#Gadget2))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget1, #Gadget2
Debug EventGadget()
EndSelect
EndSelect
ForEver
Danke für den Code.
Re: Cross-platform Z-Order von Gadgets
Verfasst: 14.03.2013 15:05
von Lambda
Ja, dennoch keine Lösung für Linux/Mac.
