我在form1上画了一条直线
用lineto()画的
结果是如果窗口最小化后在打开就没有了
怎么回事?

解决方案 »

  1.   

    就是在Form1.OnShow的时候写重绘代码
      

  2.   

    在窗口的onpaint事件中重新画一遍 如:
    nit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormPaint(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      id : boolean = false;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      form1.Canvas.Pen.Color := clred;
      form1.canvas.MoveTo(20,20);
      form1.Canvas.LineTo(40,40);
      id := true;
    end;
    procedure TForm1.FormPaint(Sender: TObject);
    begin
      if id then
      begin
        form1.Canvas.Pen.Color := clred;
        form1.canvas.MoveTo(20,20);
        form1.Canvas.LineTo(40,40);
      end;
    end;end.
      

  3.   

    需要在Form的OnPaint事件中写,否则就不能及时刷新
      

  4.   

    实际你在窗体上加一个image,然后再在上面画就不会出现类似的问题。
      

  5.   

    所画做成函数,在onpaint中调用
      

  6.   

    你不知道要重画什么,就将所画的东西保存下来!用一个数据结构比如说:
    struct line
    {
      Point start;
      Point end;
    }
    以后找到它重画就行了
      

  7.   

    用一个TBitMap变量的Canvas一储存
      

  8.   

    在Bitmap.Canvas上画,在OnPaint事件中将其转到Form上!
      

  9.   

    当你最小化窗体打开时,系统会自动调用你的窗体重绘函数。
    如果没有自定义,则使用缺省函数。而在缺省函数中并没有你所需要的lineto()画直线,
    当然再打开窗体时先画的直线就没有了。上面大家讲的很清楚,自己试一下就知道了。