Вот так можно отослать двойной клик по нужному Item'у... (Я опять же воспользовалась примером из
этой темы...)
Код:
procedure SendDblClick(ListViewHandle: HWND; ItemIndex: Integer);
// ItemIndex — порядковый номер Item'а, начиная с нуля
var
hProcess: THandle;
dwProcessID: DWORD;
dwBytesWriten: DWORD;
ARect: TRect;
pRemoteRect: Pointer;
begin
SelectItemN(ListViewHandle, ItemIndex); // эта процедура описана ранее — в посте #35
GetWindowThreadProcessId(ListViewHandle, @dwProcessID);
if dwProcessID = 0 then Exit;
hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, dwProcessID);
if hProcess = 0 then Exit;
pRemoteRect := VirtualAllocEx(hProcess, nil, SizeOf(TRect),
MEM_COMMIT or MEM_TOP_DOWN, PAGE_READWRITE);
if GetLastError <> 0 then Exit;
ZeroMemory(@ARect, SizeOf(TRect));
ARect.Left := LVIR_BOUNDS;
if not WriteProcessMemory(hProcess, pRemoteRect, @ARect,
SizeOf(TRect), dwBytesWriten) then Exit;
SendMessage(ListViewHandle, LVM_GETITEMRECT, ItemIndex, Integer(pRemoteRect));
ReadProcessMemory(hProcess, pRemoteRect, @ARect, SizeOf(TRect), dwBytesWriten);
SetCapture(ListViewHandle);
SendMessage(ListViewHandle, WM_LBUTTONDBLCLK, MK_LBUTTON,
MakeLParam(ARect.Left + 5, ARect.Top + 5));
ReleaseCapture();
VirtualFreeEx(hProcess, pRemoteRect, 0, MEM_RELEASE);
CloseHandle(hProcess);
end;
Там, где стоят пятерки (при отсылке сообщения WM_LBUTTONDBLCLK), — это так, ориентировочно. Это чтобы "щелкать" двойным кликом не по самой границе, очерчивающей Item, а именно по самому Item'у. =)
Пример использования:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
SendDblClick(Handle_of_ListView, 3); // дважды кликаем по четвертому Item'у
end;
_____________
P.S. Кстати, в сообщении #35 я слегка опечаталась. Раньше в процедуре SelectItemN было так:
Цитата:
Сообщение от Nyctos Kasignete
Код:
state := LVIS_SELECTED or LVIS_SELECTED;
|
X)) А надо так:
Код:
state := LVIS_FOCUSED or LVIS_SELECTED;
Это чтобы нужный Item не только становился выделенным, но и получал фокус. Но я уже исправила там.
P.P.S. На последний вопрос пусть вам кто-нибудь другой ответит.