已知一个外部程序的Listview的handle,假设为mHandle,如何将它的第i个项目的checkbox打勾(checked)/取消打勾(unchecked)?
大体思路是用TLVItem和sendmessage, 但是具体如何写呢?

解决方案 »

  1.   

    我需要的是操作外部程序中的listview,不是我自己窗体中的
      

  2.   

    1)通过SendMessage发送键盘消息如:Enter、Space
    2)查找WM_CHAR($0102)、Enter/SPACE消息码(13、32)
      SendMessage(handle, $0102, $0D, 0);
      SendMessage(handle, $0102, $20, 0);
      

  3.   

    也可发送Mouse Click 消息
      

  4.   

    Sorry,字符消息无效,请测试:
      SendMessage(checkBox1.Handle, $0201, 0, 0);
      SendMessage(checkBox1.Handle, $0202, 0, 0);
      

  5.   

    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;
      

  6.   

    suton 的方法比较接近, 但是我要的TListView, 而不是TTreeView.
      

  7.   

    汗,人家告诉你的是一个方法,我觉得你应该该据方法得到你要的。
    问题,你直接要代码,呵呵。个人认为,程序员还是自己多动手动脑的好。===========================================================
    我在CSDN好像没问过一个问题,不知道都是自己去找资料。当然我得到CSDN资料的帮助很多。
    所以,我也上CSDN来帮助他人了。>>>>>希望程序员自已多动手多动脑,问关键性的问题。
      

  8.   


    唉,你怎么知道我没找过没改过没想过? 问题是修改后的代码没效果.
    那是不是说csdn里就不该出现低级问题呢?
      

  9.   

    SendMessage应该可以实现。好像有两种方法,我以前似乎写过一个,等有空帮你找找以前的代码。你的问题实际就是一句代码而已,如果问题解决,我可以得多少分呢?分太少的话我就不浪费时间翻阅以前的代码了。
      

  10.   

    不行,不好实现。不是一句代码的事,不好意思 。
    外部的checkbox可以,如果是Listview上面的不好实现。建议你发送单击消息,这样打勾与取消打勾的代码是一样的,通用。
    另外,这个与子类化无关。
      

  11.   

    晕,是我看错了.....
    我还以为你要改外部的treeview...还查了半天vcl源码,才写了上面的代码.
      

  12.   


    我是要控制外部程序,不是我自己的程序种的ListView
      

  13.   

    這個問題的難點在于:外部程序的listview收到消息后,如何確定要操作的是哪個item。除非外部程序可以做相應的處理!雙方沒有任何約定,又如何準確處理呢?