![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
А нет ли таких функций, чтобы все параметры шрифта из TFont можно [D5, WinME]
Кен © (2002-10-29 06:51:00)было сначала записать в одну текстовую строку, а потом восстановить в TFont произвольного компонента? Было бы очень удобно для сохранения параметров выбранного пользователем шрифта.
Дмитрий К.К. (2002-10-31 07:15:00) [1]В разделе initialization.
Юрий Зотов (2002-10-30 08:56:00) [2]Попробуйте зарегистрировать, хуже не будет. Хотя странно.
Separator (2002-10-30 08:46:00) [3]
> Юрий Зотов © (30.10.02 08:35)
2)
В том то и дело, что это стандартный TEdit и на форме штуки 3 валяются
Юрий Зотов (2002-10-30 08:35:00) [4]1. Никаких Assign не нужно, и создавать Label1 тоже не нужно, надо просто привести тип:
Label1 := TLabel(StringToComponent(String01));
2. Если ругается, что класс не найден, то перед преобразованием строки в текст этот класс надо зарегистрировать (см. RegisterClass и RegisterClasses в справке). Регистрировать нужно только один раз, обычно это делается где-то в начале программы. Классы используемых в программе форм и классы лежащих на них компонентов регистрировать не надо, они регистрируются автоматически.
Separator (2002-10-30 08:01:00) [5]У меня вообще пишет, что класс TEdit не найден.
ругается на строку Result := BinStream.ReadComponent(nil)
> Label1 := StringToComponent( string01 );
так писать нельзя, попробуй так:
Label1.Assign(StringToComponent(string01) as TLabel);
Кен (2002-10-30 05:33:00) [6]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"
А как правильно взывать эту функцию ?
Юрий Зотов (2002-10-29 08:40:00) [7]ObjectBinaryToText.
gek (2002-10-29 07:03:00) [8]Нет