已经知道项的编号,如何将其选中加亮? 谢谢!!!

解决方案 »

  1.   

    ListView.SetFocus;
    ListView.ItemIndex := ?;
      

  2.   

    伴水老大的代码:
    //参考如下代码~~
    //原理:可以通过消息LVM_SETITEMSTATE设置各项的状态,lparam参数是一个局部指针,所以需要把数据填写在该进程空间里~~
    uses CommCtrl;procedure SetListViewIndex(mHandle: THandle; mIndex: Integer);
    var
      vProcessId: DWORD;
      vProcess: THandle;
      vPointer: Pointer;
      vNumberOfBytesRead: Cardinal;
      vItem: TLVItem;
    begin
      GetWindowThreadProcessId(mHandle, @vProcessId);
      vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or
        PROCESS_VM_WRITE, False, vProcessId);
      vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT,
        PAGE_READWRITE);
      try
        vItem.stateMask := LVIS_FOCUSED;
        vItem.state := LVIS_FOCUSED;
        WriteProcessMemory(vProcess, vPointer, @vItem,
          SizeOf(TLVItem), vNumberOfBytesRead);
        SendMessage(mHandle, LVM_SETITEMSTATE, mIndex, lparam(vPointer));    vItem.stateMask := LVIS_SELECTED;
        vItem.state := LVIS_SELECTED;
        WriteProcessMemory(vProcess, vPointer, @vItem,
          SizeOf(TLVItem), vNumberOfBytesRead);
        SendMessage(mHandle, LVM_SETITEMSTATE, mIndex, lparam(vPointer));
      finally
        VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
        CloseHandle(vProcess);
      end;
    end; { SetListViewIndex }procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
      SetListViewIndex(ListView1.Handle, 0);
    end;
      

  3.   

    加亮把LVIS_FOCUSED; 改为 LVIS_DROPHILITED就行,对外部程序的ListView同样有效
      

  4.   

    楼上搞的太复杂了吧,^0^var
      iIndx: integer;
    begin
      iIndx := 3; //你想选中项的索引
      ListView1.ItemIndex := iIndx;
      ListView1.SetFocus;
    end;
      

  5.   

    如何将其选中加亮???
    是失去焦点还知道选中的是哪个节点吗?
    如果是这样的话,ListView有一个属性叫HideSelection。
    当它为False时,失去焦点,还会知道选中的是谁!