Форум: "Основная";
Текущий архив: 2002.11.11;
Скачать: [xml.tar.bz2];
ВнизА нет ли таких функций, чтобы все параметры шрифта из TFont можно Найти похожие ветки
← →
Кен (2002-10-29 06:51) [0]было сначала записать в одну текстовую строку, а потом восстановить в TFont произвольного компонента? Было бы очень удобно для сохранения параметров выбранного пользователем шрифта.
← →
gek (2002-10-29 07:03) [1]Нет
← →
Юрий Зотов (2002-10-29 08:40) [2]ObjectBinaryToText.
← →
Кен (2002-10-30 05:33) [3]2 Юрий Зотов
Нашёл ! В справке есть две функции для этого :
function ComponentToString(Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result:= StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;
function StringToComponent(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result := BinStream.ReadComponent(nil);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;
Первая замечательно работает. Выдайт компонент в виде строчек текста. А во второй я не смог правильно вызывать StringToComponent() .
Если пишу так : Label1 := StringToComponent( string01 );
, то выдаёт ошибку :
[Error] Unit1.pas(90): Incompatible types: "TLabel" and "TComponent"
А как правильно взывать эту функцию ?
← →
Separator (2002-10-30 08:01) [4]У меня вообще пишет, что класс TEdit не найден.
ругается на строку Result := BinStream.ReadComponent(nil)
> Label1 := StringToComponent( string01 );
так писать нельзя, попробуй так:
Label1.Assign(StringToComponent(string01) as TLabel);
← →
Юрий Зотов (2002-10-30 08:35) [5]1. Никаких Assign не нужно, и создавать Label1 тоже не нужно, надо просто привести тип:
Label1 := TLabel(StringToComponent(String01));
2. Если ругается, что класс не найден, то перед преобразованием строки в текст этот класс надо зарегистрировать (см. RegisterClass и RegisterClasses в справке). Регистрировать нужно только один раз, обычно это делается где-то в начале программы. Классы используемых в программе форм и классы лежащих на них компонентов регистрировать не надо, они регистрируются автоматически.
← →
Separator (2002-10-30 08:46) [6]
> Юрий Зотов © (30.10.02 08:35)
2)
В том то и дело, что это стандартный TEdit и на форме штуки 3 валяются
← →
Юрий Зотов (2002-10-30 08:56) [7]Попробуйте зарегистрировать, хуже не будет. Хотя странно.
← →
Дмитрий К.К. (2002-10-31 07:15) [8]В разделе initialization.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c