http://www.netgocn.com Оригинал
Все кнопки не имеют цвета в стандартных программах Windows. Поэтому все компоненты кнопок, предоставленные Delphi, также не имеют цветных атрибутов.
Здесь я предоставляю метод для создания кнопок аммония с цветными атрибутами, используя пользовательские компоненты. Измените цвет по желанию во время этапа дизайна, как и компоненты, предоставленные самим Delphi (код в этой статье выполнен в Delphi 4.0).
Первый шаг
Откройте Delphi, выберите опцию Component/New Component Menu, и вручную заполните или раскрывающуюся в раскрывающемся блоке типа предка Заполнит его на основе этого. Остальная часть письменного контента в диалоговом окне будет заполнена по своему усмотрению, но вы должны отметить, что имя класса не может быть таким же, как существующее (включая ваше индивидуальное) имя класса, и вы также должны помнить, что оно определено Расположение установки компонента (контент в раскрывающемся поле страницы палитры) и расположение хранилища файлов устройства на диске (содержимое поле «Редактирование имени файла блока»), в противном случае, где вы найдете его в будущем ?
Шаг 2
После завершения вышеуказанной работы нажмите кнопку OK ниже, и Delphi автоматически генерирует базовый код компонента для вас. (Эта статья была удалена. Все автоматически сгенерированные комментарии) должны быть сохранены.
Шаг 3
Добавьте наш код в приведенном выше структуре кода, конечно, это основная работа, которую мы хотим сделать.
1. Измените определение типа данных, часть файла модуля, автоматически сгенерированная Delphi, на:
тип
Tbutton1 = класс (tbutton)
Частный
Fcolor: tcolor;
Fcanvas: tcanvas;
Ispocused: логический;
процедура SetColor (значение: TCOLOR);
Процедура cndrawitem (var Сообщение: twmdrawitem);
защищен
Процедура CreateParams (var params: tcreateparams);
процедура SetButtonStyle (AdeFault: Boolean);
публичный
конструктор Create (AOHOWNER: TCOMPONT);
разрушитель разрушает;
опубликовано
Цвет свойства: Tcolor Read Fcolor write setcolor default clwhite;
конец;
иллюстрировать:
А.
b.
C. Сделайте класс, к ним нельзя получить доступ снаружи.
2. Автоматический регистр процессов Delphi может игнорировать его. После его тела процесса мы вручную добавляем следующий код до конца.
// *** Конструктор **************************************** ** **********
конструктор tbutton1.create (Aowner: tcomponent);
Начинать
унаследованное создание (аоаллер);
Fcanvas: = tcanvas.create;
Fcolor: = clwhite; // цвет по умолчанию
конец;
// *** деструктор **************************************************** ********
деструктор tbutton1.destroy;
Начинать
Fcanvas.free;
унаследованное уничтожение;
конец;
// *** Чтобы определить стиль кнопки, кнопка должна быть пересмотрена как самостоятельная кнопка *******************
Процедура tbutton1.createParams (var params: tcreateparams);
Начинать
унаследованные CreateParams (Params);
с Params do Style: = стиль или BS_OwnerDraw;
конец;
// *** Метод написания атрибутов ********************************************** ********* *******
процедура tbutton1.setColor (значение: TCOLOR);
Начинать
Fcolor: = значение;
Недействителен;
конец;
// *** Статус кнопки «Установить» ************************************************** ****** ****
Процедура tbutton1.setbuttonstyle (Adefault: Boolean);
Начинать
Если Adefault <> Ispocused, тогда
Начинать
Ispocused: = Adefault;
Обновить;
конец;
конец;
// *** Кнопка рисования **************************************** ******
Процедура tbutton1.cndrawitem (var Сообщение: twmdrawitem);
вар
Isdown, Isdefault: Boolean;
ARECT: TRECT;
Флаги: Longint;
DrawItemStruct: tdrawItemStruct;
WH: TSIZE;
Начинать
DrawItemStruct: = message.DrawItemStruct^;
Fcanvas.handle: = drawitemstruct.hdc;
Arect: = clientRect;
С принижением, делающими
Начинать
Isdown: = itemstate и ods_selected <> 0;
IsDefault: = itemstate и ODS_FOCUS <> 0;
конец;
Флаги: = dfcs_buttonpush или dfcs_adjustrect;
Если Isdown, то флаги: = flags или dfcs_pushed;
Если нарисовать.
Флаги: = флаги или dfcs_inactive;
Если ISFOCUSED или ISDEFAULT, тогда
Начинать
// Нарисуйте состояние, когда кнопка получает фокус
Fcanvas.pen.color: = clwindowframe;
Fcanvas.pen.width: = 1;
Fcanvas.brush.style: = bsclear;
Fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
Инфлятор (arect, -1, -1);
конец;
Fcanvas.pen.color: = clbtnshadow;
Fcanvas.pen.width: = 1;
Fcanvas.brush.color: = fcolor;
Если я буду, тогда начните
// Нарисуйте статус при нажатии кнопки
Fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
Inflaterct (Arect, -1, -1);
конец еще
// Нарисуйте кнопку непредвиденной
DrawFrameControl (DrawItemStruct.hdc, Arect, DFC_Button, Flags);
Fcanvas.fillrect (arect);
// Нарисуйте подпись текстовый содержимое
Fcanvas.font: = self.font;
Arect: = clientRect;
wh: = fcanvas.textextent (заголовок);
Fcanvas.pen.width: = 1;
Fcanvas.brush.style: = bsclear;
Если не включено, тогда
Начните // Когда кнопка не удается, вы должны нарисовать текст подписи еще раз
Fcanvas.font.color: = clbtnhighlight;
Fcanvas.textout ((ширина div 2)-(Wh.cx div 2) +1,
(высота дивизион 2)-(Wh.cy Div 2) +1,
Подпись);
Fcanvas.font.color: = clbtnshadow;
конец;
Fcanvas.textout ((ширина div 2)-(Wh.cx div 2), (высота div 2)-(wh.cy div 2), заголовок);
// Нарисуйте пунктирную линию внутренней рамки, когда вы получаете фокус
Если ISFOCUSED и ISDEFAULT, тогда
Начинать
Arect: = clientRect;
Inflaterect (Arect, -4, -4);
Fcanvas.pen.color: = clwindowframe;
Fcanvas.brush.color: = fcolor;
DrawFocusRect (fCanvas.Handle, Arect);
конец;
Fcanvas.handle: = 0;
конец;
//** Конец ******************************************** ****************
конец.
Шаг 4: После проверки, подтверждая, что ошибка верна, выберите опцию компонента/установки меню Delphi. компонент.
Если вы полностью следите за этой статьей, после того, как компиляция и установка правильно, вы можете найти кнопку с тем же знаком, что и Tbutton, на вкладке «Образцы» метки компонента Delphi. Создайте новый проект и поместите эту кнопку, которую мы используем в форме. Как насчет этого? Через свою цветную свойство вы устанавливаете его цвет по желанию.
Наконец, метод рисования кнопок в этой статье использует аналогичный метод рисования, что и Tbutton Delphi для достижения аналогичного вида действия, как и кнопка Delphi. Однако, если вы хотите играть, вы можете нарисовать любой текст и графику на холсте FCANVAS, которые вы хотите выразить свою личность.
Если у вас есть какие -либо вопросы, отправьте письмо или оставьте сообщение.
Добро пожаловать, чтобы попробовать программное обеспечение этого сайта: NetGocn (сеть)