Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.11;
Скачать: CL | DM;

Вниз

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

Наверх




Память: 0.48 MB
Время: 0.019 c
3-33872
NeyroSpace
2002-10-21 14:38
2002.11.11
Если 2а IBQuery вешаются на одну IBTransaction1, какой из них


7-34276
Infinity2
2002-09-10 22:55
2002.11.11
Надо отследить изменения время в системе.


14-34164
Spirit.
2002-10-24 18:33
2002.11.11
Помогите типизированые файлы в Delphi.


14-34251
Malder
2002-10-20 23:18
2002.11.11
Как я понимаю, UBPFD накрылась ?


1-34063
Sam Stone
2002-10-30 16:06
2002.11.11
Размер проги