Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.09;
Скачать: CL | DM;

Вниз

Отработка ARROW KEYS, мышиных сообщений в комп. от TScrollBox...   Найти похожие ветки 

 
Mr.ElectroNick   (2003-05-28 15:38) [0]

Суть проблемы такая. Необходимо создать компонент обладающий горизонтальной и вертикальной прокруткой (идеальный вариант родителя по моему это TScrollBox).
Чтобы избежать перескакивания фокуса на другие контролы на форме я помещаю свой контрол в Panel.
Внутри компонента я перекрываю WndProc и обрабатываю ПЕРЕД inherited нужные мне сообщения - WM_KEYDOWN, WM_KEYUP, WM_CHAR.

1-я сложность я получаю все нужные нажатия от клавиатуры кроме arrow keys (VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT)
2-я сложность. Я не могу внутри компонента получить сообщения от мышки.

Самое смешное в этом то что Spy++ и WinSight довольно убедительно утверждают что мой контрол получае все сообщения в неизменном виде.

Цель компоненты - простой редактор текста но с доп функциями которых нет в TSynEdit (synedit.sourceforge.net). Копался в исходниках самого TSynEdit, но в связи с тем что код расчитан на компиляцию в VCL, CLX и Kylix версиях приложений, то там довольно сложно найти чтолибо среди директив компилятора.

Вот. Надеюсь что предоставил более менее полную информацию о моей проблеме.

Мой вопрос но коротко: как отлавливать в НЕЗАВИСИМОМ КОМПОНЕНТЕ ВСЕ возможные сообщения которые посылает в него система. И в случае если TScrollBox не подходит - какой компонент брать за основу...

ЗАРАНЕЕ СПАСИБО МАСТЕРА...


 
Skier ©   (2003-05-28 15:45) [1]


> 1-я сложность я получаю все нужные нажатия от клавиатуры
> кроме arrow keys (VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT)


WM_GETDLGCODE + DLGC_WANTARROWS;


 
Mr.ElectroNick   (2003-05-28 15:50) [2]

Это отослать из формы контролу или из контрола системе...
Уже прочитал в MSDN что это за меседж... Можно чуть чуть подробнее... я к сожалению пока не селён в MAPI...

Спасибо...


 
Skier ©   (2003-05-28 15:55) [3]

>Mr.ElectroNick
1) У своего компонента обработчик на сообщение WM_GETDLGCODE
2) в обработчике пропиши :

procedure TStretchHandle.WMGetDLGCode(var Message: TMessage);
begin
Message.Result := Message.Result or DLGC_WANTARROWS;
end;

Теперь твой компонент должен ловить "стрелки"...


 
Mr.ElectroNick   (2003-05-28 15:57) [4]

Огромный THANX... Сегодня попробую... Если что ещё буду спрашивать...


 
Mr.ElectroNick   (2003-05-28 15:58) [5]

Еще... А как быть с мышкой?... нажатия, движения и т.д. неужели придется перформить из формы?


 
Skier ©   (2003-05-28 16:01) [6]


> Чтобы избежать перескакивания фокуса на другие контролы
> на форме я помещаю свой контрол в Panel.

Вот отсюда по-подробнее...Зачем избегать ?


 
Mr.ElectroNick   (2003-05-28 16:28) [7]

Да всё просто...

1. Когда TScrollBox находится не в группирующем объекте, то по нажатию тех же "стрелок" получается такая последовательность сообщений

1-е нажатие
- WM_KEYDOWN Code: VK_UP
- WM_KILLFOCUS
< тут блокируется вся обработка клавиш >
2-е нажатие
- WM_SETFOCUS
- WM_KEUPU Code: VK_UP

В итоге получается корявая работа... Если OWNER-ом и PARENT-ом сделать Panel то эта ситуация исключается...

2. По нажатию на TAB. Фокус (установленый мной в FormActivate) перескакивает к любому другому стандартному контролу типа TEdit и естественно назад уже не возвращается...

В качестве примера я исследовал как попадают меседжы в Borland-овский редактор кода и HomeSite 5 (аналог которого собственно и нужно создать)...

Вот такие вот WIN-бублики


 
Skier ©   (2003-05-28 16:37) [8]

>Mr.ElectroNick (28.05.03 16:28)

1.
> < тут блокируется вся обработка клавиш >

Что значит "блокируется" ?
2.

> По нажатию на TAB. Фокус (установленый мной в FormActivate)
> перескакивает к любому другому стандартному контролу типа
> TEdit и естественно назад уже не возвращается...

см. TForm.KeyPreview и
обработчик сообщения TCustomForm.CM_DIALOGKEY


 
Mr.ElectroNick   (2003-05-28 16:41) [9]

Под БЛОКИРУЕТСЯ я понимаю ситуацию когда я после WM_KILLFOCUS не получаю никаких клавишных сообщений... до тех пока не нажму какую либо из стрелок...
Что честно говоря довольно странно, или я чегото ещё недопонял в логике работы компонентов порожденных от TWinControl...

P.S. Лучший способ разобраться - спросить того кто знает, и поковыряться в чужом коде...


 
Mr.ElectroNick   (2003-05-28 16:42) [10]

Небольшое примечание... свой контрол я инициализирую вручную, не через палитру компонент. Что в принцепе логично в процессе разработки.



Страницы: 1 вся ветка

Текущий архив: 2003.06.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
14-26786
Style
2003-05-20 11:21
2003.06.09
Кофе :)


3-26376
Wasilla
2003-05-21 09:41
2003.06.09
ADO & Paradox


6-26633
sergey2
2003-02-23 20:10
2003.06.09
Как вытащить рисунок (png) из HTML страницы?


3-26380
DBDev
2003-05-20 18:02
2003.06.09
Как записать объект OLE в поле БД минуя его запись в файл???


3-26347
Belkova
2003-05-20 13:00
2003.06.09
DBGRID