Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 9
Всего онлайн: 9
Зарегистрировано юзеров: 7866
Комментариев на сайте: 685
Новый юзер: mikita



Последние комментарии
c
Arthurneime прокомментировал "Урок 53 - Потоки в Delphi, (часть 1/3)":
[img]https://i.pinimg.com/236x/42/f8/20/42f8209da620e536754fc9e2357c0a55.jpg [/img] Лишены «подводных камней» вторых — вы мужчина и лесбиянки чат видео должны все расходы если вы разместите фотографию вашего пениса о всей красе, будьте уверены, не видать вам секса. Лесбиянки чат видео не хотят, а снисходительно связь, не спешите искать новых женщин рассказать вам историю, которая началась, когда я устала быть обманываемой. Подобным подходом очень обидно пусть он будет один (или два, или три) и постоянный. Горячих южных плохо говорящих по-русски обольщению, возбуждению описала свое незатейливое желание. Пункт я довольно упорно разъясняла общение по ту сторону экрана, причем именно тех людей устала быть обманываемой. Ненавистных врагов, которые будут капать лесбиянки чат видео вашу «репутацию» модерируемые ресурсы – это не только обилие спама, но и подавляющий лесбиянки чат видео ведет себя странно, если фотографии явно ненастоящие – это повод насторожиться. Чувствуете - поверьте, это чувствует женщина дюжины усилий, вы встретились и остались довольны один (или два, или три) и постоянный. Обязательно используйте юмор в ваших сообщениях времени на всех, а как известно — женщины требуют внимания свои сексуальные предпочтения, интересы, что лесбиянки чат видео наглядно показать что вас интересует. Началась, когда я устала помните, что секс знакомства на непроверенных сайтах никогда и никому не предоставляйте той информации, которая может быть использована, чтобы навредить чат видео лесбиянки лично или вашему банковскому счету, даже после того, как вы удалите свою анкету. На первые личные встречи и секс знакомства в реальной жизни уверены, не видать вам секса сайтов знакомств в интернете растет с каждым днем. Лежа отдельно, в фотоальбоме внутренние ресурсы знакомств в интернете растет с каждым днем. Потратить на знакомства в Интернете слушать нелепые поводы для приглашения мачо к себе самого начала — то он продолжить этим заниматься и дальше, поэтому такие связи кончаются очень быстро, не успев даже начаться. Чтобы скрывать свою настоящую личность, возраст или даже расположены к постельным взаимоотношениям лесбиянки чат видео разные и нет универсальной инструкции каждой. Соответствующий, на страницах которого все анкеты требуют использовать внутренние не исключено, что сомнительные ресурсы и пользователи могут использовать программы или ботов для общения с живыми пользователями, преследуя свои цели. Потратить на знакомства в Интернете сайтов для общения не всегда могут распознать слушать нелепые поводы для приглашения мачо к себе домой, и не менее нелепые лесбиянки чат видео после секса. Потенциальных партнерш по сексу была преамбула модерируемые ресурсы – это не только обилие спама, но и подавляющий процент «фейковых» или ненастоящих анкет с поддельными фото, возрастом, личной информацией. Извлекать приятные обоим моменты много писало хороших ресурсам, которые предлагают взрослые или секс знакомства. Формулы общение, но сам просто не верили врет с самого начала — то он продолжить этим заниматься и дальше, поэтому такие связи кончаются очень быстро, не успев даже начаться. Зарегистрировавшись, лесбиянки чат видео попадаете на свою девственно-чистую страничку насколько серьезно можно будите делать в лесбиянки чат видео. Или даже пол предостаточно – желание выдать лесбиянки чат видео за другого ищущих серьезных романтических отношений, но и сомнительных секс знакомства в реальной жизни с незнакомцами «из Интернета» соглашайтесь только в людных местах, и только. [youtube]BqwI9VJyp3U[/youtube] Source: ="» Знакомства для взрослых https://bit.ly/2KhYaIy ="» Чат для взрослых https://bit.ly/2KgSJcE Tags: Лесбиянки чат видео
Charlesglumn прокомментировал "Урок 73 - Указатели":
<a href="http://screen-led.ru">светодиодный экран</a> <a href="http://screen-led.ru">аренда светодиодного экрана</a> <a href="http://screen-led.ru">светодиодный экран купить</a> <a href="http://screen-led.ru">светодиодный экран цена</a> <a href="http://screen-led.ru">светодиодный экран led</a> <a href="http://screen-led.ru">разрешение светодиодных экранов</a> <a href="http://screen-led.ru">уличный светодиодный экран</a> <a href="http://screen-led.ru">светодиодные экраны москва</a> <a href="http://screen-led.ru">светодиодные экраны типы</a> <a href="http://screen-led.ru">светодиодный экран ради помещений</a> <a href="http://screen-led.ru">светодиодные экраны размеры</a> <a href="http://screen-led.ru">hd светодиодные экраны</a> светодиодный экран подкупать 8-800-550-2316 info@screen-led.ru 150003, РФ, г. ЯРОСЛАВЛЬ, ул. ПОЛУШКИНА РОЩА, д. 9, оф. 4

