![]() |
TSpTBXComboBox mit Spalten
Falls das jemand mal braucht... Einige Zeilen stammen von
![]()
Delphi-Quellcode:
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.
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; |
AW: TSpTBXComboBox mit Spalten
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:
Das einzige Problem, was man hier noch hat ist, dass man beim normalen Zugriff auf Items dann auch den HTML-Code mit dabei hat.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz