怎么通过Windows消息取得TListView(或SysListView32)内容的行数及每行的内容?并将某一行选中?急呀,在线等待!!!!(100分)

  • 主题发起人 主题发起人 china_ttw
  • 开始时间 开始时间
C

china_ttw

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在正做一个程序,要控制别的程序窗口(无源码)中的一个TListView(在windows中的类名叫:SysListView32).需要实现的功能是选中TListView控件中的某一行,如:有<br>
代码:
[:(!]A<br>B<br>C<br>D<br>E<br>五行,我要选中第二行怎么选择(通过Windows消息)?要做到这一点,必须先得知TListView内容的总行数,然后把每一行的内容读出来!<br><br>用TListBox实现的方式如下:<br><br>//得到名柄为ListBox_Hand的TListBox列表框中,内容为Select_Text的行;<br>FUNCTION GetListBoxItem(ListBox_Hand : integer ; Select_Text : string): integer;<br>Var ListBox_Count : Integer;<br>&nbsp; &nbsp; ListBoxItem_Text : PChar;<br>&nbsp; &nbsp; I : Integer;<br>Begin<br>Try<br>&nbsp;Result := 0;<br>&nbsp;GetMem(ListBoxItem_Text , 255);<br>&nbsp;ListBox_Count :=SendMessage(ListBox_Hand , LB_GETCOUNT , 0 , 0);<br>&nbsp;showmessage(inttostr(listbox_count));<br>&nbsp;For I := 0 To ListBox_Count - 1 Do<br>&nbsp; Begin<br>&nbsp; &nbsp;SendMessage(ListBox_Hand , LB_GETTEXT , I , LongInt(ListBoxItem_Text));<br>&nbsp; &nbsp;If Trim(Select_Text) = Trim(ListBoxItem_Text) Then<br>&nbsp; &nbsp; Result := I;<br>&nbsp; End;<br>Finally<br>&nbsp;FreeMem(ListBoxItem_Text);<br>End;<br>end;<br><br>//将TlistBox的某一行选中:<br>&nbsp;SendMessage(ListBox_Hand,LB_SETSEL, 1,GetListBoxItem(My_Control_Hand[6],'选中行的内容'));<br><br>以上程序不能用到ListView控件上(我测试过)!要把以上程序的功能移植到TListView控件上,应该发什么消息?<br><br>分数不成问题,只要解决了,所有分数一并奉上都可以!<br><br>谢谢!万分着急!
 
按以下思路试试:<br>&nbsp; &nbsp; 让二个程序通过发送消息的方式应该可以解决你的问题。
 
我想应该是参数LB_SETSEL的问题,你找找其它关于Tlistview的相关参数<br>我不知道,参考 LBItemFromPt , LBN_SELCHANGE<br>你还是自己看一下帮助,看看什么参数合适,<br>我查了一下好像是LVM_GETITEMCOUNT<br>还有函数ListView_GetItemCount()<br>The ListView_GetItemCount macro retrieves the number of items in<br>&nbsp;a list view control. You can use this macro or explicitly send <br>the LVM_GETITEMCOUNT message.<br>int ListView_GetItemCount(<br><br>&nbsp; &nbsp; HWND hwnd <br>&nbsp; &nbsp;); <br>&nbsp;
 
全是牛人,不懂
 
我用WINDOWS消息LVM_GETITEMCOUNT能够取得记录总的条数,但是用LVM_GETITEM,LVM_SET<br>ITEM的时候,总是内存出错,我在论坛上找了一下相关贴子,几位高人说LISTVIEW是单线程<br>的,不能通过以上两个消息得到结点内容,他们的建议是通过DLL编写钩子,然后把相应消息<br>钩出来。但这种方法实现起在不容易,效果怎么样还不知道,况且工作进度又有限制,现在<br>我想的另一种方法是:先把光标移到ListView的第一行,然后通过发送Windows消息得到我<br>要选择的内容在ListView中的行号,再通过发送VK_DOWN消息移动光标,找到我要选择的行!<br>但现在又遇到另一问题,通过LVM_FINDITEM消息查找的时候,如果内容为纯文本,可以正确<br>查找到,但如果有图片,则SendMessage返回-1!哪位知道怎么通过LVM_FINDITEM查找有图片<br>的Item!
 
难道没有遇到过类似的问题吗?
 

Similar threads

后退
顶部