TShellTreeView, Pfad lesen setzen [gelöst]

Rund um die LCL und andere Komponenten

TShellTreeView, Pfad lesen setzen [gelöst]

Beitragvon corpsman » 5. Nov 2009, 17:40 TShellTreeView, Pfad lesen setzen [gelöst]

Ho,

manchmal blick ichs einfach nicht.

Ich will eine TShellTreeView benutzen, mit der man so wunderschön die Ordnerstruckturen "browsen" kann. Nur leider finde ich einfach nicht den Eintrag wo ich den aktuellen Ordner lesen / setzen kann.

Könnt ihr mir den evtl verraten ?
Zuletzt geändert von corpsman am 6. Nov 2009, 07:16, insgesamt 1-mal geändert.
--
Just try it
corpsman
 
Beiträge: 1079
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 5. Nov 2009, 17:54 Re: TShellTreeView, Pfad lesen setzen

Meinst du das Basisverzeichnis setzen?
http://bugs.freepascal.org/view.php?id=13735
theo
 
Beiträge: 8196
Registriert: 11. Sep 2006, 18:01

Beitragvon corpsman » 5. Nov 2009, 18:06 Re: TShellTreeView, Pfad lesen setzen

ne ich meine das "aktuelle" verzeichniss

also inklusive der Unterverzeichnisse
--
Just try it
corpsman
 
Beiträge: 1079
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 5. Nov 2009, 18:55 Re: TShellTreeView, Pfad lesen setzen

Ich versteh dich nicht so ganz.

Also den Ausgewählten Node kannst du z.B. so erhalten.
Code: Alles auswählen
Caption:=ShellTreeView1.Selected.Text+' bzw. '+ShellTreeView1.Selected.GetTextPath;


Das Ausgew. Verz. setzen ist glaub ich nicht direkt unterstützt.
Ich fürchte da muss man sich durchhangeln wie z.B. (wählt das erste Unterverz von /home aus und öffnet es, nur ein dummes Bsp.).

Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var ANode:TTreenode;
begin
 ANode:=ShellTreeView1.TopItem;
 Repeat
  ANode:=ANode.GetNext;
 Until (ANode=nil) or (ANode.Text='home');
 Anode.Expanded:=True;
 ANode:=ANode.GetFirstChild;
 Anode.Expanded:=True;
 Anode.Selected:=true;
end;
theo
 
Beiträge: 8196
Registriert: 11. Sep 2006, 18:01

Beitragvon corpsman » 5. Nov 2009, 19:05 Re: TShellTreeView, Pfad lesen setzen

genau das meinte ich .

Danke
--
Just try it
corpsman
 
Beiträge: 1079
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 5. Nov 2009, 20:01 Re: TShellTreeView, Pfad lesen setzen

Ich hab mal noch eben eine Procedure für das öffnen von Unterverz. gehackt.

Code: Alles auswählen
Procedure ShellTreeViewSetTextPath(STV:TShelltreeview; Path:String);
Var Str: TStringList;
  ANode: TTreeNode;
  i: integer;
Begin
  If Not DirectoryExistsUTF8(Path) Then Exit;
 
  Str := TStringList.Create;
  Str.Delimiter := PathDelim;       
  Str.DelimitedText := Path;
 
  For i:=Str.Count-1 Downto 0 Do
    If Str[i]='' Then Str.Delete(i);
 
  {$ifdef windows}
    Str[0]:=Str[0]+PathDelim;
  {$endif}
 
  STV.BeginUpdate;
  ANode := STV.TopItem;
 
  For i:=0 To Str.Count-1 Do
    Begin
      While (ANode<>Nil) And (ANode.Text<>Str[i]) Do
        Begin
          ANode := ANode.GetNextSibling;
        End;
      If Anode<>Nil Then
        Begin
          Anode.Expanded := True;
          ANode.Selected := True;       
          Anode := ANode.GetFirstChild;
        End
      Else Exit;
    End;
 
  STV.EndUpdate;
End;


Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellTreeViewSetTextPath(ShellTreeView1,'/home/theo/Documents');
end;
theo
 
Beiträge: 8196
Registriert: 11. Sep 2006, 18:01

Beitragvon corpsman » 6. Nov 2009, 07:48 Re: TShellTreeView, Pfad lesen setzen [gelöst]

Jungs ihr seid spitze, vielen Dank,

evtl haben wir Glück und ein entwickler von Lazarus liest das und fügt diese wirklich sinnvollen Methoden an die TShellTreeView mit an ;).

ich hab nun nur noch ein Problem :

Wenn ich in TForm.create den Pfad setze geht das nicht, weil die Schelltreeview da die Ordner Informationen noch nicht hat. Wie "stöst man das einlesen der Ordnerinformationen also an ?

