procedure TForm1.FormPaint(Sender: TObject);
var
  cav:TCanvas;
  bmp:TBitMap;
  h:Thandle;
begin
  h:=findwindow(nil,'Form1');
  cav:=TCanvas.Create;
  Cav.handle := GetDC(h);//获取指定窗口的设备场景
  bmp:=TBitMap.Create;
  bmp.LoadFromFile('c:\1.bmp');
  cav.Draw(0,0,bmp);
  ReleaseDC(0,Self.Handle);
end;

解决方案 »

  1.   

    var
      cav:TCanvas;
      bmp:TBitMap;
    begin
      cav:=TCanvas.Create;
      Cav.handle := GetDC(0);//获取屏幕的设备场景
      bmp:=TBitMap.Create;
      bmp.LoadFromFile('E:\1.bmp');
      cav.Draw(0,0,bmp);
      ReleaseDC(0,Self.Handle);//释放获取的指定设备场景
    end;我用这个试了, 没有问题,系统会自动刷新呀
      

  2.   

    问题是我不的不到FORM 只知道窗体的 Handle !
    我想了另外一个办法,就是能将Image控件贴到该窗体上, 只知道窗体的 Handle ,我该怎么做呢?
    谢谢!!
      

  3.   

    使用SetWindowLong设置你得到Handle的窗口的处理过程,然后对OnPaint消息进行处理,最后再调用系统默认处理程序。开始OldWindowProc := Pointer(SetWindowLong(FormMain.Handle,
                                              GWL_WNDPROC,
                                              longint(@NewWindowProc)));
    NewWindowProc最后要  Result := CallWindowProc(OldWindowProc,
                            WindowHandle,
                            TheMessage,
                            ParamW,
                            ParamL);
    程序退出前要  SetWindowLong(FormMain.Handle,
                    GWL_WNDPROC,
                    longint(OldWindowProc));
      

  4.   

    如果想要该窗口立即重画可以调用函数RedrawWindow函数,但窗口随后会进行
    自己画,你的效果无法实现。除非象“虫洞”所说的那样接管WM_PAINT消息。
      

  5.   

    谢谢两位,
    我还有问题
    那如果 将Image控件贴到该窗体上, 只知道窗体的 Handle
    我又将如何做呢?
    谢谢,只好给个例子
      

  6.   

    如果要把你的控件放到别的Form上可采用如下代码;
    ::SetParent(Button1->Handle,你的Form->Handle);
    我已经试过了,有效.问题时TImage控件从TGraphicControl继承而来,它没有Window Handle,
    所以无法调用::SetParent函数.
      看来得找一个能显示图像的扩展Panel,你的目的才能达到.这样的控件网上很多你自己找一下,要是找不到说一声,我发给你.