Вопрос

Я вижу свою версию 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 - это оконный элемент управления, поэтому он содержит все события клавиатуры.Они не публикуются, но вы можете назначить их в коде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top