Mega Code Archive

 
Categories / Delphi / VCL
 

How to display several columns in a TComboBox

Title: How to display several columns in a TComboBox procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var strVal, strAll: string; pos1, pos2: Integer; rc: TRect; arrWidth: array [0..3] of Integer; begin Combobox1.Canvas.Brush.Style := bsSolid; Combobox1.Canvas.FillRect(Rect); // Die einzelnen Spalten m¨¹ssen durch ';' getrennt sein // the columns must be separated by ';' strAll := Combobox1.Items[Index]; arrWidth[0] := 0; arrWidth[1] := 100; // Width of column 1 arrWidth[2] := 200; // Width of column 2 arrWidth[3] := 300; // Width of colimn 3 // Zeichenbereich f¨¹r erste Spalte // Drawingrange for first column rc.Left := Rect.Left + arrWidth[0] + 2; rc.Right := Rect.Left + arrWidth[1] - 2; rc.Top := Rect.Top; rc.Bottom := Rect.Bottom; // Text f¨¹r erste Spalte ausfiltern // Get text for first column pos1 := Pos(';', strAll); strVal := Copy(strAll, 1, pos1 - 1); // Text ausgeben // Draw Text Combobox1.Canvas.TextRect(rc, rc.Left, rc.Top, strVal); // Trennlinie zwischen Spalten zeichnen // Draw separating line betwenn columns Combobox1.Canvas.MoveTo(rc.Right, rc.Top); Combobox1.Canvas.LineTo(rc.Right, rc.Bottom); // Zeichenbereich f¨¹r zweite Spalte // Drawingrange for second column rc.Left := Rect.Left + arrWidth[1] + 2; rc.Right := Rect.Left + arrWidth[2] - 2; // Text f¨¹r zweite Spalte ausfiltern // Get text for second column strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1); pos1 := Pos(';', strAll); strVal := Copy(strAll, 1, pos1 - 1); // Text ausgeben // Draw Text Combobox1.Canvas.TextRect(rc, rc.Left, rc.Top, strVal); // Trennlinie zwischen Spalten zeichnen // Draw separating line betwenn columns Combobox1.Canvas.MoveTo(rc.Right, rc.Top); Combobox1.Canvas.LineTo(rc.Right, rc.Bottom); // Zeichenbereich f¨¹r dritte Spalte // Drawingrange for third column rc.Left := Rect.Left + arrWidth[2] + 2; rc.Right := Rect.Left + arrWidth[3] - 2; // Text f¨¹r dritte Spalte ausfiltern // Get text for third column strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1); pos1 := Pos(';', strAll); strVal := Copy(strAll, 1, pos1 - 1); // Text ausgeben // Draw Text Combobox1.Canvas.TextRect(rc, rc.Left, rc.Top, strVal); // Trennlinie zwischen Spalten zeichnen // Draw separating line betwenn columns Combobox1.Canvas.MoveTo(rc.Right, rc.Top); Combobox1.Canvas.LineTo(rc.Right, rc.Bottom); strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1); end; // Example/ Beispiel: procedure TForm1.Button1Click(Sender: TObject); begin with Combobox1.Items do begin Add('first;second;third;'); Add('column1;column2;column3;'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin //Oder im Objekt Inspektor einstellen //Or set this Property in the Object Inspector Combobox1.Style := csOwnerDrawFixed; end;