Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1168005405
Галинка
2007-01-05 16:56
2007.01.21
Как работать с юникодом


2-1168003577
daser
2007-01-05 16:26
2007.01.21
Подкажите, как можно увидеть все коннекты к БД FireBird...


2-1167725424
rolex
2007-01-02 11:10
2007.01.21
Как получить дискрипшн файла?


15-1167302964
Данил.Ялта
2006-12-28 13:49
2007.01.21
Разбить страницу на части


15-1167140836
matt
2006-12-26 16:47
2007.01.21
Новогодний стол





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский