Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

А нет ли таких функций, чтобы все параметры шрифта из 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]

Нет


Наверх

Титульная страница Поиск, карта сайта Написать письмо