Habe Probleme mit dem Filter im TShellListView.
In einem Verzeichnis befinden sich Verknüpfungen von jeweils *.jpg und *.cr2 Dateien.
Ich möchte nun nur die *.jpg Dateien (Verknüpfungen) angezeigt bekommen
also
ShellListView1.Mask:='*.jpg' funktioniert aber nicht unter Windows. (Unter Linux funktioniert es mit Symlinks)
Die Verknüpfungen werden nur mit *.lnk angezeigt aber wieder alle.
weiss jeman hierfür eine Lösung?
[gelöst] ShellListView.Mask und Links in Windows .lnk
-
- Beiträge: 9
- Registriert: So 27. Feb 2011, 16:23
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.4.z)
- CPU-Target: AMD 32/64 bit
- Wohnort: Dessau-Roßlau
- Kontaktdaten:
[gelöst] ShellListView.Mask und Links in Windows .lnk
Zuletzt geändert von gtmind.de am Mi 3. Jan 2018, 17:49, insgesamt 1-mal geändert.
Auch aus Steinen, die einem in den Weg gelegt werden, kann man etwas schönes bauen.
Re: ShellListView.Mask und Links in Windows .lnk
Du könntest dich ins Ereignis OnFileAdded reinhängen, die lnk-Datei öffnen und dann prüfen, ob der Link auf eine jpg-Datei zielt (wie das geht, müsstest du suchen - ich bin sicher, dass das funktioniert). Falls es sich um keinen jpg-Link handelt, müsstest du den dem Event mitgegebenen ListItem zerstören, da das Event erst dann kommt, wenn der Eintrag schon in die ListView aufgenommen ist.
-
- Beiträge: 9
- Registriert: So 27. Feb 2011, 16:23
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.4.z)
- CPU-Target: AMD 32/64 bit
- Wohnort: Dessau-Roßlau
- Kontaktdaten:
Re: ShellListView.Mask und Links in Windows .lnk
Danke, müsste so gehen. Habe schon ein wenig versucht und die Liste schon ohne dem ganzen "Versknüpfung.lnk". Blos mit dem .Mask geht noch nicht. Werde ich wohl etwas dort selber schreiben müssen.wp_xyz hat geschrieben:Du könntest dich ins Ereignis OnFileAdded reinhängen, die lnk-Datei öffnen und dann prüfen, ob der Link auf eine jpg-Datei zielt (wie das geht, müsstest du suchen - ich bin sicher, dass das funktioniert). Falls es sich um keinen jpg-Link handelt, müsstest du den dem Event mitgegebenen ListItem zerstören, da das Event erst dann kommt, wenn der Eintrag schon in die ListView aufgenommen ist.
Auch aus Steinen, die einem in den Weg gelegt werden, kann man etwas schönes bauen.
-
- Beiträge: 9
- Registriert: So 27. Feb 2011, 16:23
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.4.z)
- CPU-Target: AMD 32/64 bit
- Wohnort: Dessau-Roßlau
- Kontaktdaten:
Re: ShellListView.Mask und Links in Windows .lnk
Funktioniert

Code: Alles auswählen
type
procedure TfrmMain.seSourceFileAdded(Sender: TObject; Item: TListItem);
var
fExt : String;
begin
// ersten Teil vom String "xyz.jpg - verknüpfung.lnk" vor dem "-"
fExt := Trim(GetCSVBit(Item.Caption,'-',0));
// mit * alle Dateien zulassen
if cbSEFilter.Text <> '*' then
if UpperCase(GetCSVBit(fExt,'.',1)) <> UpperCase(cbSEFilter.Text) then Item.Delete; // nur Filter
end;
function TfrmMain.GetCSVBit(inp: string; Switch: Char; pos: integer): string;
var
i, j: integer;
tmp: string;
begin
tmp:='';
j:=0;
for i:=1 to Length(inp) do
begin
if inp[i] = Switch then inc(j);
if (j = pos) and (inp[i] <> Switch) then
tmp:=tmp+inp[i];
end;
Result:=tmp;
end;
Auch aus Steinen, die einem in den Weg gelegt werden, kann man etwas schönes bauen.