Fórum Mudar cor de fundo da linha do ListBox #239265
23/06/2004
0
Gostaria de saber como faz para mudar a cor de fundo de um item num ListBox.
Por exemplo: Ao inserir um item, se for a linha zero do ListBox, mantem fundo branco; Se for a linha 1, troca para vermelho a cor de fundo APENAS DESTE ITEM; Se for a linha 2, mantém a cor de fundo em branco, e assim em diante alternando as cores.
Tem com ser feito isso?
Obrigado.
wbb
Wbb
Curtir tópico
+ 0Posts
23/06/2004
Minuto
talvez exista algum componente evoluido do listbox que faça isso.?!?!
Gostei + 0
23/06/2004
Minuto
Rect: TRect; State: TOwnerDrawState);
begin
with ListBox1, ListBox1.Canvas do
begin
if (odSelected in State) then
begin
Brush.Color:= clDkGray; //Cor quando estiver selecionado
Pen.Color:= clBlack;
DrawFocusRect(Rect);
end
else
begin
Brush.Color:= clLtGray;//Cor quando não estiver selecionado
Pen.Color:= clLtGray; //Coloque a mesma cor da linha de cima
end;
Rectangle(Rect);
TextOut(Rect.Left+1, Rect.Top+1, Items[Index]);
end;
end;
Gostei + 0
23/06/2004
Marcelo Saviski
[i:a12d4fc460][color=darkblue:a12d4fc460]procedure(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);[/color:a12d4fc460][/i:a12d4fc460]
faça um teste assim:
no evento OnDrawItem, adicione:
with TComboBox(Control) do begin if odSelected in State then begin Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText; end else if Odd(Index) then //se é um item ímpar begin Canvas.Brush.Color := clRed; Canvas.Font.Color := clWhite; end else begin Canvas.Brush.Color := clWhite; Canvas.Font.Color := clBlack; end; Canvas.Fill(Rect); Canvas.Brush.Style := bsClear; Canvas.TextOut(Rect.Left, Text.Top, Items[Index]); end;
com isso vc usa uma função sua para pintar os itns, da p/ fazer mais do que simplesmente deixar listrado, é só usar a criatividade
:!:
Gostei + 0
23/06/2004
Minuto
No evento OnDrawItem do ListBox coloque:
Código:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
ListBox1.Canvas.Brush.Color := clWhite;
ListBox1.Canvas.FillRect(Rect);
case Index of
// Aqui você escolhe a cor do texto para cada linha:
0: ListBox1.Canvas.Font.Color := clRed;
1: ListBox1.Canvas.Font.Color := clGreen;
2: ListBox1.Canvas.Font.Color := clBlue;
end;
ListBox1.Canvas.TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]);
end;
Mas antes você deve mudar a propriedade Style do ListBox para lbOwnerDrawVariable
Gostei + 0
23/06/2004
Wbb
Resolvi da seguinte maneira:
procedure Tform1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (Control as TListBox).Canvas do begin if Index mod 2 = 0 then begin Brush.Color := clBlue; Font.Color := clWhite; end; Brush.Style := bsSolid; FillRect(Rect); Brush.Style := bsClear; TextOut(Rect.Left, Rect.Top,(Control as TListBox).Items[Index]); end; end;
O código acima gera itens com suas cores de fundo alternadas entre branco e azul.
[b:2f62eeab9b][color=red:2f62eeab9b]IMPORTANTE[/color:2f62eeab9b][/b:2f62eeab9b]: Para fucionar é necessário que antes seja alterada a propriedade Style do ListBox para lbOwnerDrawFixed.
Valeu.
wbb
Gostei + 0
23/06/2004
Marcelo Saviski
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)