Форум Программирование Свойство ParentBackground компонента Panel и XPManifest. Ахтунг! |
|
Началось всё с вопроса №4334. Delphi 7. Использование XPManifest приводит к тому, что панели начинают наследовать цвет фона формы. После этого как бы вы не пытались изменить цвет этой панели, ничего не выйдет. По идее за такое поведение отвечает свойство ParentBackground. При значении true фон наследуется от контейнера, при false - нет. Проблема возникает, если мы хотим прописать панели отличный цвет фона. Дело в том, что бывают случаи, когда сама программа и дизайнер форм считывают разное значение по-умалчиванию (при этом в dfm-файле отсутствует значение) свойства ParentBackground. При дизайне формы это значение может быть false, а при запуске программы - true. Решения нашел два: 1. Прописывать присвоение значения ParentBackground и Color в коде (например в OnCreate). 2. Найти в инспекторе объектов свойство ParentBackground. Даже если оно равно false, выбрать значение опять же false. После этого значение свойства выделится жирным шрифтом. Это говорит о том, что в dfm-файл формы добавлена строка ParentBackground = False. В результате при запуске программа установит именно такое значение свойства. P.S.: Почему у одних свойство показывается правильно, а у других нет я пока не выявил. Сам отношись ко вторым. Пока счёт 3:1 в нашу пользу. "Digital Networked Knight" | ||||||
|
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! | ||||||
|
Давно тоже встречался с этой проблемой: многие контролы меняли свой цвет на цвет формы и сделать с этим ничего не получалось. Уже не помню, получилось ли, но, DNK, спасибо! | ||||||
|
min@y™: Можно опрос сделать по этому поводу. Выполните следующее упражнение. Создайте новый проект. Положите на форму компоненты XPManifest и Hanel. Чему равно свойство ParentBackground у панели о инспекторе объектов? 1. True 2. False "Digital Networked Knight" | ||||||
|
У меня всегда True, в delphi 7 и 2006. И всегда так было. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! | ||||||
|
Delphi 2009. По умолчанию естественно True. Если поменять Color, то автоматически становится ParentBackground=False и при запуске панель именно того цвета, который выбран. Т.е. этот глюк исправили, судя по всему. | ||||||
|
Panel это еще цветочки, там хотябы свойство програмно или инспекторе проставить можно, а вот как быть с TrackBar, RadioGroup, ProgressBar и другими визуальными компонентами, которые точно также не меняют свой цвет в присутствии XPManifest, который как я думаю конфликтует с библиотекой Graphics, потому что как я понимаю именно она отвечает за прорисовку компонент. Ниже привожу пример кодов, которые не работают точно также USES CommCtrl; //TrackBar1.Brush.Color:=RGB(255,255,255); SendMessage(ProgressBar1.Handle, PBM_SETBARCOLOR, 0, ClRed); RadioGroup1.Color:=RGB(255,255,255); | ||||||
|
Цитата (Ерёмин А.А.): Delphi 2009. По умолчанию естественно True. Если поменять Color, то автоматически становится ParentBackground=False и при запуске панель именно того цвета, который выбран. Т.е. этот глюк исправили, судя по всему. так это не глюк, а нормальное поведение. Если бы ParentBackground осталось true, то ничего не поменялось. В целом, делать радиобаттоны разноцветными и некоторые другие - очень плохо. У многих пользователей изменена цветовая схема и так приятно наблюдать белые буквы на белом фоне. Галочка "подтверждения прочтения" - вселенское зло. | ||||||
|
Радиобаттон то ладно, но все остальное то тоже не меняет цвет в присутствии XPManifest, вот что обидно. | ||||||
|
Цитата (SOA): а вот как быть с TrackBar, RadioGroup, ProgressBar Что ж ты за программу пишешь, если тебе понадобилось менять цвета этих компнентов? Компонент TXPManifest на прорисовку не влияет, он просто добавляет в ЕХЕ текстовый ресурс манифеста (XML-файл), чтобы система WinXP и выше знала, что GUI надо отрисовывать согласно настройкам текущей темы пользователя. А раз так, то и нефига менять цвета стандартных контролов, система будет рисовать их так, как захотел сам пользователь. {*******************************************************} { } { Borland Delphi Visual Component Library } { } { Copyright (c) 2002 Borland Software Corporation } { } {*******************************************************} unit XPMan; {$WEAKPACKAGEUNIT ON} interface uses SysUtils, Classes; type TXPManifest = class(TComponent) end; {$R WindowsXP.res} implementation end. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! | ||||||
Перейти в раздел:
© 2004 - 2025, Delphi.int.ru |
Версия форума: 1.10 (19.01.2010) |
Выполнено за 0.02 сек. |