Помощь - Поиск - Пользователи - Календарь
Полная версия: String в TFontStyles
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Unconnected
Привет всем.
Вопрос такой, читаю из файла конфигурации параметры шрифта TRichEdit, итого параметры в строковых переменных. Параметры - шрифт, стиль шрифта, размер. Когда доходит до присваивания этих параметров РичЭдиту, то происходит несовпадение типов String и TFontStyles. Так вот, как можно "конвертировать" строку строкового типа, в которой будет [fsBold] или [fsBold,fsUnderline], например, в тип TFontStyles, чтобы можно было это присвоить свойству стиля текста RichEdit?
volvo
RTTI в чистом виде:

Uses {..., } TypInfo;

procedure TForm1.Button1Click(Sender: TObject);
var
s, st: string;
ifs: TFontStyle;

ATypeInfo: PTypeInfo;
f: TFontStyles;

begin
s := '[fsBold,fsUnderline]'; // Это - твоя строка
ATypeInfo := TypeInfo(TFontStyle);

f := []; // Совсем забыл, это тоже надо, мало ли что...
for ifs := Low(TFontStyle) to High(TFontStyle) do begin
if pos(GetEnumName(ATypeInfo, ord(ifs)), s) > 0 then include(f, ifs);
end;
Memo1.Font.Style := f; // F содержит нужные стили. Для теста проверял на TMemo
end;
Client
А можно пару вопросов?
Что такое include(f, ifs)?
Что за тип PTypeInfo?
GetEnumName(ATypeInfo, ord(ifs) это как я понял выдает имя с каким-то номером. Это подойдет, например, для цвета(как в задании, но если не стиль, а цвет)?
volvo
Я ж говорю: это RTTI - RunTime Type Information, работает с любыми типами данных. В частности - то, что я привел - с перечислениями. Поскольку цвет - это не перечисления, а константы, то этот подход к цветам неприменим.

Цитата
Что такое include(f, ifs)?
Аналог
f := f + [ifs]; // Занесение элемента во множество

Цитата
Что за тип PTypeInfo?
Это тип, описанный в модуле TypInfo, используемый для получения информации о нужном пользователю типе...
Unconnected
Deleted
Client
Спс за ответ, попробую что-нибудь написать (вопросов будет много smile.gif )
volvo
Client, для перевода цвета из строки в TColor и обратно есть функции StringToColor/ColorToString. Скажем,
s := 'clBlue';
Color := StringToColor(s); // Color = clBlue
Client
Помогло, спасибо!
Unconnected
А как можно уже TFontStyles перевести в строку?smile.gif
volvo
По аналогии с первым преобразованием - вот так:
function FStoString(fs: TFontStyles): string;
var
ATypeInfo: PTypeInfo;
ifs: TFontStyle;
begin
ATypeInfo := TypeInfo(TFontStyle);
for ifs := Low(TFontStyle) to High(TFontStyle) do begin
if ifs in fs then
result := result + GetEnumName(ATypeInfo, Ord(ifs)) + ',';
end;
result := '[' + Copy(result, 1, Length(result) - 1) + ']';
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.