AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Shelllistview: Datei oder Ordner wählen

Ein Thema von moori · begonnen am 2. Jul 2003 · letzter Beitrag vom 3. Jul 2003
Antwort Antwort
moori

Registriert seit: 14. Jun 2003
36 Beiträge
 
Delphi 4 Professional
 
#1

Shelllistview: Datei oder Ordner wählen

  Alt 2. Jul 2003, 19:29
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
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#2
  Alt 3. Jul 2003, 07:31
Meiner Erfahrung nach ist die ShellListView sehr fehlerhaft, nicht umsonst ist sie im Karteireiter Beispiele abgelegt, zumindest bei D6.

Ich empfehle Dir als Alternative Virtual Tree View. Da habe ich mal eine umfangreiche Demo zum Thema Explorer gesehen.
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
CepheidenX

Registriert seit: 11. Mär 2003
43 Beiträge
 
Delphi 6 Professional
 
#3
  Alt 3. Jul 2003, 10:39
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.
Zynismus ist der geglückte Versuch, die Welt so zu sehen, wie sie wirklich ist.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 3. Jul 2003, 15:12
Moin Moori,

eventuell wäre für Dich auch TurboPower ShellShock interessant (zu finden bei SourceForge.net). Die enthalten auch einen entsprechenden TreeView.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
CepheidenX

Registriert seit: 11. Mär 2003
43 Beiträge
 
Delphi 6 Professional
 
#5
  Alt 3. Jul 2003, 16:07
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:
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;
es kann natürlich auch sein das die 1. Abfrage in TCustomShellTreeView.SetPathFromID
Delphi-Quellcode:
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;
nicht stimmt auf jeden falls funktioniert meiner erste Variante für das TreeView.

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
Zynismus ist der geglückte Versuch, die Welt so zu sehen, wie sie wirklich ist.
  Mit Zitat antworten Zitat
moori

Registriert seit: 14. Jun 2003
36 Beiträge
 
Delphi 4 Professional
 
#6

Shelllistview

  Alt 3. Jul 2003, 16:56
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
  Mit Zitat antworten Zitat
CepheidenX

Registriert seit: 11. Mär 2003
43 Beiträge
 
Delphi 6 Professional
 
#7
  Alt 3. Jul 2003, 17:10
Zitat von CepheidenX:
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
Ansonsten ist es mit der puren ShellListView nicht möglich (jedenfalls nicht ber Pfad)
Zynismus ist der geglückte Versuch, die Welt so zu sehen, wie sie wirklich ist.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 3. Jul 2003, 17:14
Moin moori,

Zitat von moori:
Wichtig ist aber, das ich nicht ShellTreeView sondern ShellListView "manipulieren" will



Da hab' ich nicht aufgepasst.

Allerdings enthält ShellShock auch einen entsprechenden ListView.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
moori

Registriert seit: 14. Jun 2003
36 Beiträge
 
Delphi 4 Professional
 
#9

ShellListView

  Alt 3. Jul 2003, 17:21
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr.
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