Salvar Componente em Txt ou Banco

Delphi

20/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

Chapolin

Chapolin

20/05/2006

estou trabalhando num projeto que tenho que criar Tedit´s ou aqueles calendárioszinhos dinamicamente, cfe definição numa tabela.

var edits : Tedit

with edits do begin
edits := Tedit.create;
edits.top := 10;
edits.left := 100;
edits.name := ´nome aleatorio´;
edits.parent := Tabshet2;
end;

para acessar os valores de cada componente criado, vc tem que saber o nome que deu a ele!

Tedit(findcomponent(´nome aleatorio´)).text
Tedit(findcomponent(´nome aleatorio´)).top

A mesma lógica vc pode usar para qualquer componente e propriedade da VCL!

Se vc pensar um pouco, pode gerar linhas no TXT com as propriedades na hora q vc cria, pra não precisar tar puxando elas depois!

p.s.: não testei a sintaxe pois estou no linux agora, mas a lógica é essa!

qualquer dúvida da um toque!


GOSTEI 0
Pedih

Pedih

20/05/2006

estou trabalhando num projeto que tenho que criar Tedit´s ou aqueles calendárioszinhos dinamicamente, cfe definição numa tabela. var edits : Tedit with edits do begin edits := Tedit.create; edits.top := 10; edits.left := 100; edits.name := ´nome aleatorio´; edits.parent := Tabshet2; end; para acessar os valores de cada componente criado, vc tem que saber o nome que deu a ele! Tedit(findcomponent(´nome aleatorio´)).text Tedit(findcomponent(´nome aleatorio´)).top A mesma lógica vc pode usar para qualquer componente e propriedade da VCL! Se vc pensar um pouco, pode gerar linhas no TXT com as propriedades na hora q vc cria, pra não precisar tar puxando elas depois! p.s.: não testei a sintaxe pois estou no linux agora, mas a lógica é essa! qualquer dúvida da um toque!




Olá chapolin, obrigado por ajudar.

mas o meu problema é o seguinte:
vamos supor:
se estiver saldo dentro de um txt
um edit por exemplo:
as propriedades, (dentro do txt), estarao no tipo ´string´;

como eu faco dentro do delphi.
exemplo;
var
edit:tedit;
begin
with edit do
begin
edit := tedit.create(Self);
edit.top := {pegar top no txt}
edit.parent := {pegar parent no txt}
e assim vai...

desculpa ae, mas sou meio leigo em componentes..
abracos.


GOSTEI 0
Chapolin

Chapolin

20/05/2006

vamos supor que a estrutura do seu txt esteje assim:

name=nome_do_edit
top=10
left=100
parent=tabshet


para facilitar um pouco a sua vida, crie um memo temporário e carregue o arquivo txt pro memo.

memo1.lines.loadfromfile(´arquivo.txt´);

var
edit:tedit;
topo : integer;
esquerda : integer;
parente: tparent;
nome : string;
begin
if copy(memo1.lines[0],1,5) = ´name=´ then
nome := copy(memo1.lines[0],6,1000);

if copy(memo1.lines[1],1,4) = ´top=´ then
topo := STRTOINT(copy(memo1.lines[1],5,1000));

if copy(memo1.lines[2],1,5) = ´left=´ then
esquerda := STRTOINT(copy(memo1.lines[2],6,1000));

if copy(memo1.lines[3],1,7) = ´parent=´ then
parente := tparent(copy(memo1.lines[3],8,1000));


with edit do begin
edit := tedit.create(Self);
edit;name := nome;
edit.top := topo;
edit.left := esquerda;
edit.parent := parente;
end;

A idéia é essa, se vc colocar isso dentro de um loop e controlar bem creio que funcionara direitinho!

da uma pesquizada quando ao tipo TParent, pq eu chutei mas acho que não é isso![/code]


GOSTEI 0
Adriano Santos

Adriano Santos

20/05/2006

Galera, porque não usar arquivos INI? Muito mais fácil.

Vejam:

//Declare IniFiles no uses da unit
...
uses
  IniFiles;
...
Implementation
...
//GRAVA OS DADOS
procedure TForm1.Button1Click(Sender: TObject);
var
  Arq: IniFile;
  I: integer;
begin
  //Cria ou abre o arquivo INI no diretório da aplicação.
  Arq:= TIniFile.Create(´CONFIG.INI´);
  for I := 0 to ComponentCount - 1 do
  begin
    if Components[I] is TEdit then
    begin
      Arq.WriteString(´FORM1´, Components[I].Name, Components[I].Text);
      Arq.WriteString(´FORM1´, Components[I].Name, Components[I].Tag);
    end;
  end;
  Arq.Free;
end;






//Declare IniFiles no uses da unit
...
uses
  IniFiles;
...
Implementation
...
//LER OS DADOS
procedure TForm1.Button1Click(Sender: TObject);
var
  Arq: IniFile;
  I: integer;
begin
  //Cria ou abre o arquivo INI no diretório da aplicação.
  Arq:= TIniFile.Create(´CONFIG.INI´);
  for I := 0 to ComponentCount - 1 do
  begin
    if Components[I] is TEdit then
    begin
      Edit1.Text := Arq.ReadString(´FORM1´, Components[I].Name, Edit1.Text);
      Edit2.Tag := Arq.ReadString(´FORM1´, Components[I].Name, Edit1.Tag);
    end;
  end;
  Arq.Free;
end;



Este é um exemplo bem rídiculo e fora da sua necessidade só pra você entender como funcionam arquivos INI. Vc terá algo assim:

[quote:ddccbdb2ae=´Arquivo TXT´]
[FORM1]
Edit1=AJDFJADL
Edit1=1231

[FORM2]
Edit2=AJDFJADL
Edit2=1231
[/quote:ddccbdb2ae]


GOSTEI 0
POSTAR