explorertree- oder Treegadget (NUR bestimmter Pfad) ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
heini
Beiträge: 26
Registriert: 20.05.2007 13:46
Wohnort: Essen

explorertree- oder Treegadget (NUR bestimmter Pfad) ?

Beitrag von heini »

Hallo,

ich möchte entweder in einem ExplorerTreeGadget oder einem TreeGadget eine Verzeichnisstruktur eines BESTIMMTEN Ordners darstellen. OHNE weitere Anzeige der restlichen Laufwerke bzw. Ordner.

Also im Klartext:

z.B. den Pfad W:\Bilder

Der Baum soll also als OBERSTEN Eintrag den Pfad W:\Bilder darstellen und darunter halt eben die Unterordnerstruktur. (sonst NICHTS - auch keine Dateien !!). Selbstverständlich soll es möglich sein, wenn sich in einem Unterordner weitere Unterordner befinden, diese per klick auf den entsprechenden Node zu anzuzeigen.

Ist dies irgendwie möglich ???

Danke schonmal.....

Marco
Arbeit adelt.
Aber Adel arbeitet nicht...
  • PB 4.10
  • PBOSL 2.0 (27.01.2007)
  • HelpMaker 7.3.23.0
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Ich hab mir da damals auch schon mal Gedanken darüber machen müssen und hab es dann mittels einem einfachen Treegadget geregelt.
Benutzeravatar
heini
Beiträge: 26
Registriert: 20.05.2007 13:46
Wohnort: Essen

Beitrag von heini »

Hallo CNESM...

könntest Du mir verraten wie Du das gemacht hast ??
Bin Anfänger... :oops:
weiss nicht wie ich das anstellen soll. Habs schon mit einigen Codeteilen aus´m CAV oder hier aus´m Forum probiert, habs leider nicht hinbekommen :oops:

Trotzdem schon mal Danke für Deinen Tipp :allright:

Marco
Arbeit adelt.
Aber Adel arbeitet nicht...
  • PB 4.10
  • PBOSL 2.0 (27.01.2007)
  • HelpMaker 7.3.23.0
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

heini hat geschrieben:könntest Du mir verraten wie Du das gemacht hast ??
ich bin zwar nicht CNESM, aber vielleicht kann ich auch weiterhelfen. Als
erstes benötigst Du eine rekursive Procedur, die Dir die Ordnerstruktur
ausliest. Diese kannst Du dann bequem mit AddGadgetItem() in das
Treegadget einfügen. Jedes mal, wenn es eine Ordnerebene tiefer geht,
dann erhöhst Du die Einrücktiefe (Indentation); wenn's wieder hoch geht,
dann reduzierst Du die Einrücktiefe.

Code: Alles auswählen

Procedure ListFiles(EntryPath.s, Indentation.l)

  ; by Lebostein
  ; modified by Kiffi
  
  EntryPath + ""
  
  UsedDirectory = ExamineDirectory(#PB_Any, EntryPath, "*.*")
  
  While NextDirectoryEntry(UsedDirectory)
    
    EntryType.l = DirectoryEntryType(UsedDirectory)
    EntryName.s = DirectoryEntryName(UsedDirectory)
    
    If EntryName = "." Or EntryName = "..": Continue: EndIf
    
    If EntryType = #PB_DirectoryEntry_Directory
      
      AddGadgetItem(0, -1, EntryPath + EntryName, 0, Indentation)
      
      Indentation + 1
      ListFiles(EntryPath + EntryName, Indentation)
      Indentation - 1 
      
    EndIf
    
  Wend: FinishDirectory(UsedDirectory)
  
EndProcedure

; ----------------------------------------

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 500, 500, "", #PB_Window_SystemMenu | #PB_Window_Invisible)
  If CreateGadgetList(WindowID(0))
    TreeGadget(0, 5, 5, 590, 490)
    ListFiles("c:\programme\purebasic", 0)
    HideWindow(0, #False)
    Repeat
    Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf
EndIf
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
heini
Beiträge: 26
Registriert: 20.05.2007 13:46
Wohnort: Essen

Beitrag von heini »

Hallo Kiffi....

VIELEN VIELEN DANK !!!! :allright: :allright: :allright:

DAS hab ich gesucht !!!!

GENIAL !! Da wäre ich so, NIE drauf gekommen.

DANKE

Marco
Arbeit adelt.
Aber Adel arbeitet nicht...
  • PB 4.10
  • PBOSL 2.0 (27.01.2007)
  • HelpMaker 7.3.23.0
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Nyu 20 min zu spät fertig geworden :roll:
Hat halt länger gedauert alles umzumodeln auf alle Verzeichnisse und dann noch das richtige einfügen in das TreeGadget mit den richtigen Nodes

Benutze einmal WinAPI dafür hat man aber nicht das unschöne StartDir\\Dirs aus Kiffi's Bsp und es werden nur die Ordner angezeigt ohne Pfad

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Tree_0
EndEnumeration

Procedure PfadDurchsuchen(dir$, sublevel)
  ; http://www.purebasic.fr/german/viewtopic.php?p=135511#135511
  dir = ExamineDirectory(#PB_Any, dir$, "*.*")

  PathAddBackslash_(dir$) ; WinAPI32 - ab IE 4
 
  If dir
    While NextDirectoryEntry(dir)
      name.s = DirectoryEntryName(dir)

      If name = "." Or name = ".." : Continue : EndIf

      If DirectoryEntryType(dir) = #PB_DirectoryEntry_Directory

        folder.s = StringField(dir$ + name, CountString(dir$ + name, "\") + 1, "\")
        AddGadgetItem(#Tree_0, -1, folder, 0, sublevel)

        sublevel + 1
        PfadDurchsuchen(dir$+name, sublevel)
        sublevel - 1
      EndIf
    Wend
    FinishDirectory(dir)
  EndIf
EndProcedure

If OpenWindow(#Window_0, 216, 0, 200, 300, "ListDir",  #PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(#Window_0))
    TreeGadget(#Tree_0, 0, 0, 200, 300)
  EndIf

  pfadDurchsuchen(#PB_Compiler_Home, 0)

  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

EndIf

End
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Warum aus

Code: Alles auswählen

        sublevel + 1
        PfadDurchsuchen(dir$+name, sublevel)
        sublevel - 1 
nicht

Code: Alles auswählen

        
        PfadDurchsuchen(dir$+name, sublevel+1)
machen??
(war bei D@nte und Kiffi so)
Benutzeravatar
heini
Beiträge: 26
Registriert: 20.05.2007 13:46
Wohnort: Essen

Beitrag von heini »

Hallo D@nte....

WOW :shock: :o :shock:

hast Recht... finde ich OPTISCH schöner...
hab auch das Gefühl das es etwas schneller geht die Verzeichisstruktur einzulesen... wie gesagt, hab das Gefühl, kann mich aber auch täuschen...

NOCHMALS VIELEN VIELEN DANK EUCH ALLEN !!!!

Marco
Arbeit adelt.
Aber Adel arbeitet nicht...
  • PB 4.10
  • PBOSL 2.0 (27.01.2007)
  • HelpMaker 7.3.23.0
Antworten