Einzelnen Beitrag anzeigen

Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: ListView_SetBkImage funktioniert nicht mit VCL-Listview

  Alt 21. Mai 2006, 12:38
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
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat