不知你为什么想在BITMAP上显示LISTBOX,LISTBOX是一个控件,它实际上是一个子窗口。放在窗口上才是有作用的。
把LISTBOX图象复制到BITMAP上,可以把它画出来。但是,画出来LISTBOX并不能起到LISTBOX的作用。
我用IMAGE当做一个图片复制了一下。
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;type
  TForm1 = class(TForm)
    Image1: TImage;
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);begin
  image1.Canvas.CopyRect(image1.ClientRect,listbox1.Canvas,listbox1.ClientRect );
end;end.

解决方案 »

  1.   

    WM_PAINT是发给窗口的消息
    Bitmap是TBitmap类型
    向Bitmap发这种消息是没有用的
      

  2.   

    我的意思是将listbox(可以是任意的TWinControl)的外观画到canvas上,我想做一个Form Designer,您的代码没有边框,您看看,还有没有别的方法。
      

  3.   

    先画一个边框
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Rect : TRect;
    begin
      Image1.Canvas.Pen.Width := 1;
      Image1.Canvas.Pen.Color := clBlack;
      Image1.Canvas.Rectangle(Image1.ClientRect);
      Rect.Left := ListBox1.ClientRect.Left+1;
      Rect.Right := ListBox1.ClientRect.Right-1;
      Rect.Top := ListBox1.ClientRect.Top+1;
      Rect.Bottom := ListBox1.ClientRect.Bottom-1;
      Image1.Canvas.CopyRect(Rect,ListBox1.Canvas,ListBox1.ClientRect);
    end;
      

  4.   

    我看不如这样,
    运行时动态创建控件,干吗要自己画:)
    如果运行时要移动,改变一个控件的大小,DDHCode有一个控件可以实现
    如果要同时移动多个控件的话:(麻烦,DreamControl控件包可以实现
    可以做的和delphi的IDE很象.
      

  5.   

    easy,用tlistbox.paintto方法就可以了.