FontStyle To String

Вопросы программирования и использования среды Lazarus.

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

Ответить
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

FontStyle To String

Сообщение resident »

Здрасть )
Подскажите, почему не работает преобразование множества 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 »

Потому что, Integer(Font.Style);
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Спасиб :)
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

resident
А почему не воспользоваться процедурой GetStrProp из модуля typinfo.
Получится гораздо красивее - будет прям строкое представление - как в lfm-файлах.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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 »

Объект должен быть наследнком от TPersistent
Например:
ShowMessage('Font Styles = ' + GetStrProp(Form1, 'Style'));

В качестве пример хорош видно как это работает при сохранении свойтс в бъектах LazReport-а. Методы SaveToXML
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Работает, спасиб :)

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

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;
Ответить