Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   ContextMenue in TFileListBox (https://www.delphipraxis.net/198631-contextmenue-tfilelistbox.html)

Ykcim 20. Nov 2018 10:47

ContextMenue in TFileListBox
 
Hallo Zusammen,

die Componente TFileListBoxEX hat ja die Option, dass man sich das normal ConTextMenue anzeigen lassen kann, um z.B. Dateien kopieren zu können. Ich aber das Problem, dass ich immer eine Fehlermeldung (Falscher Parameter) bekomme.
Die TFileListBoxEX befülle cih mit nachfolgendem Code:
Delphi-Quellcode:
procedure ListFiles(Pfad, FileName: string; FLB: TFileListBoxEx);
var  I: integer;
begin
   FLB.Clear;
   filename:='*'+fileName+'*';
   FLB.Directory:=StringReplace(Pfad,'/','\',[rfIgnoreCase, rfReplaceAll]);
   for fileName in TDirectory.GetFiles(FLB.Directory, FileName, TSearchOption.soTopDirectoryOnly) do begin
      FLB.AddItem(FileName ,nil);
   end;
end;
Der Hintergrund ist, dass ich nur die Information '4711' habe und in der TFileListBoxEX alle Dateien mit diesem Teilstring im Dateinamen angezeigt werden sollen.
Das Ergebnis ist, dass ich die in der TFileListBoxEX den Pfad und den Dateiname sehen (\\192.168.178.69\Zeichnungen\Z_4711.pdf)

Der Fehler passiert hier ind der Unit FlCtrlEX:
Delphi-Quellcode:
procedure TFileListBoxEx.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
{$IFDEF DELPHIXE2_LVL}
var
  i: integer;
  fn: string;
{$ENDIF}
begin
  inherited;

  {$IFDEF DELPHIXE2_LVL}
  if (Button = mbRight) and SystemContextMenu then
  begin
    i := SendMessage(Handle, LB_ITEMFROMPOINT,0, MakeLong(X,Y));

    if (i >= 0) and (i < Items.Count) then
    begin
      ItemIndex := i;
      fn := Directory +'\'+Items[i];
      ShowSysContextMenu(fn, ClientToScreen(Point(X,Y)));
    end;
  end;
  {$ENDIF}
end;
Ich glaube, dass es in der Zeile
Delphi-Quellcode:
fn := Directory +'\'+Items[i];
passiert. Mir ist aufgefallen, dass Directory den Pfad enthält (\\192.168.178.69\Zeichnungen) und item[i] den Pfad und den Dateinamen (\\192.168.178.69\Zeichnungen\Z_4711.pdf). Zusammen ergibt das \\192.168.178.69\Zeichnungen\\\192.168.178.69\Zeic hnungen\Z_4711.pdf. Das ist natürlich falsch.

Hat jemand eine Idee, was ich korrigieren muss? Ich vermute, dass es in der Art und Weise, wie ich die TFileListBoxEX befülle unglücklich läuft...

Vielen Dank
Patrick

DeddyH 20. Nov 2018 11:01

AW: ContextMenue in TFileListBox
 
Mal dumm gefragt: was ist denn TFileListBoxEx? Ich kenne nur die TFileListBox auf dem Reiter Win 3.1.

uligerhardt 20. Nov 2018 11:01

AW: ContextMenue in TFileListBox
 
Wenn ich dich richtig verstanden habe, ist doch klar was passiert:
  • Du fügst den Dateinamen inkl. Verzeichnis in die Listbox ein.
  • Die Komponente klatscht das Verzeichnis nochmal davor.

Mir fallen zwei Lösungen ein:
  1. Du verzichtest auf die Anzeige des Verzeichnisnamens.
  2. Du reparierst die Komponente (TMS?). Ersetze das einfache Stringverketten durch etwas wie System.IOUtils.TPath.Combine/ShLwApi.PathCombine.

Ykcim 20. Nov 2018 11:57

AW: ContextMenue in TFileListBox
 
UPS, mein Fehler: Es ist tatsächlich eine Komponente von TMS...

Ich habe es jetzt wie folgt gelöst:
Delphi-Quellcode:
procedure ListFiles(Pfad, FileName: string; FLB: TFileListBoxEx);
begin
   FLB.Clear;
   FLB.Directory:=StringReplace(Pfad,'/','\',[rfIgnoreCase, rfReplaceAll]);
   FLB.Mask:='*'+fileName+'*';
end;
Damit funktioniert es, hat nur den Nachteil, dass ich nicht in Unterordnern nach weiteren Dateien gucken kann, sondern nur in dem zugewiesenen...

Aber ich glaube, so geht es.

@uligerhardt: Ohne den Verzeichnisnamen habe ich es leider nicht realisiert bekommen...

Patrick

uligerhardt 20. Nov 2018 12:24

AW: ContextMenue in TFileListBox
 
Du hast ja den Quellcode der Komponente. Du könntest versuchen, die Zeile
Delphi-Quellcode:
fn := Directory +'\'+Items[i];

durch etwas a la
Delphi-Quellcode:
fn := System.IOUtils.TPath.Combine(Directory, Items[i]);

zu ersetzen (ungetestet ;-)).

DP-Maintenance 20. Nov 2018 19:03

Dieses Thema wurde am "20. Nov 2018, 20:03 Uhr" von "Luckie" aus dem Forum "Programmieren allgemein" in das Forum "GUI-Design mit VCL / FireMonkey / Common Controls" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:16 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