Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi In ShellListView Navigieren (Ordner öffnen) (https://www.delphipraxis.net/45633-shelllistview-navigieren-ordner-oeffnen.html)

jfheins 9. Mai 2005 18:25


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 ... :?

Christian Seehase 9. Mai 2005 20:35

Re: In ShellListView Navigieren (Ordner öffnen)
 
Moin Julius,

Zitat:

Zitat von jfheins
Wenn ich jetzt aber Autonavigate auf True stelle, dann öffnet der nach OnDblKlick halt auch Dateien.

:shock:

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.

jfheins 9. Mai 2005 21:57

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;

Christian Seehase 9. Mai 2005 22:24

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.

jfheins 10. Mai 2005 06:18

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:

Christian Seehase 10. Mai 2005 09:01

Re: In ShellListView Navigieren (Ordner öffnen)
 
Moin Julius,

dass sollte gehen.

jfheins 11. Mai 2005 15:56

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 ...

jfheins 14. Jun 2005 19:24

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.

Newcomer91 14. Jan 2011 10:17

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.

jfheins 14. Jan 2011 10:22

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 08:01 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz