TShellTreeView, Pfad lesen setzen [gelöst]
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
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 ?
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 Fr 6. Nov 2009, 07:16, insgesamt 1-mal geändert.
--
Just try it
Just try it
Re: TShellTreeView, Pfad lesen setzen
Meinst du das Basisverzeichnis setzen?
http://bugs.freepascal.org/view.php?id=13735" onclick="window.open(this.href);return false;
http://bugs.freepascal.org/view.php?id=13735" onclick="window.open(this.href);return false;
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: TShellTreeView, Pfad lesen setzen
ne ich meine das "aktuelle" verzeichniss
also inklusive der Unterverzeichnisse
also inklusive der Unterverzeichnisse
--
Just try it
Just try it
Re: TShellTreeView, Pfad lesen setzen
Ich versteh dich nicht so ganz.
Also den Ausgewählten Node kannst du z.B. so erhalten.
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.).
Also den Ausgewählten Node kannst du z.B. so erhalten.
Code: Alles auswählen
Caption:=ShellTreeView1.Selected.Text+' bzw. '+ShellTreeView1.Selected.GetTextPath;
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;
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;
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
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 :
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
Just try it
Re: TShellTreeView, Pfad lesen setzen [gelöst]
Also ich bin nur ein Junge..corpsman hat geschrieben:Jungs ihr seid spitze, vielen Dank,

In OnShowcorpsman 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 ?
Stimmt.corpsman hat geschrieben: Ich hab mir mal erlaubt, die Variablen in der Schleife noch frei zu geben :
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
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 ?
Wird das onShow nur ein einziges mal ausgeführt, ? oder auch öfters so wie onPaint ?
--
Just try it
Just try it
Re: TShellTreeView, Pfad lesen setzen [gelöst]
Afaik wird OnShow ausgef., wenn sich die "visible" Eigenschaft des Formulars ändert, also bei einem Hauptformular praktisch nur einmal.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 ?
Ein Flag (Blocking variable) kann aber auch da letzte Zweifel beseitigen.

-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: TShellTreeView, Pfad lesen setzen [gelöst]
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 Uhrtheo hat geschrieben:Afaik wird OnShow ausgef., wenn sich die "visible" Eigenschaft des Formulars ändert

Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
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
Just try it