21.06.2009, 18:05
|
Активный
|
|
Регистрация: 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]));
|