Вопросы программирования и использования среды Lazarus.
Модератор: Модераторы
resident
энтузиаст
Сообщения: 605 Зарегистрирован: 13.03.2013 16:58:51
Сообщение
resident » 18.03.2014 21:24:07
Здрасть )
Подскажите, почему не работает преобразование множества TFontStyles в Byte?
Код: Выделить всё
function MyFontStyleToString(FS: TFontStyles): string; var B: Byte; begin B := byte(FS); // <<< Illegal type conversion Result := '$' + HexStr(B, 6); end;
sign
энтузиаст
Сообщения: 1131 Зарегистрирован: 30.08.2009 09:20:53
Сообщение
sign » 19.03.2014 06:05:58
Потому что, Integer(Font.Style);
alexs
долгожитель
Сообщения: 4069 Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:
Сообщение
alexs » 19.03.2014 21:54:15
resident А почему не воспользоваться процедурой GetStrProp из модуля typinfo. Получится гораздо красивее - будет прям строкое представление - как в lfm-файлах.
resident
энтузиаст
Сообщения: 605 Зарегистрирован: 13.03.2013 16:58:51
Сообщение
resident » 19.03.2014 23:02:33
alexs Интересная возможность. Но пробую, и что-то не получается - выводит пустую строку.
Код: Выделить всё
procedure Test; var Font: TFont; begin Font := TFont.Create; Font.Style := [fsBold, fsItalic]; ShowMessage('Font Styles = ' + GetStrProp(Font, 'Style')); end;
alexs
долгожитель
Сообщения: 4069 Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:
Сообщение
alexs » 20.03.2014 00:13:51
Объект должен быть наследнком от TPersistent Например: ShowMessage('Font Styles = ' + GetStrProp(Form1, 'Style')); В качестве пример хорош видно как это работает при сохранении свойтс в бъектах LazReport-а. Методы SaveToXML
resident
энтузиаст
Сообщения: 605 Зарегистрирован: 13.03.2013 16:58:51
Сообщение
resident » 20.03.2014 09:51:43
Работает, спасиб
Код: Выделить всё
function FontToReadableStr(Font: TFont): string; begin Result := SetToString(GetPropInfo(Font, 'Style'), Integer(Font.Style), False); end; procedure Test; var F: TFont; begin F := TFont.Create; F.Style := [fsBold, fsItalic]; ShowMessage('Font Styles = ' + FontToReadableStr(F)); end;