Tiefe einer Gadget-Liste

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Tiefe einer Gadget-Liste

Beitrag von Frabbing »

Hi,

lässt sich die Tiefe einer Gadgetliste feststellen? Also wieviele CloseGadgetList() noch notwenig sind, um die Erstellung zu beenden? :D
Gruß, Frank
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: Tiefe einer Gadget-Liste

Beitrag 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
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
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Tiefe einer Gadget-Liste

Beitrag 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
a²+b²=mc²
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: Tiefe einer Gadget-Liste

Beitrag 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.
Gruß, Frank
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: Tiefe einer Gadget-Liste

Beitrag 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:
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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Tiefe einer Gadget-Liste

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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: Tiefe einer Gadget-Liste

Beitrag von ts-soft »

>> ParentGadgetTotal = -2
Wer sind die 2?
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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Tiefe einer Gadget-Liste

Beitrag von RSBasic »

1. Die Null am Ende, wenn kein weiteres ParentWindow gefunden wurde.
2. Das ParentWindow = OpenWindow
Daher abzüglich "-2". :wink:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: Tiefe einer Gadget-Liste

Beitrag 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.
Gruß, Frank
Antworten