Clipper On Line • Ver Tópico - MENUITEM - CODEBLOCK

MENUITEM - CODEBLOCK

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

MENUITEM - CODEBLOCK

Mensagempor tchadrack » 27 Jan 2021 00:14

Estou tentando criar um menu usando o harbour 3.2 com base em uma tabela que contém nomes dos itens do menu e os métodos que serão chamados ao clicar no item correspondente.
Após ler os dados da tabela tenho dois arrays, digamos, menu1[] e prog1[] sendo que menu1 contém os nomes dos menus e prog1 os nomes dos métodos que serão chamados.
Então estou tentando montar os menus com o código abaixo,
for k := 1 to len(menu1)
oItem := MenuItem( menu1[k] ,{|prog1,k|prog1[k]}, , ,) //aqui está o meu problema.
oPopUp:AddItem( oItem )
NEXT


Qual é a maneira correta de fazer isso no clipper / harbour?

Grato,
tchadrack
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 15 Mar 2016 15:42
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 2 vezes

MENUITEM - CODEBLOCK

Mensagempor alxsts » 27 Jan 2021 02:03

Olá!

Use a função MakeBlock () abaixo:

oItem := MenuItem ( menu1 [k], MakeBlock ( prog1 [k] + "()"))
//------------------------------------------------------------------------------
Function MakeBlock( cExpr )

  // Alexandre Santos - 04/06/2007 - 16:11
  // Retornar um code block a partir de uma string fornecida

  Return  &( "{ || " + cExpr + "}" )
//------------------------------------------------------------------------------
 

Como vai fazer de a função do menu exigir parâmetros?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

MENUITEM - CODEBLOCK

Mensagempor tchadrack » 28 Jan 2021 00:03

Olá alxsts

Como vai fazer de a função do menu exigir parâmetros?


É um programa antigo, que estou dando manutenção. O antigo programador fez o menu todo na unha mas achei que do jeito que ele fez ficou muito complexo, sendo que a solução usando o menu acima torna tudo muito mais simples e o código fica mais legível.

Tem o método principal que nada mais é que a montagem do menu, onde ele carrega os menus e nome dos métodos, e com base nas permissões do usuário monta o menu de acordo com o usuário.

Fiz usando a função makeblock() e funcionou perfeitamente.

Function MakeBlock( cExpr )

  // Alexandre Santos - 04/06/2007 - 16:11
  // alxsts (http://www.pctoledo.com.br/forum/posting.php?mode=reply&f=4&t=25102 )
  // Retornar um code block a partir de uma string fornecida

  Return  &( "{ || " + cExpr + "}" )


O programa está funcionando perfeitamente, mas ao invés de usar o menu original, está usando este. Ainda vou fazer outros testes, mas a princípio parece que tudo está ok.

A título de curiosidade, não seria possível chamar métodos com parâmetros?
tchadrack
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 15 Mar 2016 15:42
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 2 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro