CheckListBox com Itens Coloridos.

Delphi

04/12/2003

Alguém conhece um componente CheckListBox com a característica de mudar a cor dos itens conforme uma determinada condição?

valeu


Adriano Santos

Adriano Santos

Curtidas 0

Respostas

Thiago Vidal

Thiago Vidal

04/12/2003

Voce pode usar o próprio CheckListBox que vem com o Delphi para fazer isso. Para isso, defina a propriedade Style para lbOwnerDrawFixed e implemente o seguinte código:

no evento OnDrawItem:
procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TCheckListBox) do begin
if Checked[Index] then
Canvas.Font.Color := clRed
else begin
if Selected[Index] then
Canvas.Font.Color := clWhite
else
Canvas.Font.Color := clBlack;
end;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left, Rect.Top, (Control as TCheckListBox).Items[Index]);
end;
end;

Voce vai reparar que ao selecionar outro item ele mantera a cor branca do item antigo e portanto o tornara invisível, para evitar isso, chame o método CheckListBox1.Invalidate nos eventos OnClick e OnKeyDown


GOSTEI 0
Adriano Santos

Adriano Santos

04/12/2003

Já havia feito esta pergunta aqui, mas nínguem havia respondido.

valeu


GOSTEI 0
Dpinho

Dpinho

04/12/2003

ficou legal esta dica, mas estou inializando os itens de uma tabela e gostaria que ficasse com a cor vermleha os itens que não estivesse checado, nesta dica so fica com cor diferente se clicar no Checklistbox
como fazer ??


GOSTEI 0
Adriano Santos

Adriano Santos

04/12/2003

ficou legal esta dica, mas estou inializando os itens de uma tabela e gostaria que ficasse com a cor vermleha os itens que não estivesse checado, nesta dica so fica com cor diferente se clicar no Checklistbox como fazer ??


Cara, to no Linux agora e fora do Delphi. Vou tentar de dar um help aqui sem testar de fato. Se nao funcionar vc me chama.

Basta dar uma alteradinha de nada no evento.

procedure TForm1.CheckListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TCheckListBox) do 
  begin
    //aqui testa se está checado e muda pra vermelho, se nao para black
    if Checked[Index] then
      Canvas.Font.Color := clRed
    else
      Canvas.Font.Color := clBlack;

    //aqui testa se está selecionado e muda pra branco, se nao para black   
    if Selected[Index] then
      Canvas.Font.Color := clWhite
    else
      Canvas.Font.Color := clBlack;

    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left, Rect.Top, (Control as TCheckListBox).Items[Index]);
  end;
end;



GOSTEI 0
POSTAR