PDA

Ver la Versión Completa : Sencillo: crear button


sortilodio
16-12-2006, 22:32:16
Hola a todos, no tengo mucha experiencia con Delphi.
Quiero crear un nuevo botón, cuando el formulario se crea(Create).
He hecho lo siguiente, no me da ningún error pero el botón no aparece, me podéis echar una mano, que seguro que para vosotros es sencillo??


procedure FormCreate(Sender: TObject);
var
btn : TButton;
begin
btn := TButton.Create(form1);
btn.Caption := 'ejemplo';
btn.Left := 200;
btn.Height := 20;
btn.Width := 20;
btn.Top := 200;
btn.Visible := True;
end;


GRACIAS

dec
16-12-2006, 22:59:32
Hola,

Falta que asignes un "padre" para el botón. El "padre" se hará cargo del botón... en cierto modo, puesto que cuando el "padre" se destruya este destruirá al propio botón... un padre raro... (acabo de ver El resplandor (http://es.wikipedia.org/wiki/El_resplandor) del inconmensurable Stanley Kubrick (http://es.wikipedia.org/wiki/Stanley_Kubrick))... pero vamos al caso... :D


unit Unit1;

interface

uses
Forms, Classes, Controls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FBotonHolaMundo: TButton;
procedure SaludaHombre(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

uses
Dialogs;

procedure TForm1.FormCreate(Sender: TObject);
begin
FBotonHolaMundo := TButton.Create(Self);
with FBotonHolaMundo do
begin
Parent := Self;
Caption := '¡Hola mundo!';
SetBounds(10, 10, 75, 25);
OnClick := SaludaHombre;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FBotonHolaMundo.Free;
end;

procedure TForm1.SaludaHombre(Sender: TObject);
begin
if (Sender is TButton) and
(TButton(Sender).Caption = '¡Hola mundo!') then
ShowMessage(TButton(Sender).Caption);
end;

end.

Lepe
16-12-2006, 23:16:54
Se ve que dec todavía tiene el canguelo en el cuerpo porque no está centrado.... ;) :p

En realidad el AOwner (parámetro del TButton.Create(...éste...)) es el que se encargará de destruirlo.

El padre (propiedad Parent) hace referencia a donde se situará ese botón, sobre un panel, sobre el form, etc.

Saludos

dec
16-12-2006, 23:21:02
Hola,

¿Ves? La edad que no perdona... :D :D :D

Muchas gracias Lepe. :)

sortilodio
17-12-2006, 19:17:31
Lo que siempre recuerdo de Resplandor (y hace tiempo que la ví), es la escena de una mujer joven duchándose. Después se acerca el hombre y se convierte en una anciana etc... también recuerdo la niña/s de los pasillos..

No he comentado que estaba utilizando Delphi 3(Sí Delphi 3).
El código no me da ningún error pero tampoco aparece el botón.
Como tengo también Delphi 6 lo voy a instalar y probar, tal vez sea eso..

Gracias

sortilodio
19-12-2006, 20:36:37
Hola he probado de nuevo el código en Delphi 6 y me pasa exactamente lo mismo, el botón no aparece.
Se queda el formulario completamente vacío...
Alguien me puede decir ¿POR QUÉ?, estoy buscando información por todos los sitios y ese código tiene que estar bien, no lo entiendo...

GRACIAS

Lepe
19-12-2006, 21:20:28
El código de dec funciona (comprobado), el tuyo espero que lo hayas puesto de memoria, porque falta en la cabecera el objeto:
procedure FormCreate(Sender: TObject);
debe decir:
procedure TFormXXXX.FormCreate(Sender: TObject);

Saludos

sortilodio
20-12-2006, 12:17:51
Gracias por la ayuda..
Encontré el fallo, el problema era (ya he dicho que estoy empezando con Delphi), que en los eventos del formulario no había puesto el OnCcreate a ninguna procedure, entonces el evento OnCreate no se producía nunca..

Gracias

Lepe
20-12-2006, 13:32:31
Como decimos en mi tierra: Eso pasa en las mejores familias... jejeje

(no será la última vez que te pase, así que tenlo en mente ;)).

Saludos