Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

Не понял! Цвета палитры виндовс (типа 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.248 c
1-1095410692
Drakosha
2004-09-17 12:44
2004.10.03
TTreeView


3-1094166069
fif
2004-09-03 03:01
2004.10.03
базы данных database в сети


3-1094167004
O l e g
2004-09-03 03:16
2004.10.03
Переполнение стека, что это?


1-1095335118
webpauk
2004-09-16 15:45
2004.10.03
Parent


3-1094120992
Pipl
2004-09-02 14:29
2004.10.03
Добавление строки в Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский