怎么实现组件大小和位置的自由拖放呢?

whitetiger8 2003-10-15 07:24:59
如题了。
...全文
44 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
whitetiger8 2003-10-20
  • 打赏
  • 举报
回复
这样啊。多谢了。给分
pankun 2003-10-19
  • 打赏
  • 举报
回复
ReleaseCapture是释放鼠标捕获,
WinControl.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);是向WinControl这个控件发消息.用SendMessage(WinControl.Handle, WM_SYSCOMMAND, SC_MANIPULATE, 0)也一样.
$F001,$F002等的消息也是平常看文章知道的哈...
whitetiger8 2003-10-19
  • 打赏
  • 举报
回复

pankun(剑神一笑)太神奇了。不过我看不太懂。请问ReleaseCapture; WinControl.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);这两句是什么意思?
您怎么知道$F001,$F002的意思啊?真是学习。我对消息不太熟!
whitetiger8 2003-10-16
  • 打赏
  • 举报
回复
是么,我试试啊。多谢了。
jiyongqiang 2003-10-15
  • 打赏
  • 举报
回复
pankun 真厉害!
pankun 2003-10-15
  • 打赏
  • 举报
回复
转篇贴子你参考一下

//==============================================================================

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

//==============================================================================

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 TForm_Main.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

Caption := IntToStr(X) + '/' + IntToStr(Y);

ManipulateControl((Sender as TWinControl), Shift, X, Y, 10);

end;
47522341 2003-10-15
  • 打赏
  • 举报
回复
up
huojiehai 2003-10-15
  • 打赏
  • 举报
回复
在Google上搜索一下,有个控件放到界面上就可以拖了,很简单的!
http://vbeden.xg88.com/learner/secondary/list/page2.htm#bm3
http://www.ahetc.gov.cn/cit/200011/20.doc
编辑框辅助功能.ec 比较大小.ec 超级列表框排序.ec 超级列表框选中项存为Excel文件.ec 超级列表框背景.ec 超级列表框到文件.ec 冰川多媒体播放模块 1.0.ec 常用功能.ec 部品管理模块.ec 查找窗口或进程并关闭.ec 打印预览1.1.ec 打印预览1.3.ec 磁盘格式化模块 1.0.ec 窗口贴边隐藏模块.ec 超级信息框.ec 窗口句柄&进程名互取.ec 打开多文件对话框.ec 创建快捷方式正.ec 打开外部关联文件及调用系统关于窗口模块 1.0.ec 程序是否运行2.EC 打印模块.ec 窗口热键.ec 打印预览2.44(注册表配置).ec 登录确认模块 1.0.ec 低级功能模块.ec 迪克—透明窗体.ec 弹出下载窗口.ec 打印预览2.41(注册表配置).ec 打印预览模块 1.0.ec 到文本.ec 调整窗口大小.ec 动画窗体1.3.ec 动态调用DLL函数.ec 动态调整分辩率.ec 读取DBF数据.ec 读取超级列表框模块 1.0.ec 读取超级列表框模块_多条件版.ec 定时提醒1.1.ec 读文本~1.ec 动态加载菜单模块1.0版.ec 电子琴模块.ec 度量转换.ec 多线程支持模块.ec 多方式取IP模块.ec 多彩渐变换肤模块.ec 多功模块.ec 对话框代码自动生成器.ec 多媒体.ec 工具提示.ec 功能集一模块.ec 功能集一模块 1.0.ec 分辨率.ec 改变系统菜单.ec 改变系统菜单1.0改进版.ec 仿XP界面3.0特别版模块 3.0.ec 个性信息框1.ec 个性信息框1.21.ec 个性信息框.ec 高精度运算模块2.1版.ec 高级易模块集 2.2.ec 更换桌面.ec 管理员登录验证模块(未加密) 1.0.ec 关联文件.ec 关联.ec 公历转农历模块 1.0.ec 公农历转换1.ec 光驱控制模块.ec 关闭窗口或进程.ec 花样进度条1.0.ec 获取本机互联网IP地址.ec 好色按钮.ec 汉字助记码.ec 和是几与谁最大.ec 记录集读写操作.ec 加载进度条.ec 汉字处理.ec 汉语朗读模块.ec 进程模块.ec 混合运算.ec 进程信息.ec 进度下载模块 V1.0 1.0.ec 加入好友.ec 结束进程模块.ec 禁止重运行.ec 禁止程序多次运行模块(银戒指) 1.0.ec 控制面板.ec 控制系统音量.ec 客户管理模块.ec 模块.ec 模块_bmp转换为jpg.ec 控件+窗口模块.ec 枚举系统字体1.ec 模块_动态修改图片组v1.0.ec 模块_动态修改图片组v1.1.ec 模块_WinXP窗口v4.0版.ec 模块_仿WinXP窗口v1.0.ec 模块_仿WinXP窗口v1.1.ec 模块_无边框窗口设置.ec 模块_软件注册.ec 模块_图片按钮v2.0.ec 模块_软件注册2.0.ec 取汉字笔画1.ec 求真进度下载模块.ec 取操作系统类别.ec 取拼音首个字母.ec 取拼音带声调1.2.ec 取图片尺寸.ec 判断数据库.ec 判断字符模块.ec 取十进制.ec 取控件或窗口的标题.ec 内存读写模块.ec 取IP地址.ec 取汉字笔画模块.ec 取窗口内所有控件标题.ec 内存读写模块2.0.ec 扑克.ec 十进制转化为十六进制5.ec 杀进程模块.ec 十六进制转十进制模块 .ec 取系统信息.ec 输入法操作模块.ec 取系统信息v2.1.ec 取系统字体列表1.2.ec 属性夹.ec 是否为汉字.ec 色彩转换_模块.ec 日期设置模块.ec 日期格式规范.ec 日期时间增强.ec 数据源按钮.ec 树型框增强.ec 数制转换.ec 数据库增强.ec 设置鼠标活动范围.ec 鼠标控制.ec 设置表格模块.ec 取用户机器码模块.ec 数据库批量替换.ec 数据库查找.ec 取注册表键句柄.ec 透明窗口组件.ec 同步缩放窗口1.0.ec 图形窗口模块.ec 锁见盘数标模块.ec 添加(删除)子项目.ec 通用界面扩展.ec 外部数据库.ec 提升权限.ec 统计表模块.ec 所有模块.ec 统计重复次数.ec 文件压缩解压.ec 外挂作坊网游模块.ec 文本统计模块 1.0.ec 文本计算.ec 文件压缩模块.ec 吸附模块.ec 文本语音朗读.ec 文本折行.ec 文件关联.ec 文本处理扩展模块.ec 五笔编码查询模块.ec 文件拖放_YE.ec 文件拖放.ec 文件图标.ec 形象大使1.0.ec 显示设置.ec 易3.5版数据库记录编辑器模块.ec 易DLL支持.ec 系统登录模块.ec 系统设置易模块 1.0.ec 液晶模块.ec 压缩加密文件夹.ec 压缩文件夹.ec 寻找注

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