![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка в TToolBar? [Windows]
Gleb © (2004-10-22 16:32:00)Открывать файлы посредством OpenSaveDialog можно двумя способами:
- нажав на кнопку "Open" в диалоге
- сделав DoubleClick на файле из списка диалога.
Во втором случае, если имя файла располагается на экране над кнопкой (т.е. поверх её), то срабатывает событие OnClick этой кнопки. В моём случае кнопка называлась "Delete" и удаляла одну строку из только что открывшейся таблицы (и такое удаление данных часто происходит незамеченным)
Также оказалось, что если нажать мышью где-нибудь не на кнопке, подтащить её к кнопке и отпустить мышь, то событие OnClick тоже срабатывает. Наверное, такое поведение нельзя считать правильным.
Долго не заморачиваясь, я обошёл это, создав для ToolBarа обработчики события OnMouseDown и OnMouseLeave, добавив булевую переменную (статус того, что кнопка была нажата) и проверяя и сбрасывая это состояние в процедуре OnClick кнопки.
Но, наверное, нужно подобную проверку включить в компонент.
Gleb (2005-06-14 10:42:00) [1]У TKOLToolbar есть событие (event) OnMouseLeave. Если используешь MCK, то работай как в VCL: тыкаешь мышью в компонент и в ObjectInspector делаешь двойной щелчок на нужном событии.
Peter (2005-06-10 12:27:00) [2]Gleb, ты писал, что для ToolBar прописывал свойство OnMouseLeave. Раскажи, как это сделать. У меня только получалось прописывать дополнительные события для TForm. Просто вписывал процедуру-обработчик в опсание класа. А, как обрабатывать дополнительные события для других компонентов - незнаю.
(2005-02-20 20:53:00) [3]Удалено модератором
mdw (2004-11-17 12:56:00) [4]Да, есть такое дело. Я где-то год назад заметил.
<Falcon> (2004-11-17 12:15:00) [5]
> Открывать файлы посредством OpenSaveDialog можно двумя способами:
> - нажав на кнопку "Open" в диалоге
> - сделав DoubleClick на файле из списка диалога.
> Во втором случае, если имя файла располагается на экране
> над кнопкой (т.е. поверх её), то срабатывает событие OnClick
> этой кнопки.
У меня точно такой же глюк. :(
Gleb (2004-10-25 16:26:00) [6]И в ASM и в PAS версиях одно и то же.
KOL version 1.96
Delphi version 7
Windows XP.
На обычных TButtton этот баг не проявляется. На других контролах - тоже. (Проверял то, что было под рукой - radiobutton, treeview, checkbox, editbox, combobox). Если мышь на этих контролах только отжимать, то эти контролы не получат даже фокус ввода.
SPeller (2004-10-25 13:01:00) [7]У меня на контролах такого симтома нет. А у тебя такое на asm или на pas версии? У меня pas.
SPeller (2004-10-25 13:01:00) [8]Удалено модератором
Примечание: Дубль
Владимир Кладов (2004-10-25 12:31:00) [9]Но все-таки надо тогда проверить другие контролы. Я еще сам гляну, но OnClick в KOL формируется общим кодом, значит надо менять логику срабатывания OnClick во всех контролах сразу.
Gleb (2004-10-25 10:04:00) [10]Дело не в диалоговом окне.
Пусть в программе вообще нет диалоговых окон.
1. Нажимаем на кнопку мыши в любом месте основного окна.
2. Тянем курсор мыши на кнопку тулбара.
3. Отжимаем кнопку мыши.
В этот момент срабатывает событие OnClick кнопки тулбара.
Тулбаром VCL я давно не пользуюсь, как он себя ведёт, сказать не могу, но вот проверил два других тулбара. При таком поведении мыши, событие для кнопки не вызывается. Аналогично повозил мышью в программе MSWord 2003. Событие тоже не вызывается.
Владимир Кладов (2004-10-22 17:12:00) [11]нет, ну это вряд ли ошибка тулбара KOL, это скорее ошибка Windows. Зачем она закрывая диалог посылаем WM_MOUSEUP тому окну, которое было под ним. Еще точнее, зачем API генерирует WM_LDOUBLECLICK или как его до того, как отработает WM_LBUTTONUP. В общем, у себя вы можете поставить проверку, какую хотите, а я у себя пока не буду. Кстати, в VCL оно как - проверяют они там это?
SPeller (2004-10-22 17:06:00) [12]Что-то я ничего не понял что ты сказал. Можно ещё раз и поподробней?