Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
6-1104081220
Delta
2004-12-26 20:13
2005.03.06
запуск ехе на чужом компе


14-1108546031
Ilya__
2005-02-16 12:27
2005.03.06
Какая функция в Делфи, убирает пробелы из строки?


8-1100701038
Dysan
2004-11-17 17:17
2005.03.06
чем открыть tiff ?


14-1108128517
msguns
2005-02-11 16:28
2005.03.06
Кругом 500


1-1107956075
TeNY
2005-02-09 16:34
2005.03.06
Замена ресурса в EXE файле.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский