Текущий архив: 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.024 c