Criar Evento De Botão Em Form Dinâmico, Tem como?
30/06/2008
0
Estou criando uma função que cria um form e dois botões, como se fosse um MessageBox ou um DialogBox, mas eu não to conseguindo criar as procedures para ligar ao onclick dos botões desse form dinâmico.
Vou postar o código:
function TfrmPadrao.CarregaListaEMail: String; var frmLista : TForm; btnOK, btnCancelar : TButton; chkOK : Booelan; procedure OKClick(Sender: TObject); begin chkOK := True; end; procedure CancelarClick; begin chkOK := False; end; begin // Criando o Form dinâmico // frmLista := TForm.Create(Self); frmLista.Position := poScreenCenter; frmLista.BorderStyle := bsSingle; frmLista.BorderIcons := [biSystemMenu]; frmLista.Caption := ´Lista de Emails´; frmLista.Height := 316; frmLista.Width := 376; // Criando os Botões // btnOK := TButton.Create(Self); btnOK.Parent := frmLista; btnOK.Height := 36; btnOK.Width := 100; btnOK.Left := 8; btnOK.Top := 250; btnOK.Caption := ´OK´; // btnOK.OnClick := OKClick; // <<<=== AQUI DA ERRO, PORQUE??? // Mostra o Form // frmLista.ShowModal; FreeAndNil(frmLista); end;
valew [/code]
Seu_madruga
Posts
30/06/2008
Brunodsr
Declara ela no private do teu form e testa novamente.
private
{ Private declarations }
procedure OKClick(Sender: TObject);
btnOK.OnClick := OKClick; //OKClick; // <<<=== AQUI DA ERRO, PORQUE???
Espero ter ajudado
30/06/2008
Seu_madruga
Hum, entendi mas eu queria poder programar a procedure do evento do meu botão pra poder deixar o código protegido dentro da junção entende. Da forma que vc me passou funciona perfeito, mas queria mesmo uma forma de criar a procedures dentro da função. Será que realmente o que eu estou tentando fazer não tem como???
Abraço
30/06/2008
Brunodsr
Procedure teste; procedure subProc; begin showmessahe(´teste´); end; begin subProc; end;//subproc retirado de memoria aqui...
No exemplo acima, a procedure subProc é retirada da pilha assim que a procedure teste é executada.
Outra forma de fazer do jeito que vc quer é usar classes e tornar as procedures privadas na classe, mas fico mto baguncado.. rola nao.
Eu aconselho voce a usar bibliotecas de procedures e aponte p/ elas qndo necessario.
Cria todas as suas procedures em uma unit so. E aponta sempre pra ela.
Espero ter ajudado.
01/07/2008
Seu_madruga
01/07/2008
Comodelphi
TClassex = class private procedure CustomClick(Sender: TObject); end;
A questão de escopo ocorrerá a partir do momento que vc decidir criar e usar os metodos da classe TClassex;
02/07/2008
Seu_madruga
eu entendi sua explicação em partes hehehe.
Se em um botão qualquer eu consigo colocar no onClick qualquer procedures que tenha sido criada na unit, porque não posso ligar a uma que está dentro da procedure. qual a diferença entre a minha procedure criada dentro de outra procedure ou de uma procedure criada publica ou privada do form?
Vc disse q a procedure tem q ser do tipo TNofifiedEvent certo? Nao conseguiria criar essa procedure interna com esse tipo?
Talvez fazendo um cast?
Valew pela ajuda
02/07/2008
Brunodsr
Como falei antes, procedures declaradas dentro de procedures sao restritas a estas procedures. Vc nao pode apontar um evento de um componente a uma procedure declarada assim.
Faca como te falei.. crie uma unit para guardar todos esses eventos e use essa unit em forma de biblioteca. É a forma mais facil.
Usa o exemplo que eu coloquei la em cima no post anterior.
Obs.: Se ligue no que o nosso amigo falou:
type TNotifyEvent = procedure (Sender: TObject) of object;
Portanto, crie uma classe para guardar essas procedures.
02/07/2008
Comodelphi
Clique aqui para fazer login e interagir na Comunidade :)