Quase sempre precisei utilizar ComboBox com colunas, então eu até adotava alguns meios de adicioná-las em eventos "Draw" do Combobox, mas contece que eu queria ir mais além daquelas colunas estranhas. Eu gostaria de inserir dados com letras em negrito, cores de fundo ecolunas bem mais alinhadas. Foi pesquisando que achei o componente TColumnComboBox.
Com ele é possível colocar cores e adicionar quantas colunas forem precisas em seu Combo.
Ele pode ficar mais ou menos com o estilo abaixo:







Esse é um combo que utilizo em meu sistema.
Eu estou buscando essas informações pela minha base de Dados, mas nada impede de você inserir seus dados fixos.
Nós podemos inserir um código para identificar o registro que queremos trabalhar. Isso fica muito mais visível para o usuário que utiliza o sistema e mais "fácil" para quem esta implementando.

INSTALAÇÃO

O TColumnComboBox é feito pela empresa TMS Software.
Para fazer o download do TColumComboBox, acesse a seguinte URL:
http://www.tmssoftware.com/site/colcombo.asp

A instalação é bem parecida com o FreeBoleto, que é um componente que eu ensino como instalá-lo aqui no meu Blog.


FUNCIONAMENTO DO TCOLUMNCOMBOBOX

O TColumnComboBox não possui a propriedade Items como estamos acostumados a utilizar em um ComboBox comum.
Para adicionar os dados, utilizaremos as propriedades Columns e ComboItems.
Na propriedade Columns, adicionamos a quantidade e título das colunas que quizermos e em comboItens, adicionamos as linhas do TColumComboBox.

Nesse post, ensinarei como inserir os valores em modo de Execução e além de criar o Combo, criaremos uma procedure que amplia a largura do ComboBox quando ele é clicado.

Segue abaixo o código da criação dos items do TColumnComboBox:

var
//Cria um objeto do tipo TColumnComboBox
C: TColumnComboBox;
begin
//Faz referencia a classe
C := TColumnComboBox.Create(Self);

with C do
begin
Parent := Panel1;
Name := 'cmbFormaPagto';
Left := 10;
Top := 10;
Visible := true;
CharCase := ecUpperCase;
AutoSize := true;
//Inserimos uma função no evento ondropdown do ComboBox, para assim que
//Clicar no ComboBox, a largura seja ampliada.
OnDropDown := ExpandirComboFormaPagto;

//Cria a primeira coluna
with Columns.Add do
begin
Width:=25;
Font.Style:=[fsBold];
Color := clRed;
end;

//Cria a segunda coluna
with Columns.Add do
begin
Width:=220;
end;

//Cria a terceira coluna
with Columns.Add do
begin
Width:=220;
Font.Color:=clBlue;
Font.Style:=[fsBold];
Color := $00D1FCDC;
end;

//Adciona os itens aos combobox
with ComboItems.Add do
begin
Strings.Add('1');
Strings.Add('Primeiro item');
Strings.Add(' Descrição 1');
end;

with ComboItems.Add do
begin
Strings.Add(2');
Strings.Add('Segundo item');
Strings.Add(' Descrição 2');
end;

end;
end;

Segue abaixo o código da procedure para apliar a largura do ComboBox:

begin
//Aqui decidimos a largura do ComboBox para 500, mas você pode mudar a largura que quiser.
TComboBox(Sender).Perform(CB_SETDROPPEDWIDTH, 500, 0);
end;

Não deixem de visitar meu Blog: http://devutils.blogspot.com

Beleza pessoal?
See ya guys ;)