Criar um evento onclick para um menu em tempo de execução

Delphi

08/06/2004

Srs(as).

Estava precisando saber como criar um evento onclick para um menu cujo os itens serão montados a partir de um banco de dados em tempo de execução.

Agradecido


Luizbhering

Luizbhering

Curtidas 0

Respostas

Xanatos

Xanatos

08/06/2004

Bom essa tua questao me deixou muito curioso e em funcao disso tambem quero fazer esse negocio funcionar!

A Cada MenuItem que voce criar tente fazer isso:

Item:= TMenuItem.Create(Self);
Item.Name:= ´Teste´;
Item.Caption:= ´Teste´;
Item.OnClick:= Padrao1.OnClick;
MainMenu1.Items.Add(Item);

Voce cria uma opcao padrao e deixa ela invisivel! ela só vai servir pra voce ter em cada opcao de menu um evento onclick!!!

Depois voce implementa dentro desse Padrao1.OnClick a chamada ao formulario desejado!!!

Tenta ai e vamos ver o que dá!!! :idea:


GOSTEI 0
Paulo_amorim

Paulo_amorim

08/06/2004

Olá

Crie um procedimento com parametro (Sender: TObject)...
P. Ex.:
procedure MinhaFuncao(Sender: TObject);


Depois é soh atribuir...

Menu.OnClick := MinhaFuncao:



Espero que ajude
Até+


GOSTEI 0
Motta

Motta

08/06/2004

Outra solução


Crie TActions e quando criar o MenuItem a vincule ao menu.


GOSTEI 0
Xanatos

Xanatos

08/06/2004

Paulo Amorim eu tinha tentado fazer isso mas da erro! pois onclick é um TNotifyEvent e nao uma procedura e por isso nao podemos fazer essa atribucao!!!


GOSTEI 0
Xanatos

Xanatos

08/06/2004

Motta voce pode passar um exemplo da criacao dos TActions?

Obrigado.


GOSTEI 0
Rômulo Barros

Rômulo Barros

08/06/2004

tb Aguardo.

Sobe ^


GOSTEI 0
Paulo_amorim

Paulo_amorim

08/06/2004

Paulo Amorim eu tinha tentado fazer isso mas da erro! pois onclick é um TNotifyEvent e nao uma procedura e por isso nao podemos fazer essa atribucao!!!


Olá

TNotify event é, na realidade, uma procedure...
type TNotifyEvent = procedure (Sender: TObject) of object


Quando vc cria uma procedure com os mesmos parâmetros que um TNotifyEvent ele deveria aceitar...
Garanta que criou a procedure com os mesmos parametros...

Se não funciona, que erro dá?

Espero que ajude
Até+


GOSTEI 0
Xanatos

Xanatos

08/06/2004

Deu certo! é que eu estava tentando atribuir outro evento onclick de outra opcao !!! e deu erro mas criei uma funcao simples e funcionou!!

Valeu!!!


GOSTEI 0
Info.wtomfs

Info.wtomfs

08/06/2004

Galera tbm fiz isso em meu sistema,Só que meu menu chama um form que está no banco de dados como string

Form := ´Frm_Clientes´; // Essa Variável contém o form que está
gravado no banco

Formulario := TForm(FindClass(´t´+Form));
Nome.ClassName := Formulario;
Application.CreateForm(TComponentClass(Nome),Form);
Formulario.Name := Form;
Formulario.Show;

Isso Cria o Form Normalmente, só que se eu tentar acessar qualquer componente deste form através de outro da erro de memória.

Ex:

do Botão qualquer de um form qualquer,

Label1.Caption := Frm_Usuarios.Edit1.text;

Isso dá erro

Quem puder ajudar eu agradeço...


GOSTEI 0
Paulo_amorim

Paulo_amorim

08/06/2004

Ex: do Botão qualquer de um form qualquer, Label1.Caption := Frm_Usuarios.Edit1.text; Isso dá erro


Olá

Perae, até onde eu vi, esse Frm_Usuarios não está sendo declarado...
O problema ocorre porcausa do Edit1 ou do Label1
Se eh por causa do Label, tente especificar o form
Frm_Clientes.Label1.Caption...

Espero que ajude
Até+


GOSTEI 0
Xanatos

Xanatos

08/06/2004

Bom Paulo!

Ele ta querendo dizer que quando for feita uma chamada dinamica ao Frm_Usuarios que vai ser através do menu dinamico...e através de uma string ´Frm_Usuarios´. e depois tentar acessar este form atraves da

Label1.Caption := Frm_Usuarios.Edit1.text;

o Programa gera um erro de access violation por que o sistema nao acha o Frm_Usuarios ! pois ele vai criado nao atravéz do Frm_Usuarios : TFrm_Usuarios e sim de uma variavel Form: TForm.


GOSTEI 0
POSTAR