P> При разработке программного обеспечения для анализа ценных бумаг часто необходимо нарисовать аналитическую кривую для различных акций. Чтобы сделать функции программного обеспечения более удобными и гибкими, пользователи надеются настраивать цвета различных кривых в соответствии с их предпочтениями. В диалоговом окне шрифта есть аналогичные функции в меню [формат] Word97. Когда пользователь нажимает на раскрывающемся поле «Цветовое раскрытие» в диалоговом окне шрифта, простые узоры различных цветов отображаются вместе с названиями цветов шрифтов. с цветным названием. 1. Реализация диалогового окна пользовательского цвета
В Delphi мы можем использовать Tcombobox для достижения аналогичной функциональности. В компоненте Tcombobox есть атрибут стиля, который определяет атрибут дисплея Tcombobox. Обычно Csdropdown, CSSIMPLE, CSDROPDownList, CSOWNDRAWFIXED, CSOWNDRAWVAILIBE и т. Д. Когда выбирается CsownerDrawfixed, это означает создание самопроизводимого раскрывающегося списка. И процесс самостоятельного очистки должен реагировать на событие Tombobox Ondrawitem. Ondrawitem определяется как:
PropertyOndRawitem: tdrawiteMevent;
Tdrawitemevent = процедура (контроль: Twincontrol; Индекс: Integerrect: Trect; состояние: townerdrawstate) ofobject;
Значение трех параметров:
Управление: Tcombobox, содержащий раскрывающуюся коробку
Индекс: индекс номер самостоятельного раскрывающегося ящика в свойстве элементов Tompobox
Прямо: Положение самостоятельного перерыва, поэтому мы знаем положение прямоугольника, которое должно быть самостоятельно зарисованным (прямоугольный параметр) и номер индекса (параметр индекса) в Tcombobox, мы можем использовать свойство холста Tcombobox, чтобы нарисовать его холст. Конкретный процесс реализации выглядит следующим образом:
1 Создайте новый файл проекта и установите соответствующие свойства его формы по умолчанию:
Подпись пользовательской раскрывающейся коробки
Имя Форма1
PositionPoscreenCenter
2 Поместите два компонента TCOMBOBOX в форме и установите их свойства следующим образом:
Namestyleitemheightondrawitem
ColorCombo1csownerDrawfixed 20colorcombodrawitem
ColorCombo2csownerDrawfixed 30colorcombodrawitem
3 Дважды щелкните кнопку DOT рядом с свойствами элементов ColorCombo1 и ColorCombo2 и введите ее в диалоговом окне StringListEditor.
черный
синий
Синий и зеленый
Ярко -зеленый
красный
желтый
Названия различных цветов
4 В событии Ondrawitem в ColorCombo1 Yu Manlu?
ProcecuuretForm1.colorCombodrawitem (Control: Twincontrol; Index: Integer; Rect: Trect; состояние: владелец Radawstate);
вар
Tempcolor: Tcolor;
Tempbrushcolor: Tcolor;
Начинать
с (ControlStCombobox) Do
// Нарисуйте его на холсте комбо
Начинать
Tempbrushcolor: = canvas.brush.color;
// Сохранить оригинальный цвет
Canvas.fillrect (rect);
CaseIndexof // Определите разные самоуверенные цвета в соответствии с индексом
0: // черный
Tempcolor: = clblack;
1: // Синий
Tempcolor: = clblue;
2: // Синий и зеленый
Tempcolor: = claqua;
3: // Ярко -зеленый
Tempcolor: = cllime;
4: // красный
Tempcolor: = clred;
5: // желтый
Tempcolor: = clyellow;
// Ответ на другие цвета можно добавить здесь.
конец;
Canvas.brush.color: = tempcolor;
// самопроизводимый цвет прямоугольник
Canvas.Rectangle (rect.left+4,
Rect.top+1,
(Rect.right+rect.left) div3,
Rect.bottom 1);
Canvas.brush.color: = tempbrushcolor;
// показать строку, соответствующую цвету
Canvas.textout ((rect.left+rect.right) div2,
Rect.top+1,
Элементы [индекс]);
конец;
конец;
5 Сохраните и запустите файл, мы видим тот же эффект, что и раскрывающийся цвет цвета в Word
Читатели, которые заинтересованы, могут добавить другие цвета в места, показанные в статье.
Приведенная выше программа передается на Delphi3.0, 4.0. 2. Напишите пользовательские компоненты диалога цветов
Для многих программистов Delphi довольно незнакомо, как написать свои собственные компоненты Delphi. Ниже мы представим написание компонентов, используя диалоговое окно Custom Color в качестве примера. Следующие Tcolorcombobox продолжается из класса Tcombobox. 1. Выберите новую опцию компонента в элементе меню компонента. Выберите Tcombobox в поле Ancestortype, заполните Tcolorcombobox в поле класса, выберите образцы в поле «Палитры», заполните ColorCombobox.pas в поле Unitfilename, а затем нажмите кнопку OK.
2. Выберите опцию «Установка компонента» в элементе меню компонента, нажмите IntoneWpackage, запишите Path и ColorCombodpk.dpk в поле «Имя пакета» и нажмите ОК, чтобы сгенерировать файл colorcombodpk.bpl.
3. Используйте ImageEditor в меню «Инструменты», чтобы создать редактирование файла colorcombox.dcr и создать растровое изображение для класса TcolorCombobox.
4. Добавьте спецификации для размера и высоты шрифта и атрибута стиля управления (установленные в Csowndrawfix) в Createwnd, выполненном после создания. цвета
5. Добавьте цветную программу самостоятельного покрытия в событие Drawitem, которая происходит ранее в Drawitem.
Процедура реализации следующая:
UnitcolorCombobox;
интерфейс
Использование
Windows, сообщения, Sysutils, классы,
Графика, управления, формы, диалоги,
STDCTRLS;
тип
Tcolorcombobox = class (tcombobox)
Частный
{Privatedeclarations}
Fondrawitem: tdrawitemevent;
ProcusuredRawitem (индекс: целое число; rect: trect; состояние: towndrawstate);
защищен
{ProtectedDeclarations}
публичный
{PublicDeclarations}
ConstructorCreate (AOWNER: TCOMPONENT); переопределить;
ProcectureCreatewnd; переопределить;
опубликовано
{Опубликованные Declarations}
PropertyOndRawitem: tdrawiteMevent
Readfondrawitemwritefondrawitem;
конец;
Процедуррегистер;
Выполнение
ProcectorEReGister; // Регистрация компонента
Начинать
RegisterComponents (образцы, [tcolorcombobox]);
конец;
contructortcolorcombobox.create
(AOWANER: TCOMPONENT); // Инициализация компонента
Начинать
Унаследованное Create (AOHOWNER);
Стиль: = CSOWNDRAWFIXED;
Itemheight: = 20;
Font.size: = 10;
конец;
ProcecuuretColorCombobox.createwnd;
// Инициализировать свойство элементов цветового компонента
Начинать
Унаследованные Createwnd;
Items.clear;
Items.add (черный);
Items.add (синий);
Items.add (синий и зеленый);
Items.add (ярко -зеленый);
Items.add (розовый);
Items.add (красный);
Items.add (желтый);
Items.add (белый);
Items.add (темно -синий);
Items.add (голубой);
Items.add (зеленый);
Items.add (фиолетовый);
Items.add (Crimson Red);
Items.add (темно -желтый);
Items.add (темно -серый);
Items.add (серебро);
// Если вам не нужно так много цветов, вы можете удалить нежелательные цвета в атрибуте элемента компонента
конец;
// перегружать процесс Drawitem
ProcecuuretColorCombobox.DrawItem (индекс: целое число; Прямо: TRECT; состояние: TOWNDRAWSTATE);
вар
Tempcolor: Tcolor;
Tempbrushcolor: Tcolor;
Начинать
// Настройки самостоятельной упаковки по умолчанию этого компонента
Tempbrushcolor: = canvas.brush.color;
// Сохранить оригинальный цвет
Canvas.fillrect (rect);
ifitems [index] = черный тогда
Tempcolor: = clblack
elseifitems [index] = синий тогда
Tempcolor: = clblue
elseifitems [index] = синий зеленый тогда
Tempcolor: = claqua
elseifitems [index] = ярко -зеленый тогда
Tempcolor: = cllime
elseifitems [index] = розовый тогда
Tempcolor: = clfuchsia
elseifitems [index] = красный тогда
Tempcolor: = clred
elseifitems [index] = желтый тогда
Tempcolor: = Clyellow
elseifitems [index] = белый тогда
Tempcolor: = clwhite
elseifitems [index] = темно -синий тогда
Tempcolor: = clnavy
elseifitems [index] = cyan тогда
Tempcolor: = clteal
elseifitems [index] = зеленый тогда
Tempcolor: = clgreen
elseifitems [index] = фиолетовый тогда
Tempcolor: = Clpurply
elseifitems [index] = малиновый тогда
Tempcolor: = clmaroon
elseifitems [index] = темно -желтый тогда
Tempcolor: = clolive
elseifitems [index] = темно -серый тогда
Tempcolor: = Clgray
elseifitems [index] = серебро
elsetempcolor: = clsilver;
Canvas.brush.color: = tempcolor;
// самопроизводимый цвет прямоугольник
Canvas.Rectangle (rect.left+4,
Rect.top+1,
(Rect.right+rect.left) div3,
Rect.bottom 1);
Canvas.brush.color: = tempbrushcolor;
// показать строку, соответствующую цвету
Canvas.textout ((rect.left+rect.right) div2,
Rect.top+1,
Элементы [индекс]);
конец;
Конец. 3. Использование компонентов диалогового окна пользовательских цветов
После регистрации пользовательского цветового компонента вы можете выбрать пользовательский цветовой компонент со страницы образца шаблона компонента Delphi, и между использованием собственного компонента Delphi нет различий.