Показать сообщение отдельно
  #2  
Старый 21.06.2009, 18:05
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Процедура нажатия кнопки <Enter> на пункте с индексом N объекта класса SysListView32:
Код:
procedure SelectAndEnterItemN(LVHandle: HWND; N: Integer);
var
  hProcess: THandle;
  dwProcessID: DWORD;
  dwBytesWriten: DWORD;
  plviRemoteLVItem: PLVItem;
  lviRemoteLVItem: LV_ITEM;
begin
  if LVHandle = 0 then Exit;
  dwProcessID := 0;

  GetWindowThreadProcessId(LVHandle, @dwProcessID);
  if dwProcessID = 0 then Exit;

  hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);
  if hProcess = 0 then Exit;

  plviRemoteLVItem := VirtualAllocEx(hProcess, nil, SizeOf(LV_ITEM),
                                     MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
  if GetLastError <> 0 then Exit;

  ZeroMemory(@lviRemoteLVItem, SizeOf(LV_ITEM));
  with lviRemoteLVItem do
  begin
    mask := LVIF_STATE;
    iItem := N;
    state := LVIS_FOCUSED or LVIS_SELECTED;
    stateMask := LVIS_FOCUSED or LVIS_SELECTED;
  end;

  if not WriteProcessMemory(hProcess, plviRemoteLVItem, @lviRemoteLVItem,
                            SizeOf(LV_ITEM), dwBytesWriten) then Exit;

  SendMessage(LVHandle, LVM_SETITEM, 0, Integer(plviRemoteLVItem));
  PostMessage(LVHandle, WM_KEYDOWN, VK_RETURN, 0);

  VirtualFreeEx(hProcess, plviRemoteLVItem, 0, MEM_RELEASE);
  CloseHandle(hProcess);
end;

В вашем случае вызов этой процедуры должен выглядеть так:
Код:
SelectAndEnterItemN(h, StrToInt(sg.Cells[0, pos]));
Ответить с цитированием