Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Delphi+TColor


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

Код

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)
...


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

Автор: Vit 7.11.2002, 12:53
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)




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


Автор: neutrino 7.11.2002, 18:04
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;

Автор: Vit 8.11.2002, 00:24
Код

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;

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

Автор: Vit 8.11.2002, 02:49
Человеку нужна функция - я сделал функцию... Конечно с массивом быстрее и удобнее.

Автор: Kesh 10.11.2002, 07:24
Всем огромное спасибо...
Каждый из ваших ответов был действительно полезен...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)