Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Вниз

Отработка 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.089 c
7-26814
Юра
2003-04-02 03:16
2003.06.09
Сканер штрих-кода


14-26792
Might
2003-05-23 17:06
2003.06.09
Построение графического редактора


4-26827
Griffin
2003-04-08 17:21
2003.06.09
Какое сообщение нужно послать


3-26351
Ice2
2003-05-19 19:43
2003.06.09
Paradox и пользователи


1-26542
Михайлов Антон
2003-05-25 14:37
2003.06.09
Сервис





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский