Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi+TColor, Как сделать перебор цветов 
:(
    Опции темы
Kesh
  Дата 7.11.2002, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 4
Всего: 54



Тут вот пришлось повозиться с цветами... Предлагалось сделать так:

Код

var
 C: TColor;
 i: byte;
...
 for i := 0 to 15 do
   case i of
     0: C := clBlack;
     ...
     15: C := clWhite
   end
...


А хочется что-то типа такого:

Код

var
 C: TColor;
 i: byte;
...
 for i := 0 to 15 do
   C := MathematicalOperations(i)
...


Как?
Заранее спасибо...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Vit
Дата 7.11.2002, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



4 бита :

1 2 3 4


4й бит -  красный цвет
3й бит -  зелёный цвет
2й бит -  синий цвет

Цвета смешиваются функцией - RGB(красный, зелёный, синий)

Если бит =0 то соответственно в функцию RGB соответствующий цвет отправляется $0, а если 1 то надо смотреть на бит 1 - если бит1=1 ещ отправляется $FF а если бит1=0 то отправляется $80

Например для 5 в двоичном виде будет 0101, значит для получения цвета зададим RGB($80,0,$80).

Ещё примеры:

0  clBlack  0000  RGB($0,$0,$0)
1  clBlue   0001  RGB($0,$0,$80)
2  clGreen 0010  RGB($0,$80,$0)
3  clRed    0100  RGB($80,$0,$0)
...
15 clWhite 1111  RGB($FF,$FF,$FF)




Хорошее упражнение для изучения двоичной системы счисления....




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
neutrino
Дата 7.11.2002, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



type
 TColorArray = array[0..15] of TColor;
var
 ColorArray: TColorArray = (clBlack, clRed, clGreen, clBlue ... );
 CurrentColor: TColor;
 i: Integer;
begin
 for i:=0 to 15 do
   CurrentColor := ColorArray[i];
end;


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Vit
Дата 8.11.2002, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Код

Function byte2color(b:byte):TColor;
 Function OneColor(b,Shift:byte):byte;
 begin
   if (b and shift)<>0 then
     if (b and 8)<>0 then result:=$FF else result:=$80 else result:=$0;
 end;
begin
 Result:=RGB(OneColor(b,1),OneColor(b,2),OneColor(b,4));
end;



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
neutrino
Дата 8.11.2002, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Все правильно, только с массивом будет быстрее работать. Ведь цветов всего 16, так что особого смысла в написании функции нет.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Vit
Дата 8.11.2002, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Человеку нужна функция - я сделал функцию... Конечно с массивом быстрее и удобнее.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Kesh
  Дата 10.11.2002, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 4
Всего: 54



Всем огромное спасибо...
Каждый из ваших ответов был действительно полезен...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0950 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.