Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Создание визуальных компонентов в Delphi
При первом знакомстве с delphi несомненно удивляешься великому множеству разных визуальных компонентов. Кнопочки, панельки, надписи и многое другое. Но после нескольких месяцев пользования этой средой разработки появляется желание написать что-то свое. Именно эту задачу мы и попытаемся решить используя инвентарь delphi который есть в у нас в наличии и естественно свое воображение. Постановка задачи Для начала определимся, что и как мы будем делать. В этом вопросе большую роль играет ваше воображение, эстетические предпочтения и т.д. Я же в силу своей распущенности предложу Вам в качестве примерного варианта создать кнопку нестандартной формы, а именно – овальной. Реализация Наиболее правильным, с точки зрения иерархии VCL, методом решения первого пункта поставленной задачи, будет создание нового компонента, в качестве базового класса которого мы выберем TCustomControl. Этот класс является базовым для создания компонентов-надстроек над визуальными объектами Windows, и предоставляет методы для отрисовки объектов разных форм. Если же у вас нет необходимости наследовать все особенности поведения объектов Windows то можете в качестве базового класса использовать TGraphicControl, наследники которого отрисовываются быстрее, поскольку не должны следить за уймой Виндовских служебных сообщений. Сам компонент TCustomControl определен в модуле Controls.pas следующим образом: tcustomcontrol = class(twincontrol) Здесь самым интересным для нас является метод paint и свойство canvas. Посредством этих двух членов класса TCustomControl мы и будет рисовать нашу кнопку. Кроме этого мы немножко расширим функциональность нашего компонента и придадим ему возможность устанавливать цвет темного и светлого участка своей границы, а также ее толщину, и наконец определим свойство Flat которое отвечает за функциональность аналогичного свойства стандартных компонентов Delphi. Исходя из вышесказанного прототип нашего компонента (tellipsebutton) будет выглядеть следующим образом: tellipsebutton = class(tcustomcontrol)
Как видим, здесь помимо базовых конструктора create и метода afterconstruction переопределены и методы Paint и Repaint. Вся функциональность этого компонента в основном заключена в динамических методах DrawFlat, DrawNormal, DrawPushed которые отвечают за рисование компонента соответственно в режиме Flat, в нормальном приподнятом режиме и в нажатом режиме. Собственно рисование делается с помощью метода canvas.arc, который рисует часть эллипса заданным цветом. Таким образом мы рисуем одну половину темным цветом а другую – светлым и получаем эффект выпуклости. Поменяв местами цвета мы достигаем эффекта «нажатия» для нашей кнопки. Ну а использовав в качестве цвета фона – средний между темным и светлым цветами границы – мы получаем ефект Flat: procedure tellipsebutton.drawflat; procedure tellipsebutton.drawnormal;
procedure tellipsebutton.drawpushed; Теперь, оснастив наш компонент необходимыми функциями мы можем приступить к его «причесыванию», т.е. написанию рутинных методов по присвоению значений свойствам и отладке. Первым делом здесь надо реализовать реакцию компонента на события мыши. Это мы делаем посредством методов wmlButtonDown, wmlButtonUp, wmMouseMove. procedure tellipsebutton.wmlbuttondown; procedure tellipsebutton.wmlbuttonup; Здесь также мы реализуем функциональность свойства Flat. (в wmmousemove). Кроме этого мы используем методы cmMouseEnter, cmMouseLeave для вызова соответствующих обработчиков событий. А также реализовываем метод cmTextChanged для правильного отображения текста кнопки: procedure tellipsebutton.cmtextchanged; Теперь же дело только за методами Paint и Repaint, которые мы реализовываем следующим образом: procedure tellipsebutton.paint; procedure tellipsebutton.repaint; Все. Теперь наш компонент готов к испытаниям. И перед тем как его регистрировать и кидать на палитру компонентов настоятельно рекомендую Вам проверить его функциональность в runtime режиме. В противном же случае вы рискуете повесить всю IDE Delphi при добавлении компонента на форму. Проверка компонента -создать новое приложение unit main; interface uses type var implementation {$r *.dfm} procedure t form 1. form destroy(sender:tobject); End. После такой, наглядной проверки и отладки вы можете спокойно регистрировать ваш компонент: procedure register; И использовать уже в ваших приложениях для быстрого создания эллипсоидных кнопок. Итоги
|
||||||
Последнее изменение этой страницы: 2017-02-21; просмотров: 276; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.120.133 (0.015 с.) |