TChart显示的区域,在用鼠标拉框后,会放大缩小,如何用代码实现这一功能?

解决方案 »

  1.   

    //任意摆布一个控件(拖动、放大、缩小)******************************************
    procedure ManipulateControl(Control: TControl; Shift: TShiftState; X, Y, Precision: Integer);
    var
      SC_MANIPULATE: Word;
    begin
      //光标在控件的最左侧**********************************************************
      if (X <= Precision) and (Y > Precision) and (Y < Control.Height - Precision) then
      begin
        SC_MANIPULATE := $F001;
        Control.Cursor := crSizeWE;
      end
        //光标在控件的最右侧**********************************************************
      else if (X >= Control.Width - Precision) and (Y > Precision) and (Y < Control.Height - Precision) then
      begin
        SC_MANIPULATE := $F002;
        Control.Cursor := crSizeWE;
      end
        //光标在控件的最上侧**********************************************************
      else if (X > Precision) and (X < Control.Width - Precision) and (Y <= Precision) then
      begin
        SC_MANIPULATE := $F003;
        Control.Cursor := crSizeNS;
      end
        //光标在控件的左上角**********************************************************
      else if (X <= Precision) and (Y <= Precision) then
      begin
        SC_MANIPULATE := $F004;
        Control.Cursor := crSizeNWSE;
      end
        //光标在控件的右上角**********************************************************
      else if (X >= Control.Width - Precision) and (Y <= Precision) then
      begin
        SC_MANIPULATE := $F005;
        Control.Cursor := crSizeNESW;
      end
        //光标在控件的最下侧**********************************************************
      else if (X > Precision) and (X < Control.Width - Precision) and (Y >= Control.Height - Precision) then
      begin
        SC_MANIPULATE := $F006;
        Control.Cursor := crSizeNS;
      end
        //光标在控件的左下角**********************************************************
      else if (X <= Precision) and (Y >= Control.Height - Precision) then
      begin
        SC_MANIPULATE := $F007;
        Control.Cursor := crSizeNESW;
      end
        //光标在控件的右下角**********************************************************
      else if (X >= Control.Width - Precision) and (Y >= Control.Height - Precision) then
      begin
        SC_MANIPULATE := $F008;
        Control.Cursor := crSizeNWSE;
      end
        //光标在控件的客户区(移动整个控件)******************************************
      else if (X > 5) and (Y > 5) and (X < Control.Width - 5) and (Y < Control.Height - 5) then
      begin
        SC_MANIPULATE := $F009;
        Control.Cursor := crSizeAll;
      end else
      begin
        SC_MANIPULATE := $F000;
        Control.Cursor := crDefault;
      end;
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      if Shift = [ssLeft] then
      begin
        ReleaseCapture;
        Control.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);
      end;
    end;procedure TForm1.cht1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      ManipulateControl((Sender as TControl), Shift, X, Y, 10);
    end;
      

  2.   

    procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
    ManipulateControl((Sender as TControl), Shift, X, Y, 10);
    end;
    请教一下四楼,为什么放大或缩小的时候,不会显示放大缩小的图标呢?
    如果换成按钮就能正常显示放大和缩小的图标?
      

  3.   

    谢谢你的回答,你的这个功能我试了一下,好像是整个图表的移动,我是想实现如何让chart上的曲线的放大缩小,定点,等,这应该如何实现呢