Seite 1 von 1
Tiefe einer Gadget-Liste
Verfasst: 06.06.2012 17:44
von Frabbing
Hi,
lässt sich die Tiefe einer Gadgetliste feststellen? Also wieviele CloseGadgetList() noch notwenig sind, um die Erstellung zu beenden?

Re: Tiefe einer Gadget-Liste
Verfasst: 06.06.2012 17:56
von ts-soft
Ungetested, hab wenig Zeit, aber in etwa so könnte es gehen:
Code: Alles auswählen
count = 0
Repeat
gadlist = UseGadgetList(0)
If gadlist
CloseGadgetList()
count + 1
EndIf
Until gadlist = 0
Debug count
Gruß
Thomas
Re: Tiefe einer Gadget-Liste
Verfasst: 06.06.2012 17:59
von Kiffi
Du kannst ContainerGadget(), PanelGadget() und ScrollAreaGadget() unter
Preferences/Editor/Indentation mit 1 / 0 eintragen und CloseGadgetlist()
mit -1 / 0. Dann siehst Du es anhand der Einrückung im Code.
Grüße ... Kiffi
Re: Tiefe einer Gadget-Liste
Verfasst: 06.06.2012 18:40
von Frabbing
Danke, scheint mir ein guter Ansatz zu sein, Thomas!

Nur leider wird dadurch die Gadget-Liste zugemacht...
@Kiffi: Benutze meinen eigenen Editor, siehe Signaturbild. Geht auch nicht um die Ansicht beim Editieren, sondern um Infos während der Ausführung. Angenommen es werden (User-gesteuert) vom Programm Childs auf einem Panel (oder so) erzeugt und darauf wieder Childs usw. Wäre lästig, im Programm einen Zähler zu verwenden, zumal beliebig viele Panels/Childs/usw genutzt werden können, also mitunter viele Zähler nötig würden. Hoffe, das war etwas verständlicher.

Das Ganze ist für meinen visuellen Design.
Re: Tiefe einer Gadget-Liste
Verfasst: 06.06.2012 19:07
von ts-soft
Frabbing hat geschrieben:Danke, scheint mir ein guter Ansatz zu sein, Thomas!

Nur leider wird dadurch die Gadget-Liste zugemacht...
Naja, wo ist das Problem?
Code: Alles auswählen
Procedure CountLevelGadgetList()
Protected count, gadlist, oldlist
Repeat
gadlist = UseGadgetList(0)
If gadlist
If count = 0 : oldlist = gadlist : EndIf
CloseGadgetList()
count + 1
EndIf
Until gadlist = 0
UseGadgetList(oldlist)
ProcedureReturn count
EndProcedure

Re: Tiefe einer Gadget-Liste
Verfasst: 06.06.2012 19:35
von RSBasic
Eine andere Möglichkeit (WinAPI):
Code: Alles auswählen
EnableExplicit
Define EventID
Procedure CountLevelGadgetList(Gadget)
Protected ParentGadgetHandle = GadgetID(Gadget)
Protected ParentGadgetTotal = -2
Repeat
ParentGadgetHandle = GetParent_(ParentGadgetHandle)
ParentGadgetTotal + 1
Until ParentGadgetHandle = 0
ProcedureReturn ParentGadgetTotal
EndProcedure
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(25, 10, 10, 100, 20,"Button 1",0)
If ContainerGadget(1, 10, 40, 480, 350, #PB_Container_Flat)
If PanelGadget(2, 10, 10, 460, 330)
If ContainerGadget(3, 10, 10, 440, 310, #PB_Container_Flat)
ButtonGadget(50, 10, 10, 100, 20,"Button 2",0)
CloseGadgetList()
EndIf
CloseGadgetList()
EndIf
CloseGadgetList()
EndIf
Debug CountLevelGadgetList(25)
Debug CountLevelGadgetList(50)
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
Re: Tiefe einer Gadget-Liste
Verfasst: 06.06.2012 20:06
von ts-soft
>> ParentGadgetTotal = -2
Wer sind die 2?
Re: Tiefe einer Gadget-Liste
Verfasst: 06.06.2012 20:08
von RSBasic
1. Die Null am Ende, wenn kein weiteres ParentWindow gefunden wurde.
2. Das ParentWindow = OpenWindow
Daher abzüglich "-2".

Re: Tiefe einer Gadget-Liste
Verfasst: 06.06.2012 20:29
von Frabbing
Auch ein interessanter Ansatz, RSBasic. Danke!

Sagt mir aber nicht, ob noch ein CloseGadgetList() nötig ist im Programm oder nicht. Tommis Lösung ist da sinnvoller.