Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   acceder a una variables (https://www.clubdelphi.com/foros/showthread.php?t=32672)

cahosoft 13-06-2006 01:24:30

acceder a una variables
 
hola como estan....
lo quiero hacer es acceser a una cambiar el valor de una variable pero que el nombre de la variable sea por media de una cadena....
disculpen si ne me explicar...
es algo como asi:
por ejemplo voy cambiar el valor de las
Código Delphi [-]
var
i1,i2,i3:integer
begin
  accedervariable('i1'):=1
end;

Sotrono 13-06-2006 02:21:30

Hola, no estoy 100% seguro, pero me parece que no se puede tratar a la cadena que te pasaron como si fuera una variable (como lo estas haciendo en el codigo que escribiste). Éste metodo sí es posible realizarlo con componentes, o sea, si queres modificar la propiedad de un componente, sí es posible pasar el nombre del mismo como parámetro.
Lo que podés hacer es chequear la cadena con un if y modificar la variable correspondiente de acuerdo a la cadena:

Código Delphi [-]
procedure Sumar2(variable: string);
begin
  if variable = 'i1' then
    i1 := i1 + 2;
  else if variable = 'i2' then
    i2 := i2 + 2;
  else if variable ='i3' then
    i3 := i3 + 2;
end;

Bueno de este modo sería mucho menos cómodo que del modo que planteas vos, pero no creo que sea posible hacerlo de esa forma.

Bytes!!

Neftali [Germán.Estévez] 13-06-2006 09:51:20

Lo más parecido que se me ocurre es crear propiedades published para las variables y accederlas por RTTI, pero creo que esto es dar muchas vueltas para algo tan simple.

Tal vez exista otra forma de enfocar lo que quieres hacer, para no tener que acceder a las variables de esta forma. ¿Puedes explicarte mejor?

cahosoft 13-06-2006 15:23:11

variables con cadenas
 
Hola gracias por atender mi incognita...
lo que pasa es que quiero guardar dinamicamente en mas de 100 edit
y quiero acceder a ellos dinamicamente...
mas o menos asi

Código Delphi [-]
procedure tform1.guardar;
 var
  i :integer;
  begin
     for i:=1 to 100 do
      begin
         tabla1.fieldbyname('campo').asstring:=accederavariables('edit'+inttostr(i)+'.text');
      end;   
  end;

marcoszorrilla 13-06-2006 15:34:33

Quizás esta idea con punteros pueda servirte?
Cita:

var
aTops: Array[1..9] of ^TDbedit;


procedure TfrDatRelojes.FormActivate(Sender: TObject);
begin
Reloj_Conectado:=True;
......


aTops[1]:=@DbeTop1;
aTops[2]:=@DbeTop2;
aTops[3]:=@DbeTop3;
aTops[4]:=@DbeTop4;
aTops[5]:=@DbeTop5;
aTops[6]:=@DbeTop6;
aTops[7]:=@DbeTop7;
aTops[8]:=@DbeTop8;
aTops[9]:=@DbeTop9;
end;


Procedure Mostrar(x:Integer);
var
n:Integer;
begin
For n:=1 to 9 do
begin
if n <= x then
begin
aTops[n]^.Visible :=True;
aTopc[n]^.Visible :=True;
alTopc[n]^.Visible:=True;
alTops[n]^.Visible:=True;
end
else
begin
aTops[n]^.Visible :=False;
aTopc[n]^.Visible :=False;
alTopc[n]^.Visible:=False;
alTops[n]^.Visible:=False;
end;
end;

end;
Un Saludo.

Neftali [Germán.Estévez] 13-06-2006 15:44:05

Cita:

Empezado por cahosoft
...lo que pasa es que quiero guardar dinamicamente en mas de 100 edit y quiero acceder a ellos dinamicamente...

Eso es diferente; Tú has hablado de variables y eso son Componentes.
Para hacer lo que necesitas (con componentes) puedes usar el FindComponent de Delphi, al que le pasas el nombre del com`ponente a utilizar y listo.

Código Delphi [-]
 var
  i :integer;
  edt:TEdit;
  begin
     for i:=1 to 100 do
      begin
         edt := TEdit(Self.FindComponent('edit'+inttostr(i)));
         tabla1.fieldbyname('campo').asstring := edt.Text
      end;   
  end;
Te lo he puesto de memoria, así que espero que compile, pero salvo algun error esta es la forma de hacerlo.


La franja horaria es GMT +2. Ahora son las 21:04:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi