Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Кто знает как можно регулировать градиентную заливку?
Код взял с дельфикоде.ру:
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 в 14:33.
Sanek777 вне форума   Ответить с цитированием
Старый 02.11.2008, 19:38   #2
Sm1Le
Участник клуба
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
Репутация: 103

skype: UASm1Le
По умолчанию

ТStandardColorMap -additional
Sm1Le вне форума   Ответить с цитированием
Старый 02.11.2008, 19:59   #3
BOBAH13
Android Developer
ПрофессионалФорумчанин
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,708
Репутация: 1457
По умолчанию

Гы. Решили всю ветку своими вопросами засыпать ? Юзайте GDI+, какой раз говорю, все просто и быстро. Если надо напишу примерчик простенький.
__________________
Home | Android for food | XWindows Dock | github
BOBAH13 вне форума   Ответить с цитированием
Старый 04.11.2008, 20:42   #4
mutabor
Телепат с дипломом
Профессионал
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,928
Репутация: 1570

icq: 401708834
По умолчанию

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

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

Например линейный градиент от чистого красного, к чистому синему длиной 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 Кб, 87 просмотров)

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

Может не совсем то, но писал как-то процедурку для вывода спектра (в виде градиента). Ее код:
Код:

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;

__________________
E-Mail: arigato.freelance@gmail.com
Arigato вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заливка и увеличительное стекло Aptyp Общие вопросы Delphi 6 04.01.2010 23: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


04:41.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru