Salvar Componente em Arquivo

Delphi

09/05/2006

Caros,
preciso montar um form, em que o usuario pode inserir componentes em RUTIME, Porem, preciso salvar estes componentes (propriedades num arquivo TXT).
tais propriedades como:

top,
width,
heigth,
left,
parent,
name
etc...

por exemplo,
vamos supor que o parent do componente,

como eu posso estar salvando e depois restaurando estas informacoes ??

lembrando que:
o parent, por exemplo, as vezes pode ser um PANEL, UM FORM, UM QUICKREPORT, etc. (nao é fixo o TFORM).

obrigado a todos.


Pedih

Pedih

Curtidas 0

Respostas

Mdm

Mdm

09/05/2006

Ola Colega !
dias atras tive esse problema e encontrei esta solução :

[b:577572a1c8]Converte o componente para String;[/b:577572a1c8]
function TForm1.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;


[b:577572a1c8]Converte a string para Componente[/b:577572a1c8]
function TForm1.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;


Espero que este pequeno exemplo possa te ajudar.

[]s e boa Sorte.


GOSTEI 0
Pedih

Pedih

09/05/2006

Ola Colega ! dias atras tive esse problema e encontrei esta solução : [b:e2e1d273ac]Converte o componente para String;[/b:e2e1d273ac]
function TForm1.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;
[b:e2e1d273ac]Converte a string para Componente[/b:e2e1d273ac]
function TForm1.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;
Espero que este pequeno exemplo possa te ajudar. []s e boa Sorte.



Quase resolveu meu problema, mas como eu executo este codigo ?
fiz assim, mas nao funcionou.

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add(ComponentToString(Button1));
end;
// foi adicionado as propriedades principais num memo.. (ok).



procedure TForm1.Button2Click(Sender: TObject);
begin
RegisterClass(TButton);
StringToComponent(Memo1.Lines.Text);
UnRegisterClass(TButton);

tentei restaurar aqui, mas nao funcionou.
onde eu determino qual é o parent do componente que esta no ´TXT´.
mesmo colocando o parent sendo o FORM (para testes), o mesmo nao foi mostrado no form.


end;


como vc utilizou em seu codigo ??

veja:
preciso salvar inumeros componentes que serao inseridos,
o parent, pode ser um form, um quickreport, um panel, etc.
preciso salvar tudo num TXT.

e depois, restaurar... (de forma fiel, entendeu)?

obrigado pela atencao.


GOSTEI 0
Pedih

Pedih

09/05/2006

sobe...


GOSTEI 0
Pedih

Pedih

09/05/2006

Sobe...


GOSTEI 0
POSTAR