新建一窗体,要在新建窗体显示时显示在其上画出的图形,下面代码不能显示图形,
只有在窗体显示后才能在其上画图形,怎样才能实现在窗体显示时也显示图形?
procedure TForm1.Button2Click(Sender: TObject);
begin
    Form2:=TForm.Create(nil);
    Form2.Left:=Left+5;
    Form2.Top:=Top+5;
    Form2.Width:=Width;
    Form2.Height:=Height;
    Form2.Canvas.MoveTo(10,10);
    Form2.Canvas.LineTo(200,10);
    Form2.Canvas.LineTo(200,200);
    Form2.Canvas.LineTo(10,200);
    Form2.Canvas.LineTo(10,10);
    Form2.Canvas.Arc(100,100,200,200,100,150,200,150);
    Form2.Canvas.Arc(100,100,200,200,200,150,100,150);
    Form2.Show;
end;

解决方案 »

  1.   

    procedure TForm1.Button2Click(Sender: TObject);
    begin
        Form2:=TForm.Create(nil);
        Form2.Left:=Left+5;
        Form2.Top:=Top+5;
        Form2.Width:=Width;
        Form2.Height:=Height;
        Form2.Show; //这一句放上来
        Form2.Canvas.MoveTo(10,10);
        Form2.Canvas.LineTo(200,10);
        Form2.Canvas.LineTo(200,200);
        Form2.Canvas.LineTo(10,200);
        Form2.Canvas.LineTo(10,10);
        Form2.Canvas.Arc(100,100,200,200,100,150,200,150);
        Form2.Canvas.Arc(100,100,200,200,200,150,100,150);    
    end;
      

  2.   

    谢谢楼上的,呵呵,没想到这样可以解决!
    我本来的问题是:要做一个透明窗体Form2,在其上只显示画出的图形,原想可能是窗体显示时图形没显示的原因,这样做好像也不行,谁能帮我解决再加50分。
    procedure TForm1.Button2Click(Sender: TObject);
    begin
        Form2:=TForm.Create(nil);
        Form2.BorderStyle:=bsNone;
        Form2.BorderIcons:=[];
        Form2.Color:=clRed;
        Form2.Left:=Left;
        Form2.Top:=Top;
        Form2.Width:=Width;
        Form2.Height:=Height;
        BeginPath(Form2.Canvas.Handle);
        SetBkMode(Form2.Canvas.Handle,TRANSPARENT);
        Form2.Canvas.Pen.Color :=clRed;
        Form2.Canvas.Pen.Width :=3;
        Form2.Canvas.MoveTo(10,10);
        Form2.Canvas.LineTo(200,10);
        Form2.Canvas.LineTo(200,200);
        Form2.Canvas.LineTo(10,200);
        Form2.Canvas.LineTo(10,10);
        Form2.Canvas.Arc(100,100,200,200,100,150,200,150);
        Form2.Canvas.Arc(100,100,200,200,200,150,100,150);
        EndPath(Form2.Canvas.Handle);
        SetWindowRgn(Form2.Handle,PathToRegion(Form2.Canvas.Handle),true);
        Windows.SetParent(Form2.Handle,Handle);
        Form2.Show;
    end;
      

  3.   

    要做一个透明窗体Form2,在其上只显示画出的图形如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var form2:tform;
    begin
        Form2:=TForm.Create(nil);
        Form2.Brush.Style:=bsClear;
        Form2.BorderStyle:=bsNone;
        Form2.Left:=Left+5;
        Form2.Top:=Top+5;
        Form2.Width:=Width;
        Form2.Height:=Height;
        Form2.Show; //这一句放上来
        Form2.Canvas.MoveTo(10,10);
        Form2.Canvas.LineTo(200,10);
        Form2.Canvas.LineTo(200,200);
        Form2.Canvas.LineTo(10,200);
        Form2.Canvas.LineTo(10,10);
        Form2.Canvas.Arc(100,100,200,200,100,150,200,150);
        Form2.Canvas.Arc(100,100,200,200,200,150,100,150);
    end;
      

  4.   

    谢谢楼上的,我的Form1窗口中有视频显示,要不断更新的,用你的方法可以做到Form2透明,但视频图像就没有更新了。如用制作不规则窗体的方法要怎么实现?
      

  5.   

    这里有创建椭圆窗体的一段代码procedure TFrmMain.FormCreate(Sender: TObject);varrgn:HRGN;beginrgn:=CreateEllipticRgn(0,0,150,150);SetWindowRgn(self.Handle, rgn, true);end;更一般的用CreatePolygonRgn代替CreateEllipticRgn就可以做出任意形状的窗体了