Seite 1 von 1

Seltsames Verhalten von Frame3DGadget()

Verfasst: 04.12.2011 12:53
von Bisonte
Hallo.

Ich wollte mir da mal so ein Frame3DGadget einbasteln und dann innerhalb dessen
ein anderes (um Optionen darzustellen).

Dabei wurde mir das zweite (also innerhalb des ersten) nicht mehr angezeigt.

Daraufhin stellte ich also fest, sobald man innerhalb eines Frame3DGadgets (also den inneren
Maßen) ein weiteres erstellt, das ein Style benutzt (#PB_Frame3D_usw) wird es nicht angezeigt.
Egal ob man bei der Erstellung #PB_Any als GadgetNummer verwendet oder nicht.

Ist das ein PB oder ein Windows Fehler , oder gar überhaupt nicht vorgesehen Styles zu mischen ?

kleiner TestCode :

Code: Alles auswählen

OpenWindow(0,100,200,640,480,"Test")
Frame3DGadget(#PB_Any,20,20,600,400,"MainFrame",#PB_Frame3D_Single)
;  ---- Dieses wird angezeigt
Frame3DGadget(#PB_Any,40,40,500,300,"2ndFrame")                   
;  ---- Dieses nicht
Frame3DGadget(#PB_Any,80,80,300,100,"3ndFrame",#PB_Frame3D_Double)
ButtonGadget(#PB_Any,100,100,100,20,"Test")

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Seltsames Verhalten von Frame3DGadget()

Verfasst: 04.12.2011 14:59
von PMV
Scheint eher ein Problem der Z-Order zu sein.
Das hier funktioniert:

Code: Alles auswählen

OpenWindow(0,100,200,640,480,"Test")
Frame3DGadget(#PB_Any,80,80,300,100,"3ndFrame",#PB_Frame3D_Double)
Frame3DGadget(#PB_Any,40,40,500,300,"2ndFrame")                   
Frame3DGadget(#PB_Any,20,20,600,400,"MainFrame",#PB_Frame3D_Single)
ButtonGadget(#PB_Any,100,100,100,20,"Test")

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
MFG PMV

GELÖSCHT

Verfasst: 04.12.2011 17:15
von mirca
GELÖSCHT

Re: Seltsames Verhalten von Frame3DGadget()

Verfasst: 04.12.2011 17:31
von Bisonte
PMV hat geschrieben:Scheint eher ein Problem der Z-Order zu sein.
Aber wieso funktioniert es dann wenn man das Style Flag weglässt ?

Re: Seltsames Verhalten von Frame3DGadget()

Verfasst: 04.12.2011 17:48
von ts-soft

Re: Seltsames Verhalten von Frame3DGadget()

Verfasst: 04.12.2011 18:01
von PMV
PureBasicFanHomeUser hat geschrieben:Z-Order ?
Is doch bestimmt diese Reihenfolge wie die Gadgets nacheinander angezeigt werden aber warum ist es bei PB so aussergewöhnlich? Bei anderen Sprachen gibt es auch Z-Order aber da hat man das Problem nicht.
Was ist bei PB anders oder warum ist es bei PB anders und warum wird es nicht so gemacht wie es bei den anderen Sprachen ebenfalls ist?
Die Z-Ordner der Gadgets ist kein Sprachenproblem. Egal mit welcher
Sprache du es programmierst, wenn du 2 Button übereinander legst
wird nur eines von beiden sichtbar sein, evt. sogar abwechselnt :wink:

Das Erklärt aber natürlich nicht, warum in diesem speziellen Fall das
Frame3DGadget() nicht angezeigt wird ... ich wollt nur zeigen,
dass es in einer anderen Reihenfolge funktioniert wie erwartet. <)

MFG PMV

Re: Seltsames Verhalten von Frame3DGadget()

Verfasst: 04.12.2011 18:08
von Danilo
Bisonte hat geschrieben:Aber wieso funktioniert es dann wenn man das Style Flag weglässt ?
Ohne Flag ist es ein richtiges Frame vom WinAPI-Button mit dem Style #BS_GROUPBOX.
Mit Flag ist es ein Static Control, das macht immer Ärger. ;)

Code: Alles auswählen

OpenWindow(0,100,200,640,480,"Test")
CreateWindowEx_(0,"BUTTON","Frame Button",#WS_VISIBLE|#WS_CHILD|#BS_GROUPBOX,10,10,300,300,WindowID(0),0,0,0)

frame = Frame3DGadget(#PB_Any,20,20,600,400,"MainFrame",#PB_Frame3D_Single)
className.s = Space(1024)
GetClassName_(GadgetID(frame),@className,1024)
Debug className

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Entweder das Team ändert das intern, oder Du nimmst besser ein ContainerGadget statt Frame3D mit Styles.
Sollte genauso aussehen und funktioniert dann auch:

Code: Alles auswählen

OpenWindow(0,100,200,640,480,"Test")
ContainerGadget(#PB_Any,20,20,600,400,#PB_Container_Flat)
    Frame3DGadget(#PB_Any,40,40,500,300,"2ndFrame")
    ContainerGadget(#PB_Any,80,80,300,100,#PB_Container_Double)
        Btn1 = ButtonGadget(#PB_Any,10,10,100,20,"Test")
    CloseGadgetList()
CloseGadgetList()

Repeat
    Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
            Break
        Case #PB_Event_Gadget
            If EventGadget()=Btn1
                Debug "Btn1"
            EndIf
    EndSelect
ForEver
Eigentlich könnten die PB-Entwickler gleich das Frame3DGadget mit BorderStyle
auf das ContainerGadget mappen. Zumindest auf Windows.

Beachte auch dass das Frame3D kein richtiger "Behälter" ist, in dem nachfolgende
Gadgets plaziert werden. Das merkst Du an den Koordinaten. Wenn Du dann x:10, y:10
verwendest, dann ist es nicht in dem Frame3D, sondern noch auf dem darüberliegenden
Fenster/Gadget. Der #BS_GROUPBOX Frame ist nur zur Verschönerung, sonst nimm besser
ContainerGadgets.

GELÖSCHT

Verfasst: 04.12.2011 18:10
von mirca
GELÖSCHT

Re: Seltsames Verhalten von Frame3DGadget()

Verfasst: 04.12.2011 18:20
von Danilo
PureBasicFanHomeUser hat geschrieben:Wenn man mit der Maus rüberfährt dann wechseln sie sich aber das ist nur bei PB der Fall. Warum ist das so?
Weil da Flags bei den Controls fehlen.
PureBasicFanHomeUser hat geschrieben:Wann wird in PB so gemacht wie bei anderen Sprachen?
Das können Dir nur die PB-Entwickler sagen.

Code: Alles auswählen

Procedure GadgetToFront(gadget)
    SetWindowPos_(GadgetID(gadget),#HWND_TOP,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
EndProcedure

OpenWindow(0,100,200,640,480,"Test")
btn1 = ButtonGadget(#PB_Any,20,20,100,20,"Test",#WS_CLIPSIBLINGS|#WS_CLIPCHILDREN)
btn2 = ButtonGadget(#PB_Any,30,30,100,20,"Test",#WS_CLIPSIBLINGS|#WS_CLIPCHILDREN)
btn3 = ButtonGadget(#PB_Any,40,40,100,20,"Test",#WS_CLIPSIBLINGS|#WS_CLIPCHILDREN)

;GadgetToFront(btn2)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Seltsames Verhalten von Frame3DGadget()

Verfasst: 04.12.2011 19:06
von Bisonte
Ok, und danke an thomas fürs melden ;)