Olá galera, vamos a esta Quick Tip, que tem a função mostrar como podemos exibir um item do TCombobox em mais de uma linha.

Vamos lá, para isso precisamos obviamente ter um TCombobox no nosso formulário, em seguida vamos dar uses em ExtCtrls.

Vamos precisar acessar dois eventos do nosso combobox o primeiro é o onMeasureItem, e o segundo é o onDrawItem.


procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index: Integer;
  var Height: Integer);
var
  ItemString: string;
  MyRect: TRect;
  MyImage: TImage;
  MyCombo: TComboBox;
begin
  if (Index > -1) then
  begin
    MyCombo := TComboBox(Control);
    MyImage := TImage.Create(MyCombo);
    try
      MyRect := MyCombo.ClientRect;
      ItemString := MyCombo.Items.Strings[Index];
      MyImage.Canvas.Font := MyCombo.Font;
      Height := DrawText(MyImage.Canvas.Handle, PChar(ItemString), - 1, MyRect, DT_CALCRECT or DT_WORDBREAK);
    finally
      MyImage.Free;
    end;
  end;
end;
Listagem 1. Desenhando o multi-line

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  ItemString: string;
begin
  TComboBox(Control).Canvas.FillRect(Rect);
  ItemString := TComboBox(Control).Items.Strings[Index];
  DrawText(TComboBox(Control).Canvas.Handle, PChar(ItemString), - 1, Rect, DT_WORDBREAK);
end;
Listagem 2. Pintando o texto no formato das linhas
Resultado
Resultado