С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
9 / 9 / 4
Регистрация: 11.07.2012
Сообщений: 200
1

Особенность XE8

03.10.2016, 11:27. Показов 1960. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени дня.

Простой вопрос - как поменять цвет фона у CheckBox в delphi xe8 ?

В делфи 7 есть замечательное свойство color - и если parentcolor выставлено в false то меняя его
хоть прогрммно хоть в дизайнере - сразу видишь реакцию цвет меняется.

В xe8 с этим проблема и не только у CheckBox но скажем и у GroupBox но с последним решение найдено у
него есть свойство parentbackground выставив оное в false можно заставить компонент вести себя адекватно.

У CheckBox к сожалению нет свойства parentbackground - но наверняка есть какой то другой ньюанс, люди скажите
какой ??????
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.10.2016, 11:27
Ответы с готовыми решениями:

Особенность Delphi 7 и др
Доброго времени суток. Вопрос адресован прежде всего опытным программистам: почему при изучении...

Особенность наследования в классах
Здравствуйте! Такое дело: имеется класс, допустим TChida. В нём, - массив целых чисел "А" и метод,...

Особенность в массиве
Случайно наткнулся на такую проблему: объявил массив из 10 элементов, т.е последний элемент a...

Сворачивание окон (особенность Windows)
заметил такую особенность у windows если взять открытую программу или папку за заголовок окна и...

10
Эксперт Pascal/Delphi
4918 / 2786 / 855
Регистрация: 04.10.2012
Сообщений: 10,148
03.10.2016, 11:48 2
Цитата Сообщение от kebot Посмотреть сообщение
В делфи 7 есть замечательное свойство color - и если parentcolor
у меня в Delphi 10 Seattle они тоже есть. Значит, есть и в XE8. См. внимательнее.
0
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 3
03.10.2016, 11:57 3
тут дел в том что в каком то XE включили отрисовку элементов через темы Windows
если темы отключить, то все работать будет (но некрасиво)
а если не отключать, то нужно через элементы темы менять

Delphi
1
2
3
4
5
6
uses VCL.Themes
var LDetails: TThemedElementDetails; LColor: TColor; 
begin
LDetails := StyleServices.GetElementDetails(tlGroupHeaderOpen); // вот этих констант целая куча
StyleServices.GetElementColor(LDetails,ecHeading1TextColor,LColor); 
GroupBox1.Font.Color := LColor; end;
Миниатюры
Особенность XE8   Особенность XE8  
0
9 / 9 / 4
Регистрация: 11.07.2012
Сообщений: 200
03.10.2016, 11:59  [ТС] 4
у меня в Delphi 10 Seattle они тоже есть. Значит, есть и в XE8. См. внимательнее.
я же не сказал что их нет в XE8, есть и color и parentcolor

ТОЛЬКО ОНИ НЕ РАБОТАЮТ (видимо еще какие то манипуляции - телодвижения нужны -вопрос какие)

запускаю новый проект - на чистую форму кладу один единственный чекбокс

parentcolor:=false;
color:=clRED;

результата НЕТ - куда проще ? и что внимательней ?
0
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 3
03.10.2016, 12:06 5
Цитата Сообщение от kebot Посмотреть сообщение
и что внимательней ?
обновляйте страницу перед написанием сообщения

Цитата Сообщение от kebot Посмотреть сообщение
результата НЕТ
результат то есть всегда
0
9 / 9 / 4
Регистрация: 11.07.2012
Сообщений: 200
03.10.2016, 13:39  [ТС] 6
qwertehok
Не могли бы Вы чуть подробней расписать, что делает приведенный вами код.

Второй скриншот - это то что мне нужно но он как то не совсем вяжется со строчками кода.
Залез в справку - констант действительно куча но описание отсутствует. По сети полазил, что то тоже пока
без толку. Метод тыка пока положительного результата не принес
0
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 3
03.10.2016, 13:56 7
Цитата Сообщение от kebot Посмотреть сообщение
Второй скриншот - это то что мне нужно но он как то не совсем вяжется со строчками кода.
в настройках отключите манифест и у вас все заработает
0
9 / 9 / 4
Регистрация: 11.07.2012
Сообщений: 200
03.10.2016, 14:04  [ТС] 8
заработало, но это не вариант я проект через svn делаю (т.е. не один но коллеги не знают ответ на эту проблему)
поэтому идеально подходит ваш вариант - может где статейка есть по подробней обо всем этом почитать ?
0
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 3
03.10.2016, 14:15 9
Цитата Сообщение от kebot Посмотреть сообщение
может где статейка есть по подробней обо всем этом почитать ?
я почитал тут
http://stackoverflow.com/quest... -tgroupbox
http://codeverge.com/embarcade... e4/1052853

менять через темы не пробовал
0
9 / 9 / 4
Регистрация: 11.07.2012
Сообщений: 200
04.10.2016, 13:45  [ТС] 10
Народ помогите разобраться, как правильно работать с "элементами тем Windows" точнее как обходить ограничения
на изменение параметров в визуальных компонентах при включенных оных в delphi xe2 и старше:

