如何打勾/取消打勾外部程序中的ListView的Item的checkbox? 已知一个外部程序的Listview的handle,假设为mHandle,如何将它的第i个项目的checkbox打勾(checked)/取消打勾(unchecked)?大体思路是用TLVItem和sendmessage, 但是具体如何写呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我需要的是操作外部程序中的listview,不是我自己窗体中的 1)通过SendMessage发送键盘消息如:Enter、Space2)查找WM_CHAR($0102)、Enter/SPACE消息码(13、32) SendMessage(handle, $0102, $0D, 0); SendMessage(handle, $0102, $20, 0); 也可发送Mouse Click 消息 Sorry,字符消息无效,请测试: SendMessage(checkBox1.Handle, $0201, 0, 0); SendMessage(checkBox1.Handle, $0202, 0, 0); procedure SetNodeChecked(ATreeViewHandle: THandle; AIndex: Integer; Checked :Boolean); const TVIS_CHECKED = $2000; var TvItem: TTVItem; AItem: HTreeItem; I: Integer;begin FillChar(TvItem, SizeOf(TvItem), 0); //找到第一个item: AItem := TreeView_GetFirstVisible(ATreeViewHandle); //找到第AIndex个item: for I := 0 to AIndex - 2 do AItem := TreeView_GetNextVisible(ATreeViewHandle, AItem); with TvItem do begin hItem := AItem; Mask := TVIF_STATE; StateMask := TVIS_STATEIMAGEMASK; if Checked then TvItem.State := TVIS_CHECKED else TvItem.State := TVIS_CHECKED shr 1; TreeView_SetItem(ATreeViewHandle, TvItem); end; end; suton 的方法比较接近, 但是我要的TListView, 而不是TTreeView. 汗,人家告诉你的是一个方法,我觉得你应该该据方法得到你要的。问题,你直接要代码,呵呵。个人认为,程序员还是自己多动手动脑的好。===========================================================我在CSDN好像没问过一个问题,不知道都是自己去找资料。当然我得到CSDN资料的帮助很多。所以,我也上CSDN来帮助他人了。>>>>>希望程序员自已多动手多动脑,问关键性的问题。 唉,你怎么知道我没找过没改过没想过? 问题是修改后的代码没效果.那是不是说csdn里就不该出现低级问题呢? SendMessage应该可以实现。好像有两种方法,我以前似乎写过一个,等有空帮你找找以前的代码。你的问题实际就是一句代码而已,如果问题解决,我可以得多少分呢?分太少的话我就不浪费时间翻阅以前的代码了。 不行,不好实现。不是一句代码的事,不好意思 。外部的checkbox可以,如果是Listview上面的不好实现。建议你发送单击消息,这样打勾与取消打勾的代码是一样的,通用。另外,这个与子类化无关。 晕,是我看错了.....我还以为你要改外部的treeview...还查了半天vcl源码,才写了上面的代码. 我是要控制外部程序,不是我自己的程序种的ListView 這個問題的難點在于:外部程序的listview收到消息后,如何確定要操作的是哪個item。除非外部程序可以做相應的處理!雙方沒有任何約定,又如何準確處理呢? Jpg和Gif转Bmp 奇怪的问题 安装完控件后编译是老提示找不到dsgnlntf.dcu文件 QuickReport如何控制打印机走纸? 大家好,我是风筝!本人将陆续推出delphi7在线帮助的翻译,请大家支持 想学智能卡编程的进来看看 网上哪里有免费的Pascal教程啊? 为了爱,我放弃深圳7K的工作!献给所有的已经的/犹豫的/即将的朋友们! 怎样使stringgird的表头显示出来不动,浏览记录时还在最上面,我的不明白。 一个菜鸟的问题,请各位高手帮帮忙,很急,先谢了!!答者必有分!!!!1 取時間差問題? oracle表锁的问题
2)查找WM_CHAR($0102)、Enter/SPACE消息码(13、32)
SendMessage(handle, $0102, $0D, 0);
SendMessage(handle, $0102, $20, 0);
SendMessage(checkBox1.Handle, $0201, 0, 0);
SendMessage(checkBox1.Handle, $0202, 0, 0);
const
TVIS_CHECKED = $2000;
var
TvItem: TTVItem;
AItem: HTreeItem;
I: Integer;
begin
FillChar(TvItem, SizeOf(TvItem), 0);
//找到第一个item:
AItem := TreeView_GetFirstVisible(ATreeViewHandle);
//找到第AIndex个item:
for I := 0 to AIndex - 2 do
AItem := TreeView_GetNextVisible(ATreeViewHandle, AItem); with TvItem do
begin
hItem := AItem;
Mask := TVIF_STATE;
StateMask := TVIS_STATEIMAGEMASK;
if Checked then
TvItem.State := TVIS_CHECKED
else
TvItem.State := TVIS_CHECKED shr 1;
TreeView_SetItem(ATreeViewHandle, TvItem);
end;
end;
问题,你直接要代码,呵呵。个人认为,程序员还是自己多动手动脑的好。===========================================================
我在CSDN好像没问过一个问题,不知道都是自己去找资料。当然我得到CSDN资料的帮助很多。
所以,我也上CSDN来帮助他人了。>>>>>希望程序员自已多动手多动脑,问关键性的问题。
唉,你怎么知道我没找过没改过没想过? 问题是修改后的代码没效果.
那是不是说csdn里就不该出现低级问题呢?
外部的checkbox可以,如果是Listview上面的不好实现。建议你发送单击消息,这样打勾与取消打勾的代码是一样的,通用。
另外,这个与子类化无关。
我还以为你要改外部的treeview...还查了半天vcl源码,才写了上面的代码.
我是要控制外部程序,不是我自己的程序种的ListView