Salvar Componente em Txt ou Banco
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.
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
Curtidas 0
Respostas
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!
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
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
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]
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
20/05/2006
Galera, porque não usar arquivos INI? Muito mais fácil.
Vejam:
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]
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