Autor Beitrag
stefanstp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Mi 23.10.02 10:06 
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 23.10.02 10:21 
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
ausblenden Quelltext
1:
Selected = nil					

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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: :!:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Do 24.10.02 07:32 
Titel: Hat alles geklappt!
Danke an allen. Es hat alles geklappt!!!

STEFAN