FontStyle To String

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

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

FontStyle To String

Сообщение 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; 
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: FontStyle To String

Сообщение sign » 19.03.2014 06:05:58

Потому что, Integer(Font.Style);
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: FontStyle To String

Сообщение resident » 19.03.2014 20:30:14

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

Re: FontStyle To String

Сообщение alexs » 19.03.2014 21:54:15

resident
А почему не воспользоваться процедурой GetStrProp из модуля typinfo.
Получится гораздо красивее - будет прям строкое представление - как в lfm-файлах.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4063
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: FontStyle To String

Сообщение 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;
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: FontStyle To String

Сообщение alexs » 20.03.2014 00:13:51

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

В качестве пример хорош видно как это работает при сохранении свойтс в бъектах LazReport-а. Методы SaveToXML
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4063
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: FontStyle To String

Сообщение 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;
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 227

Рейтинг@Mail.ru