whats new ¦  programming tips ¦  indy articles ¦  intraweb articles ¦  informations ¦  links ¦  interviews
 misc ¦  tutorials ¦  Add&Win Game

Tips (1541)

Database (90)
Files (137)
Forms (107)
Graphic (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Math (76)
Misc (126)
Multimedia (45)
Objects/
ActiveX (51)

OpenTools API (3)
Printing (35)
Strings (83)
System (266)
VCL (242)

Top15

Tips sort by
component


Search Tip

Add new Tip

Add&Win Game

Advertising

13 Visitors Online


 
...display several columns in a TComboBox?
Autor: Andreas Rumsch
Homepage: http://www.ardesign.ch
[ Print tip ]  

Tip Rating (29):  
     




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;


 

Rate this tip:

poor
very good


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners