ListView Transparente...!!!

Delphi

16/05/2006

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

Curtidas 0

Respostas

Massuda

Massuda

16/05/2006

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.


GOSTEI 0
Lehapan

Lehapan

16/05/2006

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.


GOSTEI 0
POSTAR