Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо