主页
Top.Mail.Ru Yandeks.Metrika
论坛:“WinAPI”;
当前存档:2002.07.25;
下载:[xml.tar.bz2];

向下

拖放。 试。 找到类似的分支


artgamer   (2002-05-19 15:41) [0]

听着,大师们 我已经问过这个问题,但尚未收到有意义的答案。 因此,我再次询问-如何在某些表单元素上进行拖放-例如,在Panel或SpeedButton上。 我在各个站点的FAQ上翻遍,并在“ Delphi王国”中发现了相同的问题。 答案是:“散文
程序WMDROPFILES(var消息:TWMDROPFILES); 消息WM_DROPFILES;
不必以表格的形式书写,而应以面板的TPanel继任者等书写。”
或Anatoly Podgoretsky写道: 这应该在表单级别完成,如果有必要确定光标在某个元素上,那么获取鼠标的坐标“以及如何做到?
我了解,也许我的问题(和我自己)看起来很愚蠢,但请相信我-如果我能自己弄清楚,我将永远不会分散人们的精力。
问候,Artgamer。



Song   (2002-05-19 17:09) [1]

鸭子您想说将文件传输到申请表时WM_DROPFILES不起作用?



~Sergius   (2002-05-19 17:36) [2]

赶上组件。 您将弄清楚该如何做。 别怪我,整个过程花了半个小时-但行得通。
尽管实际上,在这个问题上已经有很多FAK,有可能弄清楚(而且,原理本身很简单):-)

单位smDropFile; 介面 用途 窗户 讯息, Sysutils 班级 图形 控制项 表格 对话方块 类型 TOnFileDrop =对象的过程(变量文件名:字符串); TSmDropFile =类(TComponent) 私人的 FOldOnAppMessage:TMessageEvent; FAcceptExtensions:TStrings; FParent:TWinControl; FAcceptAll:布尔值; FOnFileDrop:TOnFileDrop; FOnWrongFileDrop:TOnFileDrop; 过程SetAcceptExtensions(常量值:TStrings); 过程OnAppMessage(var Msg:TMsg; var Handled:Boolean); procedure SetAcceptAll(const Value:boolean); 过程SetOnFileDrop(常量值:TOnFileDrop); 过程SetOnWrongFileDrop(常量值:TOnFileDrop); {私人声明} 受保护的 {受保护的声明} 公开的 {公开声明} 构造函数Create(AOwner:TComponent); 覆盖 销毁 已发表 {已发布的声明} 属性AcceptExtensions:TString读取FAcceptExtensions写入SetAcceptExtensions; 属性AcceptAll:布尔值读取FAcceptAll写入SetAcceptAll; 属性OnFileDrop:TOnFileDrop读取FOnFileDrop写入SetOnFileDrop; 属性OnWrongFileDrop:TOnFileDrop读取FOnWrongFileDrop写入SetOnWrongFileDrop; 结束 程序注册; 实作 {$ R SMDROPFILE.RES} 使用ShellAPI; 程序注册; 开始 RegisterComponents(“ skaminski”,[TSmDropFile]); 结束 {TSmDropFile} 构造函数TSmDropFile.Create(AOwner:TComponent); 开始 继承Create(AOwner); FAcceptExtensions:= TStringList.Create; FParent:=无; 如果AOwner是TForm,则 FParent:= AOwner作为TForm; 如果csDesigning在ComponentState中,则 FAcceptAll:= true; DragAcceptFiles(FParent.Handle,True); //允许父表单接受文件 FOldOnAppMessage:= Application.OnMessage; //记住旧的处理程序! Application.OnMessage:= OnAppMessage; //接受所有Windows消息 结束 析构函数TSmDropFile.Destroy; 开始 Application.OnMessage:= FOldOnAppMessage; FAcceptExtensions.Free;免费; 继承毁灭; 结束 过程TSmDropFile.OnAppMessage(var Msg:TMsg; var Handled:Boolean); var acfilename:char数组[0..255]; s:字符串; i:整数; 开始 如果(Msg.message = WM_DROPFILES)和(Msg.hwnd = FParent.Handle),则 开始 处理:=真; dragqueryfile(msg.wParam,0,acfilename,255); 如果(FAcceptAll)或 (FAcceptExtensions.IndexOf(UpperCase(ExtractfileExt(acfilename))<> -1)然后 开始 如果已分配(FOnFileDrop),则 开始 s:= acfilename; FOnFileDrop(s); 结束 结束 别的 如果已分配(FOnWrongFileDrop),则 开始 s:= acfilename; FOnWrongFileDrop(s); 结束 dragfinish(msg.wParam); 结束 别的 处理:= False; //让自己飞得更远... 结束 过程TSmDropFile.SetAcceptAll(常量值:布尔值); 开始 FAcceptAll:=值; 结束 过程TSmDropFile.SetAcceptExtensions(常量值:TStrings); var i:整数; 开始 对于我:= 0到Value.Count做 开始 值[i]:=大写(值[i]); 结束 FAcceptExtensions.Assign(值); 结束 过程TSmDropFile.SetOnFileDrop(常量值:TOnFileDrop); 开始 FOnFileDrop:=值; 结束 过程TSmDropFile.SetOnWrongFileDrop(常量值:TOnFileDrop); 开始 FOnWrongFileDrop:=值; 结束 结束。




