Меню

Как изменить цвет формы делфи



DelphiComponent.ru — бесплатно видеоуроки по Delphi, статьи, исходники

Работа с цветом в Delphi

В играх и графических пакетах этому байту нашли применение. Он часто ука­зывает прозрачность, но в офисных приложениях его просто игнорируют.

Как вы уже знаете, один байт может принимать значения от 0 до 255 (в десятич­ной форме) или от 0 до FF (в шестнадцатеричной). Так что в шестнадцатеричной форме цвет будет выглядеть как SOOFFFFFF. Только тут сразу надо отметить, что первые два нуля — это лишний байт, потом идут FF для голубого цвета, затем FF для зеленого и последние FF для красного. Получается, что в памяти цвет хранится как BGR (в обратном порядке). Абсолютно красный цвет будет равен $000000FF , абсолютно зеленый — $0000FF00 , а голубой — S00FF0000 .

Давайте попробуем научиться работать с цветом на практике, заодно и познако­мимся с необходимыми функциями. Создайте новое приложение и установите на него компоненты так, как это показано на рис.

Итак, на форме три компонента TEdit. Для красного цвета компонент назовите RedEdit, ДЛЯ зеленого — GreenEdit, ну И ДЛЯ СИНвГО — BlueEdit. Так же на форме есть кнопка для смены цвета (ее имя не имеет значения) и компонент CoiorDialog, для смены цвета.

Если вы сами создаете пример, по­старайтесь все разместить так, как показано на рисунке выше (ближе к правому краю), потому что слева будем рисовать квадрат.

Для события кнопки onclick пишем код, показанный в листинге:

procedure TFormi.ButtonlClick(Sender: TObj ect);

В разделе var объявлена одна переменная целого типа Longint. Это целое число размером в 4 байта, оно будет использоваться для хранения значения цвета.

В первой строке показывается ОКНО смены цвета ColorDialogl.Execute. Если пользователь не выбрал цвет (об этом говорит конструкция if not), то выполнение процедуры прерывается с помощью exit.

Читайте также:  Как растопить сахар до коричневого цвета

Дальше выбранный цвет ColorDialog1 .color из типа TCoior преобразовывается в простое число с помощью функции coiorToRGB. Этой функции надо передать цвет в виде TCoior (мы передаем ColorDialogl.color), и она вернет целое 4- байтное число, которое мы записываем в переменную с. Функция CoiorToRGB вы­полняет одно очень важное, действие— очищает первый байт, который как раз не несет смысловой нагрузки в 24-битной RGB системе.

В следующей строке идет присвоение строке ввода RedEdit значения красной составляющей цвета. Для этого сначала используется функция GetRValue. Ей пере­дается значение цвета в виде целого числа (переменная с). Результат—однобайт­ное число, которое показывает значение красной составляющей. Поскольку резуль­тат— число, то прежде чем его присваивать в строку ввода, оно должно быть пре­образовано в строку. Для этого переводим его в текст с помощью знакомой нам ФУНКЦИИ IntToStr.

То же самое проделываем и с зеленым цветом в следующей строке кода. Только для получения зеленой составляющей используется функция GetGValue.

Для получения синей составляющей используется функция GetBValue. Таким образом, после выполнения всех этих действий, мы разбили 4 байта цвета из пере­менной с на отдельные байты по цветам и разнесли их в соответствующие строки ввода.

После этого нужно заставить окно прорисоваться с помощью вызова метода Repaint.

Для события OnPaint напишем следующий код:

procedure TForml.FormPaint(Sender: TObj ect); begin

StrToIntDef(GreenEdit.Text, 0), StrToInt­Def (BlueEdit.Text,0));

Canvas.Rectangle(10,10, 250, 150);

Здесь надо проделать обратные действия — превратить три составляющих цвета из строк ввода в одно целое значение цвета. Для этого используется функция rgb (r, g, в). У этой функции три параметра, и все они целые числа.

  • r — значение красного цвета.
  • g — значение зеленого цвета.
  • в — значение синего цвета.
Читайте также:  Бывают пролежни черного цвета

В качестве параметров передаются значения, указанные в соответствующих строках ввода, с предварительным преобразованием их из строк в числа.

Результат преобразования цвета записываем в цвет кисти. После этого рисуется прямоугольник, у которого цвет фона будет тот, что мы выбрали.

И последнее — создадим обработчик события onchange для всех строк ввода.

  1. Выделите строку ввода для красного цвета.
  2. Удерживая shift, щелкните мышью по остальным строкам.

У вас должны быть выделены все строки ввода серыми рамками. Теперь перей­дите в объектный инспектор на вкладку Events и дважды щелкните мышью по со­бытию onchange, чтобы создать обработчик сразу для всех выделенных компонен­тов. В нем напишите следующий код:

procedure TForm1.RedEditChange(Sender: TObject);

Попробуйте запустить этот пример. Теперь выбе­рите какой-нибудь цвет, и вы увидите составляющие этого цвета. Можете даже напрямую изменять зна­чения в строках ввода, и результат моментально бу­дет отражаться на цвете прямоугольника.

Ну а теперь познакомимся с константами, кото­рые уже заготовлены для основных цветов. Вы можете их реально использовать в своих програм­мах и присваивать, как ранее это делалось в при­мере. Здесь не будут перечисляться все константы, потому что вы можете их сами в любой момент найти, если щелкнете в объектном инспекторе по свойству color любого компонента. Все, что вы увиди­те в этом списке, — это и есть константы, которые можно использовать. Этот при­ем довольно удобный, потому что сразу видно константу и цвет.

Источник

Adblock
detector