Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Компоненты RGB из констант красок. [D6, WinXP]


.: Joiro :. ©   (2002-06-30 18:11:00) 

Вот такой у меня к знатокам вопрос:

Из Делфийских констант красок вроде clActiveCaption, clGradientActiveCaption можно получать компоненты RGB или нет?

Вроде туповатый вопрос, но на Delphi 6 под WinXP у такого простого кода:

Color1 := clGradientActiveCaption;

R := GetRValue(Color1);
G := GetGValue(Color1);
B := GetBValue(Color1);

результат всегда один: R,G и B = 0, то есть они не изменились.

Есть ли возможность обойти эту странность?


.: Joiro :.   (2002-07-02 16:34:00) [1]

2ricks

Вот где-то ведь видел и в голове что-то о том было, но вот дырявая память... больщое спасибо за ответ.


ricks   (2002-07-02 14:36:00) [2]

clActiveCaption - это системный цвет. Посмотрите в Graphics какой у него номер. Меньше нуля. Поэтому прежде чем использовать GetXValue надо написать:
Color1:=ColorToRGB(Color1)
или
Color1:=GetSysColor(Color1 and $000000FF);
Вот и все. А вы мучались :-)))


ricks   (2002-07-02 14:35:00) [3]

clActiveCaptio - это системный цвет. Посмотрите в Graphics какой у него номер. Меньше нуля. Поэтому прежде чем использовать GetXValue надо написать:
Color1:=ColorToRGB(Color1)
или
Color1:=GetSysColor(Color1 and $000000FF);
Вот и все. А вы мучались :-)))


.: Joiro :.   (2002-07-02 11:07:00) [4]

Хмм... также при использовании GetRValue, итд? Потому что назначить краску контролам, самой форме или картинке по пикселам (Canvas.Pixels[X,Y]) не проблема, но у меня используется Scanline а там надо разделить краски на RGB составляющие. А каждый раз использовать битмап для перегона красок как-то не совсем хочется.


KilkennyCat   (2002-07-02 05:39:00) [5]

Я использую в своей проге такие константы. Работает. Помню, что с какими-то двумя не заработало, несмотря на то, что в интерфейсе они тоже присутствовали (правда, мне сообщало об ошибке при запуске). Делфи 6, ВинХР.


.: Joiro :.   (2002-07-01 11:19:00) [6]

Фишка то в том, что в интерфейсе программы есть возможность выбрать эти краски и их можно назначить, например, самой форме (и в runtime), что значит что краски присутствуют. И цвет уж точно не чёрный.

Так что или это в Delphi что-то не так или WinXP, или оба (или всё же я :)).

Пробовал Color1 := Color2 - не помогает, пробовал дать краску форме и Color1 := Form1.Color - тоже не помогает. Но пройсходит только для констант с красками из Windows.

Скорее всего придётся делать с битмапом, только не специально созданным а одним из присутствуюших.

И немножко попробуем поднять шансы получить ответ на другой вопрос: Это дело с красками нужно для этой вещи: http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1025434691&n=3


KilkennyCat   (2002-07-01 07:32:00) [7]

я не пробовал проверить это утверждение, хотя склонен думать, что в данном случае либо clGradientActiveCaption - черный, либо в WinXP такого нет (то, что там несколько подобных цветов отсутствует - это доказано печальным опытом).
Но если предположить, что все нормально, и цвет не черный, и константа такая есть, но возврат все равно 0, то надо создать битмап размером 1х1, закрасить его этим цветом и получить новый цвет используя свойство пикселс.


Наверх

Титульная страница Поиск, карта сайта Написать письмо