Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como se asignan valores directamente a un array dinamico? (https://www.clubdelphi.com/foros/showthread.php?t=67767)

flystar 05-05-2010 18:26:31

Como se asignan valores directamente a un array dinamico?
 
Hermanos:

¿Cómo se asignan valores directamente a un array dinamico?

por ejemplo

var
AD:array of Tbutton;
begin

AD:=[boton1,boton2,boton3]

Claro que esto no funciona...pero bueno es la idea para no tener que estar haciendo AD[0]:=boton1, AD[1]:=boton2, etc.

La curioso esta que si yo tengo una funcion donde paso parametros de esa manera para que se reciban en un array dinamico, asi si funciona...lo curioso es que si lo asigno asi directo...no jala.

Alguna orientacion?

Gracias.

Casimiro Notevi 05-05-2010 18:53:46

Algo así:
Código:

miArray := ('Juan', 'Pedro', 'Miguel');

flystar 05-05-2010 19:06:33

No, asi no jala
 
Buenos días:

Nop asi no jala...

Archer 05-05-2010 19:29:17

Creas los botones dinamicamente (por codigo, por ejemplo en "OnCreate" del form en cuestion) y luego un bucle trivial:

Código Delphi [-]
for i := 0 to max do
  AD[i] := boton[i];

Saludos

flystar 05-05-2010 19:34:53

Los botones ya existen, no requiero crearlos.

Lo que necesito saber es la forma de asignar de un solo golpe y directo
los valores del array dinamico. Sin for.

Quizas exista la forma.

Lo curioso es que si mando un parametro asi en una funcion

funcionasigna ([boton1,boton2]);

y luego en la funcion los asigno a un array dinamico si los acepta..
es curioso no?

Caro 05-05-2010 19:40:42

Hola flystar, una forma de llenar un arreglo dinamico podría ser utilizando la función VarArrayOf:

Código Delphi [-]
 miArray : Array of Integer;
begin
 SetLength(miArray, 3);
 miArray := VarArrayOf([10,20,30,40]);

pero creo que con TButtons no va a funcionar, porque se necesita un Variant.

También puedes llenar tu arreglo de TButtons como te indica Archer.

Saluditos

flystar 05-05-2010 19:50:09

ok
 
Ok voy a instentar esa
Gracias

flystar 05-05-2010 19:53:02

tampoco
 
Efectivamente no jala asi por que pide un variant.

Chale...debe existir una forma, ¿Cómo en un parametro si lo acepta?

Lord Delfos 05-05-2010 19:53:44

Solamente para aclarar.

Los array of algo en un parámetro a función y los array of algo con una variable declarada, no son lo mismo.

El primero es un open array, y el segundo es un arreglo dinámico.

Curiosamente en Delphi se puede construir un open array "al vuelo", pero no un arreglo dinámico... Vaya uno a saber por qué motivo.

egostar 05-05-2010 20:14:02

Cita:

Empezado por Lord Delfos (Mensaje 362911)
Solamente para aclarar.

Los array of algo en un parámetro a función y los array of algo con una variable declarada, no son lo mismo.

El primero es un open array, y el segundo es un arreglo dinámico.

Curiosamente en Delphi se puede construir un open array "al vuelo", pero no un arreglo dinámico... Vaya uno a saber por qué motivo.

Perdón pero no entendí lo que quisiste decir Lord Delfos.

Yo creo que lo que necesita flystar es esto.

Código Delphi [-]

var
  Form1: TForm1;
  AD : array of Tbutton;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var
  i: Integer;
begin
  SetLength(AD,3); // defines los elementos que desees.
  for I := 0 to 2 do
  begin
    AD[i] := FindComponent('Button' + inttostr(i+1)) as TButton;
    AD[i].Caption := 'Botón ' + inttostr(i+1);
  end;
end;

end.

Saludos

Edito: Vaya pues no habia leído esto

Cita:

Lo que necesito saber es la forma de asignar de un solo golpe y directo los valores del array dinamico. Sin for.
NO sirve lo que hice, lo siento

Caro 05-05-2010 20:40:44

Hola egopolice :), me alegra verte nuevamente por aquí amiguito ;).

Saluditos

flystar 05-05-2010 22:52:55

En resumen no se puede
 
En fin, parece que no hay manera directa.

Gracias por su apoyo

Lord Delfos 06-05-2010 02:28:28

Cita:

Empezado por egostar (Mensaje 362917)
Perdón pero no entendí lo que quisiste decir Lord Delfos.

Vamos a ver si logro explicarme bien... :)


A flystar le llamaba la atención que si yo tengo una función que recibe un "array of Algo" puedo pasarle un arreglo "al vuelo".

Código Delphi [-]

function Algo(Parametros: array of Integer): Integer;
begin
end;

var Esto: Integer;

begin
  Esto:= Algo([1, 2, 3, 4]);
end;

Es decir que yo ahí estoy creando el arreglo [1, 2, 3, 4] directamente. Lo que flystar decía era, ¿porqué no se aplica la misma lógica cuando yo quiero asignarle eso a una variable común? (no parámetro de función).

La explicacion es que cuando un parámetro está declarado en una función como "array of algo", eso es un open array, mientras que si una variable está declarada de la misma manera, eso es un arreglo dinámico. Que parecen lo mismo, pero no son.


La franja horaria es GMT +2. Ahora son las 01:20:13.

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