Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
ВнизОбъект в текст, текст в объект, как? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.008 c