Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Punteros a objetos (https://www.clubdelphi.com/foros/showthread.php?t=56012)

chinchan 05-05-2008 14:03:17

Punteros a objetos
 
Hola, en un programa c++ Builder, tengo una matriz con 60 objetos TPanel y en ejecución les tengo que dar nombre (Panel1->Caption), pero como es lógico no quiero llamar uno a uno. ¿Cómo se puede hacer de una manera sencilla?. Es decir:
en vez de
Panel1->Caption="1";
Panel2->Caption="2";
Panel3->Caption="3";
etc..

algo así:

for(a=1;a<=60;a++){
Panel[a]->Caption=a;
}

Gracias.

escafandra 05-05-2008 14:16:43

Pues esa parece la forma más razonable de hacerlo. Fíjate en este código. Las matrices en C comienzan en el elemento "CERO"

Código:

for(a=0; a<60; a++){
  Panel[a]->Caption = IntToStr(a);
}


Creando, además los TPanel:

Código:

TPanel Panel[60];
for(a=0; a<60; a++){
  Panel[a] = new TPanel(this);
  Panel[a]->Caption = IntToStr(a);
}

Recuerda destruirlos (delete) cuando no los necesites.

Saludos.

chinchan 05-05-2008 14:54:43

no se crear los TPanel
 
Aquí tengo el problema, que no se crear los TPanel
al escribir el código:

TPanel Panel[60];

me da un error.

escafandra 05-05-2008 20:34:14

Si, no te lo explique lo suficientemente y asumí que sabias que NO puedes crear directamente una matriz de objetos VCL sino una matriz de punteros a objetos VCL (Un puntero a puntero)

Para crear:

Código:

  TPanel** Panel = new TPanel*[60];
  for(int a=0; a<60; a++){
    Panel[a] = new TPanel(this);
    Panel[a]->Caption = IntToStr(a);
  }

Tienes varias formas de destruir la matriz, la mas intuitiva es esta:

Código:

  for(int n=0; n<60; n++){
      delete Panel[n]; //Destruyes cada objeto
  }
  delete Panel;  // destruyes el puntero a 60 punteros

Saludos.

Aclaración:

Creo los TPanel así new TPanel(this) asumiendo que this es un form (osea un TComponent*) En caso contrario, que this no sea un TComponent* fallará

chinchan 06-05-2008 14:22:26

Ok, muchas gracias. Me ha valido perfectamente.


La franja horaria es GMT +2. Ahora son las 15:17:01.

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