Hier eine Methode die ich gelegentlich nutze. Müsste auch mit Combobox funktionieren:
Delphi-Quellcode:
procedure GetAllFiles(Path: String; List: TStrings);
var
Search: TSearchRec;
begin
if FindFirst(Path + '*.*', faAnyFile, Search) = 0 then
repeat
List.Add(Path + Search.Name);
until FindNext(Search) <> 0;
FindClose(Search);
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
TopDiff: Integer; //zentriert Text vertikal
FileName: String;
begin
with (Control as TListbox) do
begin
FileName := ExtractFileName(Items[Index]);
TopDiff := (ItemHeight div 2) - (Canvas.TextHeight(Items[Index]) div 2);
Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + TopDiff, FileName;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Clear;
ListBox1.Style := lbOwnerDrawFixed;
GetAllFiles('C:\Windows\', ListBox1.Items);
end;
Button1 läd den Inhalt des Windows-Ordners als Liste. Jeder Eintrag enthält den Pfad und Dateinamen, also etwa: "c:\windows\calc.exe".
In der ListBox befindet sich im Item der ganze Pfad, angezeigt wird aber nur der Dateiname "calc.exe". Es wird also etwas anderes angezeigt als drin ist. Wie das?
Hier wird das Item einfach selbst gezeichnet. Statt des ganzen Textes wird nur der Dateiname ausgegeben. Auf diese Weise kann der ganze Pfad für weitere Nutzung im Item bleiben, aber nur der Dateiname wie gewünscht angezeigt werden.