Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2008, 17:17   #1
Sanek777
Заблокирован
Пользователь
 
Регистрация: 31.07.2008
Сообщений: 90
По умолчанию Градиентная заливка

Кто знает как можно регулировать градиентную заливку?
Код взял с дельфикоде.ру:
http://www.delphicode.ru/graphics/gradient.htm



Для осуществления градиентной заливки формы запишем в обработчике событий формы OnPaint следующий код:
Код:
procedure TForm1.FormPaint(Sender: TObject); 
var 
  Row, Ht: Word;
begin
  Ht:=(ClientHeight+255) div 256; 
  for Row:=0 to 255 do 
    with Canvas do
    begin 
      Brush.Color:=RGB(Row,0,255);{изменить цвет заливки можно здесь}
      FillRect(Rect(0,Row*Ht,ClientWidth,(Row+1)*Ht)); 
    end; 
end;

Меняю цифры от 0 до 255 меняются цвета, но я ж так не буду подбирать.
Мой вопрос: где можно найти уже как бы примеры с подборами градиентов??? Чтобы картинки и значения для нее?

Последний раз редактировалось rpy3uH; 04.11.2008 в 13:33.
Sanek777 вне форума Ответить с цитированием
Старый 02.11.2008, 18:38   #2
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

ТStandardColorMap -additional
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 02.11.2008, 18:59   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Гы. Решили всю ветку своими вопросами засыпать ? Юзайте GDI+, какой раз говорю, все просто и быстро. Если надо напишу примерчик простенький.
BOBAH13 вне форума Ответить с цитированием
Старый 04.11.2008, 19:42   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Мой вопрос: где можно найти уже как бы примеры с подборами градиентов???
Где найти не знаю, могу объяснить как самому сделать.

Задаешь начальный цвет, задаешь конечный, задаешь длину градиента. Теперь находишь разницу между цветами, отдельно для каждой составляющей.

Например линейный градиент от чистого красного, к чистому синему длиной 500 пикселей.

красный (255 0 0) - синий (0 0 255)

разница для R = -255
разница для G = 0
разница для B = 255

Теперь находишь соотношение для каждого цвета, делишь на длину градиента эти разницы

-255/500 = -0,51
0/500 = 0
255/500 = 0,51

Получили шаг на к-рый изменять каждую составляющую цвета каждую следующую полосу градиента шириной в 1 пиксель.

p.s. Или юзайте GDI+, там уже все готовое.

Исходник к примеру
Вложения
Тип файла: zip Gradient.zip (6.7 Кб, 104 просмотров)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 04.11.2008 в 21:24.
mutabor вне форума Ответить с цитированием
Старый 07.11.2008, 16:23   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Может не совсем то, но писал как-то процедурку для вывода спектра (в виде градиента). Ее код:
Код:
function Sgn (I: Integer): Integer;
// Сигнум числа:
begin
  if I < 0 then Result := -1;
  if I = 0 then Result := 0;
  if I > 0 then Result := 1;
end; {func Sgn}

procedure TForm1.FormPaint(Sender: TObject);
var Points: array[1..6] of TColor;
    C, X: Integer;
    R, G, B, NewR, NewG, NewB: Byte;
begin
  Points[1] := RGB (255, 0, 0);   // красный
  Points[2] := RGB (255, 255, 0); // желтый
  Points[3] := RGB (0, 255, 0);   // зеленый
  Points[4] := RGB (0, 255, 255); // голубой
  Points[5] := RGB (0, 0, 255);   // синий
  Points[6] := RGB (255, 0, 255); // фиолетовый
  R := GetRValue (Points[1]);
  G := GetGValue (Points[1]);
  B := GetBValue (Points[1]);
  X := 0;
  for C := 2 to 6 do
  begin
    NewR := GetRValue (Points[C]);
    NewG := GetGValue (Points[C]);
    NewB := GetBValue (Points[C]);
    repeat
      with Canvas do
      begin
        Pen.Color := RGB (R, G, B);
        MoveTo (X, 0);
        LineTo (X, Height);
      end; {with}
      Inc (X);
      Inc (R, Sgn (NewR - R));
      Inc (G, Sgn (NewG - G));
      Inc (B, Sgn (NewB - B));
    until (R = NewR) and (G = NewG) and (B = NewB);
  end; {for}
end;
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заливка и увеличительное стекло Aptyp Общие вопросы Delphi 6 04.01.2010 22:49
Градиентная заливка APi функция GradientFillRect в Delphi Roberto Win Api 7 11.04.2008 13:34
Заливка с допуском devi409 Общие вопросы Delphi 11 15.10.2007 06:57
заливка строк DBGrid'а antoniosm БД в Delphi 10 18.09.2007 09:19