Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FreePascal ShellTreeView - Zustand speicher/laden (https://www.delphipraxis.net/184185-shelltreeview-zustand-speicher-laden.html)

Lion 5. Mär 2015 20:56

Delphi-Version: 5

ShellTreeView - Zustand speicher/laden
 
Hallo Jungs,

ich habe diese Frage schon auf einem englischen Lazarus Forum gestellt, aber irgendwie komme ich da nicht weiter, daher wende ich mich an euch. ))
Also ich habe folgendes Problem. Ich verwende diesen Code um den Zustand der ShellTreeView zu speichern, das heiß die Verzeichnisse die beim Schließen der Anwendung aufgeklappt waren, werden beim nächsten Start der Anwendung wieder aufgeklappt erscheinen.

Nun unter Windows sieht der Inhalt der tree.txt Datei wie folgt aus:
Zitat:

C:\lazarus
C:\lazarus/components
C:\lazarus/components/aarre
C:\lazarus/components/customform
C:\lazarus/components/daemon
Unter Linux hingegen:
Zitat:

/home
/home/Downloads
/home/Bilder/Urlaub
/home/Videos/Dokus/2015
Wie man sieht hat Linux keine Backslashs und das Wiederherstellen der Verzeichnisstruktur funktioniert nicht. Wie löse ich das Problem, dass das Speichern und Laden der Verzeichnisstruktur auch unter Linux funktioniert?

Hier mein Code:

Delphi-Quellcode:
// Merkt sich den Zustand der ShellTreeView, welche Äste aufgeklappt sind
procedure TMainForm.MemorizeTreeExpand();
var
  i: Integer;
  str: String;
begin
  ExpandedTreeNodes.Clear;
  for i := 0 to ShellTreeView1.Items.Count - 1 do
  begin
    if ShellTreeView1.Items[i].Expanded then
    begin
      str := ShellTreeView1.Items[i].GetTextPath;
      { Da ist unter Linux ein Wurm drin in TTreeNodes.GetTextPath: Wenn Root = '/',
        werden alle weiteren Unterverzeichnisse als '//xyz' zurückgegeben, das findet
        dann TTreeNodes.FindNodeWithTextPath nicht mehr. Deshalb die folgende Zeile: }
      {$IFDEF UNIX}
        if (Length(str) > 1) and (str[1] = '/') and (str[1] = str[2]) then Delete(str, 1, 1);
      {$ENDIF}
      ExpandedTreeNodes.Add(str);
    end;
  end;
end;

// Stellt den Zustand der ShellTreeView wieder her, welche Äste aufgeklappt sind
procedure TMainForm.RecallTreeExpand();
var
  i: Integer;
  ANode: TTreeNode;
begin
  for i := 0 to ExpandedTreeNodes.Count - 1 do
  begin
    ANode := ShellTreeView1.Items.FindNodeWithTextPath(ExpandedTreeNodes[i]);
    if ANode <> nil then ANode.Expand(False);
  end;
end;

// Speichert den Zustand der ShellTreeView, welche Äste aufgeklappt sind
procedure TMainForm.BackupTreeExpand();
begin
  try
    ExpandedTreeNodes.SaveToFile(ExtractFilePath(ParamStr(0)) + 'settings' + PathDelim + 'tree.txt');
  except
    // keine Fehlermeldung ausgeben
  end;
end;

// Lädt den Zustand der ShellTreeView, welche Äste aufgeklappt sind
procedure TMainForm.RestoreTreeExpand();
begin
  try
    ExpandedTreeNodes.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'settings' + PathDelim + 'tree.txt');
  except
    // keine Fehlermeldung ausgeben
  end;
end;
Vielen Dank in Voraus!

Bjoerk 5. Mär 2015 22:00

AW: ShellTreeView - Zustand speicher/laden
 
Es sollte doch reichen den ShellTreeView.Path abzuspeichern und wieder zu setzen? Und Delphi hat doch den TrailingPathDelimiter, der automatsich angepasst wird ('/' oder '\').

Lion 5. Mär 2015 22:09

AW: ShellTreeView - Zustand speicher/laden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was macht eigentlich ShellTreeView.Path? Lazarus Hilfe ist dazu leer, siehe Screenshot...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz