PDA

Ver la Versión Completa : Bucle de guardado de Edit's


wiwaedu
28-05-2015, 15:29:00
Hola!! Llevo varios días intentándolo y no doy con las opciones... ¿Seria posible hacer un bucle para guardar estos Edit's y Label's en el mismo orden?

procedure TFormConfig.FormClose(Sender: TObject; var Action: TCloseAction);
begin
with TStringList.Create do
try
Add(Edit1.Text);
Add(Label1.Caption);
Add(Edit2.Text);
Add(Label2.Caption);
Add(Edit3.Text);
Add(Label3.Caption);
Add(Edit4.Text);
Add(Label4.Caption);
Add(Edit5.Text);
Add(Label5.Caption);
Add(Edit6.Text);
Add(Label6.Caption);
Add(Edit7.Text);
Add(Label7.Caption);
Add(Edit8.Text);
Add(Label8.Caption);
Add(Edit9.Text);
Add(Label9.Caption);
Add(Edit10.Text);
Add(Label10.Caption);
Add(Edit11.Text);
Add(Label11.Caption);
Add(Edit12.Text);
Add(Label12.Caption);
Add(Edit13.Text);
Add(Label13.Caption);
Add(Edit14.Text);
Add(Label14.Caption);
SaveToFile(ExtractFilePath(Application.ExeName)+'config.txt');
finally
Free;
end;

Para abrir el .txt si lo conseguí con este código:

procedure TFormConfig.FormCreate(Sender: TObject);
var
List:TStringList;
i,j,c:Integer;
begin
i:=0;
j:=1;
List := TStringList.Create;
try
if FileExists(ExtractFilePath(Application.ExeName)+'config.txt') = True then
begin
List.LoadFromFile(ExtractFilePath(Application.ExeName)+'config.txt');
for c := 0 to FormConfig.ComponentCount-1 do
begin
if FormConfig.Components[c].ClassName = 'TEdit' then
begin
TEdit(FormConfig.Components[c]).Text := List[i];
i := i+2;
end
else if FormConfig.Components[c].ClassName = 'TLabel' then
begin
TLabel(FormConfig.Components[c]).Caption := List[j];
j := j+2;
end;
end;
end;
finally
List.Free;
end;
end;

Gracias!! :)

ecfisa
28-05-2015, 17:17:19
Hola wiwaedu.

Podrías hacer:

...
implementation

const
EDS_LBS = 14; // Nro de Labels y Edits
...

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i : Integer;
ed : TEdit;
lb : TLabel;
begin
with TStringList.Create do
try
for i:= 1 to EDS_LBS do
begin
ed := TEdit( FindComponent('Edit' + IntToStr( i )) );
lb := TLabel( FindComponent('Label' + IntToStr( i )) );
if Assigned( ed ) then Add( ed.Text );
if Assigned( lb ) then Add( lb.Caption );
end;
SaveToFile( ExtractFilePath( Application.ExeName ) + 'config.txt' );
finally
Free;
end;
end;


Pero, como opción, almacenar los datos en un archivo .ini (o el registro de windows) te resultará una herramienta mas poderosa.

Como veo que has encarado el asunto mediante un archivo, te pongo un ejemplo con IniFiles en el que se guarda el texto de los componentes y también su color:

...
implementation

uses Inifiles;

const
EDS_LBS = 14; // Nro de Labels y Edits


procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
lb: TLabel;
ed: TEdit;
begin
with TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini') do
try
for i := 1 to EDS_LBS do
begin
lb := TLabel( FindComponent( 'Label' + IntToStr(i) ) );
ed := TEdit ( FindComponent( 'Edit' + IntToStr(i) ) );
if Assigned(lb) then
begin
lb.Caption := ReadString(lb.Name,'Caption',lb.Name);
lb.Color := ReadInteger(lb.Name,'Color', Color);
end;
if Assigned(ed) then
begin
ed.Text := ReadString(ed.Name,'Text', ed.Name);
ed.Color := ReadInteger(ed.Name,'Color', clWindow);
end;
end;
finally
Free;
end;
Randomize;
end;

// Cambiar el color de los controles de forma aleatoria
procedure TForm1.BtnChangeColorClick(Sender: TObject);
const
CCOLOR : array [1..10] of TColor = (clWindow, clLime, clRed, clBlue, clGray,
clFuchsia, clAqua, clYellow, clSilver, clOlive);
var
lb: TLabel;
ed: TEdit;
i: Integer;
begin
for i:= 1 to EDS_LBS do
begin
lb := TLabel( FindComponent( 'Label' + IntToStr(i) ) );
ed := TEdit( FindComponent( 'Edit' + IntToStr(i) ) );
if Assigned(lb) then lb.Color := CCOLOR[Random(10)+1];
if Assigned(ed) then ed.Color := CCOLOR[Random(10)+1];
end;
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i : Integer;
lb: TLabel;
ed: TEdit;
begin
with TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini') do
try
for i := 1 to EDS_LBS do
begin
lb := TLabel( FindComponent( 'Label' + IntToStr(i) ) );
ed := TEdit ( FindComponent( 'Edit' + IntToStr(i) ) );
if Assigned(lb) then
begin
WriteString(lb.Name,'Caption', lb.Caption);
WriteInteger(lb.Name,'Color', lb.Color);
end;
if Assigned(ed) then
begin
WriteString(ed.Name,'Text', ed.Text);
WriteInteger(ed.Name,'Color', ed.Color);
end;
end;
finally
Free;
end;
end;

Así también podrías guardar las posiciónes de los controles, la fuente de su texto, tamaño y demás propiedades como visibilidad, etc.

Saludos :)

wiwaedu
04-06-2015, 10:19:56
¡¡Muchisimas gracias me sirvió de gran ayuda!! :D