![]() |
Shelllistview: Datei oder Ordner wählen
Hallo!!!
Vorab: Ich bin absolut neu hier, aber kein NEWBIE wenns ums proggen geht. Ich hoffe trotzdem, dass ich beim posten keinen Fehler gemacht habe. Zum Problem: Ich habe ein kleines Programm geschrieben, das ein paar kleine Funktionen für Multimediadateien hat. (MultiFileTagEditor, FileConvertor, Vorschaufunktionen, Allgemeine Dateioptionen usw.) Funzt eigentlich alles, aber es gibt ein Problem mit ShellListView. Ich möchte den Aktuellen Ordner zur Laufzeit anzeigen lassen. D. h. durch drücken eines Buttons, soll in ein bestimmtes Verzeichnis gewächselt werden. Oder eine bestimmte Datei Fokusiert oder Ausgewählt werden. Ich habe es über die ROOT-Eigenschaft versucht (funktioniert teilweise), aber das verursacht lustige Fehler, die auch schon mal zum Programmabsturz führen können. Vielleicht kann mir ja jemand einen Tipp geben. Danke im Vorraus... Gruss Moori |
Meiner Erfahrung nach ist die ShellListView sehr fehlerhaft, nicht umsonst ist sie im Karteireiter Beispiele abgelegt, zumindest bei D6.
Ich empfehle Dir als Alternative ![]() |
Also das Setzen des Aktuellen Pfads mit den Delphi Shell-Kommponenten ist prinzipiell möglich. Allerdings hat Mario recht, denn sie haben ein paar Fehler.
Einer ist zum Beispiel, dass mit der Eigenschaft Path kein neuer Pfad gesetzt werden kann. Das ist ein Problem in der Prozedur SetPath soweit ich mich erinnere. Dort haben die Programmierer eine Eigenschaft ausversehen auf True anstatt auf false gesetzt (oder andersrum) und so kommt es garnicht erst zum ausführen des notwendigen codes. Ich hatte dasselbe Problem vor ein Paar wochen. Hab dann einfach die Funktion geändert und neu compiliert. Jetzt Läuft alles ganz normal. Ich werd das heut abend (wenn ich dahim bin) mal posten, damit zukünftig alle wissen warum es nicht geht. Ich hoffe du kannst noch warten :-) Ansonsten hat die von Mario angesprochene Komponete Virtual Tree View (natürich) weniger Fehler und mehr Funktionen. |
Moin Moori,
eventuell wäre für Dich auch TurboPower ShellShock interessant (zu finden bei SourceForge.net). Die enthalten auch einen entsprechenden TreeView. |
So hier der Quelltext
Also in der Datei ..\Delphi6\Demos\ShellControls\ShellCtrls.pas muss der Wert FUpdating false sein und nicht true. ACHTUNG für ShellTreeView
Delphi-Quellcode:
es kann natürlich auch sein das die 1. Abfrage in TCustomShellTreeView.SetPathFromID
procedure TCustomShellTreeView.SetPath(const Value: string);
var P: PWideChar; NewPIDL: PItemIDList; Flags, NumChars: LongWord; begin NumChars := Length(Value); Flags := 0; P := StringToOleStr(Value); try OLECheck(DesktopShellFolder.ParseDisplayName( 0, nil, P, NumChars, NewPIDL, Flags) ); // DELPHI 6 PRO - Orginalquellcode // FUpdating := True; FUpdating := false; SetPathFromID(NewPIDL); except on EOleSysError do raise EInvalidPath.CreateFmt(SErrorSettingPath, [Value]); end; FUpdating := False; end;
Delphi-Quellcode:
nicht stimmt auf jeden falls funktioniert meiner erste Variante für das TreeView.
procedure TCustomShellTreeView.SetPathFromID(ID: PItemIDList);
var I: Integer; Pidls: TList; Temp, Node: TTreeNode; begin if FUpdating or (csLoading in ComponentState) or ((SelectedFolder <> nil) and SamePIDL(SelectedFolder.AbsoluteID, ID)) then Exit; {..} end; Bei der ShellListView existiert die Prozedur SetPath bzw. das Property Path nicht. Allerdings dürfte es kein Problem sein die von ShellTreeView nach ShellListView zu übertragen |
Shelllistview
Hallo zusammen,
Danke für eure Hilfe, aber bis jetzt ist mein Problem nicht gelöst. Ich werde nun erstmal die erwähnten Komponenten prüfen, die ihr mir empfohlen habt (oder noch empfehlen werdet). Wichtig ist aber, das ich nicht ShellTreeView sondern ShellListView "manipulieren" will. Denn ShellTreeView lässt sich ohne Problem zur Laufzeit ändern. Also folgendes: Ich habe so eine Art Datei-Browser in einem Dialogfenster. Dieser verwendet ShellTreeView und ShellListView. Beide Objekte sind miteinander verknüfpt. Wenn ich mit der Maus herumklicke wechseln beide Objekte in die gewählten Verzeichnisse. Aber wenn ich ShellTreeView zur Laufzeit verändere, wechselt ShellListView nicht in das neue Verzeichnis. Gibt es eine Möglichkeit das ShellListView mit ins neue Verzeichnis wechselt, oder muss ich doch auf eine ander Komponente zugreifen. Danke im Voraus. Gruss Moori |
Zitat:
|
Moin moori,
Zitat:
Da hab' ich nicht aufgepasst. Allerdings enthält ShellShock auch einen entsprechenden ListView. |
ShellListView
Hallo nochmal,
hab das Problem nun anders gelöst. Aber egal, ich habe nun die anderen Komponenten gesehen, die gefallen mir jetzt eh besser als die Komponenten aus dem "Beispiel"-Register. Trotzdem Danke für eure Hilfe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz