Главная страница
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.48 MB
Время: 0.05 c
4-1133334120
BVV
2005-11-30 10:02
2006.02.12
Реестр и файловая система


15-1137944178
Kerk
2006-01-22 18:36
2006.02.12
650летие Самары


15-1138184641
GeoNew @@@@@@@@.
2006-01-25 13:24
2006.02.12
Трудоустройство модераторов


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


15-1137787214
Ксардас
2006-01-20 23:00
2006.02.12
Надеюсь Вам понравиться... ))))