Salvar Compente que Estiver Num Form

Delphi

10/06/2006

Caros,
preciso salvar componentes, que podem ser inseridos em Runtime, para que depois possam ser restaurados numa outra situacao.
Preciso salvar as caracteristicas do componente, tais como:

Name, Top, Left, Widh, Parent, Color, Tag, Heigth, etc...

Detalhe,
o Parent, pode variar, pode ser um Form, um Panel, um QuickReport...

resumindo, o componente que poderá ser inserido, pode ter um parent que nao é padrao um ´FORM´.

Alguem ???

Obrigado.


Pedih

Pedih

Curtidas 0

Respostas

Agsilva

Agsilva

10/06/2006

Cara, use arquivos INI. Procurei e achei esse artigo aqui da DevMedia pra você:

https://www.devmedia.com.br/visualizaComponente.aspx?comp=1183&;site=3

:wink:


GOSTEI 0
Pedih

Pedih

10/06/2006

Cara, use arquivos INI. Procurei e achei esse artigo aqui da DevMedia pra você: https://www.devmedia.com.br/visualizaComponente.aspx?comp=1183&;site=3 :wink:


Olá AgSilva.
li a materia, porem, precisava de algo diferente.

o usuario insere um componente, em runtime, num panel por exemplo.

quando clicar em gravar, preciso que grave todas as propriedades deste componente que ele inserir no panel. (todas)... inclusive o Parent, que pode variar ... derepente, em vez de um panel, pode ser uma banda de um relatorio no fortesreport por exemplo, entendeu ???

mesmo assim,.obrigado pela dica.


GOSTEI 0
Agsilva

Agsilva

10/06/2006

Uhm. Você pode definir procedimentos para a criação de buttons, edits, etc.. Por exemplo:

var
  button : TButton;
begin
  button := TButton.Create(Form); 
  with button do 
  begin 
    parent := Form; 
    caption := ´Click em mim!´;
    height := 32; 
    width := 128;
    left := 10;
    top := 50;
  end;
end;


Ok? Tenta lá. E mesmo depois disso, você pode armazenar as configurações num arquivo INI.


GOSTEI 0
Pedih

Pedih

10/06/2006

Uhm. Você pode definir procedimentos para a criação de buttons, edits, etc.. Por exemplo:
var
  button : TButton;
begin
  button := TButton.Create(Form); 
  with button do 
  begin 
    parent := Form; 
    caption := ´Click em mim!´;
    height := 32; 
    width := 128;
    left := 10;
    top := 50;
  end;
end;
Ok? Tenta lá. E mesmo depois disso, você pode armazenar as configurações num arquivo INI.



Agsilva... blz ??

tá .. entendi.

partindo deste acima que vc citou ... como eu salvaria estas propriedades num .INI ??
desculpe..mas nao consigui entender.

possui msn ou skype ???

No aguardo, grato pela atencao.. valeu mesmo.


GOSTEI 0
Agsilva

Agsilva

10/06/2006

Bom, segue abaixo um exemplo. Leia todos os comentários que estão explicando passo a passo para que serve cada instrução:

var
  // inclua IniFile na cláusula Uses
  configurations : TIniFile;
  name: String;
  left : integer;
  top : integer;
  visible : boolean;
begin
  // variáveis recebendo os valores das propriedades
  name := Button2.Name;
  left := Button2.Left;
  top := Button2.Top;
  enabled := Button2.Enabled;
  visible := Button2.Visible;

  // criando um simples arquivo arquivo INI
  configurations := TIniFile.Create(´C:\Configurations.ini´);

  // abaixo, criando as seções e seus respectivos valores
  // note que o primeiro valor (seção) recebe a variável name

  // gravando valores inteiros através do WriteInteger
  configurations.WriteInteger(name,´Left´,left);
  configurations.WriteInteger(name,´Top´,top);

  // gravando valores boolean através do WriteBool
  configurations.WriteBool(name,´Enabled´,enabled);
  configurations.WriteBool(name,´Visible´,visible);

  configurations.Free;


Beleza cara? Qualquer coisa, só retornar.


GOSTEI 0
Agsilva

Agsilva

10/06/2006

