怪问题,盼大虾指点!

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的鼠标事件,结果依旧。
急盼高手指点!!
...全文
230 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事件,在原选中的结点与后选中的结点上会各执
行一次(改变结点选中,是从一个结点到另一个结点),所以显示两次。

5,379

社区成员

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

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