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? :D

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
:wink:

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". :wink:

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.