Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-67259
xn0bys
2003-04-11 11:29
2003.04.21
Рисование на Canvas Главной MDI Формы


7-67588
shodan
2003-02-27 13:22
2003.04.21
Шрифт


14-67471
Cranium
2003-04-01 17:26
2003.04.21
Помогите с алгоритмом...


3-67093
Andrio
2003-04-02 14:25
2003.04.21
Экспорт таблицы из InterBase в Paradox


3-67155
denis24
2003-04-02 11:50
2003.04.21
грид+query





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский