Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Crear objetos en tiempo de ejecución (https://www.clubdelphi.com/foros/showthread.php?t=75677)

jmrp 12-09-2011 11:00:09

Crear objetos en tiempo de ejecución
 
Como se crean objetos en tiempo de ejecución, Tedit, TLabel, TImage

Ñuño Martínez 12-09-2011 11:12:45

Como cualquier otro objeto, con Create. Sin embargo, al ser controles necesitarás asignar la propiedad "Parent" a mano, así como el resto (posición, tamaño, estilo...) salvo que quieras usar sus valores por defecto. Por ejemplo:
Código Delphi [-]
...
  VAR
    aEtiqueta: TLabel;
  BEGIN
    aEtiqueta := TLabel.Create (SELF); { Asumiendo que "SELF" es un TForm }
    aEtiqueta.Parent := SELF;
    aEtiqueta.Caption := 'Ejemplo de etiqueta creada dinámicamente';
  END;
Ojo, que lo he hecho de memoria y sin probarlo, así que es posible que no funcione bien y debas asignar más propiedades. Por eso, antes de hacerlo así, asegurate de que controlas la creación y ediciónd e controles dentro de Delphi.

Toni 12-09-2011 11:27:40

Con código en C++ Builder seria de la siguiente manera utilizando el operador new para crearlo:

Código Delphi [-]
TEdit *edit = new TEdit(this);

Y utilizando el operador delete para eliminarlo, ya que al ser dinamico tienes que ser tu quien asegure que se elimina este objeto:

Código Delphi [-]
delete edit;

Ñuño Martínez 12-09-2011 11:45:12

Cita:

Empezado por Toni (Mensaje 411771)
Con código en C++ Builder seria de la siguiente manera utilizando el operador new para crearlo:

Código Delphi [-]
TEdit *edit = new TEdit(this);

Y utilizando el operador delete para eliminarlo, ya que al ser dinamico tienes que ser tu quien asegure que se elimina este objeto:

Código Delphi [-]
delete edit;

Ups, cierto Toni, olvidé que preguntaba por C++. De todas formas, si se ha asignado el "Owner" (en el constructor) no es necesario destruirlo ya que el propio Owner se encarga de ello (salvo que Builder se comporte de forma diferente, pero creo que no).

escafandra 12-09-2011 12:08:50

Resumiendo para no liar a jrmp, el código de Ñuño Martínez con la apreciación de Toni, es correcto. En Builder sería así:

Código:

TLabel *aEtiqueta = new TLabel(this);
aEtiqueta->Parent = this;
aEtiqueta->Caption = "Ejemplo de etiqueta creada dinámicamente";

Al asignar como dueño a this, éste lo destruirá.

Saludos.

jmrp 15-09-2011 12:53:51

Gracias, ya lo tengo. tambien hay que darle la posicion y las dimensiones y hacerlo visible.

Es posible incluso crearle eventos.

Un saludo


La franja horaria es GMT +2. Ahora son las 05:57:57.

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