PDA

Ver la Versión Completa : ¿Es posible crear un botón en el formulario en tiempo de ejecución?


kakarotv5
25-10-2007, 15:58:44
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

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


procedure Saludo;
begin
ShowMessage('Hola Mundo');
end;



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:

Boton.OnClick := Saludo;

Me sale el siguiente error:

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


Procedure TForm1.Saludo(Sender : TObject);
Begin
ShowMessage('Hola Mundo');
end;


además para crear el botón el código sería mejor este:

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

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:

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

enecumene
25-10-2007, 16:35:06
intenta ponerlo asi:

procedure TForm1.botoclick(Sender: Tobject);
begin
ShowMessage('Hola Mundo');
end;

Saludos.

enecumene
25-10-2007, 16:35:44
intenta ponerlo asi:
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
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:

Boton.OnClick := Saludo;

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

Boton.OnClick := Saludo(Sender);

jeremiselxi
24-09-2008, 16:50:17
yo tambien tenia este mismo problema y encontre la solucion. aqui esta el codigo


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

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