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

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

Не понял! Цвета палитры виндовс (типа clBtnShadow и т.д) [D6, WinXP]


Чайник ©   (2004-09-18 01:18:00) 

Пытаюсь присвоить некоему элементу цвет из палитры Windows, например clBtnShadow - постоянно выдает черный цвет (значение
-2147483632). Любой конкретный цвет вроде clRed воспринимает. В чем дело?
У меня стоит WinXP, но стиль классический. Может здесь собака порылась? А как тогда добраться до цветов системной палитры?


Defunct   (2004-09-18 21:30:00) [1]

> Как я понимаю, те же яйца, только в профиль.

Да, тока ColorToRGB обслуживает все палитры (в т.ч. VGA256, EGA16), а GetSysColor только системную


Сине-белый   (2004-09-18 21:22:00) [2]

> Defunct ©   (18.09.04 19:21) [7]

Я меня в итоге так сделал:

 FColorBegin := GetSysColor(COLOR_BTNHIGHLIGHT);

Вашим способом тоже работает:

 FColorBegin := ColorToRGB(clBtnHighlight);

Как я понимаю, те же яйца, только в профиль.


Defunct   (2004-09-18 19:21:00) [3]

Чайник   (18.09.04 02:19) [5]

Системные цвета (clBtnFace, clBtnShadow и т.п.) представляют собой код цвета из системной палитры, который начинается с зарезервированного байта F0h, а последующие три байта отведены под номер цвета.

Для получения RGB цвета воспользуйтесь:

ColorToRGB( )


DiamondShark   (2004-09-18 10:44:00) [4]

В приведённом коде не хватает одной маленькой детали: использование цвета при рисовании.


Чайник   (2004-09-18 02:19:00) [5]

Виноват - по ошибке не в тот форум вопрос кинул - хотел в "компоненты".

Я создаю компонент:

type
 TMyComp = class(TCustomControl)
 private
   FColorBegin : TColor;
   procedure SetColorBegin(const Value: TColor);
 public
   constructor Create(AOwner : TComponent); override;
   destructor Destroy; override;
   procedure Paint; override;
 published
   property ColorBegin : TColor read FColorBegin write  SetColorBegin default clWhite;
 end;

...

procedure TMyComp.SetColorBegin(const Value: TColor);
begin
 IF FColorBegin<>Value Then begin
 FColorBegin := Value;
 Invalidate;
 end;
end;



В процедуре Paint нечто-то вроде:

   Canvas.Brush.Color := RGB(R,G,B);
   Canvas.FillRect(CopyR);
 

Так вот, если я задаю свойсто этого компонента конкретным цветом

  MyComp1.ColorBegin := clSkyBlue;

  Цвет рисуется SkyBlue, а если clBtnShadow - черный


Palladin   (2004-09-18 01:43:00) [6]

У тебя ошибка в программе (С) АП


Yanis   (2004-09-18 01:42:00) [7]

По твоему если написать
Panel1.Color := clBtnShadow;
Панель будет черный?


Чайник   (2004-09-18 01:32:00) [8]

В том то все и дело, что бы не задал (clHighlight, clBtnShadow и т.п.), показывает дурацкий отрицательный код и все черным-черно.


Yanis   (2004-09-18 01:28:00) [9]

Нормальный цвет, точно не чёрный и код другой.


Наверх

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