PDA

Ver la Versión Completa : acceder a una variables


cahosoft
13-06-2006, 01:24:30
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

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:


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


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?
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
...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.


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.