MainMenu
Alguem sabe como colocar uma string no evento onclick
de um objeto TMenuItem? ou como converter a string para o tipo
TNotifyEvent?
de um objeto TMenuItem? ou como converter a string para o tipo
TNotifyEvent?
Elenice
Curtidas 0
Respostas
Rafael Heise
25/11/2003
Por falor, seja mais clara...
não entendi sua pergunta...
não entendi sua pergunta...
GOSTEI 0
Elenice
25/11/2003
No menu principal existem os items do menu,
quando clico sobre um desses itens estou ativando
o evento ´onclick´ do componente. Mas estou criando
o menu dinamicamente, na inicializaçao do programa, e para
isso preciso definir tambem o que acontecera qdo alguem
clicar sobre esse menu (onclick). Soh que o evento onclick
eh do tipo TNotifyEvent, e o que eu gostaria de colocar
no onclick eh do tipo string. Existe um modo de converter
string para o TNotifyEvent???
quando clico sobre um desses itens estou ativando
o evento ´onclick´ do componente. Mas estou criando
o menu dinamicamente, na inicializaçao do programa, e para
isso preciso definir tambem o que acontecera qdo alguem
clicar sobre esse menu (onclick). Soh que o evento onclick
eh do tipo TNotifyEvent, e o que eu gostaria de colocar
no onclick eh do tipo string. Existe um modo de converter
string para o TNotifyEvent???
GOSTEI 0
Rafael Heise
25/11/2003
Mas porque string?
Você não vai conseguir fazer isso do jeito que você está pensando..
Como é do tipo TNotifyEvent, você precisa assimilar com TNotifyEvent.
Para isso, crie as procedures da maneira que você quer, e depois associe elas via código
MenuItem.OnClick := MeuClick;
beleza?!
Talvez isso te ajude a resolver seu problema.
Agora se você tem as suas procedures, e quer a partir do nome texto associar o evento, dai você tem que usar uma programação mais pesada que nem tenho certeza se vai mesmo funcionar ou não... então, teria que ver...
Mas talvez uma outra saida seria você usar ActionList. Talvez seja melhor... de uma olhada nisso... talvez ache o que você quer...
Você não vai conseguir fazer isso do jeito que você está pensando..
Como é do tipo TNotifyEvent, você precisa assimilar com TNotifyEvent.
Para isso, crie as procedures da maneira que você quer, e depois associe elas via código
MenuItem.OnClick := MeuClick;
beleza?!
Talvez isso te ajude a resolver seu problema.
Agora se você tem as suas procedures, e quer a partir do nome texto associar o evento, dai você tem que usar uma programação mais pesada que nem tenho certeza se vai mesmo funcionar ou não... então, teria que ver...
Mas talvez uma outra saida seria você usar ActionList. Talvez seja melhor... de uma olhada nisso... talvez ache o que você quer...
GOSTEI 0
Elenice
25/11/2003
o problema eh q
todas as propriedades de construcao do menu vao vir de uma tabela,
inclusive a procedure a ser executada, ou seja, o nome dela,
que eu estava retirando da tabela como string....
todas as propriedades de construcao do menu vao vir de uma tabela,
inclusive a procedure a ser executada, ou seja, o nome dela,
que eu estava retirando da tabela como string....
GOSTEI 0
Beppe
25/11/2003
Em vez de string, use um número de ação(1 - abrir, 2 - fechar, 3 - salvar, 4 - etc). Quando criar o item, configure a propriedade Tag dele como este número. Então você cria um método TNotifyEvent no seu form. O corpo dele deve ser algo assim:
case TMenuItem(Sender).Tag of 0: Abre; 1: Fecha; 2: Salva; 3: Etc; end;
GOSTEI 0
Rafael Heise
25/11/2003
Você pode tentar fazer o seguinte...
Já que você tem tudo do banco de dados, e traz as funções como string, você já deve ter as funções prontas na sua form certo?
Então você pode criar um record que contém os campos nome e endereco, como sendo string e TNotifyEvent respectivamente.
Dai quando você criar a sua form, você chama uma procedure sua, que aloca todas as procedures suas que você pretende usar para colcoar nos click. e para isso, você tem que ter uma variável na form que é um array da quantidade de procedure do tipo que você criou.
Então, nessa procedure, você seta para cada posição do array, o nome e a procedure que você vai usar. Depois você faz um for em cima desse array, e testa, se for do nome passado, você retorna o valor do endereco.
dai no caso é uma função que passa uma string e devolve um tnotifyevent.
não sei se da pra fazer diferente. fiquei tentando usar propinfo e talz, mas não deu certo... então...
acho que essa é a saída mais fácil atualmente!
valeu
Já que você tem tudo do banco de dados, e traz as funções como string, você já deve ter as funções prontas na sua form certo?
Então você pode criar um record que contém os campos nome e endereco, como sendo string e TNotifyEvent respectivamente.
Dai quando você criar a sua form, você chama uma procedure sua, que aloca todas as procedures suas que você pretende usar para colcoar nos click. e para isso, você tem que ter uma variável na form que é um array da quantidade de procedure do tipo que você criou.
Então, nessa procedure, você seta para cada posição do array, o nome e a procedure que você vai usar. Depois você faz um for em cima desse array, e testa, se for do nome passado, você retorna o valor do endereco.
dai no caso é uma função que passa uma string e devolve um tnotifyevent.
não sei se da pra fazer diferente. fiquei tentando usar propinfo e talz, mas não deu certo... então...
acho que essa é a saída mais fácil atualmente!
valeu
GOSTEI 0
Beppe
25/11/2003
PropInfo é para propriedades e eventos, pra métodos comuns(Button1Click, Form1Create), isto não serve...
GOSTEI 0
Elenice
25/11/2003
e como faço para popular o array com os TNofyEvents??
GOSTEI 0
Rafael Heise
25/11/2003
Infelizmente tem que ser na mão..
para cada posição do array você precisa setar manualmente qual a procedure é equivalente!
lamento...
para cada posição do array você precisa setar manualmente qual a procedure é equivalente!
lamento...
GOSTEI 0
Elenice
25/11/2003
aih fica complicado pq sao muitas...
umas 500 pelo menos...
Mas muito obrigada assim mesmo...
umas 500 pelo menos...
Mas muito obrigada assim mesmo...
GOSTEI 0