Текущий архив: 2007.01.21;
Скачать: CL | DM;
Вниз
Изменение цвета от #000000 до #FFFFFF с заданным шагом Найти похожие ветки
← →
azl © (2007-01-02 19:55) [0]Зравствуйте, уважаемые мастера. С Новым Годом.
Подскажите, пожалуйста, как можно изменять цвет фона (цвет формы) в диапазоне от #000000 до #FFFFFF с заданным шагом?
Мне нужно выбрать цвет, задать шаг и по нажатию на кнопку менять цвет в зависимости от шага.
Как задавать этот шаг?
Спасибо.
← →
Eraser © (2007-01-02 20:00) [1]> [0] azl © (02.01.07 19:55)
var
iStep: Integer;
...
if Color + iStep < $FFFFFF then
Color := Color + iStep
else
Color := 0;
← →
vrem (2007-01-02 20:02) [2][1] Eraser © (02.01.07 20:00)
Ну и что это будет? плавное покраснение, а потом?
← →
Virgo_Style © (2007-01-02 20:07) [3]vrem (02.01.07 20:02) [2]
А это уже философия. ТЗ соответствует? Соответствует. Ну и все %-)
← →
vrem (2007-01-02 20:21) [4]Давнишний исходник нашёл:
Процедура позволяет обойти все цвета спектра плавно,
для этого процедуре нужно давать числа плавно изменяющиеся от 0 и до 6,
на выходе получаем
нечто вида [b,g,r] = [0,0.3333,1]
умножаем на "цветность", например на 255, округляем и получаем -
[0,85,255] - некий цвет.
с фотошопом совпадает :)
type
colex = array[1..3] of extended;
procedure cveme(gde:extended; var bgr:colex);
var dr:extended;
begin //даёт цвет из спектра по номеру = gde
//gde=0..5.999 = 6 штук короче - по два на каждую часть спектра
gde:=gde-6*int(gde/6); //0 тоже считается
if gde<0 then gde:=gde+6; dr:=gde-int(gde); gde:=int(gde)+1;
if gde<=2 then begin if gde=1 then begin bgr[1]:=1; bgr[2]:=0; bgr[3]:=dr; exit; end;
bgr[1]:=1-dr; bgr[2]:=0; bgr[3]:=1; exit; end else
if gde<=4 then begin if gde=3 then begin bgr[1]:=0; bgr[2]:=dr; bgr[3]:=1; exit; end;
bgr[1]:=0; bgr[2]:=1; bgr[3]:=1-dr; exit; end else begin
if gde=5 then begin bgr[1]:=dr; bgr[2]:=1; bgr[3]:=0; exit; end;
bgr[1]:=1; bgr[2]:=1-dr; bgr[3]:=0; exit;
end;
end;
← →
azl © (2007-01-02 20:32) [5]Eraser, спасибо. Только вот что-то не совсем правильно получается. присваиваю iStep := 1; При этом ни зеленый, ни красный цета не появляются. Или это так и дожно быть?
← →
Anatoly Podgoretsky © (2007-01-02 20:44) [6]> vrem (02.01.2007 20:02:02) [2]
Потом будет позеленение и так далее.
← →
Anatoly Podgoretsky © (2007-01-02 20:45) [7]> azl (02.01.2007 20:32:05) [5]
Не может этого быть
← →
azl © (2007-01-02 21:02) [8]Может. Пишу вот так:
procedure TForm1.Button1Click(Sender: TObject);
var
iStep: Integer;
begin
iStep := 1;
if Color + iStep < $FFFFFF then
Color := Color + iStep
else
Color := 0;
end;
Красный и зеленый цвет не появляется.
← →
Eraser © (2007-01-02 21:20) [9]> [8] azl © (02.01.07 21:02)
появляются, просто ты не успеваешь их заметить :)
← →
Eraser © (2007-01-02 21:21) [10]лучше подобные "игры" с цветом реализовывать через RGB представление... так понятнее будет.
← →
Германн © (2007-01-03 01:21) [11]Ещё один повод вспомнить RxLib :-)
← →
azl © (2007-01-03 12:12) [12]Германн ©
> Ещё один повод вспомнить RxLib :-)
А с этого момента поподробнее, пожалуйста.
← →
Германн © (2007-01-03 14:29) [13]
> azl © (03.01.07 12:12) [12]
>
> Германн ©
>
> > Ещё один повод вспомнить RxLib :-)
>
> А с этого момента поподробнее, пожалуйста.
>
Смотри в RxLib:{ Gradient fill procedure - displays a gradient beginning with a chosen }
{ color and ending with another chosen color. Based on TGradientFill }
{ component source code written by Curtis White, cwhite@teleport.com. }
procedure GradientFillRect(Canvas: TCanvas; ARect: TRect; StartColor,
EndColor: TColor; Direction: TFillDirection; Colors: Byte);
← →
Tirael © (2007-01-03 15:07) [14]
> azl © (02.01.07 20:32) [5]
>
> Eraser, спасибо. Только вот что-то не совсем правильно получается.
> присваиваю iStep := 1; При этом ни зеленый, ни красный
> цета не появляются. Или это так и дожно быть?
ты крут! при iStep=1 чтоб всю палитру пройти нужно 16777215 раз баттон надавить )
← →
azl © (2007-01-03 16:49) [15]Tirael,
Дело в том, что при iStep = 1 больше всего разных цветов появляется. Если, например, iStep := 100, то появляется только черный цвет и больше не меняется.
← →
vrem (2007-01-03 17:01) [16]azl, а моя процедура чем не хороша?
← →
azl © (2007-01-03 17:12) [17]vrem, я попытался с ней работать, у меня чего-то не получилось. Если тебя не затруднит, приведи, пожалуйста, пример использования.
← →
Tifon © (2007-01-03 17:20) [18]А почему бы не задавать цвет просто через RGB с помощью таймер, например в таймере наращивая 3 переменных изменять цвет или одну или две и такой подборкой подобрать себе нужные цвета?
← →
azl © (2007-01-03 17:35) [19]Да я бы с удовольствием, но дали мне задачку вот какую:
Написать программу, которая бы выводила на требуемом фоне, введенный с клавиатуры текст, заданного цвета.
Предусмотреть:
- Задание начального цвета текста и фона (От #000000 до #FFFFFF);
- Выбор изменяемого цвета (Будем изменять цвет фона или текста);
- Выбор шрифта для текста, поле для введения текста;
- Шаг изменения цвета;
- Кнопка, которая будет изменять выбранный цвет с введенным шагом;
Кнопка вывода текущего цвета текста и шага.
Одним словом - дурдом.
← →
Eraser © (2007-01-03 17:51) [20]> [19] azl © (03.01.07 17:35)
> - Кнопка, которая будет изменять выбранный цвет с введенным
> шагом;
сделай изменение нажатием кнопки только одного из каналов цвета, и соответственно сам выбор канала цвета сделай при помощи тех же radio buttons. И будет тебе счастье )
← →
Zeqfreed (gentoo) (2007-01-03 17:56) [21]Aha. Use HSL model and be happy. Sorry for english.
← →
azl © (2007-01-03 18:33) [22]Eraser,
Вариант, спасибо. но не знаю, правильно ли это будет. Я сделал следующим образом:procedure TForm1.TrackBar1Change(Sender: TObject);
begin
TrackBar1.Position;
Color := rgb(Color,TrackBar1.Position,Color);
Caption := ColorToString(Color);
end;
TrackBar взял для пробы, чтобы кнопку не тыкать постоянно.
← →
vrem (2007-01-03 18:49) [23][22] azl © (03.01.07 18:33)
Добавь на пустую форму кнопку и вот её код
procedure TForm1.Button1Click(Sender: TObject);
type
colex = array[1..3] of extended;
procedure cveme(gde:extended; var bgr:colex);
var dr:extended;
begin //даёт цвет из спектра по номеру = gde
//gde=0..5.999 = 6 штук короче - по два на каждую часть спектра
gde:=gde-6*int(gde/6); //0 тоже считается
if gde<0 then gde:=gde+6; dr:=gde-int(gde); gde:=int(gde)+1;
if gde<=2 then begin if gde=1 then begin bgr[1]:=1; bgr[2]:=0; bgr[3]:=dr; exit; end;
bgr[1]:=1-dr; bgr[2]:=0; bgr[3]:=1; exit; end else
if gde<=4 then begin if gde=3 then begin bgr[1]:=0; bgr[2]:=dr; bgr[3]:=1; exit; end;
bgr[1]:=0; bgr[2]:=1; bgr[3]:=1-dr; exit; end else begin
if gde=5 then begin bgr[1]:=dr; bgr[2]:=1; bgr[3]:=0; exit; end;
bgr[1]:=1; bgr[2]:=1-dr; bgr[3]:=0; exit;
end;
end;
var i,j,k,m:integer; sp:colex;
de:extended;
begin
j:=256; //длина спектра
k:=255; //цветность
m:=50; //толщина спектра :)
for i := 1 to j do begin
cveme((6/j)*i,sp);
form1.Canvas.MoveTo(i,1);
form1.Canvas.Pen.Color:=
trunc(sp[1]*k)*65536+
trunc(sp[2]*k)*256+trunc(sp[3]*k);
form1.Canvas.LineTo(i,m);
end;
end;
Страницы: 1 вся ветка
Текущий архив: 2007.01.21;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.037 c