Und falls jemand die LMDTools hat und simplen
HTML-Formatierten Text ausgeben will, z.B. TeilStrings in anderer Farbe, dann könnte man das so machen:
Delphi-Quellcode:
uses StrUtils, SpTBXSkins, LMDHTMLUnit;
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;
FRender: TLMDHTMLRender;
begin
if PaintStage = pstPrePaint then begin
FRender := TLMDHTMLRender.Create;
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];
FRender.PrepareText(aStr[i], length(aStr[i]), False);
FRender.DrawText(ACanvas, Point(0, 0), rc, clNone);
// Trennlinie zwischen Spalten zeichnen
// ACanvas.MoveTo(rc.Right, rc.Top);
// ACanvas.LineTo(rc.Right, rc.Bottom);
end;
FRender.Free;
end;
end;
procedure TForm.Button1Click(Sender: TObject);
begin
with cb.Items do
begin
Add('<FONT face="Default" SIZE="13px" COLOR="#FF0000">first|second|third</FONT>'); // wird in roter Schrift angezeigt
Add('<FONT face="Default" SIZE="13px" COLOR="#0000FF">column1|column2|column3</FONT>'); // wird in blauer Schrift angezeigt
end;
end;
Das einzige Problem, was man hier noch hat ist, dass man beim normalen Zugriff auf Items dann auch den
HTML-Code mit dabei hat.