Seltsames Verhalten von Frame3DGadget()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Seltsames Verhalten von Frame3DGadget()

Beitrag 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
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Seltsames Verhalten von Frame3DGadget()

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 10:57, insgesamt 1-mal geändert.
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: Seltsames Verhalten von Frame3DGadget()

Beitrag 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 ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
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: Seltsames Verhalten von Frame3DGadget()

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Seltsames Verhalten von Frame3DGadget()

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Seltsames Verhalten von Frame3DGadget()

Beitrag 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.
Zuletzt geändert von Danilo am 04.12.2011 18:11, insgesamt 1-mal geändert.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
mirca
Beiträge: 169
Registriert: 13.11.2011 16:05

GELÖSCHT

Beitrag von mirca »

GELÖSCHT
Zuletzt geändert von mirca am 17.10.2013 10:58, insgesamt 1-mal geändert.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Seltsames Verhalten von Frame3DGadget()

Beitrag 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
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: Seltsames Verhalten von Frame3DGadget()

Beitrag von Bisonte »

Ok, und danke an thomas fürs melden ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten