社区
Delphi
帖子详情
运行状态拖动控件的问题
bluedelphi
2004-09-16 11:08:10
使用以下代码在某个控件的 onMouseDown 事件里,能实现运行状态拖动的效果
ReleaseCapture;
Sendmessage((Sender as TWinControl).Handle,WM_syscommand,$F012,0);
但我现在有个问题,当拖动停止的时候,怎么捕获鼠标放开了时候! 我需要在控件停止拖动的
时候处理一些东西,比例获得控件新的位置等之类的信息,请高手指定,应该怎么处理,要写什么样的
代码?
...全文
149
7
打赏
收藏
运行状态拖动控件的问题
使用以下代码在某个控件的 onMouseDown 事件里,能实现运行状态拖动的效果 ReleaseCapture; Sendmessage((Sender as TWinControl).Handle,WM_syscommand,$F012,0); 但我现在有个问题,当拖动停止的时候,怎么捕获鼠标放开了时候! 我需要在控件停止拖动的 时候处理一些东西,比例获得控件新的位置等之类的信息,请高手指定,应该怎么处理,要写什么样的 代码?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bluedelphi
2004-09-20
打赏
举报
回复
摆脱高手了,谁能指点一二啊
bluedelphi
2004-09-17
打赏
举报
回复
首先很感谢各位的关注
但是感觉你们的回答不是我想要的答案啊
OnMouseDown里面写了
ReleaseCapture;
Sendmessage(panel1.Handle,wm_syscommand,$F009,0);
后,onMouseUp 是不响应的啊! 里面写代码有什么用了!
fei19790920
2004-09-16
打赏
举报
回复
两种方法
1。
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ReleaseCapture;
panel1.perform(WM_SysCommand, $F012, 0);
end;
2。
var
Form1: TForm1;
MoveEn:Boolean;
XY:TPoint;
implementation
{$R *.DFM}
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button =mbLeft then
begin
MoveEn:=True;
XY.x :=x;
XY.y :=y;
end;
end;
procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MoveEn:=False;
end;
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MoveEn then
begin
Label1.Left :=Label1.Left +(x-XY.x);
Label1.Top :=Label1.Top +(y-XY.y);
end;
end;
jinjazz
2004-09-16
打赏
举报
回复
faq里有:原帖找不到了
//==============================================================================
//任意摆布一个控件(拖动、放大、缩小)******************************************
//==============================================================================
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.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ManipulateControl((Sender as TWinControl), Shift, X, Y, 10);
end;
fim
2004-09-16
打赏
举报
回复
MouseUp事件中写代码啊,当然最好设一下标志,这样比较好判断些
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FMoving :=True;
//....
end;
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Fmoving := False;
//.....
end;
yingshis
2004-09-16
打赏
举报
回复
up
zdq801104
2004-09-16
打赏
举报
回复
学习
运行
时
拖动
控件
和改变大小(修改版)
在`MouseUp`事件中,结束
拖动
操作并更新
控件
状态
。 5. **代码实现**: - 首先,为
控件
添加`MouseDown`事件处理程序。在这里,记录下鼠标按下时的
控件
位置和鼠标位置。 - 接着,为
控件
添加`MouseMove`事件处理程序...
C# winform
运行
时用户
拖动
窗体上
控件
大小位置
在C# WinForm开发中,实现用户在
运行
时能够自由
拖动
窗体上的
控件
以及改变它们的大小和位置是一项常见的需求,这有助于提供高度可定制的用户界面。以下是一些关于这个主题的重要知识点和详细步骤: 1. **事件处理**...
C#+
运行
时+
控件
拖动
C#
运行
时
控件
拖动
主要涉及到Windows Forms或WPF(Windows Presentation Foundation)环境下的事件处理和逻辑控制。以下将详细介绍这一知识点。 一、Windows Forms
控件
拖动
1. **启动
拖动
** 当用户按下鼠标按钮并...
c#
运行
中
拖动
调整
控件
在C# WinForm应用开发中,用户界面的交互性...总之,"c#
运行
中
拖动
调整
控件
"是一个涉及自定义
控件
、鼠标事件处理、边界检测和焦点管理的综合
问题
。通过学习和实践这一主题,开发者可以提升WinForm应用的用户交互体验。
C#开发程序
运行
时能自由
拖动
控件
在C#编程环境中,开发一个允许用户在程序
运行
时自由
拖动
控件
的应用程序是一项常见的需求,这可以增强用户交互性和自定义性。本篇将深入探讨如何实现这一功能,主要涉及以下几个关键知识点: 1. **Windows Forms**:...
Delphi
5,928
社区成员
262,931
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章