Mudar cor de fundo da linha do ListBox
Olá!
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
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
Curtidas 0
Respostas
Minuto
23/06/2004
Amigo que eu saiba, o listbox tem cor única para fazer isso use um grid
talvez exista algum componente evoluido do listbox que faça isso.?!?!
talvez exista algum componente evoluido do listbox que faça isso.?!?!
GOSTEI 0
Minuto
23/06/2004
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
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;
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
Marcelo Saviski
23/06/2004
Use o o evento OnDrawItem deste componentes para conseguir o efeito desejado
[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:
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
:!:
[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
Minuto
23/06/2004
Desculpe postei o código errado
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
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
Wbb
23/06/2004
Obrigado pessoal!
Resolvi da seguinte maneira:
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
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
Marcelo Saviski
23/06/2004
Ótimo, para quem quiser diferenciar o Item selecionado, pode verificar se: [color=darkblue:7aff823126] odSelected in State [/color:7aff823126], e selecionar uma cor diferente, como nos códigos acima
GOSTEI 0