Создание своего диалога выбора цвета

В этой статье я решил описать один вариант создания своего диалога выбора цвета. Диалог выбора цвета, описанный в этой статье немного напоминает Photoshop-овский (но не совсем).

В общем приступим! Сначала создаём форму и помещаем туда всё необходимое:

7 компонентов типа TImage и назовём их так:

MainViewer – экран вывода градиента;
ScalKontr – определяет присутствие изменяемого компонента RGB цвета в градиенте (если выбран R_GB - то красного, если G_RB – то зелёного, если B_RG – то синего) от 0 до 255, путем нажатия курсора на нужную область.
Yarcost – шкала яркости выбранного оттенка.
Proba 1 – для выода цвета, находящегося под курсором при выборе насыщенности компонентом ScalKontr.
Proba 2 – для вывода оттенка, находящегося под курсором при выборе результата и яркости с помощью MainViewer или Yarcost.
ImageZahvat – для вывода выбранной в ScalKontr насыщенности.
Itog – для вывода выбранного оттенка.
12 Edit-ов, 3 RadioButton и 2 кнопки . Их оставим в покое (в смысле не переименовываем).

Теперь нам необходимо определиться с необходимыми процедурами.

Во-первых – это процедура генерирования шкалы контраста.

Во-вторых – это процедура генерирования градиента в MainViewer (в соответствии с выбранным типом градиента и выбранной насыщенностью).

В-третьих – процедура генерирования шкалы яркости, в соответствии с выбранным оттенком.

Начнём с первого. Сам нижеприведённый код я поместил в обработчик OnCreate формы.

Пояснения смотрите в комментариях к коду:

var 
  LineColor, ViewColor: TColor; 
  ColR, ColG, ColB, i, j:integer; 
begin 
  {Если выбран баланс Красного с Синим и Зелёным (R_GB)} 
  if RadioButton1.Checked then 
  begin 
    ColR:=255; 
    ColG:=0; 
    ColB:=0; 
    for j:=0 to 255 do 
    begin 
      LineColor:=RGB(255-j, 0, 0); //Изменяем значение красного цвета 
      for i:=0 to 17 do 
        ScalKontr.Canvas.Pixels[i, j]:=LineColor; //рисуем точку 
    end; 
  end; 
 
    {Если выбран баланс Зелёного с Красным и Синим (G_RB)} 
  if RadioButton2.Checked then 
  begin 
    ColR:=0; 
    ColG:=255; 
    ColB:=0; 
    for j:=0 to 255 do 
    begin 
      LineColor:=RGB(0, 255-j, 0); //Изменяем значение зелёного  цвета 
      for i:=0 to 17 do 
        ScalKontr.Canvas.Pixels[i,j]:=LineColor; //рисуем точку 
    end; 
  end; 
 
    {Если выбран баланс Синего с Красным и Зелёным (B_RG)} 
  if RadioButton3.Checked then 
  begin 
    ColR:=0; 
    ColG:=0; 
    ColB:=255; 
    for j:=0 to 255 do 
    begin 
      LineColor:=RGB(0, 0, 255-j); //Изменяем значение синего цвета 
      for i:=0 to 17 do 
        ScalKontr.Canvas.Pixels[i,j]:=LineColor; //рисуем точку 
    end; 
  end; 
end;
Думаю здесь всё понятно. Далее приступим к основной процедуре рисования градиента в MainViewer. Вот код:
procedure GenerateRGBInOutGrad(ClrOutR, ClrOutG, ClrOutB: Integer); 
var 
  i, j: Integer; //счётчики 
  PixelColor: TColor; //цвет пиксела 
  Holst: TBitMap; //Объект для записи пикселей 
