Delphi PaintBox без ключевых событий
Вопрос
Я вижу свою версию delphi, в которой нет событий Key Events (OnKeyDown, OnKeyUp, OnKeyPress) для TPaintBox.Я бы хотел что-то подобное обработать.Был у кого-нибудь ящик для рисования с этими событиями?
Решение
Как сказал TLama, вам нужно унаследовать от TCustomControl. Но вам понадобится дополнительный код для публикации всех событий клавиатуры. Вы можете выбрать простой способ и наследовать от TPanel, поскольку TPanel уже предоставляет Canvas и ряд событий клавиатуры.
Но вот код, показывающий, как создать и зарегистрировать новый элемент управления, который опубликовал свойства TCustomControl и представляет новое событие OnPaint:
Если вы создадите новый пакет, добавите этот модуль и установите его, у вас будет новый элемент управления TGTPaintBox, который может иметь фокус (хотя вы его не видите). Он также может получать ввод с клавиатуры.
родовое слово Я добавил некоторые функции, пытаясь сделать элемент управления прозрачным, потому что PaintBox тоже. Одним из недостатков является то, что вам нужно перекрасить родительский объект, чтобы очистить ранее нарисованный контент. В демонстрационном приложении это достаточно просто. Я просто аннулирую форму вместо элемента управления. : p
Если он вам не нужен, вы можете удалить из элемента управления WMEraseBkGnd
, CreateParams
и SetParent
.
Небольшая демонстрация: Наклейте этикетку на форму. Поместите поверх него TGTPaintBox и сделайте его немного больше. Затем добавьте таймер и, возможно, другие элементы управления.
Убедитесь, что для свойства TabStop GTPaintBox установлено значение True
.
Затем реализуйте следующие события:
родовое словоДругие советы
Вы также можете создать фрейм с окном для рисования (выровненный по сгенерированному коду) и повторно использовать фрейм при необходимости.alClient
- это оконный элемент управления, поэтому он содержит все события клавиатуры.Они не публикуются, но вы можете назначить их в коде.