Lady BadnBadn   (2002-05-19 18:02) [3]

写继承人,不要打扰自己



artgamer   (2002-05-19 18:16) [4]

>宋
鸭子您想说将文件传输到申请表时WM_DROPFILES不起作用?
不,我不是在说那个。 当我将文件传输到应用程序表单时,WM_DROPFILES起作用,但是当我将文件传输到应用程序表单上的面板时,什么都没有发生!
>巴登巴顿夫人
写继承人,不要打扰自己
怎么样?



Song   (2002-05-19 18:23) [5]

在WM_DROPFILES处理程序中,读取鼠标的坐标并将其与SpeedButton的坐标一起保存(将展开部分保留为按钮的高度和宽度)。 如果比较正确,则传输转到TSpeedButton。 这就是Anatoly Podgoretsky想到的。



artgamer   (2002-05-19 21:02) [6]

>宋
也许我听不懂,但是如果未调用此WM_DROPFILES,如何从WM_DROPFILES处理程序读取鼠标的坐标?



Song   (2002-05-19 21:05) [7]

是的,必须考虑该消息及其发生的时间。 读取鼠标坐标-GetCursorPos()



Song   (2002-05-19 21:52) [8]

我忘了在“是”和“ c”之间添加“不是” :))



~Sergius   (2002-05-20 03:53) [9]

该主题似乎已经关闭。
WM_DROPFILES捕获FORM。 在此事件的处理程序中,我们确定如何扫描鼠标的坐标。 通过这些坐标,我们可以确定光标位于哪个控件上。 一切!



artgamer   (2002-05-20 22:05) [10]

哦! 我被折磨了! “在事件处理程序中,在事件处理程序中。” 也许我不知道那是什么。 如果消息根本没有到达,我该如何计算消息发生的时间? 好吧,我将从LMD工具中获取FMDrop,并遵循〜Sergius的示例-也许我会弄清楚这种shnyaga的工作原理。
但是无论如何,感谢您的帮助。 〜Sergius代码适合我,但是太健康了-该程序有9000行的限制,而且我已经有了8700,并且一切都在增长:)。 总的来说,这个话题确实可以被认为是封闭的,我郑重地承诺不再提出这个问题! 再次感谢-晚安。



Anatoly Podgoretsky   (2002-05-20 22:17) [11]

我可以判断消息是否未到达,然后有一些消息阻止了它。 同时,这是局外人,他特别检查了一下,然后将文件扔到了面板上的SpeedButton上,一切正常,这是非标准的。



artgamer   (2002-05-20 23:03) [12]

>阿纳托利Podgoretsky
谢谢大家!



Страницы: 1 整个分支

论坛:“WinAPI”;
当前存档:2002.07.25;
下载:[xml.tar.bz2];

楼上





内存:0.6 MB
时间:0.029 c
14-81409
图书
2002-06-26 15:00
2002.07.25
电子书编程


1-81333
亚历山大
2002-07-12 21:23
2002.07.25
有趣


4-81513
暗号
2002-05-14 19:08
2002.07.25
特雷


6-81400
Varvar
2002-05-15 08:08
2002.07.25
登录名


3-81127
DKalinin
2002-07-03 11:53
2002.07.25
如何设置ADOStoredProc的超时?





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法语
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 淡米尔文 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский