Как написать класс на основе TCustomControl типа TButton, но с несколькими возможными состояниями (т.е рисует на себе обну картинку, если мыша на нем, и другую, если мыша с него съехала) и не квадратный.
Здравствуйте, Dazz, Вы писали:
D> Как написать класс на основе TCustomControl типа TButton, но с D> несколькими возможными состояниями (т.е рисует на себе обну картинку, D> если мыша на нем, и другую, если мыша с него съехала) и не квадратный.
Для мышки обрабатывай события CM_MOUSEENTER и CM_MOUSELEAVE.
Чтобы сделать компонент непрямоугольным, есть два пути:
1. Рисуешь непрямоугольную кнопку на прямоугольном компоненте
2. Используешь функцию WinAPI SetWindowRgn, предварително создав регион
нужной формы.
А вообще, лучше воспользуйся готовым компонентом, сходив на сайт http://www.torry.net/
А что нужно вообще сделать, для того, чтобы создать компонент (надо ли там регистрировать класс окна или что-либо подобное)? В справке Delphi об этом сказано как-то очень невнятно.
Здравствуйте, Dazz, Вы писали:
D>Здравствуйте, ArtDenis.
D>А что нужно вообще сделать, для того, чтобы создать компонент (надо ли там регистрировать класс окна или что-либо подобное)? В справке Delphi об этом сказано как-то очень невнятно.
Всё очень просто.
1. Для начала лучше всего создать проект для своих компонентов. (File->New->Package)
2. Создаём компонент. (File->New->Component)
3. Указываем, что он должен быть наследником TCustomControl
4. Выносим нужные свойства в published секцию.
5. Добавляем свои свойства и методы.
6. Пишем свои процедуры для Paint, Resize, Click, CreateParams (если это требуется), не забывая при этом вызывать процедуру предка.
7. Делаем Install.
8. Отлаживаем (отлаживается компонент, как обычный DLL-код)
9. Усё... Можно продавать (если купят)
Еще советую почитать любую книжку, в которой описан процесс создания компонента. В этом деле много тонкостей, и как правило, в книжках они описаны.
Здравствуйте, Dazz, Вы писали: D>А что нужно вообще сделать, для того, чтобы создать компонент (надо ли там регистрировать класс окна или что-либо подобное)? В справке Delphi об этом сказано как-то очень невнятно.
Ну, для начала можно почитать RSDN. См. раздел Статьи\Delphi. Например, вот здесь
Я очень извиняюсь за свои тормоза, но помогите плз!
Обычно рассказано, как изменять уже созданный компонент (н-р TLabel или еще что нибудь). А меня интересует, как его создать с "нуля", т.е. именно с TCustomControl. Т.е. здесь надо еще как-то создать оконный елемент со всякими свойствами типа фон, размеры, возможная рамка, курсор опять же. А вот это у меня и не получается!
Здравствуйте, Dazz, Вы писали:
D>Обычно рассказано, как изменять уже созданный компонент (н-р TLabel или еще что нибудь). А меня интересует, как его создать с "нуля", т.е. именно с TCustomControl. Т.е. здесь надо еще как-то создать оконный елемент со всякими свойствами типа фон, размеры, возможная рамка, курсор опять же. А вот это у меня и не получается!
А ты подсмотри в исходниках того же TLabel. Там все есть. Вообще вся VCL поставляется в исходниках.
... << RSDN@Home 1.1 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Dazz, Вы писали: D>... D> Обычно рассказано, как изменять уже созданный компонент (н-р TLabel или D> еще что нибудь). А меня интересует, как его создать с "нуля", т.е. D> именно с TCustomControl. Т.е. здесь надо еще как-то создать оконный D> елемент со всякими свойствами типа фон, размеры, возможная рамка, курсор D> опять же. ...
Чтобы создавать компонент с нуля, надо наследоваться от TControl — для
визуальных и от TComponent — для невизуальных контролов. Если ты наследуешся
от TCustomControl, то базовый класс автоматически создаёт оконный элемент.
Если ты хочешь участвовать в создании контрола, ты должен переопределить
процедуру CreateParams. Стандартные виндовые контролы рисуют себя сами. В
твоём же случае, нужно использовать процедуру Paint для рисования. Если не
хочешь парится с рисованием всяких бордеров, посмотри ф-ю DrawFrameControl
(она есть только под винды).