Delphi程序设计中的鼠标控制(2)
procedure FormCreate(Sender:TObject);
procedure FormMouseDown(Sender:TObject;Buttom:TMouseButton; Shift:TShiftState;X,Y:Integer);
procedure FormMouseUp(Sender:TObject;Buttom:TMouseButton; Shift:TShiftState;X,Y:Integer); private
{Private declarations} public
{Public declarations} end; var
Form1:TForm1;
implementation {$R *.DFM} var
Canvas:TCanvas; Flag:Boolean;
procedure TForm1.FormCreate(Sender:TObject); begin
Flag:=False; end;
procedure TForm1.FormMouseDown(Sender:TObject;Buttom:TMouseButton; Shift:TShiftState;X,Y:Integer); begin
if Flag=False Then begin
Canvas.MoveTo(X,Y); Flag:=Ture; end else
Flag:=false; end;
procedure TForm1.FormMouseUp(Sender:TObject;Buttom:TMouseButton; Shift:TShiftState;X,Y:Integer); begin
if Flag=Ture Then begin
Canvas.Pen.Color:=clBlack; Canvas.LineTo(X,Y); end; end;
end.
两种方式实现拖曳:用七个事件分裂成两种方法(七武器) //第一种:onmousedown,onmouseup,onmousemove
//第二种:OnStartDrag,OnEndDrag,OnDragDrop,OnDragOver
第一种:onmousedown,onmouseup,onmousemove {
2008-06-28 20:00
onmousedown,onmouseup和onmousemove
delphi下如何实现动态对象的拖拽
昨天上午写了一个小程序,模仿delphi设计阶段组件的拖拽,实现了动态创建对象的拖拽。 首先动态创建三个TLabel对象,并且保存到TList中,分别设置他们的onmousedown,onmouseup和onmousemove事件。 } type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject); private
{ Private declarations }
lstMyRect : TList; //类似于控件数组 Flag_Dragging : boolean;
StartPoint, LastPoint : TPoint; //记录鼠标按下的点和移动后的点 NowRect : TRect; //组件对象的边框 procedure PrepareToMove(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Moving(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure MoveEnd(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); public
{ Public declarations } end;
procedure TForm1.FormCreate(Sender: TObject); var
s : string; i : integer;
TempLabel : TLabel; begin
Flag_Dragging := False;
lstMyRect := TList.Create; //动态创建TLabel对象,并保存 for i := 0 to 2 do begin
tempLabel := TLabel.Create(Sender as TForm); tempLabel.Caption := 'i love you'; tempLabel.Top := 100 + i * 50; tempLabel.Left := 100 + i * 50; tempLabel.Parent := Form1;
tempLabel.OnMouseDown := PrepareToMove; //设置三个事件 tempLabel.OnMouseMove := Moving; tempLabel.OnMouseUp := MoveEnd; lstMyRect.Add(tempLabel); end; end;
{当鼠标按下时,记录下开始点,并得到组件对象的边框,在移动的时候给用户以参照,并且把该边框画出}
procedure TForm1.PrepareToMove(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var
TmpLabel : TLabel; begin
TmpLabel := Sender as TLabel; Flag_Dragging := True; StartPoint := Point(X, Y); LastPoint := Point(X, Y);
NowRect := Rect(TmpLabel.Left, TmpLabel.Top,
TmpLabel.Left + TmpLabel.Width, TmpLabel.Top + TmpLabel.Height); Form1.Canvas.DrawFocusRect(NowRect); end;
{当鼠标移动的时候,计算出移动的距离,消隐上一个位置的边框,计算新位置的边框并画出}
procedure TForm1.Moving(Sender: TObject; Shift: TShiftState; X,Y: Integer); var
TmpLabel : TLabel; DeltaX, DeltaY : integer; begin
TmpLabel := Sender as TLabel; if Flag_Dragging then begin
DeltaX := X - LastPoint.X; //计算移动的横纵距离 DeltaY := Y - LastPoint.Y;
LastPoint := Point(X, Y); //保存新点
Form1.Canvas.DrawFocusRect(NowRect); //消隐上一个位置的边框 NowRect := Rect(NowRect.Left + DeltaX, NowRect.Top + DeltaY,
NowRect.Right + DeltaX, NowRect.Bottom + DeltaY);//计算新边框的位置
Form1.Canvas.DrawFocusRect(NowRect); end; end;
{当鼠标放开时,不用再画边框,直接计算释放处与开始处的距离,然后把组件对象移动过来}
procedure TForm1.MoveEnd(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var
TmpLabel : TLabel; Deltax, Deltay : integer; begin
TmpLabel := Sender as TLabel; if Flag_Dragging then begin
Flag_Dragging := False; LastPoint := Point(X, Y);
Deltax := LastPoint.X - StartPoint.X; Deltay := LastPoint.Y - StartPoint.Y;
TmpLabel.Top := Deltay + TmpLabel.Top; //重新设置组件对象的位置 TmpLabel.Left := Deltax + TmpLabel.Left; end; end;
第二种:OnStartDrag,OnEndDrag,OnDragDrop,OnDragOver {
2008-06-28 20:08
OnStartDrag,OnEndDrag,OnDragDrop,OnDragOver
在delphi中实现托拽
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://kris.blogbus.com/logs/31441.html
我的理解是这样的,OnStartDrag-->OnDragOver-->OnDragDrop 开始拉,然后是在control的上面拉,最后是放下,
其中Drop处,对应的是最后被托拽物体所要释放到的control名(即是Target),
要把物体的parent设成对应的Control名,否则无法实现drag, 另外在Over事件中,要求把Accept变量设成True,才可以托拽; }
//*********************************************************************************** unit Unit1;
interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls; type
TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; Memo1: TMemo; Image1: TImage; Edit1: TEdit;
Button1: TButton;
procedure Panel1DragDrop(Sender …… 此处隐藏:3206字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [法律文档]苏教版七年级语文下册第五单元教学设计
- [法律文档]向市委巡视组进点汇报材料
- [法律文档]绵阳市2018年高三物理上学期第二次月考
- [法律文档]浅析如何解决当代中国“新三座大山”的
- [法律文档]延安北过境线大桥工程防洪评价报告 -
- [法律文档]激活生成元素让数学课堂充满生机
- [法律文档]2014年春学期九年级5月教学质量检测语
- [法律文档]放射科标准及各项计1
- [法律文档]2012年广州化学中考试题和答案(原版)
- [法律文档]地球物理勘查规范
- [法律文档]《12系列建筑标准设计图集》目录
- [法律文档]2018年宁波市专技人员继续教育公需课-
- [法律文档]工会委员会工作职责
- [法律文档]2014新版外研社九年级英语上册课文(完
- [法律文档]《阅微草堂笔记》部分篇目赏析
- [法律文档]尔雅军事理论2018课后答案(南开版)
- [法律文档]储竣-13827 黑娃山沟大开挖穿越说明书
- [法律文档]《产品设计》教学大纲及课程简介
- [法律文档]电动吊篮专项施工方案 - 图文
- [法律文档]实木地板和复合地板的比较
- 探析如何提高电力系统中PLC的可靠性
- 用Excel函数快速实现体能测试成绩统计
- 教师招聘考试重点分析:班主任工作常识
- 高三历史选修一《历史上重大改革回眸》
- 2013年中山市部分职位(工种)人力资源视
- 2015年中国水溶性蛋白市场年度调研报告
- 原地踏步走与立定教学设计
- 何家弘法律英语课件_第十二课
- 海信冰箱经销商大会——齐俊强副总经理
- 犯罪心理学讲座
- 初中英语作文病句和错句修改范例
- 虚拟化群集部署计划及操作流程
- 焊接板式塔顶冷凝器设计
- 浅析语文教学中
- 结构力学——6位移法
- 天正建筑CAD制图技巧
- 中华人民共和国财政部令第57号——注册
- 赢在企业文化展厅设计的起跑线上
- 2013版物理一轮精品复习学案:实验6
- 直隶总督署简介