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

Вниз

Объект в текст, текст в объект, как?   Найти похожие ветки 

 
OlegM ©   (2003-04-09 10:03) [0]

Здрассте!
Есть длве функции, взято из help

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;
****************************************
Так вот которая ComponenttoString нормально переводит компонент image в текст, а вот как из этого текста снова картинку показать?


 
Skier ©   (2003-04-09 10:05) [1]

А в чём проблема ?


 
OlegM ©   (2003-04-09 11:27) [2]

проблемы может и нет, я просто не знаю как из этого текста отобразить картинку на форме.


 
OlegM ©   (2003-04-09 13:00) [3]

Тут немного потыкался и вот в чем проблема функция StringToComponent на строке Result := BinStream.ReadComponent(nil);

выдает ошибку (Class TImage not found) в чем проблема?


 
Skier ©   (2003-04-09 13:02) [4]

>OlegM
Используй RegisterClass(es) для регистрации класса(ов)


 
OlegM ©   (2003-04-09 13:04) [5]

А где в проге это использовать?


 
Digitman ©   (2003-04-09 13:05) [6]


> OlegM


можно и без регистрации, но тогда - так :

MyImage := TImage.Create(..);
BinStream.ReadComponent(MyImage);


 
Skier ©   (2003-04-09 13:07) [7]

можно так :
initialization
RegisterClass[TImage]
finalization
UnRegisterClass[TImage]


 
OlegM ©   (2003-04-09 13:12) [8]

Да все получилось
сделал так

var Comp:TComponent;
registerclass(TImage);
Comp:=TImage.Create(BinStream.ReadComponent(nil));

Как я понял теперь все находится в переменной Comp
а теперь как эту картинку на форме показать?


 
Skier ©   (2003-04-09 13:14) [9]

>OlegM

> Как я понял теперь все находится в переменной Comp
> а теперь как эту картинку на форме показать?

По логике вещей - да. :) нужно только св-во Parent задать...

var Comp:TComponent;
registerclass(TImage);
Comp:=TImage.Create(BinStream.ReadComponent(nil));
TImage(Comp).Parent := SomeWinControl;


 
OlegM ©   (2003-04-09 13:36) [10]

Ну блин, не доходит до меня, можно код если не трудно


 
Skier ©   (2003-04-09 13:38) [11]

>OlegM
Что не доходит ?
Как ты пытаешься показывать картинку на форме ?
Код покажи...


 
OlegM ©   (2003-04-09 13:59) [12]

Да я вот именно и не знаю как показывать


 
Skier ©   (2003-04-09 14:02) [13]

>OlegM
см. Skier © (09.04.03 13:14)


 
OlegM ©   (2003-04-09 14:17) [14]

что значит SomeWinControl?


 
Skier ©   (2003-04-09 14:22) [15]

>OlegM
Я писал для "общего случая" SomeWinControl - некоторый оконный компонент...:) В твоём случае, видимо (?), нужно писать так :

var Comp:TComponent;
RegisterClass(TImage);
Comp:=TImage.Create(BinStream.ReadComponent(nil));
TImage(Comp).Parent := Form1;



 
OlegM ©   (2003-04-09 14:27) [16]

Что то опять не выходит попробовал TImage(Comp).Parent := Form1;
У меня Button1, Button2, Image1 и Form1
в Iмage в свойстве picture присвоина картинка вот ее я и сначало в текст потом из текта.


 
Skier ©   (2003-04-09 14:30) [17]

Давай-ка код полностью...а то так долго можно гадать что
у тебя там не так...


 
OlegM ©   (2003-04-09 14:33) [18]

var
Form1: TForm1;
T:TStringList;
Comp:TComponent;

implementation

{$R *.dfm}

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;
T.Add(Result);
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);
Comp:=TImage.Create(BinStream.ReadComponent(nil));

finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
T:=TStringList.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ComponentToString(Image1);
registerclass(TImage);
//Showmessage(T.GetText);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
StringToComponent(T.GetText);
timage(comp).Parent:=Form1;

end;

end.


 
Skier ©   (2003-04-09 14:41) [19]


var
Form1: TForm1;
AStr : String;
Comp:TComponent;

implementation

{$R *.dfm}

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);
Comp:=TImage.Create(BinStream.ReadComponent(nil));
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
AStr := ComponentToString(Image1);
except
ShowMessage("Ошибка при записи компонента !");
end; //try
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if AStr <> EmptyStr then begin
try
comp := StringToComponent(AStr);
if comp <> nil then timage(comp).Parent:=Form1;
except
ShowMessage("Ошибка при чтении компонента !");
end; //try
end; //if
end;

initialization
registerclass(TImage);
finalization
unregisterclass(TImage);


end.


И объясни зачем тебе T:TStringList; ?


 
OlegM ©   (2003-04-09 14:46) [20]

Да мне приходится его использовать при запросе на MySQL ту он никакой роли не играет


 
OlegM ©   (2003-04-09 14:49) [21]

Вываливается здесь if comp <> nil then timage(comp).Parent:=Form1;

с ошибкой Return value of function "StringToComponent" might be undefined


 
Skier ©   (2003-04-09 14:54) [22]

Замени
Comp:=TImage.Create(BinStream.ReadComponent(nil));
на
Result:=TImage.Create(BinStream.ReadComponent(nil));



 
OlegM ©   (2003-04-10 06:15) [23]

Вроде работает только, как картинку то показать ну не видно ее после StringToComponent



Страницы: 1 вся ветка

Текущий архив: 2003.04.21;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.019 c
4-67625
GRS
2003-02-21 22:44
2003.04.21
Как поменять всплывающую подсказку у кнопки ПУСК?


8-67404
hoper
2003-01-17 23:24
2003.04.21
Рисование градиента


3-67176
yuras
2003-04-03 16:28
2003.04.21
paradox 3.5 for dos


9-67066
SI-riuss
2002-11-14 19:07
2003.04.21
Ну че, нашел кто-нить литературу по GLScene? :))


4-67621
_toltec
2003-02-21 23:05
2003.04.21
service