delphi 7 sendmessage LVM_DELETEITEM 为什么一次删除两条记录?????

bkhmjgtc 2008-06-30 09:41:02
delphi 7 sendmessage LVM_DELETEITEM 为什么一次删除两条记录?????
可是我选中的只有一条记录
...全文
130 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bkhmjgtc 2008-07-03
  • 打赏
  • 举报
回复
postmessage(h,LVM_DELETEITEM,i,0)
i是选中行。
可是删除的时候,总是删除i和i+1行。
bkhmjgtc 2008-07-03
  • 打赏
  • 举报
回复
这个问题怎么解决呀 版主帮帮忙呀!
bkhmjgtc 2008-07-03
  • 打赏
  • 举报
回复
这个问题怎么解决呀 版主帮帮忙呀!
僵哥 2008-07-03
  • 打赏
  • 举报
回复
另外编译的时候,尽可能做一次Build。否则会使用默认的Dcu文件,这个修改就不能生效。
僵哥 2008-07-03
  • 打赏
  • 举报
回复
如果想修正,也并不是不可以,前提是你的程序不能是还包编译的。
找到VCL Source目录下的ComCtrls.pas,添加到工程当中,找到
destructor TListItem.Destroy;
begin
FDeleting := True;
if Owner.Owner.FLastDropTarget = Self then
Owner.Owner.FLastDropTarget := nil;
if ListView.HandleAllocated then
ListView_DeleteItem(Handle, Index);
FSubItems.Free;
inherited Destroy;
end;

把它修正为
destructor TListItem.Destroy;
var
pItem: tagLVITEM;

begin
FDeleting := True;
if Owner.Owner.FLastDropTarget = Self then
Owner.Owner.FLastDropTarget := nil;
if ListView.HandleAllocated then begin
pItem.mask := LVIF_INDENT;
pItem.iIndent := self.Indent;
if ListView_GetItem( Handle, pItem) then

ListView_DeleteItem(Handle, Index);
end;
FSubItems.Free;
inherited Destroy;
end;
僵哥 2008-07-03
  • 打赏
  • 举报
回复
这个问题建议楼主不用问了,应该算是VCL当中的一个BUG。
首先ListView是一个系统控件,它的数据实际上分为两部分,一部分存储由系统的API进行管理,另一部分由VCL控件TListView这个类进行管理。
当试图发送一个 LVM_DELETEITEM消息之后,首先响应该消息的是API,于是会把某一个Index删除掉,并且把内部的Index更新掉,然后通知TListView该消息,TListView收到消息之后,就通知相应的ListItem删除,而ListItem并不知道该消息已经触发了,以为是VCL内部删除,于是又发一个LVM_DELETEITEM消息。从而重复删除。实际上此时在TListView类管理的的数据当中,后面被删除的那个ListItem是存在于内存的,但是由于TListView的重绘是根据API当中的消息来重绘的,而在系统内部已经被删除掉了,所以就没有再通知重绘,自然被刷新之后就再也看不到了。
阿三 2008-07-01
  • 打赏
  • 举报
回复
又丢人了,呵呵,以为LVM_DELETEITEM是自定义的消息呢
阿三 2008-07-01
  • 打赏
  • 举报
回复
LVM_DELETEITEM这个消息应该是你自定义的,对于这个消息应该有一个对应的处理过程
阿三 2008-07-01
  • 打赏
  • 举报
回复
看一下你的这个消息LVM_DELETEITEM处理的代码
另:你不用在各个小的版块中发同样的贴子,这样答案不能集中
bkhmjgtc 2008-07-01
  • 打赏
  • 举报
回复
懂这个的大哥支个招。
定重谢
我的QQ是:63922806

829

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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