Текущий архив: 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.043 c