+ -
当前位置:首页 → 问答吧 → panel2移动后如何讲panel2的left值写进edit1里?

panel2移动后如何讲panel2的left值写进edit1里?

时间:2011-11-18

来源:互联网

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
  Panel1: TPanel;
  Panel2: TPanel;
  Edit1: TEdit;
  procedure Panel2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  procedure Panel2EndDrag(Sender, Target: TObject; X, Y: Integer);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{======================================================

任意摆布一个控件(拖动、放大、缩小)

=======================================================}
procedure ManipulateControl(WinControl: TWinControl; Shift: TShiftState; X, Y,
  Precision: integer);//Precision:精度,该方法可以在onmousemove中调用
var
  SC_MANIPULATE: Word;
begin
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//光标在控件的最左侧
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 if (X <=Precision) and (Y> Precision) and (Y <WinControl.Height-Precision)then
 begin
  SC_MANIPULATE := $F001;
  WinControl.Cursor := crSizeWE;
 end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//光标在控件的最右侧
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 else if (X >=WinControl.Width-Precision) and (Y> Precision) and
  (Y <WinControl.Height-Precision) then
  begin
  SC_MANIPULATE := $F002;
  WinControl.Cursor := crSizeWE;
  end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//光标在控件的最上侧
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 else if (X> Precision) and (X <WinControl.Width-Precision) and (Y <=Precision) then
 begin
  SC_MANIPULATE := $F003;
  WinControl.Cursor := crSizeNS;
 end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//光标在控件的左上角
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 else if (X <=Precision) and (Y <=Precision) then
 begin
  SC_MANIPULATE := $F004;
  WinControl.Cursor := crSizeNWSE;
 end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//光标在控件的右上角
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 else if (X >=WinControl.Width-Precision) and (Y <=Precision) then
 begin
  SC_MANIPULATE := $F005;
  WinControl.Cursor := crSizeNESW;
 end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//光标在控件的最下侧
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 else if (X> Precision) and (X <WinControl.Width-Precision) and
  (Y >=WinControl.Height-Precision) then
 begin
  SC_MANIPULATE := $F006;
  WinControl.Cursor := crSizeNS;
 end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//光标在控件的左下角
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 else if (X <=Precision) and (Y >=WinControl.Height-Precision) then
 begin
  SC_MANIPULATE := $F007;
  WinControl.Cursor := crSizeNESW;
 end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//光标在控件的右下角
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 else if (X >=WinControl.Width-Precision) and (Y >=WinControl.Height-Precision) then
 begin
  SC_MANIPULATE := $F008;
  WinControl.Cursor := crSizeNWSE;
 end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//光标在控件的客户区(移动整个控件)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 else if (X> 5) and (Y> 5) and (X <WinControl.Width-5) and (Y <WinControl.Height-5) then
 begin
  SC_MANIPULATE := $F009;
  WinControl.Cursor := crSizeAll;
 end
 else
 begin
 SC_MANIPULATE := $F000;
 WinControl.Cursor := crDefault;
 end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 if Shift=[ssLeft] then
 begin
  ReleaseCapture;
  WinControl.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);
 end;
end;

procedure TForm1.Panel2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  ManipulateControl((Sender as TPanel), Shift, X, Y, 10);
end;

procedure TForm1.Panel2EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
  edit1.text := inttostr(panel2.Left);
end;

end.
问题是如何实现panel2拖动后讲panel2的left值写进edit1里?

作者: aomiks   发布时间: 2011-11-18

edit1.text := inttostr(panel2.Left); ---> Panel2MouseMove

作者: sailxia   发布时间: 2011-11-18

热门下载

更多