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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2008, 15:39   #1
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию нажать на TSpeedButton чужого СВЕРНУТОГО окна

Последнее сообщение. Скопировано с темы справедливо закрытой модератором. http://programmersforum.ru/showthread.php?t=21450

С ужасом для себя выяснил что компонент TspeedButton не имеет Handle . Так же как и все компоненты наследники TGraphicControl, в частности, TLabel, TShape, TImage, TBevel и т.д.

вот статья

http://www.delphikingdom.com/asp/ans...IDAnswer=62488
Получилось нажать на кнопку "мышкой" вот так

procedure TForm1.Button2Click(Sender: TObject);
var wnd:HWND;
r:TRect;
prev_pos:TPoint;
begin
wnd:=Findwindow(nil, 'Заказ запчастей');; // получаем хэндл окна с кнопкой
GetWindowRect(wnd,r); // получаем координаты окна.
GetCursorPos(prev_pos); // запоминаем положение курсора
memo1.Clear;
memo1.Lines.Append('X='+inttostr(r. Left));
memo1.Lines.Append('Y='+inttostr(r. Top));

SetCursorPos(r.left+633+20+10,r.top +280+20+10); // устанавливаем курсор над кнопкой
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, r.Left+663, r.Top+300, 0, 0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, r.Left+6+3, r.Top+300, 0, 0);
SetCursorPos(prev_pos.x,prev_pos.y) ; // возвращаем курсор
end;


Но это работает если форма программы НЕ свернута и находится В РАМКАХ рабочей зоны экрана.
Как сделать клик на кнопке таким же (или другим) способом в СВЕРНУТОМ окне ?????
Yuran вне форума Ответить с цитированием
Старый 11.06.2008, 15:42   #2
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

Развернуть и нажать...
Нет невыполнимых задач, всё дело времени...
D-mon вне форума Ответить с цитированием
Старый 11.06.2008, 15:48   #3
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию

Это я уже предположи. Но в душе сидела надежда что можно как то по другому.

SendMessage(Handle,WM_SYSCOMMAND,SC _RESTORE,0);
Восстановить окно


А какие сообщения отвечают за изменение координать окна?

окно.left
и
окно.top
Yuran вне форума Ответить с цитированием
Старый 11.06.2008, 16:08   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

WM_MOVE или WM_MOVING точно не помню.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2008, 16:34   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Всё намного проще:

Код:
PostMessage(h, WM_LBUTTONDOWN, 0, MAKELPARAM(x,y));
PostMessage(h, WM_LBUTTONUP, 0, MAKELPARAM(x,y));
h - хэндл формы, на которой лежит кнопка (ну или того настоящего окна, на которой она лежит в общем случае)
x, y - клиент-координаты формы в которые попадает кнопка.

------------------

в Дельфи, вместо MAKELPARAM -
Код:
x + y shl 16
B_N вне форума Ответить с цитированием
Старый 11.06.2008, 17:06   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в Дельфи, вместо MAKELPARAM
Не требуется. В Делфи есть MAKELPARAM и вполне работает.
Цитата:
Всё намного проще:
Предположим координат я не знаю. Как тогда?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2008, 17:14   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не требуется. В Делфи есть MAKELPARAM и вполне работает.
Вот и чудненько Я последнее время всё время стараюсь подстраховаться.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Предположим координат я не знаю. Как тогда?
А тогда, видимо, и вопрос отпадает. Автор изначально собирался "щелкать" по координатам, а speedbutton, видимо, реализована на уровне VCL, никаких её признаков, выходящих за рамки приложения или сообщений мной замечено не было.
B_N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считать значение компонента с чужого окна chipmunk Общие вопросы Delphi 1 12.06.2008 11:22
закрыть все дочерни окна, кроме главного окна Worms Общие вопросы Delphi 2 03.12.2007 22:18
Нужно получить все компоненты чужого окна по дескриптору 3lander Win Api 12 28.11.2007 20:41
Как сделать чтобы дочерние окна в MDI-приложениях были вне главного окна??? dimonchuk Общие вопросы Delphi 1 11.08.2007 12:13
Перехват и подмена кодов клавиш чужого окна Hedgehog Безопасность, Шифрование 3 23.04.2007 16:05