Corrigindo o primeiro comentário [i:c70fff3d1a]// inclua IniFile na cláusula Uses[/i:c70fff3d1a], para:

// inclua IniFiles na cláusula Uses


É no plural.

:wink:


GOSTEI 0
Pedih

Pedih

10/06/2006

Corrigindo o primeiro comentário [i:81e51c593a]// inclua IniFile na cláusula Uses[/i:81e51c593a], para:
// inclua IniFiles na cláusula Uses
É no plural. :wink:



var
// inclua IniFile na cláusula Uses
configurations : TIniFile;
name: String;
left : integer;
top : integer;
visible : boolean;
heigth : integer;
color : TColor;
FontName : String;
Parent : String;
begin
// variáveis recebendo os valores das propriedades
name := Label1.Name;
left := Label1.Left;
top := Label1.Top;
enabled := Label1.Enabled;
visible := Label1.Visible;
heigth := Label1.Height;
Color := Label1.Color;
FontName := Label1.Font.Name;
Parent := Label1.Parent.Name;

// criando um simples arquivo arquivo INI
configurations := TIniFile.Create(´C:\Configurations.ini´);

// abaixo, criando as seções e seus respectivos valores
// note que o primeiro valor (seção) recebe a variável name

// gravando valores inteiros através do WriteInteger
configurations.WriteInteger(name,´Left´,left);
configurations.WriteInteger(name,´Top´,top);
configurations.WriteInteger(name,´Heigth´,heigth);
configurations.WriteInteger(name,´Color´,color);

configurations.WriteString(name,´Font´,FontName);
configurations.WriteString(name,´Parent´,Parent);


// gravando valores boolean através do WriteBool
configurations.WriteBool(name,´Enabled´,enabled);
configurations.WriteBool(name,´Visible´,visible);

configurations.Free;



blz...

executei o seu codigo mais algumas coisas que acrescentei.

ficou do jeito que eu preciso..

agora, como eu restauro deste .INI ???

Desculpe te encher tanto.. heee :oops:


GOSTEI 0
Agsilva

Agsilva

10/06/2006

Relaxa cara, a comunidade é pra isso mesmo.

Bom, é só fazer o contrário, isto é, trocar os Read por Write. Veja o exemplo só com a propriedade Top (não se esqueça de alterar a posição Top do Button2 antes de compilar, pra conferir o resultado):

var
  configurations : TIniFile;
  name : String;
  top : integer;
begin
  name := Button2.Name;

  // apesar de estranho, isso recupera o arquivo criado
  // ou seja, não será criado outro arquivo por cima
  configurations := TIniFile.Create(´C:/Configurations.ini´);

  // o contrário é ReadInteger
  top := configurations.ReadInteger(name,´Top´,top);
  Button2.Top := top;
end;


Bom, o resto das propriedades é contigo. Espero ter ajudado na sua empreitada. Qualquer coisa, só retornar.

[]s.


GOSTEI 0
Pedih

Pedih

10/06/2006

[quote=´agsilva´]Relaxa cara, a comunidade é pra isso mesmo.

Bom, é só fazer o contrário, isto é, trocar os Read por Write. Veja o exemplo só com a propriedade Top (não se esqueça de alterar a posição Top do Button2 antes de compilar, pra conferir o resultado):

var
  configurations : TIniFile;
  name : String;
  top : integer;
begin
  name := Button2.Name;

  // apesar de estranho, isso recupera o arquivo criado
  // ou seja, não será criado outro arquivo por cima
  configurations := TIniFile.Create(´C:/Configurations.ini´);

  // o contrário é ReadInteger
  top := configurations.ReadInteger(name,´Top´,top);
  Button2.Top := top;
end;


agsilva.
blz...
ja que esta diposto a me ajudar.. agradeco.. ae vai ...

mas veja o detalhe, no qual me esbarrei numa outra tentativa diferente desta sua

pra restaurar...
configurations := TIniFile.Create(´C:\Configurations.ini´);
---aqui pega o parent que ta o INI.
parent := configurations.ReadString(name,´Parent´,Parent);
b := TLabel.Create(Self);
b.Parent := ..... (como eu coloca uma string aqui...?)

Obrigado.

Abracos.


GOSTEI 0
POSTAR