Вопрос начинающего (наверное) по TFormStyles

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
Аватара пользователя
shraibikus
новенький
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень
Контактная информация:

Вопрос начинающего (наверное) по TFormStyles

Сообщение shraibikus »

Много лет уже знаком с Паскалем, однако с этим моментом как-то не приходилось сталкиваться. А теперь не знаю как быть и откуда начинать искать (возможно не правильно формулирую вопрос).

Итак ситуация, есть входящие данные вида (упрощаю информацию, для понимания):

Код: Выделить всё

fsBold : boolean;
fsItalic : boolean;
fsUnderline : boolean;


Причем именно в таком виде и никак иначе. Как теперь мне это указать в: Font.Styles?

Ведь это система флагов и там значения указываются так, например:

Код: Выделить всё

Font.Styles := [fsBold, fsItalic]; 


Могу-ли я организовать дополнение этого флага, а не затирание старого (НЕ правильный код, для примера):

Код: Выделить всё

if fsBold then Font.Styles := [fsBold];
if fsItalic then Font.Styles := Font.Styles + [fsItalic];
if fsUnderline then Font.Styles := Font.Styles + [fsUnderline];


???

И как это делать правильно?
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

Возможно я не очень хорошо понял, но отвечу в общем. Styles имеет тип Множества:

Код: Выделить всё

  TFontStyle = (fsBold, fsItalic, fsStrikeOut, fsUnderline);
  TFontStyles = set of TFontStyle;

И вам просто нужно понять, как с этими множествами работать.
Для добавления элемента в множество, можно воспользоваться операцией плюс '+':

Код: Выделить всё

Font.Styles + [fsItalic];

для исключения минусом. Также посмотрите в сторону функций Include и Exclude, но это для переменных (нужен адрес переменной), так как вам нужно работать со свойством (property), то операции плюс и минус наверное самое то.
Ну вот можно еще тут посмотреть:
http://helpstudio.h1.ru/books/d4/d4_3/__51.htm
Описание множества в Delphi
Аватара пользователя
shraibikus
новенький
Сообщения: 36
Зарегистрирован: 22.09.2009 16:22:42
Откуда: Столица деревень
Контактная информация:

Сообщение shraibikus »

Maxizar огромное спасибо!
Оказывается, этот код правильный:

shraibikus писал(а):

Код: Выделить всё

if fsBold then Font.Styles := [fsBold];
if fsItalic then Font.Styles := Font.Styles + [fsItalic];
if fsUnderline then Font.Styles := Font.Styles + [fsUnderline];



я его просто не пробовал, почему-то подумалось, что это не будет работать. :oops:

З.Ы. очередной раз убеждаюсь, что многие ответы скрыты в самом вопросе :lol:
Ответить