我在paintbox里画了一条曲线,我想放大这条曲线,paintbox的大小固定。就是说显示区域是固定的,那我要怎么放大它呢?是不是要加滚动条呢?paintbox自身有没有放大的函数呢?请教!

解决方案 »

  1.   

    改变PaintBox的大小,然后绘制更大的曲线,要想出现滚动条,把PaintBox放到一个TScrollBox里面。
      

  2.   

    不改变paintbox的大小,实现曲线放大,求解
      

  3.   


    这样可以实现:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      B: TBitmap;
    begin
      B := TBitmap.Create;
      B.Width := PaintBox1.Width;
      B.Height := PaintBox1.Height;
      B.Canvas.CopyRect(B.Canvas.ClipRect, PaintBox1.Canvas, PaintBox1.Canvas.ClipRect);
      B.Width := B.Width div 2;
      B.Height := B.Height div 2;
      PaintBox1.Canvas.CopyRect(PaintBox1.Canvas.ClipRect, B.Canvas, B.Canvas.ClipRect);
      B.Free;
    end;
      

  4.   

    这样吧:(不过我的方法结果不平滑...应该不是好办法)
    procedure TForm1.Button1Click(Sender: TObject);
    var
      R: TRect;
    begin
      R := Rect(0,0,PaintBox1.Canvas.ClipRect.Right div 2, PaintBox1.Canvas.ClipRect.Bottom div 2);
      PaintBox1.Canvas.CopyRect(PaintBox1.Canvas.ClipRect, PaintBox1.Canvas, R);
    end;
      

  5.   

    建立一个类,把你的物件放到类里,并记录物件的属性,并记录rect,然后根据缩放系数来跟物件坐标属性运算得到新值,再在paintbox里画出来,有点麻烦,但可行,我就是那样实现的。
      

  6.   

    把这段代码加到你的onpaint里面试试var
      r:TRect;
      DC:HDC;
    begin   with pbox.Canvas do begin //pbox就是你那个paintbox
            DC:=Handle;
            SetMapMode(DC,MM_ISOTROPIC);
            r=pBox.ClientRect;
            SetWindowExtEx(DC,r.Right div 2,r.Bottom div 2,nil);
            //这里div2就是以前的2倍,div 3就是3倍,也可以在这里设置等大然后使用ScaleViewportExtEx进行调整,这样放大的时候曲线比较平滑
            SetViewportExtEx(DC,r.Right,r.Bottom,nil);
            //一下就是你的绘图代码了
             ....
            ....
       end;
    end;