Eigenen kleinen Explorer

  • Hallo,

    ich hab gerade einen Script angefertigt (Siehe Anhang). Man soll da die Möglichkeit haben eigene Ordner zu erstellen und zu löschen. Das klappt bis jetzt außer das löschen... desweiteren besteht das Problem, das cih nicht weiß, wie man die erstellten Ordner samt Unterordner speichern soll. Evtl. als Ini- Datei?

    Ich hoffe mir kann jemand helfen ;)

  • Wenn du die Datein und Ortner nicht auf der Platte speichern willst musst du sie wohl in einer ini speicher, also die namen
    Und dann wenn man ortner doppelt anklickt alle Items löschen die gerade in der ListView sind und die Orter aus der Ini Erstellen

    mfg. Jam00

    • Offizieller Beitrag

    Was soll dabei rauskommen?
    Wenn das keine real existierenden Ordner auf der Festplatte sind, sondern Virtuelle, dann musst Du Dir erstmal darüber Gedanken machen, wie Du die Ordner-Struktur speichern willst.
    Man könnte das über ein Array machen, in dem die einzelnen Elemente die "Pfade" enthalten. Im Listview angezeigt werden dann nur die Ordner/Dateien, die im aktuellen "Pfad" liegen.

  • Hmm. Eigentlich wollte ich es so machen, das man selber Ordner erstellen kann UND irgendwelche Dateien reinziehen kann. :huh:
    Ich habs mir schon überlegt ob man einmal eine Sektion in einer Ini namens "Index" alegen sollte und die Namen der Ordner führen auf eine neue Sektion. Also evtl so:

    Code
    [index]
    Ordnername=UnterordnerOrdnername
    
    
    [UnterordnerOrdnername]
    Unterordner=NocheinUnterordner
    Unterordner2=NocheinUnterordner2
    usw...
  • Hallo DeepRed,

    warum nimmst du keinen Treeview, der ist doch prädestiniert dafür solche Strukturen abzubilden. Gibt auch einige gute TreeView-Beispiele (in Skripte) von Oscar,

    Edit1: ich stell mir das so vor, links das Treeview- und rechts ein Header oder ein Listview-Steuerelement

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (10. Mai 2009 um 17:42)

  • Hallo DeepRed,

    z.B. in einer Datenbank

    SQL
    CREATE TABLE [Katalog] ([KNr] INTEGER  NOT NULL PRIMARY KEY,[Bezeichnung] VARCHAR(255)  NOT NULL,[Vorfahre] INTEGER  NOT NULL)

    Mit dieser Struktur kannst du das ohne Probleme abbilden,

    mfg (Auto)Bert

  • Hallo Deepred,

    SQL
    $aSql = "CREATE TABLE [Katalog]                                ;Name der Tabelle"
    $aSql = $aSql & "([KNr] INTEGER  NOT NULL PRIMARY KEY," ;Feld KNr darf nicht leer sein Haupt-Index = hierüber kannst du den Datensatz indentifizieren
    $aSql = $aSql & "[Bezeichnung] VARCHAR(30)  NOT NULL,"  ;" Bezeichnung zur besseren Verständnis (Lesbarkeit Handling" darf nicht leer 
    $aSql = $aSql & "[Vorfahre] INTEGER  NOT NULL)"                ;" Vorfahre zeigt auf den übergeordneten Katalog wenn 0 dann Root-Eintrag 
    $res = _SQLite_Exec (-1, $aSql)                                             ;legt die Tabelle an


    in dein Skript musst du dann folgendes einbauen;

    Spoiler anzeigen
    [autoit]


    $htreevwMain = GUICtrlCreateTreeView(452,120, 345, 345, $GUI_SS_DEFAULT_TREEVIEW+$TVS_CHECKBOXES,$WS_EX_CLIENTEDGE)
    .
    .
    _BaumZeigen($iNr,$htreevwMain,$htreevwMain,True)
    .
    .
    Func _BaumZeigen($iNr,$hItem,$hTree,$bUpdt)
    local $aSql, $hQuery,$hQuery2, $aRow, $hNewItem, $sItemText
    $aSql="SELECT * FROM Gruppen WHERE Vorfahre = '" & $iNr & "'"
    _SQlite_Query(-1, $aSql, $hQuery)
    While _SQLite_FetchData ($hQuery, $aRow) = $SqlITE_OK
    $sItemText=StringFormat(" %-3s", $aRow[0]) & " " & $aRow[1]
    if $iNr=0 Then
    $hNewItem = _GUICtrlTreeView_Add($hTree, 0, $sItemText, 0, 0)
    Else
    $hNewItem=_GUICtrlTreeView_AddChild($hTree,$hItem,$sItemText,0,0)
    EndIf
    if $aRow[0]>$iHighestGrpNr Then $iHighestGrpNr = $aRow[0]
    $aTreeMain[$aRow[0]][0]=$sItemText
    if $bUpdt Then
    $aTreeMain[$aRow[0]][1]=$aRow[2]
    Else
    $aTreeMain[$aRow[0]][1]=0
    EndIf
    _BaumZeigen($aRow[0],$hNewItem,$hTree,$bUpdt)
    WEnd
    EndFunc

    [/autoit]

    du kannst auch noch weitere Felder in die Tabelle aufnehmen oder besser eine zweite anlegen in der unbedingt ein Feld mit dem gleichen Inhalt wie "KNR" exisitiert, dann kannst du beliebige Inhalte mit dem Katalog verbinden.

    Ich verwende diese Struktur ähnlich in einer Adressenverwaltung (liegt derzeit auf Eis, Abgabetermin September) und SQLite ist für eine Single-User Anwendung allemal ausreichend. Falls du mit SQL lösen möchtest empfehle ich dir auch dies zu lesen.

    Falls es aber ein echter eigener Explorer werden soll schau doch zum Stichwort TreeView mal Oscars Beispiele an, in einem liest er die Verzeichnisse der Festplatte ein,

    mfg (Auto)Bert

  • Hallo Deepred,

    wie du an folgendem ScreenShot erkennst sind auch echte Dateimanager ohne TreeView möglich:
    autoit.de/wcf/attachment/4729/
    Aber ich bin der Meinung, dass zu einem echten Explorer der solche Bedingungen erfüllen soll:

    [autoit]

    [index]
    Ordnername=UnterordnerOrdnername

    [/autoit][autoit][/autoit][autoit]

    [UnterordnerOrdnername]
    Unterordner=NocheinUnterordner
    Unterordner2=NocheinUnterordner2
    usw...

    [/autoit]

    ein TreeView besser geeignet ist. Aber ich weiss immer noch nicht ob es ein Ersatz für den Windowsexplorer werden soll, oder etwas anderes. Gib mal einen kleinen Einblick, Datenmenge, Verschachtelungstiefe (Ebenen) der Ordner etc. Oder graut es dich vor SQL,

    mfg (Auto)Bert