Solved

# TListView background

Posted on 2004-11-08
441 Views
Hy,

I need a TListView with a bitmap background. I write a code that use OnCustomDraw and show me the bitmaped background. But my problem appear when scroll. When scroll up or down the listview content the bitmaped is scroll too.

How can I have a ListView with bitmaped background but fixed? When scroll the items the background to stay fixed.

0
Question by:ginsonic

LVL 14

Expert Comment

I suppose you did something like this?

procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean);
var DestRect, SrcRect : TRect;
begin
DestRect := Rect(0,0,ListView1.width, Listview1.Height);
SrcRect := Rect(0,0,Image1.Width,Image1.Height);
ListView1.Canvas.CopyRect(DestRect,image1.picture.Bitmap.Canvas, SrcRect);
end;
0

LVL 14

Expert Comment

Or maybe you should just migrate to Virtual TreeView by Mike Lischke http://www.soft-gems.net/VirtualTreeview/VT.php
0

LVL 9

Author Comment

Don't wish to use 3th part. I need a ListView to create a combo for my own combobox vcl.
0

LVL 14

Expert Comment

can you post some code on how you did your background painting?
0

LVL 12

Expert Comment

when drawing just count in the Scrollbars position and offset the drawing rect
0

LVL 9

Author Comment

procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean);
begin
Self.Canvas.Draw(0,0,MyImage);
....
end;
0

LVL 9

Author Comment

I will try to play with ARect. Maybe ... !?!?!
0

LVL 2

Expert Comment

Hi qinsonic,

I spent some time on this a while ago and even succeded to some extent, but  sorry to say that custom backgound in TListView is impossible without a flicker. You can use a component by Mike Lischke mentioned above or CoolBreeze by Jim Kueneman at mustangpeak.com (depending on what you need)

Regards,
odissey1
0

LVL 22

Expert Comment

Hello

If you look at Delphi Demos you will see how to do that for TTreeView and it's the same with TListView

procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean);
var
Bitmap : TBitmap;
begin
Bitmap := TBitmap.Create;
Listview1.Canvas.Brush.Bitmap := Bitmap;
ListView1.Canvas.StretchDraw(ARect,Bitmap);
end;

Another way by sending LVM_SETBKIMAGE, it's the best one I found for putting the image as background for the TListView
http://edit.coders-corner.com/faq/f670.shtml

Regards,
Mohammed
0

LVL 9

Author Comment

I can draw a bitmap and I can do that without flickering. My problem is that when I scroll the items ( you can add enough items to get a HScrollBar and set it to vsReport ) the bitmap is scrolled too. I wish to have a fixed image as background and to scroll just the items.
0

LVL 9

Author Comment

Look like can't be done in ListView so I go to ListBox. Somebody can help me with:

http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_21211633.html

I offer these points for an answer, too.
0

LVL 2

Expert Comment

Hi qinsonic,

as I mentioned above, only solution I know is a freware CoolBreeze by J.Kueneman (mustangpeak.net). Basically, this is a TListview with all extended features you asked.

regards,
odissey1
0

LVL 12

Expert Comment

it's actually a TVirtualTreeView with the stuff that a TListView has
0

LVL 9

Author Comment

Yap, still wish to use just TListView! I thinking to go to rewrite WM_Paint . I success to do this on DBGrid. (I intend to add a background to all my used VCL)
0

LVL 2

Expert Comment

To CetusMOD,

I don't see why to delete a post instead of PAQ. I think qinsonic received an exact unswer from the beginning: TListView by M$and background are not going along well (Sorry to add that WindowsExplorer doesn't uses same TListView which distributed by M$ to the outer world). Solution was provided also: CoolBreeze freware set by J. Kueneman which is a native VCL and probably the only way to add a bkgr to ListView.

I suggest to PAQ so other folks can see problem with TListView and possible solution too.

Regards,
odissey1
0

LVL 9

Author Comment

For odissey1: my answer then was that I can draw to Listview background with no flickering.
8<
I spent some time on this a while ago and even succeded to some extent, but  sorry to say that custom backgound in TListView is impossible without a flicker. You can use a component by Mike Lischke mentioned above or CoolBreeze by Jim Kueneman at mustangpeak.com (depending on what you need)
>8

And by the way I made big steps overriding WM_Paint.
0

LVL 9

Author Comment

And how a say already, don't wish to use 3th party licenses because I intend to use inside my own component.
0

Accepted Solution

Closed, 500 points refunded.
ee_ai_construct (replacement part #xm34)
0

## Featured Post

Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

#### Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!