Criando componentes em tempo de execução no Delphi!

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Criando componentes em tempo de execução no Delphi!

Mensagem por LeandroDaher em Sab 09 Abr 2011, 16:54

Olá galera,eu estou aqui para encinar a vocês como criar componentes em tempo de execução no delphi.
Abra o seu delphi e mãos a obra!
Agora que você ja abriu o delphi, crie um novo projeto e adicione um botão no formulário.
Neste meu exemplo, nós queremos que ao clicar no botão aparece um novo botão no formulário.Então no evento OnClick do botão cire uma variavel antes de begin e depois de procedure assim:

procedure TForm1.Button1Click(Sender: TObject);
var
Btn: TButton;

begin

end;

Agora entre begin e end você deve adicionar todo o codigo.
Primeiro vamos dar um valor a variavel btn.Adicione a seguinte linha de código:

Btn:=TButton.Create(Self); //Da o valor especificado a variavel do tipo TButton

Agora vamos fazer isto mais rápido,vou colocar o resto do codigo e explicar com comentários blz?
Adicione os códigos seguintes:

Btn.Parent:=Form1; //O botão aparece no formulario,você pode colocá-lo dentro de
//qualquer outro componente colocando o nome dele,exemplo: panel1
Btn.Name:='Button2'; //Dá um nome ao botão
Btn.Left:=50; //Especifica a posição X do botão
Btn.Top:=50; //Especifica a posição Y do botão
Btn.Height:=25; //Define a altura do botão
Btn.Widht:=72; //Define a largura do botão

Pronto!Agora você pode me perguntar:
- E se eu quiser adicionar um evento no botão?
A resposta é:
- Simples,primeiro eu crio uma procedure e depois defino a propiedade OnClick para o nome dela.Não entendeu?Então vamos na prática!

Lá em cima no código,depois de:

...
implementation

{$R *.dfm}

Adicione este codigo:

procedure TForm1.Clicou(Sender: TObject);
begin
//Seu codigo aqui!
end;


No lugar de "//Seu codigo aqui!" você adiciona o código que quiser.No meu caso eu adicionei um "ShowMessage('Teste!');".

Agora la em cima no codigo,entre public e end;, adicione a seguinte linha:

procedure Clicou(Sender: TObject);

Depois disso volte em:

procedure TForm1.Button1Click(Sender: TObject);
var
Btn: TButton;
begin

Btn:=TButton.Create(Self); //Da o valor especificado a variavel do tipo TButton
Btn.Parent:=Form1; //O botão aparece no formulario,você pode colocá-lo dentro de
//qualquer outro componente colocando o nome dele,exemplo: panel1
Btn.Name:='Button2'; //Dá um nome ao botão
Btn.Left:=50; //Especifica a posição X do botão
Btn.Top:=50; //Especifica a posição Y do botão
Btn.Height:=25; //Define a altura do botão
Btn.Widht:=72; //Define a largura do botão
end;

E adicione o código depois de "Btn.Widht:=72; //Define a largura do botão" e antes de end;.:

Btn.OnClick:=Clicou; //Define o evento OnClik para o botão

Agora teste e seja feliz!xD.

Codigo fonte completo do tutorial:
Código:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Clicou(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Clicou(Sender: TObject);
begin
//Seu codigo aqui!
ShowMessage('Teste!');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Btn: TButton;
begin
Btn:=TButton.Create(Self); //Da o valor especificado a variavel do tipo TButton
Btn.Parent:=Form1; //O botão aparece no formulario,você pode colocá-lo dentro de
//qualquer outro componente colocando o nome dele,exemplo: panel1
Btn.Name:='Button2'; //Dá um nome ao botão
Btn.Left:=50; //Especifica a posição X do botão
Btn.Top:=50; //Especifica a posição Y do botão
Btn.Height:=25; //Define a altura do botão
Btn.Width:=72; //Define a largura do botão
Btn.OnClick:=Clicou;
end;

end.


Tutorial criado por leandrohackerx.
Copyright © 2011 leandrohackerx

LeandroDaher

Número de Mensagens : 357
Idade : 20
Data de inscrição : 13/05/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Criando componentes em tempo de execução no Delphi!

Mensagem por Da Galáxia em Dom 10 Abr 2011, 22:33

Muito bom cara, tá de parabéns.

Apenas mude a linha Btn.Widht:=72; vc escreveu a largura do form errada
o correto Btn.Width:=72; . Tem gente que não vai saber mudar e vai achar que teu code não funciona.

EDITADO
Deixando bem claro que gostei muito do teu tuto.
Mas tenho que fazer uma resalva:
Quando o botao é criado, se clicar de novo no botao criador, o programa vai fechar, isso acontece porque vai estar a criar um outro objeto com as mesmas propriedades daquele uq ja foi criado. Vc poderia usar excessoes para que o programa retornasse uma mensagem para o usuario. Mas o melhor jeito seria criar uma variavel para checar se o botao ja foi criado, simples assim:

Crie uma variavel global (tem que ser global, pois esta referindo aos 2 objetos)
criou: boolean;

Antes da criação do tipo TButton, no começo do codigo coloque:
if criou = false then
begin

e no fim depois de Btn.OnClick:=Clicou; //Define o evento OnClik para o botão
criou := true;
end;

FLW, e desculpe por me meter.

Da Galáxia

Número de Mensagens : 348
Data de inscrição : 14/01/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Criando componentes em tempo de execução no Delphi!

Mensagem por LeandroDaher em Qui 14 Abr 2011, 21:14

Estas coisas ficam a criterio do usuário,quando eu fiz o tutorial eu fiz para que a pessoa use-o e personalize o codigo como ele quiser.Vlw os elogios xD.

LeandroDaher

Número de Mensagens : 357
Idade : 20
Data de inscrição : 13/05/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Criando componentes em tempo de execução no Delphi!

Mensagem por Conteúdo patrocinado Hoje à(s) 07:40


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum