Einzelnen Beitrag anzeigen

Lion

Registriert seit: 5. Mär 2012
19 Beiträge
 
#1

ShellTreeView - Zustand speicher/laden

  Alt 5. Mär 2015, 19:56
Delphi-Version: 5
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!
  Mit Zitat antworten Zitat