Форум: "KOL";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизСообщение WM_LBUTTONDOWN Найти похожие ветки
← →
Дмитрий Галин (2004-08-12 18:22) [0]Почему всётаки глючит обработка сообщения WM_LBUTTONDOWN? Срабатывает нестабильно, через раз?
← →
nester (2004-08-12 18:27) [1]Вам же отвечали, в 17-ой строке ошибка:)))))
Фраза типа "в 17-ой строке ошибка" - значит что тут не все видящие, и отсюда Ваш код не видно, мало ли что вы там придумали и написали и спрашиваете почему не работает, никаких деталий не даете. Вопрос типа "я написал программу, а она не работает, почему?". Форум сонный, программисты ленивые и большинсво попросту игнорирует такие вопросы.
Нужно добавить в FAQ как правильно задавать вопрос:))))
И что такое ошибка в 17-ой строке :))))
← →
Дмитрий Галин (2004-08-12 18:38) [2]Извиняй, вот привожу кусок кода программы на 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.
← →
Дмитрий Галин (2004-08-12 18:48) [3]Аналогичная ситуация происходит при создании нового компонента, когда необходимо выполнить некоторые действия в процедуре 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;
← →
nester (2004-08-12 19:04) [4]Действительно, причем не важно что это кнопка, вот у формы ловлю, причем заметил закономерность, если не очень быстро тыкать, то работает нормально. Похоже очередь сообщений съедается, новое сообщение убивает предыдущее если предыдущее еще не обработалось.
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 19:24) [5]И как с этим бороться?
← →
Дмитрий Галин (2004-08-12 19:37) [6]Nester, спасибо за вариант решения, хотя проблема всё-таки осталась.
Я хочу сделать кнопку такую как в XP-ном Internet Explorere с выпадающим меню и мне надо обрабатывать сообщения WM_LBUTTONDOWN и WM_LBUTTONUP для отрисовки изображения и вызова Popup-меню. А так как первое сообщение обрабатывается глючно от этого всё портится. Что делать?
← →
nester (2004-08-12 20:30) [7]Попробуйте ловить сообщения по старинке, не средсвами КОЛы, а объявляю функцию сообщений(правда не знаю сработает ли в КОЛе), затем смотрите координаты курсора, если он над Вашей кнопкой - то показывайте менюшку.
Хотя это наверно лучше у Кладова спросить куда деваются часть сообщений если их много?
← →
Vladimir Kladov (2004-08-13 18:27) [8]Когда срабатывает OnMoseDblClk, OnMouseDown уже не срабатывает. Так что поставьте в OnMouseDblClk тот же обработчик, что на OnMouseDown, и будет 0.
← →
Дмитрий Галин (2004-08-16 09:45) [9]Спасибо большое! Это действительно исправило ситуацию.
Вопрос исчерпан. Тему объявляю закрытой.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c