Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#4

AW: Combobox: im Onselect Text ändern geht nicht

  Alt 16. Mai 2015, 00:27
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.

Geändert von Popov (16. Mai 2015 um 01:40 Uhr) Grund: Kleinen Fehler im Code beseitigt
  Mit Zitat antworten Zitat