[gelöst] ShellListView.Mask und Links in Windows .lnk

Rund um die LCL und andere Komponenten
Antworten
gtmind.de
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

Beitrag von gtmind.de »

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

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: ShellListView.Mask und Links in Windows .lnk

Beitrag von wp_xyz »

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.

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

Beitrag von gtmind.de »

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.


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.
Auch aus Steinen, die einem in den Weg gelegt werden, kann man etwas schönes bauen.

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

Beitrag von gtmind.de »

Funktioniert :twisted:

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.

Antworten