Вот пример от VOLVO c данного форума:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
      type
  TGroupBox = class(Vcl.StdCtrls.TGroupBox) // перед классом формы
  private
    FCaptionFont: TFont;
    procedure SetCaptionFont(AFont: TFont);
 
  public
    constructor Create(AOwner: TComponent); override;
    procedure Paint; override;
 
  published
    property CaptionFont: TFont read FCaptionFont write SetCaptionFont;
  end;
 
  TForm1 = class(TForm) // дальше все без изменений
 
// ...
 
 
// –еализаци¤
 
{ TGroupBox }
constructor TGroupBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FCaptionFont := Font;
end;
 
procedure TGroupBox.Paint;
var
  Height: Integer;
  R: TRect;
  Flags: Cardinal;
  CRect, ORect: TRect;
  Size: TSize;
  tbBox: TThemedButton;
  teDetails: TThemedElementDetails;
 
begin
  with Canvas do
  begin
    Font := FCaptionFont;
    if StyleServices.Enabled then
    begin
      if Text <> '' then
      begin
        GetTextExtentPoint32(Handle, PChar(Text), length(Text), Size);
        CRect := Rect(0, 0, Size.cx, Size.cy);
        if not UseRightToLeftAlignment then
          OffsetRect(CRect, 8, 0)
        else
          OffsetRect(CRect, Width - 8 - CRect.Right, 0);
      end
      else
        CRect := Rect(0, 0, 0, 0);
      ORect := ClientRect;
      ORect.Top := (CRect.Bottom - CRect.Top) div 2;
      with CRect do
        ExcludeClipRect(Handle, Left, Top, Right, Bottom);
      if Enabled then
        tbBox := tbGroupBoxNormal
      else
        tbBox := tbGroupBoxDisabled;
      teDetails := StyleServices.GetElementDetails(tbBox);
      StyleServices.DrawElement(Handle, teDetails, ORect);
 
      SelectClipRgn(Handle, 0);
      if Text <> '' then
        Brush.Color := Color;
      Font := FCaptionFont;
      DrawText(Handle, PChar(Text), length(Text), CRect, Flags);
    end
    else
    begin
      Height := TextHeight('0');
      R := Rect(0, Height div 2 - 1, Width, Height);
 
      if Ctl3D then
      begin
        inc(R.Left);
        inc(R.Top);
        Brush.Color := clBtnHighlight;
 
        FrameRect(R);
 
        OffsetRect(R, -1, -1);
        Brush.Color := clBtnShadow;
      end
      else
        Brush.Color := clWindowFrame;
      FrameRect(R);
 
      if Text <> '' then
      begin
        if not UseRightToLeftAlignment then
          R := Rect(8, 0, 0, Height)
        else
          R := Rect(R.Right - Canvas.TextWidth(Text) - 8, 0, 0, Height);
        Flags := DrawTextBiDiModeFlags(DT_SINGLELINE);
        if Assigned(CaptionFont) then
          Font := CaptionFont;
        DrawText(Handle, PChar(Text), length(Text), R, Flags or DT_CALCRECT);
        Brush.Color := Color;
        DrawText(Handle, PChar(Text), length(Text), R, Flags);
      end;
    end;
  end;
end;
 
procedure TGroupBox.SetCaptionFont(AFont: TFont);
begin
  FCaptionFont := AFont;
  Repaint;
end;
Он понятен - подменяется конструктор создающий GroupBox, уже со своим методом Paint в котором Font := FCaptionFont;
при чем procedure TGroupBox.Paint; взято из Vcl.StdCtrls с небольшими доработками.

Вопрос 1: как такое же провернуть с CheckBox - я ни как немогу найти где он рисуется его Paint
Вопрос 2: а нужно ли вообще так заморачиватся - только для того чтобы поменять цвет фона у
CheckBox (свойство COLOR).

может достаточно оперировать StyleServices.GetElementDetails и StyleServices.GetElementColor
если достаточно то где ? (в onpaint формы,компонента, любом месте программы ?)

Delphi
1
 StyleServices.GetElementColor(LDetails,ecHeading1TextColor,LColor);
что это ? это какое то булевое значение, но что оно дает как его использовать ?
0
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
04.10.2016, 14:15 11
При использовании "Тем Оформления" значения вроде TCheckBox.Color игнорируются. Даже в Делфи7. Только переопределять отрисовку.
0
04.10.2016, 14:15
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.10.2016, 14:15
Помогаю со студенческими работами здесь

ОС на Delphi XE8
Всем привет! У меня есть вопрос! Могу ли я, если могу то как, сделать ОС на Delphi XE8! Позырил...

Delphi xe8 моргает
Подскажите, из-за чего может моргать изображение при repaint? И моргает именно на ноутбуке, на...

Прикол с синтаксисом Delphi7 и XE8
Есть приложение написаное на Delphi7 все нормально компилируеться и работает исправно но когда...

Смена кодировки на UTF-8 (XE8)
На форме имеется компонент едит с редактируемым пользователем тексом. По нажатию кнопки текст из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru