TShellTreeView, Pfad lesen setzen [gelöst]
- corpsman
- Lazarusforum e. V.
- Beiträge: 1496
- 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
http://bugs.freepascal.org/view.php?id=13735
- corpsman
- Lazarusforum e. V.
- Beiträge: 1496
- 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;
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;
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: 1496
- 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]
corpsman hat geschrieben:Jungs ihr seid spitze, vielen Dank,
Also ich bin nur ein Junge..
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.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1496
- 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]
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.
-
- 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]
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 ) 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!
- corpsman
- Lazarusforum e. V.
- Beiträge: 1496
- 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