Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Не понял! Цвета палитры виндовс (типа clBtnShadow и т.д)   Найти похожие ветки 

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

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


 
Yanis ©   (2004-09-18 01:28) [1]

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


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

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


 
Yanis ©   (2004-09-18 01:42) [3]

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


 
Palladin ©   (2004-09-18 01:43) [4]

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


 
Чайник   (2004-09-18 02:19) [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 - черный


 
DiamondShark ©   (2004-09-18 10:44) [6]

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


 
Defunct ©   (2004-09-18 19:21) [7]

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

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

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

ColorToRGB( )


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

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

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

 FColorBegin := GetSysColor(COLOR_BTNHIGHLIGHT);

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

 FColorBegin := ColorToRGB(clBtnHighlight);

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


 
Defunct ©   (2004-09-18 21:30) [9]

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
6-1090728007
DelphiN!
2004-07-25 08:00
2004.10.03
Ссылка на объект для скачивания


8-1089603221
Nolf
2004-07-12 07:33
2004.10.03
Плагин к Winamp у


14-1095181371
ДухКороляАртура
2004-09-14 21:02
2004.10.03
Замена BDE


1-1095237628
Black
2004-09-15 12:40
2004.10.03
Почему delete(q, 0, 8) выдаёт ошибку?


14-1094723822
Guest
2004-09-09 13:57
2004.10.03
Реально-ли сделать прогу которая будет выводить звук через