Главная страница
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.033 c
4-1133358539
remlin
2005-11-30 16:48
2006.02.12
считывание данных с эл.тахеометра


8-1124699608
Новичек11
2005-08-22 12:33
2006.02.12
Эквалайзер к MS Media Player


6-1131021421
Vetalich
2005-11-03 15:37
2006.02.12
Время задержки (ping)


1-1137284109
stack
2006-01-15 03:15
2006.02.12
Есть ли компоненты для экспорта/импорта в Oracle


15-1137913617
Bogdan1024
2006-01-22 10:06
2006.02.12
А где достать самый полный хелп