怎么让事件很快返回?一个弱智的问题 ( 积分: 150 )

  • 主题发起人 主题发起人 vibowl
  • 开始时间 开始时间
V

vibowl

Unregistered / Unconfirmed
GUEST, unregistred user!
在FocusedRecordChanged或者OnMouseDown 事件里加了一个方法如: PreviewItemData
因为PreviewItemData代码执行时间较长,所以会有一段等待的时间,由于我的DataGrid是有拖放功能,DragMode 为dmAutomatic,奇怪的是,当方法执行完以后,鼠标会是拖放状态
虽然我的鼠标左键已施放,后来我检查出来是因为PreviewItemData执行占用了时间,鼠标好象没响应到OnMouseUP,后来我用线程来执行PreviewItemData,事件可以立即结束,由于某些原因不能用线程来处理,请问有没有更好的处理方法,我只要求事件能立即返回。
 
在FocusedRecordChanged或者OnMouseDown 事件里加了一个方法如: PreviewItemData
因为PreviewItemData代码执行时间较长,所以会有一段等待的时间,由于我的DataGrid是有拖放功能,DragMode 为dmAutomatic,奇怪的是,当方法执行完以后,鼠标会是拖放状态
虽然我的鼠标左键已施放,后来我检查出来是因为PreviewItemData执行占用了时间,鼠标好象没响应到OnMouseUP,后来我用线程来执行PreviewItemData,事件可以立即结束,由于某些原因不能用线程来处理,请问有没有更好的处理方法,我只要求事件能立即返回。
 
To vibowl,
Delphi的主Form不是多线程的,事件不用线程不可能立即返回。
 
或者用发消息的方式可不可以,大家给点思路
 
发消息也不行,因为主程序的事件不执行完毕,不会在执行主程序的其他事件。
只能用线程
 
應不會吧﹐你把previewitemdata寫簡單點試一下﹐是不是什么沒釋放﹐或沒執行完。
 
谢谢大家参与
最后我还是用发消息的方法:
事件里发送消息:
PostMessage(handle, WM_MYMESSAGE, 0, GlobalAddAtom(pchar(AMSGID)));//postmessage 不会等待回应,立即返回
procedure DealMsg(var T: TMessage);
var
P:Array [0..255] of char;
begin
GlobalGetAtomName(T.LParam, P,255);
previewItemData(p);
end;
不过速度没有用线程快,用线程测试很久总是有莫明其妙的错误,
可能代码写太复杂了,暂时只能这样偷偷懒.
 
我用SendMessage倒挺稳定的,楼主换了看看
 
SendMessage会等待方法执行完返回信息,这样还是会有问题
 
即使使用消息也不可能改善速度的.
如果仅仅是CURSOR的样子,弄那么复杂干嘛.
 
后退
顶部