Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2022, 17:59   #1
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Здравствуйте,

Как можно выбрать с кликом item в ListBox чужого окна.
Выбираю строку так:
Код:
SendMessage(lb0, LB_SETCURSEL, 1, 0);
Но нет клика.
Нашёл код:
Код:
    Dim rcitm As RECT
    Dim lpr As Long
    SendMessage hwndEd, LB_SETCURSEL, i, 0:
    SendMessage hwndEd, LB_GETITEMRECT, i, ByVal rcitm
    lpr = (rcitm.Left And &HFFFF) Or ((rcitm.Top And &HFFFF) * 65536)
    SendMessage hwndEd, WM_LBUTTONDBLCLK, 0, ByVal lpr
Как он будет выглядеть на языке Delphi?
Пожалуйста помогите, очень нужно нажать на Item в ListBox в чужом окне.
Заранее спасибо.

Или, есть какой либо другой метод нажатия на пункт в listbox в чужом окне?
Нужно учитывать что окно может перемещаться и т.д.

Последний раз редактировалось BDA; 02.10.2022 в 15:50.
cybernewbie вне форума Ответить с цитированием
Старый 01.10.2022, 18:34   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
{ Если нет описания функции Coord
function Coord(aX, aY: Word): LongInt; inline;
begin
   Result := aX or (aY shl 16);
end;
}

procedure ClickAndSelect(hWnd: THandle);
var
   R: TRect;
begin
   SendMessage(hWnd, LB_SETCURSEL, i, 0);
   SendMessage(hWnd, LB_GETITEMRECT, i, Integer(@R));
   SendMessage(hWnd, WM_LBUTTONCLICK, 0, Coord(R.Left + R.Width div 2, R.Top + R.Height div 2)); // Кликаем в центр Item, а не в угол как в примере
end;
macomics вне форума Ответить с цитированием
Старый 01.10.2022, 20:23   #3
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Описание функции Coord вроде есть, но выдаёт две ошибки:
Код:
E2029 ')' expected but ',' found
E2250 There is no overloaded version of 'SendMessage' that can be called with these arguments
Используя функцию:
Код:
function Coord(aX, aY: Word): LongInt; inline;
begin
   Result := aX or (aY shl 16);
end;
Программа запускается, но клика как будто нет, при клике должны появляться элементы.
Код:
SendMessage(hWnd, LB_GETITEMRECT, i, Integer(@R));
"Integer(@R)" выдаёт 1700568
Код:
endMessage(hWnd, WM_LBUTTONCLICK, 0, Coord(R.Left + R.Width div 2, R.Top + R.Height div 2));
"Coord(R.Left + R.Width div 2, R.Top + R.Height div 2)" выдаёт 3604560
cybernewbie вне форума Ответить с цитированием
Старый 01.10.2022, 20:33   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

3604560 = $00370050 т.е. координаты клика x = 80, y = 55 относительно угла окна hWnd
macomics вне форума Ответить с цитированием
Старый 01.10.2022, 20:35   #5
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

понял, странно, почему тогда не срабатывает ((
Также использую не WM_LBUTTONCLICK, потому что выдаёт:
Код:
E2003 Undeclared identifier: 'WM_LBUTTONCLICK'
а WM_LBUTTONDBLCLK

Последний раз редактировалось cybernewbie; 01.10.2022 в 20:39.
cybernewbie вне форума Ответить с цитированием
Старый 01.10.2022, 20:47   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Лучше WM_LBUTTONDOWN
macomics вне форума Ответить с цитированием
Старый 01.10.2022, 20:49   #7
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

И огромное спасибо за перевод кода на Delphi.
По прежнему нуждаюсь в помощь, заранее благодарю

Цитата:
Сообщение от macomics Посмотреть сообщение
Лучше WM_LBUTTONDOWN
Огромное спасибо, помогло, гигантское спасибо)

Последний раз редактировалось BDA; 02.10.2022 в 16:49.
cybernewbie вне форума Ответить с цитированием
Старый 01.10.2022, 20:54   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Попробуйте так
Код:
SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, Coord(R.Left + R.Width div 2, R.Top + R.Height div 2))
ADD:
Код:
procedure ClickAndSelect(hWnd: THandle; uiIndex: Integer);
   function Coord(aX, aY: Word): LongInt; inline;
   begin
      Result := aX or (aY shl 16);
   end;
var
   R: TRect;
begin
   SendMessage(hWnd, LB_GETITEMRECT, uiIndex, Integer(@R));
   PostMessage(hWnd, LB_SETCURSEL, uiIndex, 0);
   PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, Coord(R.Left + R.Width div 2, R.Top + R.Height div 2)); // Кликаем в центр Item, а не в угол как в примере
end;

Последний раз редактировалось macomics; 01.10.2022 в 20:58.
macomics вне форума Ответить с цитированием
Старый 01.10.2022, 21:00   #9
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Попробуйте так
Так не работает, пробовал
cybernewbie вне форума Ответить с цитированием
Старый 01.10.2022, 21:27   #10
cybernewbie
Пользователь
 
Регистрация: 01.10.2022
Сообщений: 63
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
procedure ClickAndSelect(hWnd: THandle; uiIndex: Integer);
function Coord(aX, aY: Word): LongInt; inline;
begin
Result := aX or (aY shl 16);
end;
var
R: TRect;
begin
SendMessage(hWnd, LB_GETITEMRECT, uiIndex, Integer(@R));
PostMessage(hWnd, LB_SETCURSEL, uiIndex, 0);
PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, Coord(R.Left + R.Width div 2, R.Top + R.Height div 2)); // Кликаем в центр Item, а не в угол как в примере
end;
Это тоже не работает, сработал только:
Цитата:
Сообщение от macomics Посмотреть сообщение
Лучше WM_LBUTTONDOWN
Ещё раз огромное спасибо, гигантское спасибо
cybernewbie вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление чужого окна WorldMaster Win Api 7 06.04.2017 17:43
Item Listbox Афанасий[vedma] Компоненты Delphi 1 07.05.2012 13:49
ListBox, привязка экземпляра класса к Item. Возможно ли? Casper-SC Общие вопросы .NET 1 24.05.2010 10:40
VirtualStringTree чужого окна akaTemporary Общие вопросы Delphi 0 29.01.2010 14:32
Можно ли в ListBox шрифт в одном Item сделать жирным, а в другом обычным? Washington Компоненты Delphi 9 28.03.2007 12:43