怪问题,盼大虾指点!

pipimei 2000-01-12 12:36:00

我在一段程序中使用了 ListView。因为要拖动ListView项目的缘故,将其Dragmode置为dmAutomatic。
此时使用ListView的onChanging事件:
procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem;
Change: TItemChange; var AllowChange: Boolean);
begin
if (change=ctstate) and (item.Focused) and (item.Selected) then
showmessage('something');
end;
下面是问题:
1、为什么消息框显示两次?
2、消息框关闭后,鼠标变为“禁止拖移”的样式并且滞留在屏幕上?
我尝试将DragMode设为DmManual并判断ListView的鼠标事件,结果依旧。
急盼高手指点!!
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
limodou 2000-01-13
  • 打赏
  • 举报
回复
你可以不在改变标题时进行提示,而是在改变选中结点或退出窗口时进行提示确认。
barton 2000-01-13
  • 打赏
  • 举报
回复
使用OnChanged事件即可。
kxy 2000-01-12
  • 打赏
  • 举报
回复
要用 OnDragOver OnDragEnd
看delphi的demo中的例子.
kxy 2000-01-12
  • 打赏
  • 举报
回复
既然这样,总不能每次有变化就提示用户吧?
不如设一个 modify的变量,最后在一个合适的时间来提示用户,比如
Form退出时.
pipimei 2000-01-12
  • 打赏
  • 举报
回复
谢谢提示
但我必须利用onchanging事件给出一个提示,比如listitem的caption值发生了变化,提
示用户是否保存。
我试过dmmanual(再处理onmouseDown等事件以完成列表项的拖动),但不行。
limodou 2000-01-12
  • 打赏
  • 举报
回复
我想是因为drag事件的发生是当鼠标点击结点后,由于显示对话框造成时间延迟一段时间
造成的。如果你不在onchangeing事件中写showmessage应该就行了。如果想显示信息,
则将Dragmode设为dmManual也可以。
pipimei 2000-01-12
  • 打赏
  • 举报
回复
对不起,我想我没有说明白。
在这个问题中,我不是要通过onchanging事件来实现拖动(拖动只需要设置dragemode和判断ondrager等事件)。
我的重点是要使用listview的onchanging事件。
再说的清楚点:
当对listview不作拖动处理时,在onchanging事件中显示消息框没有光标滞留的现象(好象伪发生了拖动现象,再点击一下鼠标则光标消失),反之则有,关键问题是怎样消除此时滞留的光标?
先谢谢了!!
-------------------------------------------------------

附:我的问题:
我在一段程序中使用了 ListView。因为要拖动ListView项目的缘故,将其Dragmode置为dmAutomatic。
在这个状态下如果使用ListView的onChanging事件:
procedure TForm1.ListView1Changing(Sender: TObject; Item: TListItem;
Change: TItemChange; var AllowChange: Boolean);
begin
if (change=ctstate) and (item.Focused) and (item.Selected) then
showmessage('something');
end;
下面是问题:
1、为什么消息框显示两次?
2、消息框关闭后,鼠标变为“禁止拖移”的样式并且滞留在屏幕上?
我尝试将DragMode设为DmManual并判断ListView的鼠标事件,结果依旧。
急盼高手指点!!
limodou 2000-01-12
  • 打赏
  • 举报
回复
正上面所说,应该使用OnDragOver和OnDragEnd事件,在OnDragOver里面如果鼠标处于
可接受的结点上,accept变量应该设为true,这样就可以释放结点了。我的主页上面有一
个关于TTreeView拖拽的例子,你可以参考一下。《技巧5》

消息框显示两次,是因为使用Onchanging事件,在原选中的结点与后选中的结点上会各执
行一次(改变结点选中,是从一个结点到另一个结点),所以显示两次。
你想当“李逍遥”式的“大侠”吗? 这里无需计算机基础,无需编程经验,你也不必是计算机专业的在校大学生....只要爱好游戏,怀揣梦想! 有一定自主学习能力,跟着刘老师从“编程小白”修炼为游戏研发“大虾”吧!!!学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

5,386

社区成员

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

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