So, ich wollt's auch mal ausprobieren, komme aber nicht weiter. In der
MSDn steht geschrieben das man, um das Bk-Image zu verwenden den Default(Message)Handler aufrufen soll.
Delphi-Quellcode:
type
TfrmMain = class(TForm)
ListView1: TListView;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private-Deklarationen }
LVOldWndProc: TWndMethod;
procedure ListViewSetBKImage;
procedure LVWindowProc(var Msg: TMessage);
public
{ Public-Deklarationen }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
uses
ShellAPI, CommCtrl, ComObj;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
ListViewSetBKImage;
LVOldWndProc := ListView1.WindowProc;
ListView1.WindowProc := LVWindowProc;
end;
procedure TfrmMain.ListViewSetBKImage;
var
LVBkImg: TLVBkImage;
FFilename: String;
FTile: Boolean;
FXOffsetPercent,
FYOffsetPercent: Integer;
begin
FFilename := 'C:\Windows\Angler.bmp';
FTile := FALSE;
FXOffsetPercent := 0;
FYOffsetPercent := 0;
if assigned(ListView1) and ListView1.HandleAllocated then
begin
if FFilename <> '' then
LVBkImg.ulFlags := LVBKIF_SOURCE_URL
else
LVBkImg.ulFlags := LVBKIF_SOURCE_NONE;
if FTile then
LVBkImg.ulFlags := LVBkImg.ulFlags or LVBKIF_STYLE_TILE
else
LVBkImg.ulFlags := LVBkImg.ulFlags or LVBKIF_STYLE_NORMAL;
LVBkImg.hbm := 0; // Bitmap.Handle (HBitmap)
LVBkImg.pszImage := PChar(FFilename);
LVBkImg.cchImageMax := Length(FFilename);
LVBkImg.xOffsetPercent := FXOffsetPercent;
LVBkImg.yOffsetPercent := FYOffsetPercent;
ListView_SetBkImage(ListView1.Handle, @LVBkImg);
//ListView_SetBKColor(ListView1.Handle,CLR_NONE);
end;
end;
procedure TfrmMain.LVWindowProc(var Msg: TMessage);
begin
Case Msg.Msg of
WM_ERASEBKGND: DefaultHandler(Msg);
else LVOldWndProc(Msg);
end;
end;
In dem Listviewfenster wird nun überhaubt nichts gezeichnet.
Was habe ich falsch gemacht ?
Die selbe Frage gibt es (nun) auch hier:
DF