![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сообщение WM_LBUTTONDOWN [Delphi]
Дмитрий Галин © (2004-08-12 18:22:00)Почему всётаки глючит обработка сообщения WM_LBUTTONDOWN? Срабатывает нестабильно, через раз?
Дмитрий Галин (2004-08-16 09:45:00) [1]Спасибо большое! Это действительно исправило ситуацию.
Вопрос исчерпан. Тему объявляю закрытой.
Vladimir Kladov (2004-08-13 18:27:00) [2]Когда срабатывает OnMoseDblClk, OnMouseDown уже не срабатывает. Так что поставьте в OnMouseDblClk тот же обработчик, что на OnMouseDown, и будет 0.
nester (2004-08-12 20:30:00) [3]Попробуйте ловить сообщения по старинке, не средсвами КОЛы, а объявляю функцию сообщений(правда не знаю сработает ли в КОЛе), затем смотрите координаты курсора, если он над Вашей кнопкой - то показывайте менюшку.
Хотя это наверно лучше у Кладова спросить куда деваются часть сообщений если их много?
Дмитрий Галин (2004-08-12 19:37:00) [4]Nester, спасибо за вариант решения, хотя проблема всё-таки осталась.
Я хочу сделать кнопку такую как в XP-ном Internet Explorere с выпадающим меню и мне надо обрабатывать сообщения WM_LBUTTONDOWN и WM_LBUTTONUP для отрисовки изображения и вызова Popup-меню. А так как первое сообщение обрабатывается глючно от этого всё портится. Что делать?
Дмитрий Галин (2004-08-12 19:24:00) [5]И как с этим бороться?
nester (2004-08-12 19:04:00) [6]Действительно, причем не важно что это кнопка, вот у формы ловлю, причем заметил закономерность, если не очень быстро тыкать, то работает нормально. Похоже очередь сообщений съедается, новое сообщение убивает предыдущее если предыдущее еще не обработалось.
function TFormMain.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
result:= false;
if MSG.message=WM_LBUTTONDOWN then
begin
Inc(cnt);
Button1.Caption:= Int2Str(cnt);
end
else if MSG.message=WM_LBUTTONUP then
begin
Dec(cnt);
Button1.Caption:= Int2Str(cnt);
end;
end;
Дмитрий Галин (2004-08-12 18:48:00) [7]Аналогичная ситуация происходит при создании нового компонента, когда необходимо выполнить некоторые действия в процедуре WndProcComp. Например:
function WndProcComp(AControl: PControl; var AMessage: TMsg; var AResult: Integer): Boolean;
begin
Result:=false;
case AMessage.Message of
WM_LBUTTONDOWN: begin
AControl.Color:=clRed;
end;
WM_LBUTTONUP: begin
AControl.Color:=clBlue;
end;
end;
end;
Дмитрий Галин (2004-08-12 18:38:00) [8]Извиняй, вот привожу кусок кода программы на KOL.
unit Main;
...
var
Count: integer;
implementaton
procedure TMainForm.KOLFormFormCreate(Sender: PObj);
begin
Count:=0;
end;
procedure TMainForm.Button1MouseDown(Sender: PControl; var Mouse: TMouseEventData);
begin
Inc(Count);
Button1.Caption:=Int2Str(Count);
end;
procedure TMainForm.Button1MouseUp(Sender: PControl; var Mouse: TMouseEventData);
begin
Dec(Count);
Button1.Caption:=Int2Str(Count);
end;
При это значение переменной Сount постепенно уменьшается, т.е. событие по сообщению WM_LBUTTONDOWN не всегда срабатывает.
По идее значение Count должно в итоге быть равно 0.
nester (2004-08-12 18:27:00) [9]Вам же отвечали, в 17-ой строке ошибка:)))))
Фраза типа "в 17-ой строке ошибка" - значит что тут не все видящие, и отсюда Ваш код не видно, мало ли что вы там придумали и написали и спрашиваете почему не работает, никаких деталий не даете. Вопрос типа "я написал программу, а она не работает, почему?". Форум сонный, программисты ленивые и большинсво попросту игнорирует такие вопросы.
Нужно добавить в FAQ как правильно задавать вопрос:))))
И что такое ошибка в 17-ой строке :))))