
- •Delphi. Визуальное программирование – 3 Классы tStringList и tIniFile Динамическое помещение компонентов на форму
- •Динамическое создание компонента типа tTabSet
- •Выбор элемента в ColorPropertyRg
- •Изменение значения в полосе прокрутки
- •Активация кнопкиУстановить(Set)
- •Сохранение текущих цветовых значений вIni-файле
- •Задания для самостоятельного выполнения
- •Класс tDrawGrid
- •Свойства компонента DrawGrid
- •Основные свойства, доступные во время разработки
- •Свойство Options
- •Свойства, доступные во время выполнения программы
- •Методы компонента DrawGrid
- •События компонента DrawGrid
- •Задание. Символы системных шрифтов
- •Класс tStringGrid
- •Новые свойства
- •Задание. Игра «Жизнь»
Динамическое создание компонента типа tTabSet
Для визуального отображения цветовых установок выбранного в Combobox1 элемента нужно создать объект соответствующего типа и отобразить на форме. При выборе значения «TabSet» эти действия выполняет процедура NewTabset:
procedure TMainF.NewTabset;
var i: 0 . . 3;
begin
Tabset:=TTabSet.Create(MainF);
with Tabset do
begin
Parent:=MainF;
Left:=200;
Top :=5; {свойства left и top используются
для позиционирования компонента внутри родительского компонента}
DitherBackground:=true; {значение свойства, равное true, устанавливает цвет фона компонента Tabset светлее на 50%}
Tabs.Add('Tab_l'); {добавление трех закладок в Tabset}
Tabs.Add('Tab_2');
Tabs.Add('Tab_3');
TabIndex:=0; {выделение первой закладки}
BackGroundColor:= getsyscolor(COLOR_BTNFACE);
SelectedColor:= clWhite; {#}
UnSelectedColor:= getsyscolor(TColor(clBtnFace xor $80000000)); {#}
Font.Color:= getsyscolor(TColor(clWindowtext xor $80000000)); {#}
ColorArray[0].OriginalColor:=BackGroundColor;
ColorArray[l].OriginalColor:=SelectedColor;
ColorArray[2].OriginalColor:=UnSelectedColor;
ColorArray[3].OriginalColor:=Font.Color;
for i:=0 to 3 do
ColorArray[i].CurrentColor:=ColorArray[i].OriginalColor;
end;
// LoadTabsetSetting; {*}
end;
Поясним операторы процедуры.
Переменная Tabset содержит адрес компонента. Опишите переменную Tabset типа TTabset в разделе private описания класса TMainF.
Создание экземпляра любого класса осуществляет конструктор. Оператор
Tabset:=TTabSet.Create(MainF);
вызывает конструктор класса TTabset. Параметр конструктора определяет владельца компонента. Владельцем созданного компонента Tabset будет форма — MainF.
Самый важный этап при динамическом создании компонента — это установка свойства Parent. Это свойство помещает текущий компонент в список Controls родителя. Компонент-предок использует список Controls для выдачи команды нарисовать себя всем принадлежащим ему компонентам. Поэтому если компонента нет в родительском списке Controls, то он не появится при выполнении приложения. Примерами компонентов, которые могут владеть другими компонентами, являются Panel и GroupBox. Оператор
Tabset.parent:=MainF;
определяет форму родительским компонентом.
Операторы {#} задают цветовые настройки компонента Tabset.
В операционной системе Windows для всех элементов (рабочий стол, заголовок активного окна, полоса прокрутки и др.) определены цветовые константы, каждая из которых имеет свое имя (COLOR_WINDOW, COLOR_ACTIVECAPTION, COLOR_ SCROLLBAR и др.). Значения этих констант изменяются в зависимости от выбранной схемы оформления (Пуск \ Программы \ Настройка \Панель управления \Экран \ Оформление).
В Object Pascal соответствующие цветовые константы определяются в модуле C:\Program Files\Borland\Delphi5\Source\ Vcl\graphics.pas следующим образом:
rIScrollBar = TColor(COLOR_SCROLLBAR or $80000000);
rIActiveCaption = TColor(COLOR_ACTIVECAPTION or $80000000);
rIWindow = TColor(COLOR_WINDOW or $80000000); и т. д.
Функция getsyscolor определяет текущее значение заданной в параметре цветовой константы. Выражения getsyscolor(COLOR_ BTNFACE) и getsyscolor(TColor(clBtnFace xor $80000000)) определяют одно и то же цветовое значение. В первом выражении параметр задан цветовой константой Windows, во втором эта константа получена из константы, определенной в Object Pascal обратным преобразованием.
Для сохранения текущих цветов определим новый тип ColorRec, который является записью, состоящей из двух значений типа TColor. OriginalColor представляет собой значение цвета, определенное для элемента операционной системой или INI-файлом. CurrentColor — это значение цвета, задаваемое элементу после нажатия кнопки Set. При нажатии кнопки Save значения из поля CurrentColor переписываются в поле OriginalColor и сохраняются в INI-файле.
Этот тип является вспомогательным и используется только подпрограммами модуля. В разделе implementation опишите тип и введите переменную этого типа:
type
ColorRec = record
OriginalColor: TColor;
CurrentColor: TColor;
end;
var ColorArray: array[0..3] of ColorRec;
Начальные значения массива определяются операторами:
ColorArray[0].OriginalColor:=BackGroundColor; ColorArray[1].OriginalColor:=SelectedColor; ColorArray[2].OriginalColor:=UnSelectedColor; ColorArray[3].OriginalColor:=FontColor;
for i:=0 to 3 do
ColorArray[i].CurrentColor:^ColorArray[i].Original.color;
Оператор {*} будет рассмотрен позднее, он предназначен для считывания цветовых значений из INI-файла.
Эксперимент. Сохраните и запустите проект. Убедитесь, что при выборе элемента Tabset из списка Comboboxl на форме появляется объект Tabset, а в ColorPropertyRG появляются его свойства.