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

Вниз

TPanel Vs. XPManifest   Найти похожие ветки 

 
OldNaum ©   (2005-09-20 17:14) [0]

Есть проблема - не могу понять причины )

Есть форма Form1:TForm1, на ней лежит Panel1:TPanel (Align=alTop, но это не важно =), у панели свойства ParentColor=False, Color=clSilver. У формы Color=clBtnFace, к примеру.

Если XPMan подключен, то 100% гарантия того что Panel1.Color будет равно Form1.Color в run-time. Без манифеста все как и должно быть.
Пару раз путем хитрых манипуляций с некоторыми свойствами Panel1 получалось (самое что удивительно - только на текущей машине, я думаю связано с темой XP) добиться "своего" цвета, а не украденного от формы =)

Наверняка кто-нибудь сталкивался с проблемой. Либо я сильно туплю...


 
Eraser ©   (2005-09-20 17:19) [1]


> OldNaum ©   (20.09.05 17:14)

А какие там хитрые манипуляции...? Ставишь ParentBackground сначала true, потом false, работает на всех машинах )
Скорее всего это баг в конструкторе панели или TWindowControl, каким-то боком связаный с csOpaque, дальше разбираться не стал.


 
OldNaum ©   (2005-09-20 18:26) [2]

Ну я под хитрыми манипуляциями то самое и имел в виду ) Просто подумал что меня за полоумного примут, не стал приводить =) Но работает ей богу не на всех машинах. Прихожу на работу - у босса цвет уже не тот ) Кто что посоветует? Вес равно же как-то из таких ситуаций выкручиваетесь? Тащить за собой воз и маленькую тележку каких-нить сторонних компонент не особо охота...

Eraser ©   (20.09.05 17:19) [1]
"Ставишь ParentBackground сначала true, потом false, работает на всех машинах )"
в design-time же? или в run-time? ) я мутил с design-time.


 
jack128 ©   (2005-09-20 21:05) [3]

OldNaum ©   (20.09.05 17:14)
Если XPMan подключен, то 100% гарантия того что Panel1.Color будет равно Form1.Color в run-time. Без манифеста все как и должно быть.

так может быть под той темой, которая у тя стоит clBtnFace как раз и равен clSilver ? ;)


 
OldNaum ©   (2005-09-20 21:29) [4]

jack128 ©   (20.09.05 21:05) [3]
=) неа, цвета приведены для примера. срабатывает с любыми цветами =)

З.Ы. вопрос в догонку:
кстати насколько я понимаю clSilver не является системным цветом и на любой теме имеет одно и тоже значение, в отличии от clBtnFace?


 
Eraser ©   (2005-09-20 22:31) [5]


> кстати насколько я понимаю clSilver не является системным
> цветом и на любой теме имеет одно и тоже значение, в отличии
> от clBtnFace?


Именно.
> в design-time же? или в run-time? ) я мутил с design-time.

В design-time.


 
jack128 ©   (2005-09-20 22:31) [6]

системный это цвет или нет определяется флагом clSystemColor. См объявление clBtnFace и ежи с ним..

а тут у тя явно глючек VCL. Причина его а) в том, что у тя приложние поддерживает темы XP, а Дельфя нет. б) в том как реализовано свойство по умолчанию ParentBackground.

constructor TCustomPanel.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
   csSetCaption, csOpaque, csDoubleClicks, csReplicatable];
 { When themes are on in an application default to making
   TCustomPanel"s paint with their ParentBackground }
 if ThemeServices.ThemesEnabled then // так как дельфя темы не держит, то в IDE свойство ParentBackgrount = False
   ControlStyle := ControlStyle + [csParentBackground] - [csOpaque];
//

Так как ты это свойсто не меняешь в IDE, то оно не сохраняется в dfm , а следовательно и не загружается при запуске твоей программы. Но она, твоя прога, то темы xp держит, а следовательно ты получаешь ParentBackgrount = True

Когда ты в инспекторе объектов меняешь значение ParentBackground, то взводится флаг FParentBackgroundSet и значение свойства сохраняется в dfm со всеми вытекающими..


 
jack128 ©   (2005-09-20 22:41) [7]

Вот например:
Если контрол:
 TTestControl = class(TCustomControl)
 published
   property Align;
   property Anchors;
   property AutoSize;
   property BiDiMode;
   property Caption;
   property Color;
   property Constraints;
   property DragCursor;
   property DragKind;
   property DragMode;
   property Enabled;
   property Font;
   property ParentBiDiMode;
   property ParentColor;
   property ParentFont;
   property ParentShowHint;
   property PopupMenu;
   property ShowHint;
   property Visible;
   property OnClick;
   property OnContextPopup;
   property OnDblClick;
   property OnDragDrop;
   property OnDragOver;
   property OnEndDock;
   property OnEndDrag;
   property OnMouseDown;
   property OnMouseMove;
   property OnMouseUp;
   property OnStartDock;
   property OnStartDrag;
 end;

Инсталируем его, кидаем на форму выставляем в дезигн тайм свойсто Color равным clWindow жмем f9 и удивляемся :-)


 
OldNaum ©   (2005-09-21 04:43) [8]

jack128 ©   (20.09.05 22:31) [6]
вроде бы вник ) спасибо за столь подробное объяснение.

чисто интуитивно "Когда ты в инспекторе объектов меняешь значение ParentBackground, то взводится флаг FParentBackgroundSet и значение свойства сохраняется в dfm со всеми вытекающими.." я подозревал.

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

из ситуации вышел следующим макаром:

procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.ControlStyle := Panel1.ControlStyle - [csParentBackground]
end;


Может быть не особо красиво ) В дальнейшем проще свой компонент организовать, я думаю ) а то при большом кол-ве панелей, запарка ) правда как вариант пробегаться по всем панелям формы и творить свое грязное дело в цикле, но больше похоже на бред сумасшедшего.



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

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

Наверх




Память: 0.49 MB
Время: 0.044 c
1-1127217496
Andrew777
2005-09-20 15:58
2005.10.09
Как перехватить нажатие мультемедийной клавиши?


1-1127203505
Vladimir88
2005-09-20 12:05
2005.10.09
TTreeView


11-1106395918
dimaxx
2005-01-22 15:11
2005.10.09
Объект в DLL и использование его методов в главном модуле


2-1125459771
AlexanderS
2005-08-31 07:42
2005.10.09
Ошибка с OpenDialog


4-1123760378
VNavigator
2005-08-11 15:39
2005.10.09
Вызов контекстного меню проводника