![]() |
In ShellListView Navigieren (Ordner öffnen)
Ich habe mich jetzt schon durch diverse Suchmaschienen durchgewühlt, werde aber nicht fündig.
In der Standardeinstellung offnet die ShellListView Ordner und Dateien, wenn man doppelt draufklickt. Ich möchte aber, dass nur Ordner geöffnet werden, bei Dateien möchte ich selber was machen ... Wenn ich jetzt aber Autonavigate auf True stelle, dann öffnet der nach OnDblKlick halt auch Dateien. Wenn ich's auf False stelle wird die Datei zwar nicht geöffnet, aber die Ordner auch nicht. Bei den dateien will ich ja selber was machen, aber die ordner sollen normal geöffnet werden, ich kann aber bei bestem Willen nicht herausfinden, wie man mit der ShellListView in einen bestimmten Ordner navigiert !!! Den Ordnernamen kriegen .. kein Problem ... den ausgewählten Ordner ... geht auch ... aber Ordner öffnen :?: Es geht einfach nicht ... :cry: P.S. Andere Kompovorschläge willkommen ... :? |
Re: In ShellListView Navigieren (Ordner öffnen)
Moin Julius,
Zitat:
Bei mir nicht. :gruebel: Ich habe D7 Pro gestartet, einen ShellListView auf das Formular gelegt, und das Programm gestartet. Dateien werden auf Doppelclick nicht geöffnet. |
Re: In ShellListView Navigieren (Ordner öffnen)
Naja, kommt auf die datei an.
Exedateien und Verknüpfungen werden ausgefürhrt, Audio und Video wird abgspielt, Zip-Archieve werden geöffnet ... Naja, ist aber auch logisch ... Auszug aus TShellListView:
Delphi-Quellcode:
rocedure TCustomShellListView.DblClick;
begin if FAutoNavigate and (Selected <> nil) then with Folders[Selected.Index] do if IsFolder then SetPathFromID(AbsoluteID) // Das will ich, ist aber private ..... else ShellExecute(Handle, nil, PChar(PathName), nil, PChar(ExtractFilePath(PathName)), 0); // Das will ich nicht ..... inherited DblClick; end; |
Re: In ShellListView Navigieren (Ordner öffnen)
Moin Julius,
also bei mir steht das unter protected, nicht unter private. Viel interessanter finde ich aber das Verhalten bei Doppelclick. Der letzte Parameter ist 0, also SW_HIDE. Es wird also das Programm gestartet, aber nicht angezeigt. Ich hatte im Taskmanager jetzt eine ganze Reihe von Notepads, die ich dann aber real nicht sehen konnte :wall: ggf. kannst Du Dir ja auch mal TurboPower ShellShock (sourceforge.net) anschauen. |
Re: In ShellListView Navigieren (Ordner öffnen)
Naja, dann halt unter protected.
Ich könnte mir zur Not ja auch eine neue Kompo von TCustomShellListView ableiten, und die OnDblClick-Funktion selber implementieren ... Ginge das :?: :stupid: |
Re: In ShellListView Navigieren (Ordner öffnen)
Moin Julius,
dass sollte gehen. |
Re: In ShellListView Navigieren (Ordner öffnen)
Liste der Anhänge anzeigen (Anzahl: 1)
Es ging ... :)
Anbei meine Weiterentwicklung von der TShellListView, die nun eine Eigenschaft AutoExecuteFiles hat, mit der man steuern kann, ob Dateien geöffnet werden sollen, oder nicht. Wenn AutoExecuteFiles = True, dann wird alles geöffnet, wie in der normalen ShellListView Wenn AutoExecuteFiles = False, dann werden nur Ordner geöffnet, bei dateien passiert nichts. Dieser Vorteil musste (dank Borland) allerdings erkauft werden: In dem Event OnDblClick ist kein Verlass auf die Eigenschaft AutoNavigate der ShellListView1 ! Denn mit Autonavigate wird gesteuert, ob Dateien geöffnet werden., diese Eigenschaft wird einfach kurz auf False gestellt, wenn eine Datei angeklickt wurde, sie aber nicht geöffnet werden soll. Ansonsten: Viel Spaß damit :wink: Falls unser [user=Robert_G]OOP-Nazi-Spezi[/user] oder jemand anderes eine bessere Lösung finden sollte, immer her damit ... |
Re: In ShellListView Navigieren (Ordner öffnen)
Ich sehe gerade, dass dort ein Bug ist. hier der richtige Quellcode:
Delphi-Quellcode:
unit ShellListView1;
interface uses SysUtils, Classes, Controls, ComCtrls, ShellCtrls, ShellAPI; type TShellListView1 = class(TShellListView) private FAutoExecuteFiles: Boolean; protected procedure DblClick; override; public constructor Create(AOwner: TComponent); override; published property AutoExecuteFiles: Boolean read FAutoExecuteFiles write FAutoExecuteFiles; end; procedure Register; implementation procedure Register; begin RegisterComponents('Eigene Komponenten', [TShellListView1]); end; { TShellListView1 } constructor TShellListView1.Create(AOwner: TComponent); begin inherited; FAutoExecuteFiles := True; end; procedure TShellListView1.DblClick; var OldAutoNavigate: Boolean; begin OldAutoNavigate := AutoNavigate; if Selected <> nil then AutoNavigate := AutoNavigate and (Folders[Selected.Index].IsFolder or FAutoExecuteFiles); inherited; AutoNavigate := OldAutoNavigate; end; end. |
AW: In ShellListView Navigieren (Ordner öffnen)
Hey, ist dass noch aktuell? Habe das selbe problem dass die Prozesse alle Hide sind (0) wenn ich sie Doppelklicke.
|
AW: In ShellListView Navigieren (Ordner öffnen)
Die Lösung habe ich doch damals gepostet? :gruebel:
ShellListView ableiten, verändern, benutzen. Mit der Orginal-Kompo ist es leider so, wie Borland es programmiert hat. Ich konnte damals keine Shell* Komponente benutzen ohne sie abzuleiten und das Verhalten anzupassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 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