
- •Delphi. Визуальное программирование – 3 Классы tStringList и tIniFile Динамическое помещение компонентов на форму
- •Динамическое создание компонента типа tTabSet
- •Выбор элемента в ColorPropertyRg
- •Изменение значения в полосе прокрутки
- •Активация кнопкиУстановить(Set)
- •Сохранение текущих цветовых значений вIni-файле
- •Задания для самостоятельного выполнения
- •Класс tDrawGrid
- •Свойства компонента DrawGrid
- •Основные свойства, доступные во время разработки
- •Свойство Options
- •Свойства, доступные во время выполнения программы
- •Методы компонента DrawGrid
- •События компонента DrawGrid
- •Задание. Символы системных шрифтов
- •Класс tStringGrid
- •Новые свойства
- •Задание. Игра «Жизнь»
Выбор элемента в ColorPropertyRg
В прямоугольнике CurrentShape нужно установить цвет, соответствующий выбранному свойству, а также установить значения в полосах прокрутки и окнах редактирования.
procedure TMainF.ColorPropertyRGClick(Sender: TObject);
begin
case Combobox1. ItemIndex of
0: {количество и названия свойств зависят от выбранного компонента}
case ColorPropertyRG.ItemIndex of
0: CurrentShape.Brush.Color:=Tabset.BackGroundColor;
1: CurrentShape.Brush.Color:=Tabset.SelectedColor;
2: CurrentShape.Brush.Color:=Tabset.UnSelectedColor;
3: CurrentShape.Brush.Color:=Tabset.Font.Color;
end;
end;
SetScrollbars(CurrentShape.Brush.Color); {изменить значения
в полосах прокрутки и окнах редактирования}
end;
Опишем процедуру SetScrollbars, которая устанавливает значения в полосах прокрутки. В разделе implementation модуля опишем 32-битовые беззнаковые шестнадцатеричные целые константы, которые будут использоваться для выделения отдельных составляющих цвета из объектов TColor:
Const
RedMask = $800000FF;
GreenMask = $8000FF00;
BlueMask = $80FF0O00;
procedure TMainF.SetScrollbars (c: TColor);
begin
RedSB.Position:=c and redMask;
RedSE.Value:=RedSb.Position; {выделение красной составляющей цвета с}
// RedUD.Position:=RedSb.Position;
GreenSB.Position:=(с and GreenMask) shr 8;
GreenSE.Value:=GreenSb.Position; {выделение зеленой составляющей цвета с}
// GreenUD.Position:=GreenSb.Position;
BlueSB.Position := (c and BlueMask) shr 16;
BlueSE.Value:=BlueSb.Position; {выделение синей составляющей цвета с}
// BlueUD.Position:=BlueSb.Position;
end;
Эксперимент. Запустите приложение. Убедитесь в том, что цвет компонента CurrentShape изменяется в соответствии с выбранным в компоненте ColorPropertyRG свойством Tabset. ♦
Изменение значения в полосе прокрутки
Выделите компоненты RedSb, GreenSB, BlueSb и создайте для них обработчик события OnChange:
procedure TMainF.ColorSbChange(Sender: TObject);
begin
with Sender as TScrollbar do
EditControls[Tag].Text:=IntToStr(Position);
// EditControls[Tag].Position:=Position; // т.к. UpDown
CurrentShape.Brush.Color:=RGB (RedSB.Position, GreenSB.Position, BlueSB.Position);
end;
Первый оператор процедуры синхронизирует значение полосы прокрутки с соответствующим ей окном редактирования. Для определения необходимого окна редактирования используется свойство Tag. Проверьте, чтобы значения свойства Tag соответствующих компонентов совпадали. Напомним, что для удобства программирования окна редактирования были объединены в массив EditControls.
Второй оператор процедуры, используя функцию RGB, вычисляет значения цвета по значениям, установленным в полосах прокрутки, и перекрашивает прямоугольник CurrentShape.
Эксперимент. Убедитесь, что при изменении положения «бегунка» в полосах прокрутки изменяется цвет компонента CurrentShape.
Активация кнопкиУстановить(Set)
При активизации кнопки Set необходимо сохранить новое значение цвета в поле CurrentColor массива цветов и отобразить этот цвет в компоненте:
procedure TMainF.SetBtnClick(Sender: TObject);
begin
If ColorPropertyRG. ItemIndex<>-1
then {если компонент выбран}
ColorArray[ColorPropertyRG.ItemIndex].CurrentColor:=
CurrentShape . Brush . Color; {в массиве ColorArray запоминаем
новое текущее значение для свойства, выбранного в ColorPropertyRGB}
case ComboBox1.ItemIndex of
0: ChangeTabsetColor; {отображаем новое цветовое значение
выбранного свойства в компоненте}
end;
end;
Для отображения новых значений свойств компонента Tabset используется массив ColorArray:
procedure TMainF.ChangeTabsetColor;
begin
with Tabset do begin
BackGroundColor:=ColorArray[0].CurrentColor;
SelectedColor:=ColorArray[1].CurrentColor;
UnSelectedColor:=ColorArray[2].CurrentColor;
Font.Color:=ColorArray[3].CurrentColor;
end;
end;
Опишите метод ChangeTabsetColor в разделе private описания класса TMainF.
При активизации кнопки Отменить, нужно восстановить исходные значения свойств из массива ColorArray:
procedure TMainF.ResetBthClick(Sender: TObject);
var i: 0..3;
begin
if Comboboxl. itemindexO-1 then
begin {если компонент выбран}
for i:=0 to ColorPropertyRG.Items.Count-1 do
with ColorArray[i] do
CurrentColor:=OriginalColor;
{восстанавливаем значения свойств в массиве ColorArray}
case Comboboxl.itemindex of
0: ChangeTabsetColor;
{восстанавливаем значения свойств компонента Tabset}
end;
ColorPropertyRG.OnClick(ColorPropertyRG);
{отображаем восстановленный цвет выбранного в ColorPropertyRG свойства в прямоугольнике CurrentShape}
end;
end;
Эксперимент. Сохраните проект. Запустите, попробуйте изменить цветовые настройки компонента Tabset. Щелчок на кнопке Установить влияет на изменение внешнего вида компонента Tabset. Происходит ли восстановление цветовых значений после щелчка на кнопке Отменить?