Логин:     Забыли пароль?
 
Пароль:   Регистрация

Форум / Программирование - Свойство ParentBackground компонента Panel и XPManifest. Ахтунг!  

Свойство ParentBackground компонента Panel и XPManifest. Ахтунг!


Страницы: «1» «2» «3»
DNK
DNK
Студент
Сообщения: 241
[Сообщение #1] ! 17 июня 2010, 09:44
Началось всё с вопроса №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"
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #2] 17 июня 2010, 09:57

Цитата (DNK):

Пока счёт 3:1 в нашу пользу.


Бугага! В чём польза-то?

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ерёмин А.А.
Ерёмин А.А.
*Администратор
Сообщения: 435
[Сообщение #3] 17 июня 2010, 10:13
Давно тоже встречался с этой проблемой: многие контролы меняли свой цвет на цвет формы и сделать с этим ничего не получалось. Уже не помню, получилось ли, но, DNK, спасибо!

DNK
DNK
Студент
Сообщения: 241
[Сообщение #4] 17 июня 2010, 11:17
min@y™: Можно опрос сделать по этому поводу.

Выполните следующее упражнение. Создайте новый проект. Положите на форму компоненты XPManifest и Hanel. Чему равно свойство ParentBackground у панели о инспекторе объектов?

1. True
2. False

"Digital Networked Knight"
min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #5] 17 июня 2010, 11:45
У меня всегда True, в delphi 7 и 2006. И всегда так было.

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ерёмин А.А.
Ерёмин А.А.
*Администратор
Сообщения: 435
[Сообщение #6] 17 июня 2010, 12:42
Delphi 2009. По умолчанию естественно True. Если поменять Color, то автоматически становится ParentBackground=False и при запуске панель именно того цвета, который выбран. Т.е. этот глюк исправили, судя по всему.

SOA
SOA
Посетитель
Сообщения: 3
[Сообщение #7] !!! 17 июня 2010, 13:42
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);

Вадим К
Вадим К
Академик
Сообщения: 85
[Сообщение #8] 17 июня 2010, 13:46

Цитата (Ерёмин А.А.):

Delphi 2009. По умолчанию естественно True. Если поменять Color, то автоматически становится ParentBackground=False и при запуске панель именно того цвета, который выбран. Т.е. этот глюк исправили, судя по всему.

так это не глюк, а нормальное поведение. Если бы ParentBackground осталось true, то ничего не поменялось.

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

Галочка "подтверждения прочтения" - вселенское зло.
SOA
SOA
Посетитель
Сообщения: 3
[Сообщение #9] 17 июня 2010, 13:49
Радиобаттон то ладно, но все остальное то тоже не меняет цвет в присутствии XPManifest, вот что обидно.

min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #10] 17 июня 2010, 13:51

Цитата (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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: «1» «2» «3» (всего страниц: 3, текущая: 1)
Всего сообщений: 27 (сейчас показаны: с 1 по 10)

Перейти в раздел:


 © 2004 - 2017, Delphi.int.ru
Версия форума: 1.10 (19.01.2010)
RSS Delphi.int.ru Expert Код
Выполнено за 0.09 сек.
Обратная связь  
Рейтинг@Mail.ru Majordomo.ru - надёжный хостинг