Fórum ListView Transparente...!!! #321477
16/05/2006
0
Pessoal, tenho q colocar uma imagem de fundo numa ListView, isto eu consigo fazer:
Mas o meu problema é q o texto do meu item fica com a cor de fundo branca, ao invés de ficar invisivel, estou fazendo isto:
Onde está o erro?
procedure TForm1.ListView1CustomDraw(Sender: TCustomListView; const ARect: TRect; var DefaultDraw: Boolean); begin ListView1.Canvas.FillRect(ARect); ListView1.Canvas.Draw(ARect.Left, ARect.Top, Image3.Picture.Graphic ); end;
Mas o meu problema é q o texto do meu item fica com a cor de fundo branca, ao invés de ficar invisivel, estou fazendo isto:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
ARect: TRect;
PosLeftImg: integer;
begin
{ Texto }
ARect := Item.DisplayRect( drLabel);
ListView1.Canvas.FillRect( ARect );
ListView1.Canvas.Brush.Style := bsClear;
ListView1.Canvas.TextRect( ARect, ARect.Left + 2, ARect.Top + 2 , Item.Caption );
{ Imagem }
Item.ImageIndex := -1;
ARect := Item.DisplayRect( drIcon );
ListView1.Canvas.FillRect( ARect );
ListView1.Canvas.Brush.Style := bsClear;
PosLeftImg := Round( ((ARect.Right-ARect.Left) - imlstGeral.Width) / 2);
imlstGeral.Draw( ListView1.Canvas, ARect.Left + PosLeftImg , ARect.Top + 2, Item.Index + 70 );
end;
Onde está o erro?
Lehapan
Curtir tópico
+ 0
Responder
Posts
16/05/2006
Massuda
Acho que você não precisa chamar ListView1.Canvas.FillRect em TForm1.ListView1CustomDrawItem, pois a função disso é pintar o fundo da área do item com a cor de fundo do listview. Entretanto, talvez seja preciso pintar um pedaço do seu bitmap de fundo na área do item ao invés de usar o FillRect ou redesenhar o fundo antes de desenhar o item.
Responder
Gostei + 0
16/05/2006
Lehapan
Obrigado Massuda, mas mesmo retirando o FillRect não resolveu.
Troquei para o código abaixo e ainda não funciona:
Já tentei até colocar o ListView1.ControlStyle como csOpaque e mesmo assim não resolveu.
Troquei para o código abaixo e ainda não funciona:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var ARect: TRect; PosLeftImg: integer; begin // Texto ARect := Item.DisplayRect( drLabel); ListView1.Canvas.Brush.Style := bsClear; ListView1.Canvas.TextOut( ARect.Left + 2, ARect.Top + 2 , Item.Caption ); // Imagem Item.ImageIndex := -1; ARect := Item.DisplayRect( drIcon ); PosLeftImg := Round( ((ARect.Right-ARect.Left) - imlstGeral.Width) / 2); imlstGeral.Draw( ListView1.Canvas, ARect.Left + PosLeftImg , ARect.Top + 2, Item.Index + 70 ); end;
Já tentei até colocar o ListView1.ControlStyle como csOpaque e mesmo assim não resolveu.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)