![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PostMessage(<окно>, wm_LButtonDown, 0, <координаты>)-не пашит :( [D7, WinXP]
Murava © (2006-09-12 23:50:00)Помогите!!! Хочу нажать левую кнопку мыши, пишу:
PostMessage(<окно>, wm_LButtonDown, 0, <координаты>)
Если нажимаю на форме, то все отлично работает, но если координаты указуют на кнопку на этой форме, то ничего не происходит(события при OnMouseDown на форме выполняюся, а на кнопки НЕТ). Что делать??? Подскажите.
И еще: можно ли каким-то образом получить объект самой кнопки??(или другого объекта на окне)
GrayFace (2006-09-13 15:18:00) [1]Button1.Handle
Сергей М. (2006-09-13 12:41:00) [2]WindowFromPoint
Murava (2006-09-13 09:52:00) [3]To Ketmar:
тогда как мне получить это окошко(пусть это будет кнопка с координатами 100, 100), если у меня есть объект основного окна?
Ketmar (2006-09-13 01:53:00) [4]> [4] Murava © (13.09.06 01:45)
кнопка -- это тоже окошко. удивись. с чего бы ей "нажиматься", если сообщение посылается вовсе и не ей?
Murava (2006-09-13 01:45:00) [5]p.s.
Напишу точнее:
procedure TForm1.Button1Click(Sender: TObject);
var
i:longbool;
begin
h:=FindWindow(nil, 'Form1);
i:=PostMessage (h, wm_LButtonDown, 0, 100*65536+100);
if i then showmessage('1');
i:=PostMessage(h, wm_LButtonUp, 0, 100*65536+100);
if i then showmessage('2');
end;
procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage('ButtonMouseDown');
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage('FormMouseDown');
end;
когда кнопка НЕ лежит на (100, 100), то-есть выполняется FormMouseDown, то выводятся сообщения "FormMouseDown", "1", "2". Самое главное, что когда кнопка покрывает (100, 100), то все-равно выводятся "FormMouseDown", "1", "2". То-есть 'нажимается' именно форма, а не кнопка. ПОЧЕМУ??? И как нажать кнопку???
P.P.S. Насчет "неактивной кнопки" я понял. Просто я сначала посылал wm_LButtonDown, а вот про wm_LButtonUp забыл :). Но все-равно должно ж выполняться или Button2MouseDown или хотя б Button2Click...
murava (2006-09-13 00:57:00) [6]To Джо:
Еще я заметил, что когда я нажимаю(вручную левой кнопкой мыши) на Button1, а потом пытаюсь нажать(тоже с помощью левой кнопки мышы) на вторую кнопку (Button2), то она (Button2) не становилась активной и не нажималась(как будто заблокирована), а вот после еще одного нажатия уже выполнялось события OnMouseDown для Button2... Может подскажешь из-за чего это может происходить. Возможно это и есть причиной того, что не выполняется PostMessage(...)??
murava (2006-09-13 00:50:00) [7]procedure TForm1.Button1Click(Sender: TObject);
var h:hwnd;
begin
h:=FindWindow(nil, 'Form1');
PostMessage(h, wm_LButtonDown, 0, 100*65536+100);
end;
вообщем это и есть весь код. На форме находится две кнопки: Button1 и кнопка, которая лежит на координатах (10, 10). Когда я убирал вторую кнопку и обрабатовал события ОnMouseDown на форме с координатами (10, 10), то событие отлично выполнялось, а вот когда я сделал аналогисные действия на кнопке, то... ничего не происходит
Джо (2006-09-13 00:02:00) [8]
PostMessage(Handle,wm_LButtonDown,0,Coords);
PostMessage(Handle,WM_LBUTTONUP,0,Coords);
А лучше код покажи, что ты там делаешь.
> И еще: можно ли каким-то образом получить объект самой кнопки?
> ?(или другого объекта на окне)
О каком "объекте" ты говоришь в контексте WinApi?