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!