一、Button1中的self就是窗体Form1
它与下面代码等效:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Canvas.Pen.Color:=clRed;
  Form1.Canvas.Pen.Width:=20;
  Form1.Canvas.MoveTo(100,100);
  Form1.Canvas.LineTo(200,200);
end;
二、button2中,创建了Cas后,通过cas.Handle:=wnd,Cas实际上操作Self.Canvas。它作用与Button1等效。三、
var title:pchar; 
begin
   title:='Form6'; 
   wnd:=findwindow(nil,title); 
应该能搜索到的。但是当操作系统里的软件,窗体在同名时,会搜索到不是你要的。
建议使用,wnd:=findwindow('TForm6',title);
 
 

解决方案 »

  1.   

    Canvas.Hanlde是设备场景,是HDC,你的Form的Handle是这个窗体的标识。如果要在窗体上绘画,需要先通过窗体标识找到设备场景,比如GetDC(Form.Handle),使用完了之后记得释放DC,Canvas.Handle存放的就是一个设备场景,这个VCL代码中都有的
      

  2.   

    procedure TForm6.Button2Click(Sender: TObject);
    var
    cas:TCanvas;
    wnd:Hwnd;
    //title:pchar;
    begin
    //title:='Form6';
    //wnd:=findwindow(nil,title);
    wnd:=self.Canvas.Handle;  ////////self指的就是窗体啊,