Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   ¿Es posible crear un botón en el formulario en tiempo de ejecución? (https://www.clubdelphi.com/foros/showthread.php?t=49619)

kakarotv5 25-10-2007 15:58:44

¿Es posible crear un botón en el formulario en tiempo de ejecución?
 
Normalmente para poner un botón en un formulario pinchamos con el puntero del ratón en el componente Button de la paleta Standard y luego pinchamos en el formulario.

Pues bien, mi idea es saber si se puede poner un botón en el formulario desde código en tiempo de ejecución.

Saludos.

eduarcol 25-10-2007 16:05:39

Si es posible

Código Delphi [-]
Boton := TButton.Create(Application);
Boton.Parent := Form1;
Boton.Left    := xx;
Boton.Top    := yy;
Boton.OnClick := Tuprocedimiento;

kakarotv5 25-10-2007 16:08:28

¡Muchísimas gracias!

Saludos.

dec 25-10-2007 16:08:56

Hola,

Más que bien que "Application" el "dueño" (y encargado de su liberación) podría ser el propio formulario. No sé. Pienso en que el formulario puede destruirse antes que la aplicación, siendo que el botón no tiene mucho sentido que siga ahí si el formulario en cuestión es destruido. Por lo demás, también podría no darse ningún "dueño" para el botón, eso sí, encargándonos nosotros de su destrucción, por ejemplo, al cierre del formulario. Pero, probablemente no esté demás darle como "dueño" al propio formulario.

PD. Sin ánimo de jorobar. :D

enecumene 25-10-2007 16:09:59

Conchole, y yo escribiendo y ya se me adelantaron. que lento soy!:p

Saludos.

eduarcol 25-10-2007 16:14:32

Cita:

Empezado por dec (Mensaje 241071)
Hola,

Más que bien que "Application" el "dueño" (y encargado de su liberación) podría ser el propio formulario. No sé. Pienso en que el formulario puede destruirse antes que la aplicación, siendo que el botón no tiene mucho sentido que siga ahí si el formulario en cuestión es destruido. Por lo demás, también podría no darse ningún "dueño" para el botón, eso sí, encargándonos nosotros de su destrucción, por ejemplo, al cierre del formulario. Pero, probablemente no esté demás darle como "dueño" al propio formulario.

PD. Sin ánimo de jorobar. :D

jeje gracias por la alcaracion, lo que sucede es que se me pega el cassete de creacion de los formularios :D:D

kakarotv5 25-10-2007 16:16:54

He hecho esto:

Código Delphi [-]
procedure Saludo;
begin
 ShowMessage('Hola Mundo');
end;

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
 Boton         := TButton.Create(Application);
 Boton.Parent  := Form1;
 Boton.Left    := 250;
 Boton.Top     := 250;
 Boton.OnClick := Saludo;  
end;

Pero no me funciona la parte de:

Código Delphi [-]
Boton.OnClick := Saludo;

Me sale el siguiente error:

Código:

[Error] Unit1.pas(37): Incompatible types: 'method pointer and regular procedure'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

¿Qué ocurre?

Chris 25-10-2007 16:24:40

Lo que pasa el que el procedimiento saludo tiede que ser de tipo evento (TNotifyEvent), con eso quedaría así

Código Delphi [-]
Procedure TForm1.Saludo(Sender : TObject);
Begin
ShowMessage('Hola Mundo');
end;

además para crear el botón el código sería mejor este:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
 Boton         := TButton.Create(Self);
 Boton.Parent  := Form1;
 Boton.Left    := 250;
 Boton.Top     := 250;
 Boton.OnClick := Saludo;  
end;
Saludos

eduarcol 25-10-2007 16:26:03

Prueba esto

Código Delphi [-]
procedure Saludo(Sender: Tobject);
begin
 ShowMessage('Hola Mundo');
end;

enecumene 25-10-2007 16:29:34

Pero ven aca es que aqui en santo domingo todo esta en camara lenta? otra vez se me han adelantado.

kakarotv5 25-10-2007 16:31:47

Me sigue dando error.

Esta vez es el siguiente:

Código:

[Error] Unit1.pas(37): Incompatible types: 'method pointer and regular procedure'

enecumene 25-10-2007 16:35:06

intenta ponerlo asi:

Código Delphi [-]
procedure TForm1.botoclick(Sender: Tobject);
begin
 ShowMessage('Hola Mundo');
end;

Saludos.

enecumene 25-10-2007 16:35:44

intenta ponerlo asi:
Código Delphi [-]
procedure TForm1.botonclick(Sender: Tobject);
begin
 ShowMessage('Hola Mundo');
end;


Saludos.

kakarotv5 25-10-2007 16:36:54

Ahora si.

Arreglado, gracias a todos y un saludo.

eduarcol 25-10-2007 16:39:17

Buen detalle Enecumene no habia percatado la falla de que era un procedimiento y no un metodo :D:D

enecumene 25-10-2007 16:43:44

Cita:

Empezado por eduarcol (Mensaje 241090)
Buen detalle Enecumene no habia percatado la falla de que era un procedimiento y no un metodo :D:D

Me estoy volviendo un master no?(ni eso me lo creo :D) jajaja.

Saludos.

kakarotv5 25-10-2007 16:44:01

He probado esto mismo en Lazarus y me da el siguiente error en la línea:

Código Delphi [-]
Boton.OnClick := Saludo;

Código:

unit1.pas(38,25) Error: Wrong number of parameters specified for call to "Saludo"
¿En Lazarus no se puede hacer esto?

eduarcol 25-10-2007 16:54:42

no conozco lazarus, pero crea el boton y crea el metodo, luego postea aqui la declaracion que te genera automaticamente, asi podre ver que parametros espera

ContraVeneno 25-10-2007 19:11:43

tal vez tenga que ser así:

Código Delphi [-]
Boton.OnClick := Saludo(Sender);

jeremiselxi 24-09-2008 16:50:17

hola amigos
 
yo tambien tenia este mismo problema y encontre la solucion. aqui esta el codigo

Cita:

var boton: tbutton;
procedure TForm1.FormCreate(Sender: TObject);
begin
Boton := TButton.Create(Self);
Boton.Parent := Form1;
Boton.Left := 250;
Boton.Top := 250;
Boton.OnClick := Saludo;
boton.Caption:='boton creado';
end;

Procedure TForm1.Saludo(Sender : TObject);
Begin
ShowMessage('Hola Mundo');
end;
end.
pero el truco esta en poner el procedimiento k creamos en esta parte

Cita:

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
Procedure Saludo(Sender : TObject); //aqui hay k ponerlo para k funcione
:) Cristo ls ama a todos


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

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