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

Вниз

TWinControl неизбежен?   Найти похожие ветки 

 
capkoh ©   (2005-08-22 12:38) [0]

1. Возможно-ли, чтобы наследник TGraphicControl мог получать сообщения: WM_CHAR, WM_KEYDOWN/UP, WM_SYSKEYDOWN/UP и т.д. - т.е. сообщения клавиатуры? Или же он не может получать их впринципе?Мой компонент полностью рисуется на Canvas (без всяких BevelEdges и прочего 3D) и использовать TWinControl в качестве родителя, думаю, не стоит. Кроме того, я, можно сказать, специально его не использую, т.к. компонент будет использовать очень малую часть его сообщений/свойств. Так понял, что подобные сообщения может получать только наследник TWinControl. Можно-ли как-то это обойти? Или TWinControl придется испоьзовать?

2. Временно сделал на основе TCustomComponent (чтоб просто рисовать было). Сообщения нормально получаются. Фокус устанавливается, но при нажатии на стрелку (кнопка на клавиатуре) компонент фокус теряет. Видимо, это заложено в обработчике TWinControl и/или WinAPI, но мне нужно чтобы он не терялся. Как, например, в TEdit, TDrawGrid...


 
Юрий Зотов ©   (2005-08-22 13:26) [1]

1. Графические контролы принципиально не могут получать фокус ввода - тогда о каких же сообщениях клавиатуры может идти речь?

Самое простое решение - наследоваться от TCustomControl. Для рисования там тоже есть все уже готовое.

2. Нужно обработать сообщение WM_GETDLGCODE:

begin
 inherited;
 Message.Result := Message.Result or DLGC_WANTARROWS;
end;

Если нужно, то можно добавить (или убрать) и другие флажки - см. описание WM_GETDLGCODE.


 
capkoh ©   (2005-08-22 15:20) [2]

В [1] описка: TCustomComponent -> TCustomControl; с обработкой WM_GETDLGCODE все встало на свои места.

Тут вдруг появился вопрос. Является-ли необходимым обращение к методу предка при обработке какого-либо сообщения. Или это чаще не обязательно? Я писал везде и не думал, а сейчас что-то стало интересно.


 
capkoh ©   (2005-08-22 15:21) [3]

И вновь сорри, описка в [0]!


 
Юрий Зотов ©   (2005-08-22 15:42) [4]

> capkoh ©   (22.08.05 15:20) [2]

> Является-ли необходимым обращение к методу предка при
> обработке какого-либо сообщения. Или это чаще не обязательно?

Не является, но очень часто это сильно упрощает код и снижает вероятность багов в нем. Например, предварительный вызов унаследованного обработчика позволяет не писать всю обработку самому, а лишь подправить уже готовый результат. Или наоборот, можно сначала нужным образом подправить параметры сообщения, а уже потом вызвать унаследованный обработчик - и пусть работает. Или и то, и другое одновременно.

Но если по логике алгоритма вызов унаследованного обработчика не нужен, то его можно и не вызывать, а сделать всю обработку самому.

И все то же самое относится не только к обработчикам сообщений, а и вообще к вызову любых унаследованных методов. Если надо - вызываем в той точке, где это надо, если не надо - не вызываем вообще.



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

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

Наверх




Память: 0.45 MB
Время: 0.038 c
4-1133333765
BVV
2005-11-30 09:56
2006.02.12
Обращения к реестру и к файлам


15-1137803840
Ezorcist
2006-01-21 03:37
2006.02.12
Избранное


1-1137400414
баклан
2006-01-16 11:33
2006.02.12
CHM Vs HelpFile :)


15-1138025797
stud
2006-01-23 17:16
2006.02.12
удаление нортон антивирус


2-1137904356
Dormidont
2006-01-22 07:32
2006.02.12
Запрешение доступа к другим окнам





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