Fórum Evento num componentem Criado em tempo de execução #294343

02/09/2005

0

Não estou conseguindo setar um evento num componente que criei em tempo de execução...

Seguinte:

tenho 3 formulários.

Form1:

(Label1) (edit1)
Topo: [ ]

(Label2) (edit2)
Esquerda: [ ]

[ Continuar ] (Button1)

quando clicar no botão, chamar o form2.

no form dois tem uma procedure chamada Carregar... Nela tem uma rotina pra criar um Tedit e um Tbutton no formulário 3, ou seja, criar estes dois componentes em tempo de execução.

até ai eu consegui. Só não estou conseguindo, criar um evento no botão do formulário 3. Que estava querendo colocar um showmessage como o text do edit criado.

Alguém podi dá um help??


ai está o código

TFORM1: 

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
form2.show;
end;

end.


TFORM2: 

unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    procedure CliquedoBotaoClick (Sender : TObject);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit3, Unit1;

{$R *.dfm}

procedure Tform2.CliquedoBotaoClick (Sender:TObject);
begin
ShowMessagePos(´Consegui Porraaa´, -1, -1);
end;


procedure Carrega;
var botao: Tbutton;
begin
  form3.show;

  with TEdit.Create(Application) do
  begin
    Parent := Form3;
    Left := strtoint(form1.Edit2.Text);
    Top := strtoint(form1.Edit1.Text);

  end;

  Botao := Tbutton.Create(form3);
  with Botao do
  begin
  OnClick := NIL;
    Parent := Form3;
    height := 32;
    width := 128;
    caption := ´Processar´;
    left := (Form3.ClientWidth - width) div 2;
    top := (Form3.ClientHeight - height) div 2;
    OnClick := CliquedoBotaoClick;  [b] // AQUI ESTÁ DANDO ERRO[/b]  end;

 end;

procedure TForm2.FormShow(Sender: TObject);
begin
  Carrega;

  end;

end.


TFORM3: 

unit Unit3;

interface

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

type
  TForm3 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm3.FormShow(Sender: TObject);
begin
  form2.WindowState := wsMinimized;
end;

procedure TForm3.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  form2.Close;
end;

end.



Franklinjavier

Franklinjavier

Responder

Posts

03/09/2005

Marco Salles

Não deu para entender sua lógica...Não deu para entender o porque da interface Form2...Mas tudo bem Vamos a parte ilógica do Problema

1) Primeiro
Troque a instruçõa:
procedure Tform2.CliquedoBotaoClick (Sender:TObject);
begin
ShowMessagePos(´Consegui Porraaa´, -1, -1);
end;

Troque a mensagem ShowMessagePos(´Consegui Porraaa´, -1, -1); Por uma mensagem de amor.. Tipo isso
procedure Tform2.CliquedoBotaoClick (Sender:TObject);
begin
ShowMessagePos(´Eu Amo as Mulheres´, -1, -1);
end;

2)Segundo
Não esta compilando porque a procedure carrega não reconhece a proceudre CliquedoBotaoClick que é um método Privativo da classe TForm2
Troque
OnClick := CliquedoBotaoClick; [b:20a639542f] // AQUI ESTÁ DANDO

por
onClick:= Form2.CliquedoBotaoClick;


3)Terceiro
Mesmo assim apareceu outros errinhos Bobos na hora de compilar.. Sugiro que voce cole como esta aqui;

[b]Form1[/b:20a639542f]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
form2.show;
end;

end.


[b:20a639542f]Form2[/b:20a639542f]
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    procedure CliquedoBotaoClick (Sender : TObject);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses
Unit1,unit3;

{$R *.DFM}

procedure TForm2.CliquedoBotaoClick(Sender: TObject);
begin
ShowMessagePos(´Eu Amo as Mulheres´, -1, -1);
end;

procedure Carrega; 
var botao: Tbutton;
begin
form3.show;
  with TEdit.Create(Application) do 
  begin 
    Parent := Form3;
    Left := strtoint(form1.Edit2.Text); 
    Top := strtoint(form1.Edit1.Text); 

  end; 

  Botao := Tbutton.Create(form3); 
  with Botao do 
  begin 
    OnClick := NIL;
    Parent := Form3;
    height := 32; 
    width := 128; 
    caption := ´Processar´; 
    left := (Form3.ClientWidth - width) div 2;
    top := (Form3.ClientHeight - height) div 2;
    onClick:= Form2.CliquedoBotaoClick;
 end;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
  Carrega;
end;

end.


[b:20a639542f]Form3[/b:20a639542f]
unit Unit3;

interface

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

type
  TForm3 = class(TForm)
   procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

uses
Unit1,Unit2;

{$R *.DFM}

{ TForm3 }

procedure TForm3.FormShow(Sender: TObject);
begin
form2.WindowState := wsMinimized;
end;

end.


4) Quarto
[b:20a639542f]Mas mesmo assim o form3 so ira aparecer quando voce fechar o Form2[/b:20a639542f]...
Ai sim quando voce clicar no Botão ira aparecer a mensagem
Como eu disse anteriormente não da para entender a logica da interface do Form2


Responder

Gostei + 0

03/09/2005

Martins

Olá [b:9318494515]Marcos[/b:9318494515]

Realmente tá um bocado sinistro esse negócio aê, copiei e colei aqui para testar e sinceramente não deu pra entender a funcionalidade não, sabe assim, se não for para aprendizagem mesmo, aonde ele vai usar.

Parabéns pela resolução!!!


Boa sorte a todos!!!


Responder

Gostei + 0

03/09/2005

Marco Salles

Parabéns pela resolução!!!


Sem falsa modestia , a idéia que eu tive de modificar a Instrução:

procedure Tform2.CliquedoBotaoClick (Sender:TObject); 
begin 
ShowMessagePos(´Consegui Porraaa´, -1, -1); 
end; 


Por

procedure Tform2.CliquedoBotaoClick (Sender:TObject); 
begin 
ShowMessagePos(´Eu Amo as Mulheres´, -1, -1); 
end; 


Foi de uma genialidade incrícel... Obrigado pelo reconhecimento :P


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar