Цветовая константа

Раньше, я создавал константу цвета при помощи функции RGB, но в последних обновлениях запретили использовать функции при объявлении константы. Как это можно сделать теперь?

const my_color = #BBGGRR // Что-то такое есть?

upd: через символ $, как, например, в Delphi, эта среда возвращает integer-число, которое через функцию во всех упоминаниях придется конвертировать. Ну такое :slight_smile:

const
  X = Sin(ReadlnInteger()); // Видимо, хорошо запрещали, раз такое проходит компиляцию.

begin
  Writeln(X);
end.

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

uses GraphABC;

const
  X = WindowWidth(); // Но без скобочек - компилируется.

begin
end.
1 лайк

Определить переменную религия не позволяет?

uses GraphWPF;

var myColor := RGB(128, 128, 255);

begin
  Line(10, 10, 100, 200, myColor);     
end.
1 лайк

Сделайте, например, статический класс с readonly свойствами цветов.

2 лайка

Честно говоря, код я писал очень давно, тогда PABC.NET еще о WPF даже не слышал. И когда делаю цвет в виде переменной, отрисовка идет неправильно. Словно где-то меняется значение, Хотя тогда бы не запускался код когда это была константа. Вообщем, нет времени разбираться как это выходит.

Это плохое решение. Если что-то - это переменная, то компилятор не может проконтролировать изменяете ли Вы её или нет - соответственно из-за этого могут быть ошибки. Использование констант - дело само по себе хорошее, но, когда это невозможно по техническим причинам, можете использовать вместо них свойства, как уже выше и сказал.

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

1 лайк

Большое спасибо за ответ! Постараюсь все-таки посмотреть код, но в случае чего, воспользуюсь вашим советом на счет readonly-полей класса.

В .NET языках обычно не используют публичные поля, вместо этого используют свойства.

1 лайк

Проблема в том, что System.Windows.Media.Color - это структура, у которой поля задают значение альфы и компонент цветовых каналов. Поэтому через константу Color определить невозможно. А запрет в значениях констант на выражения с функциями введен из-за того, что есть множество ситуаций, когда на стадии компиляции значение вычислить невозможно.

2 лайка