Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 316

/ вопрос решён /

Здравствуйте уважаемые эксперты! Как известно, палитра формируется из трёх цветов, укажите пожалуйста числовой диапазон изменения каждого из цветов, в смысле конечное и начальное число. И ещё, на форме три движка, как сделать так, чтобы один соответствовал одному цвету, а другие другим цветам, и как по их положению выводить получившийся цвет? Заранее благодарен.

Полушин Сергей Анатольевич Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Полушин Сергей Анатольевич (статус: Посетитель)
Вопрос отправлен: 16 февраля 2007, 20:32
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Смотрим функцию RGB, которая по трём своим параметрам формирует цвет. Параметры имеют тип byte - соответственно диапазон 0..255.
-----
Для движков задаём свойство max=255
дальше для них в обработчике OnChange пишем следующее
Label1.caption:=inttohex(RGB(Trackbar1.position,Trackbar2.position,Trackbar3.position),8);

ну или что то в виде Form1.color:=RGB(.....);

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 16 февраля 2007, 21:20
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Роман

Здравствуйте, Полушин Сергей Анатольевич!Диапазон изменения каждого цвета 0-255;Поповоду второй части посмотри код,там есть функция GetColour(Red,Green,Blue:integer):TColor; - возвращает значение цвета в RGB.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, Spin, StdCtrls, ComCtrls, ExtCtrls, XPMan, Placemnt, ColorGrd;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Label1: TLabel;
  12. Label2: TLabel;
  13. Label3: TLabel;
  14. TB1: TTrackBar;
  15. TB2: TTrackBar;
  16. TB3: TTrackBar;
  17. Button1: TButton;
  18. Button2: TButton;
  19. SpinEditRed: TSpinEdit;
  20. SpinEditGreen: TSpinEdit;
  21. SpinEditBlue: TSpinEdit;
  22. Image1: TImage;
  23. XPManifest1: TXPManifest;
  24. FormStorage1: TFormStorage;
  25. ColorGrid: TColorGrid;
  26. Panel1: TPanel;
  27. procedure TB1Change(Sender: TObject);
  28. procedure TB2Change(Sender: TObject);
  29. procedure TB3Change(Sender: TObject);
  30. procedure Button1Click(Sender: TObject);
  31. procedure Button2Click(Sender: TObject);
  32. procedure SpinEditRedChange(Sender: TObject);
  33. procedure SpinEditGreenChange(Sender: TObject);
  34. procedure SpinEditBlueChange(Sender: TObject);
  35. procedure DrawColor(Sender: TObject);
  36. procedure FormCreate(Sender: TObject);
  37. procedure ColorGridClick(Sender: TObject);
  38. private
  39. { Private declarations }
  40. public
  41. { Public declarations }
  42. end;
  43.  
  44. var
  45. Form1: TForm1;
  46.  
  47. implementation
  48.  
  49. {$R *.dfm}
  50.  
  51. function GetColour(Red,Green,Blue:integer):TColor;
  52. begin
  53. asm
  54.  
  55. mov ecx,0
  56.  
  57. mov eax,Red
  58.  
  59. and eax,255
  60.  
  61. shl eax,16
  62.  
  63. xor ecx,eax
  64.  
  65. mov eax,Green
  66. and eax,255
  67. shl eax,8
  68. xor ecx,eax
  69.  
  70. mov eax,Blue
  71. and eax,255
  72. xor ecx,eax
  73. mov Result, ecx
  74. end;
  75. end;
  76.  
  77. procedure TForm1.DrawColor(Sender: TObject);
  78. begin
  79. Image1.Canvas.Brush.Color:=GetColour(SpinEditBlue.Value,SpinEditGreen.Value,SpinEditRed.Value);
  80. Image1.Canvas.Rectangle(0,0,217,41);
  81. end;
  82.  
  83.  
  84. procedure TForm1.TB1Change(Sender: TObject);
  85. begin
  86. SpinEditRed.Value:=TB1.Position;
  87. end;
  88.  
  89. procedure TForm1.TB2Change(Sender: TObject);
  90. begin
  91. SpinEditGreen.Value:=TB2.Position;
  92.  
  93. end;
  94.  
  95. procedure TForm1.TB3Change(Sender: TObject);
  96. begin
  97. SpinEditBlue.Value:=TB3.Position;
  98.  
  99. end;
  100.  
  101. procedure TForm1.Button1Click(Sender: TObject);
  102. begin
  103. Form1.Close;
  104. end;
  105.  
  106. procedure TForm1.Button2Click(Sender: TObject);
  107. begin
  108. Form1.Close;
  109. end;
  110.  
  111. procedure TForm1.SpinEditRedChange(Sender: TObject);
  112. begin
  113. DrawColor(Sender);
  114. TB1.Position:=SpinEditRed.Value;
  115. end;
  116.  
  117. procedure TForm1.SpinEditGreenChange(Sender: TObject);
  118. begin
  119. DrawColor(Sender);
  120. TB2.Position:=SpinEditGreen.Value;
  121. end;
  122.  
  123. procedure TForm1.SpinEditBlueChange(Sender: TObject);
  124. begin
  125. DrawColor(Sender);
  126. TB3.Position:=SpinEditBlue.Value;
  127. end;
  128.  
  129. procedure TForm1.FormCreate(Sender: TObject);
  130. begin
  131. DrawColor(Sender);
  132. end;
  133.  
  134. procedure TForm1.ColorGridClick(Sender: TObject);
  135. begin
  136. SpinEditRed.Value:=GetRValue(ColorGrid.ForegroundColor);
  137. SpinEditGreen.Value:=GetGValue(ColorGrid.ForegroundColor);
  138. SpinEditBlue.Value:=GetBValue(ColorGrid.ForegroundColor);
  139. end;
  140.  
  141. end.
  142.  


Ответ отправил: Роман (статус: 5-ый класс)
Время отправки: 17 февраля 2007, 00:29
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 0.

31 января 2011, 19:26: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.03 сек.