Ich hab mir mal erlaubt, die Variablen in der Schleife noch frei zu geben :

Code: Alles auswählen
Procedure ShellTreeViewSetTextPath(STV: TShelltreeview; Path: String);
Var
  Str: TStringList;
  ANode: TTreeNode;
  i: integer;
Begin
  If Not DirectoryExistsUTF8(Path) Then Exit;
 
  Str := TStringList.Create;
  Str.Delimiter := PathDelim;
  Str.DelimitedText := Path;
 
  For i := Str.Count - 1 Downto 0 Do
    If Str[i] = '' Then Str.Delete(i);
 
{$IFDEF windows}
  Str[0] := Str[0] + PathDelim;
{$ENDIF}
 
  STV.BeginUpdate;
  ANode := STV.TopItem;
 
  For i := 0 To Str.Count - 1 Do Begin
    While (ANode <> Nil) And (ANode.Text <> Str[i]) Do Begin
      ANode := ANode.GetNextSibling;
    End;
    If Anode <> Nil Then Begin
      Anode.Expanded := True;
      ANode.Selected := True;
      Anode := ANode.GetFirstChild;
    End
    Else Begin
      STV.EndUpdate;
      str.free;
      Exit;
 
    End;
  End;
  str.free;
  STV.EndUpdate;
End;
--
Just try it
corpsman
 
Beiträge: 1079
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 6. Nov 2009, 09:58 Re: TShellTreeView, Pfad lesen setzen [gelöst]

corpsman hat geschrieben:Jungs ihr seid spitze, vielen Dank,

Also ich bin nur ein Junge.. :oops:
corpsman hat geschrieben:Wenn ich in TForm.create den Pfad setze geht das nicht, weil die Schelltreeview da die Ordner Informationen noch nicht hat. Wie "stöst man das einlesen der Ordnerinformationen also an ?

In OnShow

corpsman hat geschrieben:Ich hab mir mal erlaubt, die Variablen in der Schleife noch frei zu geben :

Stimmt.
theo
 
Beiträge: 8196
Registriert: 11. Sep 2006, 18:01

Beitragvon corpsman » 6. Nov 2009, 10:09 Re: TShellTreeView, Pfad lesen setzen [gelöst]

also ich hab das nun mit einer Blocking variable in onPaint gemacht.

Wird das onShow nur ein einziges mal ausgeführt, ? oder auch öfters so wie onPaint ?
--
Just try it
corpsman
 
Beiträge: 1079
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon theo » 6. Nov 2009, 10:14 Re: TShellTreeView, Pfad lesen setzen [gelöst]

corpsman hat geschrieben:also ich hab das nun mit einer Blocking variable in onPaint gemacht.

Wird das onShow nur ein einziges mal ausgeführt, ? oder auch öfters so wie onPaint ?


Afaik wird OnShow ausgef., wenn sich die "visible" Eigenschaft des Formulars ändert, also bei einem Hauptformular praktisch nur einmal.
Ein Flag (Blocking variable) kann aber auch da letzte Zweifel beseitigen. ;-)
theo
 
Beiträge: 8196
Registriert: 11. Sep 2006, 18:01

Beitragvon RSE » 6. Nov 2009, 13:01 Re: TShellTreeView, Pfad lesen setzen [gelöst]

theo hat geschrieben:Afaik wird OnShow ausgef., wenn sich die "visible" Eigenschaft des Formulars ändert


Korrekt. Bei einem Formular kann das also nur passieren, wenn du es zwischendurch versteckst und später wieder anzeigst. Das macht eigentlich nur Sinn, wenn du ein Icon in der Systray (alternative Bezeichnung: DNU - Dings neben der Uhr :mrgreen: ) hast und dorthin "minimieren" willst. Damit wird nämlich im Endeffekt nur das Hauptfenster versteckt und beim späteren "wiederherstellen" wieder angezeigt -> OnShow wird erneut ausgeführt. Daher ist eine Initialisierung im OnShow auch besser. Hast du eine Behandlungsroutine für OnPaint, dann wird die ständig aufgerufen (das heißt Stack schaufeln, deine Bedingung prüfen, Stack zurückschaufeln), und das an einer zeitkritischen Stelle (Wenns zu lange dauert, kann es flackern).
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
RSE
 
Beiträge: 462
Registriert: 30. Jul 2008, 12:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon corpsman » 6. Nov 2009, 13:43 Re: TShellTreeView, Pfad lesen setzen [gelöst]

Danke für die Erklärung, ich hab das Problem mit den DNU ;) nennt sich glaubig trayicons, also mach ichs in onShow mit Blocking und alles ist 1a *happy*
--
Just try it
corpsman
 
Beiträge: 1079
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Linux Mint Mate, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: Warf und 2 Gäste

porpoises-institution
accuracy-worried