Fórum ListView Transparente...!!! #321477

16/05/2006

0

Pessoal, tenho q colocar uma imagem de fundo numa ListView, isto eu consigo fazer:
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

Lehapan

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:

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar