Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.141.6] |
|
Сообщ.
#1
,
|
|
|
Привет всем! Скажите пожалуйста, как ЛУЧШЕ всего отловить и обработать клик на Splitter ?
|
Сообщ.
#2
,
|
|
|
стандартными средствами именно клик отловить нельзя, можно отловить событие OnMoved, происходящее в зависимости от свойства ResizeStyle.
|
Сообщ.
#3
,
|
|
|
Цитата OlegG,3.02.04, 08:01 Привет всем! Скажите пожалуйста, как ЛУЧШЕ всего отловить и обработать клик на Splitter ? Для сплиттера пиши ловушку на WM_LBUTTONDOWN - как писать ловушки - можно посмотреть в FAQ для других типов ловушек. |
Сообщ.
#4
,
|
|
|
можно создать свой сплиттер и обявить у него эвент OnClick, т.к. TSplitter наследник TControl, правда через TGraphicControl - вобщем можна попробовать...
Добавлено в : если не получится со стандартным TSplitter - то можно по другому - я делал свой сплиттер, он работает как обычный + на нем можно размещать др. контролы (как панель) и только что я объявил у него OnClick - работает ... |
Сообщ.
#5
,
|
|
|
Цитата Zoobastik,3.02.04, 06:58 Для сплиттера пиши ловушку на WM_LBUTTONDOWN - как писать ловушки - можно посмотреть в FAQ для других типов ловушек. Да это понятно, только не WM_LBUTTONDOWN а WM_LBUTTONCLICK. Я же спрашиваю как лучше... |
Сообщ.
#6
,
|
|
|
Цитата OlegG,3.02.04, 10:53 только не WM_LBUTTONDOWN а WM_LBUTTONCLICK Смысл - написать не свое сообщение WM_LBUTTONCLICK, а использовать уже имеющееся в Windows (и это WM_LBUTTONDOWN, его и надо ловить) Как лучше? - а как можно хуже? - по-моему все однозначно. |
Сообщ.
#7
,
|
|
|
Цитата Zoobastik,3.02.04, 08:05 Смысл - написать не свое сообщение WM_LBUTTONCLICK, а использовать уже имеющееся в Windows (и это WM_LBUTTONDOWN, его и надо ловить) WM_LBUTTONCLICK - это стандартное сообщение Windows (уже имеющееся) Цитата Zoobastik,3.02.04, 08:05 Как лучше? - а как можно хуже? - по-моему все однозначно. Существует несколько путей отловить сообщение - подправить/написать свой компонент, через объект Application... |
Сообщ.
#8
,
|
|
|
Цитата OlegG,3.02.04, 11:13 Цитата WM_LBUTTONCLICK - это стандартное сообщение Windows Как мне кажется ты путаешь сообщения Windows и сообщения Delphi (посмотрел справочник по WinAPI на русском - там именно то, что я написал - к сожалению он не полный, а SDK под рукой нет, так что на 100% не уверен). Написать можно как procedure Splitter1.Click(..); message WM_LBUTTONDOWN; Не уверен, что все правильно - на VCL почти не прогил (как и на API ) |
Сообщ.
#9
,
|
|
|
Цитата To Zoobastik When you move your mouse and click a button, a huge number of messages are generated, including WM_MOUSEMOVE for each movement of the mouse, WM_LBUTTONDOWN when the button goes down, WM_LBUTTONCLICK when the button is released Взято из "Using Visual C++ 6" |
Сообщ.
#10
,
|
|
|
Цитата OlegG,3.02.04, 12:10 Взято из "Using Visual C++ 6" Назвать можно как угодно - имхо WM_LBUTTOCLICK - это то же, что и WM_LBUTTONUP (или как там) Вообще мож я и не прав. Никогда не слеплял VCL и API (как только слегка разобрался в API, так сразу на VCL полностью забил) |
Сообщ.
#11
,
|
|
|
Дак всё-таки, как лучше всего отловить и обработать клик на Splitter ?
|
Сообщ.
#12
,
|
|
|
Хм.. у него даже хэндла нет
А ведь onMoved вызывается при нажатой кнопке мыши? |
Сообщ.
#13
,
|
|
|
Да, по-другому его сдвинуть нельзя...
|
Сообщ.
#14
,
|
|
|
а без движения не вызывается?
|
Сообщ.
#15
,
|
|
|
неа
|
Сообщ.
#16
,
|
|
|
Тогда копай его исходники, смотри как там сделано onMoved
|
Сообщ.
#17
,
|
|
|
Да, придётся...
|
Сообщ.
#18
,
|
|
|
Цитата +Song, 3.02.04, 16:34 Тогда копай его исходники Цитата OlegG, 3.02.04, 16:43 Да, придётся а посмотреть Пост #4 - не судьба? (особенно два последних слова в нем) |
Сообщ.
#19
,
|
|
|
Я просто думал, что получится обойтись "малой кровью", без редактирования или создания производных классов... Впринципе у меня так сделано, но через Application.OnMessage... Не нравить мне этот способ...
Под словом "так" я имею ввиду "без редактирования или создания производных классов". |
Сообщ.
#20
,
|
|
|
Натыкался на эту тему в поисках, отвечу для тех, кто возможно придет.
type TSplitterEx = class(ExtCtrls.TSplitter) public procedure Click; override; end; TSplitter = class(TSplitterEx); // magic! TForm1 = class(TForm) ... end; ... procedure TSplitterEx.Click; begin ... end; Можно запоминать координаты, перекрывая таким же образом MouseUp. |