Falls das jemand mal braucht... Einige Zeilen stammen von
hier.
Delphi-Quellcode:
uses StrUtils, SpTBXSkins;
procedure TForm.cbDrawItem(Sender: TObject; ACanvas: TCanvas; var ARect: TRect; Index: Integer;
const State: TOwnerDrawState; const PaintStage: TSpTBXPaintStage; var PaintDefault: Boolean);
var
rc: TRect;
arrWidth: array [0 .. 2] of Integer;
aStr: TStringDynArray;
i: Integer;
xLeft: Integer;
Flags: Integer;
begin
if PaintStage = pstPrePaint then begin
ACanvas.Brush.Style := bsSolid;
PaintDefault := False;
Flags := DrawTextBiDiModeFlags(DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX);
// Die einzelnen Spalten müssen durch '|' getrennt sein
aStr := SplitString(TSpTBXComboBox(Sender).Items[Index], '|');
// Die einzelnen Spaltenbreiten, hier sind es drei Spalten
arrWidth[0] := 30; // Width of column 1
arrWidth[1] := 120; // Width of column 2
arrWidth[2] := 70; // Width of colimn 3
rc.Top := ARect.Top;
rc.Bottom := ARect.Bottom;
xLeft := 0;
for i := Low(aStr) to High(aStr) do begin
rc.Left := ARect.Left + xLeft + 2;
rc.Right := xLeft + arrWidth[i] - 2;
xLeft := xLeft + arrWidth[i];
SpDrawXPText(ACanvas, aStr[i], rc, Flags);
// Trennlinie zwischen Spalten zeichnen
// ACanvas.MoveTo(rc.Right, rc.Top);
// ACanvas.LineTo(rc.Right, rc.Bottom);
end;
end;
end;
procedure TForm.Button1Click(Sender: TObject);
begin
with cb.Items do
begin
Add('first|second|third;');
Add('column1|column2|column3;');
end;
end;
Einige Prüfungen fehlen hier noch, die kann dann ja jeder selbst noch hinzufügen, z.B. wenn mehr Spalten in cb.Add() hinzugefügt wurden, als im Code mit arrWidth angegeben.