AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language FreePascal ShellTreeView - Zustand speicher/laden
Thema durchsuchen
Ansicht
Themen-Optionen

ShellTreeView - Zustand speicher/laden

Ein Thema von Lion · begonnen am 5. Mär 2015 · letzter Beitrag vom 5. Mär 2015
Antwort Antwort
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
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: ShellTreeView - Zustand speicher/laden

  Alt 5. Mär 2015, 21:00
Es sollte doch reichen den ShellTreeView.Path abzuspeichern und wieder zu setzen? Und Delphi hat doch den TrailingPathDelimiter, der automatsich angepasst wird ('/' oder '\').
  Mit Zitat antworten Zitat
Lion

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

AW: ShellTreeView - Zustand speicher/laden

  Alt 5. Mär 2015, 21:09
Was macht eigentlich ShellTreeView.Path? Lazarus Hilfe ist dazu leer, siehe Screenshot...
Miniaturansicht angehängter Grafiken
scrennshot.jpg  

Geändert von Lion ( 5. Mär 2015 um 21:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz