i:=Form1.ClientRect.Right;
为什么赋值不行?
Form1.ClientRect.Right为600
赋值后,i为0
为什么???

解决方案 »

  1.   

    i:=Form1.ClientRect.Right;
    没错的
      

  2.   

    如果你的i在后面的代码中没有使用的话,
    那么就是被delphi自动优化掉了。
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
        ClientRect:TRect;
        i,n:integer;
    begin
        ClientRect:=Form1.ClientRect;//这个也不能赋值
        if (Bitmap <> nil)  then
        begin
            Bitmap.Free;
        end;
        Bitmap:=TBitmap.Create;
        i:=Form1.ClientRect.Right;//-Form1.ClientRect.Left;//不能赋值
        Bitmap.Width:=i;//不能赋值
        Bitmap.Height:=Form1.ClientRect.Bottom-Form1.ClientRect.Top;//不能赋值
        with Bitmap do
        begin
            Canvas.Brush.Color:=clBlack;
            Canvas.FillRect(Form1.ClientRect);
            Canvas.Pen.Color:=clRed;
            n:=5;
            n:=ClientRect.Bottom div 5;
            i:=0;
            while (i<ClientRect.Bottom) do
            begin
              Canvas.MoveTo(ClientRect.Left,i);
              Canvas.LineTo(ClientRect.Right,i);
              i:=i+n;
            end;
        end;
        Form1.Canvas.Draw(0,0,Bitmap);
    end;
      

  4.   

    你的错误出现在你对对象的概念理解不是很清楚,你这是TForm1类的成员函数,而里面引用的确实它的对象,如果你换一个变量名就找不到Form1这个对象了,当然没有复制了。
    改为:
    procedure TForm1.Button1Click(Sender: TObject);
    var
        ClientRect:TRect;
        i,n:integer;
    begin
        ClientRect:=ClientRect;//这个也不能赋值
        if (Bitmap <> nil)  then
        begin
            Bitmap.Free;
        end;
        Bitmap:=TBitmap.Create;
        i:=ClientRect.Right;//-Form1.ClientRect.Left;//不能赋值
        Bitmap.Width:=i;//不能赋值
        Bitmap.Height:=ClientRect.Bottom-ClientRect.Top;//不能赋值
        with Bitmap do
        begin
            Canvas.Brush.Color:=clBlack;
            Canvas.FillRect(ClientRect);
            Canvas.Pen.Color:=clRed;
            n:=5;
            n:=ClientRect.Bottom div 5;
            i:=0;
            while (i<ClientRect.Bottom) do
            begin
              Canvas.MoveTo(ClientRect.Left,i);
              Canvas.LineTo(ClientRect.Right,i);
              i:=i+n;
            end;
        end;
        Canvas.Draw(0,0,Bitmap);
    end;
      

  5.   

    如果你的i在后面的代码中没有使用的话,
    那么就是被delphi自动优化掉了。
    这是delphi的特性!!!!