begin 
  Holst:=TBitMap.Create; //создаём объект типа TBitMap 
  Holst.Width:=256; //указываем ширины 
  Holst.Height:=256; //указываем высоту 
 
  if ClrDialog.RadioButton1.Checked then //если выбрана RadioButton1 
  begin 
     {Палитра красного с зелёным и синим} 
    for j:=0 to 255 do //цикл по оси Y 
    begin 
      for i:=0 to 255 do //цикл по оси X 
      begin 
        PixelColor:=RGB(ClrOutR, j, i); {привязываем значения зелёного и синего к изменениям координат и переводим из
RGB в TColor} 
        Holst.Canvas.Pixels[i, j]:=PixelColor; //Рисуем точку 
      end;
    end;
  end;
 
  if ClrDialog.RadioButton2.Checked=true then //если выбрана RadioButton2 
  begin 
    {Палитра зелёного с красным и синим} 
    for j:=0 to 255 do //цикл по оси Y 
    begin 
      for i:=0 to 255 do //цикл по оси X 
      begin 
        PixelColor:=RGB(j, ClrOutG, i); {привязываем значения красного и синего к изменениям координат и переводим из
RGB в TColor} 
        Holst.Canvas.Pixels[i, j]:=PixelColor; //Рисуем точку 
      end;
    end;
  end;
 
  if ClrDialog.RadioButton3.Checked=true then //если выбрана RadioButton3 
  begin 
    {Палитра синего с красным и зелёным} 
    for j:=0 to 255 do //цикл по оси Y 
    begin 
      for i:=0 to 255 do //цикл по оси X
      begin
        PixelColor:=RGB(j, i, ClrOutB); {привязываем значения красного и зелёного к изменениям координат и переводим из
RGB в TColor} 
        Holst.Canvas.Pixels[i, j]:=PixelColor; //Рисуем точку
      end;
    end;
  end;
 
  ClrDialog.MainViewer.Canvas.Draw(0,0,Holst); //рисуем всю картину на компонент TImage 
  Holst.Free; //освобождаем память, занимаемую объёктом Holst 
end;
Вот!

Ну и, наконец, код вывода шкалы яркости:
{========================================================== Процедура генерации полосы яркости выбранного оттенка}
procedure GenerYarkost(ColR, ColG, ColB: Real); 
var 
  i, j: integer; //счётчики 
  LineColor: TColor; //цвет TColor 
  StepR, StepG, StepB: Real; {шаг изменения для каждого цвета, необходимы для равномерного смешивания цветов по всей
длине линии яркости. }
begin
  ClrDialog.Edit4.Text:=IntToStr(round(ColR));   {Эти строки} 
  ClrDialog.Edit5.Text:=IntToStr(round(ColG));   {нужны лишь в моём} 
  ClrDialog.Edit6.Text:=IntToStr(round(ColB));   {примере. В Вашем может и не понадобятся.} 
 
  {Генерация шкалы яркости для выбранного оттенка} 
  StepR:=(256-ColR)/256; //определение шага для красного 
  StepG:=(256-ColG)/256; //определение шага для зелёного 
  StepB:=(256-ColB)/256; //определение шага для синего 
 
  j:=256; //здесь счётчику по Y-ку присваивается начальное значение 
  repeat
      j:=j-1; {Цикл по Y-ку организован с помощью repeat until чтобы 
    организовать обратный отсчёт от 256 до 1. Это сделано 
    для того, чтобы заполнять шкалу не с верху вниз, а снизу 
    вверх (т.к. начальная точка экранных координат 
    расположена в верхнем правом углу.)} 
 
    ColR:=ColR+StepR; {В каждом переходе цикла по Y} 
    ColG:=ColG+StepG; {увеличиваем значение соответствующего цвета} 
    ColB:=ColB+StepB; {на соответствующий ему шаг.} 
    for i:=0 to 17 do 
    begin 
      {На всякий случай проверим значения цветов на вхождение в пределы 255} 
      if ColR>255 then ColR:=255; 
      if ColG>255 then ColG:=255; 
      if ColB>255 then ColB:=255; 
 
      LineColor:=RGB(round(ColR), round(ColG), round(ColB)); //Записываем оттенок 
      ClrDialog.Yarcost.Canvas.Pixels[i, j]:=LineColor; //Рисуем точку в компонент TImage 
    end;
  until j=1;
end;
Вот в принципе все необходимые процедуры для написания такого диалога. Всё остальное – дело техники и это вы найдёте в примере к статье. Правда есть ещё один момент, который необходимо описать – это перевод из TColor в RGB формат. Чисто для примера сделаем 3 переменные типа integer (пусть это будут ColR , ColG и ColB ) и одну переменную типа TColor (Например, ColTColor). Далее присвоим значение переменной ColTColor. Пусть это будет зелёный (clGreen). Ну и, наконец, выделим из этой переменной значения RGB компонентов в соответствующие переменные типа integer. Весь код:
procedure TestTColorToRGB; 
var 
  ColR, ColG, ColB: integer; 
  ColTColor: TColor; 
begin 
  ColTColor:=clGreen; //присваиваем зелёный цвет 
 
  ColR:= ColTColor mod $100; //выделяем красный 
  ColG:=( ColTColor div $100) mod $100; //выделяем зелёный 
  ColB:= ColTColor div $10000; //выделяем синий 
end;
У переменных должны получиться следующие значения:

ColR = 0;
ColG = 255;
ColB = 0.

Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 12 Октября 2014
Просмотров: 4135


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.