Thema: Delphi Mehrspaltige ComboBox?

Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Mehrsapltige ComboBox?

  Alt 2. Jun 2008, 15:05
Hi,

ich hätte es auch mit Owner Draw erledigt, allerdings scheint mir der Code von Torry ein wenig lang. Zum auseinanderpfriemeln könnte man TStringList.DelimitedText verwenden oder - was sogar bei älteren Delphis geht - CommaText. Dadurch wird der Code gleich übersichtlicher (wenn auch evtl. langsamer, aber das stört in diesem Fall kaum, da es nicht bemerkt wird).

Hier ein kurzes Beispiel:

im OI ComboBox1.Style = csOwnerDrawFixed einstellen.

Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  Item: TStringList;
  W, I, L: Integer;
  R: TRect;
begin
  Item := TStringList.Create;
  try
    Item.CommaText := ComboBox1.Items[Index];
    W := (Rect.Right - Rect.Left) div Item.Count; //hier alle gleiche Breite

    for I := 0 to Item.Count - 1 do
    begin
      L := Rect.Left + I * W;
      ComboBox1.Canvas.TextRect(
        Classes.Rect(L, Rect.Top, Rect.Right, Rect.Bottom),
        L,
        Rect.Top,
        Item[I]
      );
    end;
  finally
    Item.Free;
  end;
end;
Der Inhalt im ComboBox1.Items ist dann im CSV-Format (mit , und "):

Code:
"Spalte 1","Spalte 2","Spalte 3"
"Hallo Welt",NurEinWort,42
Leer,,"<-- war leer"
Mfg
FAlter

[edit] Torry hat nicht einmal eine Schleife genommen? Und was, wenn man schnell mal die Anzahl der Spalten ändern will? [/edit]
Felix Alter
  Mit Zitat antworten Zitat