Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Frage zum Shelltreeview - Bitte um Hilfe!!!
stefanstp - Mi 23.10.02 10:06
Titel: Frage zum Shelltreeview - Bitte um Hilfe!!!
Wie kann ich in der Shelltreeview nur bestimmte Dateien anzeigen lassen? Weil ich möchte ganz gerne alle Dateien die angezeigt werden, in eine Listbox übertragen, aber da ich an einen Diashowprogramm arbeite, halt nur *.jpg und *.bmp Dateien.
Wie geht das? Kann mir jemand helfen? Und wie kann ich eigentlich gleich alle Dateien selektieren (in der Shelltreeview) per Programmcode (aber nur Dateien, nicht Ordner).
Ich habe es so realisiert, wenn ich auf eine Grafikdatei klicke, das die in einem Image angezeigt wird. Das klappt auch super, aber wenn ich nicht auf eine Datei sondern ins leere von der Shelltreeview klickt kommt diese Meldung:
Zugriffsverletzung bei Adresse 0048A5BC in Modul 'AllOffice2_2_beta_8.exe'. Lesen von Adresse 00000004.
Wie kann ich diese Fehlermeldung vermeiden bzw. abfangen? Habe es schon mit Try except beim Laden von Image probiert, das geht zwar, das keine Fehlermeldung kommt, wenn ich auf nicht Bilddateien klickt, aber eine Fehlermeldung kommt halt, wenn man ins Leere klickt
wer kann helfen?
Danke schon mal im Voraus
STEFAN
Klabautermann - Mi 23.10.02 10:21
Hallo,
das kanst du über das ereignis OnAddFolder machen. Dieses wird jedesmal ausgelöst, wenn ein neues Element im den Baum dargestellt werden soll. Über den Parameter CanAdd kannst du festlegen, ob das Element hinzugefügt werden darf.
Gruß
Klabautermann
Delete - Mi 23.10.02 10:21
Titel: Re: Frage zum Shelltreeview - Bitte um Hilfe!!!
Betreff hat folgendes geschrieben: |
Bitte um Hilfe!!! |
Das dürfte doch klar sein, sonst würdest du nicht posten.
Zitat: |
Ich habe es so realisiert, wenn ich auf eine Grafikdatei klicke, das die in einem Image angezeigt wird. Das klappt auch super, aber wenn ich nicht auf eine Datei sondern ins leere von der Shelltreeview klickt kommt diese Meldung:
Zugriffsverletzung bei Adresse 0048A5BC in Modul 'AllOffice2_2_beta_8.exe'. Lesen von Adresse 00000004.
Wie kann ich diese Fehlermeldung vermeiden bzw. abfangen? |
Die "Leere" dürfte wohl das Ergebnis von
sein. So ist´s beim normalen TTreeView. Den ShellTreeView kenne ich nicht (mangels passender Delphi-Version), aber es dürfte da nicht anders sein, dass du mit "Selected" herausbekommst, welcher Eintrag ausgewählt ist.
Richtig geraten?
Wenn ja, dann prüfe vor dem Laden des Bildes einfach, ob "Selected" ungleich
nil ist. Wenn ja, lädtst du das Bild; wenn nicht, dann springst du aus der Funktion raus.
stefanstp - Mi 23.10.02 10:40
Titel: Schonmal besten dank aber...
@Klabautermann:
Das hört sich ganz gut an, aber wie realisiere ich das per Programmcode, könntest Du mir ein Beispielcode geben, weil ich mit der Shelltreeview noch überhauptnicht vertraut bin. Schon mal besten Dank im Voraus! :)
@MathiasSimmack:
Danke, das ist logisch. Werde es gleich heute Abend ausprobieren. Besten Dank für die schnelle Hilfe! :lol: Wenns nicht klappt, melde ich mich nochmal!
Schönen Tag wünsche ich :wink:
STEFAN
stefanstp - Mi 23.10.02 10:45
Titel: Ups...ich meine eigentlich die ShellListView ...
:oops: ...aber ist ja eh fast das gleiche....(jedenfalls für Euro zwei Antworten schätze ich mal...)
So denn
STEFAN
stefanstp - Mi 23.10.02 10:50
Titel: Tipps für das Allgemeine Arbeiten mit dem Shelllistview
Ich habe gestern fast den ganzen Tag versucht, gute Informationen über die Shelllistview zu bekommen. Hier ein paar gute Tipps, die ich in einem anderem Forum gefunden habe, die für andere Members bestimmt von Interesse sein könnte: :!:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| //Alle markierten Dateien (wenn 'multiselect') kriegt ihr so: for x:=0 to ShellListView1.Items.Count-1 do begin if ShellListView1.Items.Item[x].Selected then ListBox1.Items.Add(ShellListView1.Folders[x].PathName); end;
//Die Nummer des selektierten Eintrags ShellListView1.Selected.Index
//Anzeigename (was ist der ShellListView steht) der Datei (x ist die Nummer) ShellListView1.Folders[x].DisplayName;
//wie oben, nur komplett: Pfad + Dateiname + Ext (bsp.: 'c:\test\hallo.exe' ) ShellListView1.Folders[x].PathName; |
Aber trotzdem brächte ich noch den Quellcode, wie man nur *.jpg und *.bmp Dateien in der ShellListView anzeigen läßt.
:?:
STEFAN
Klabautermann - Mi 23.10.02 11:35
Hallo,
klicke einfach bei der ShellTreeView doppelt in das Ereigniss OnAddFolder. Den nun erscheinenden Procedurerumpf füllst du folgendermaßen aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.ShellTreeView1AddFolder(Sender: TObject; AFolder: TShellFolder; var CanAdd: Boolean); VAR Ext : STRING; begin Ext := ExtractFileExt(aFolder.PathName); IF ((aFolder.IsFolder) OR (UpperCase(Ext) = '.JPG') OR (UpperCase(Ext) = '.BMP')) THEN CanAdd := TRUE ELSE CanAdd := False; end; |
Das sollte übrigens bei der ShellListView genauso funktionieren.
Das aktuelle Objekt (die/der anzuzeigende Daztei/Ordner) wird im Parameter aFolder übergeben. Anhand dieses wird überprüft, ob es sich um einen Ordener handelt oder um etwas mit der Endung .jpg oder .bmp. Ist dies der Fall wird erlaubt das Objelkt in den Baum zu hängen ansonten nicht (CanAdd := TRUE/FALSE).
Weitere Informaltionen zu den Verwendeten Funktionen findest du in der Online-Hilfe.
Gruß
Klabautermann
stefanstp - Mi 23.10.02 11:40
Titel: DANKE!!!!
Werde ich gleich mal heute Abend ausprobieren. Hoffentlich geht es. Hört sich aber logisch an!
Schon mal besten Dank!
STEFAN
stefanstp - Do 24.10.02 07:32
Titel: Hat alles geklappt!
Danke an allen. Es hat alles geklappt!!!
STEFAN
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!