Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Делфи 2-3 / 3. Delphi-3.doc
Скачиваний:
55
Добавлен:
30.03.2015
Размер:
416.26 Кб
Скачать

Выбор элемента в 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. Происходит ли восстановление цветовых значений после щелчка на кнопке Отменить?