Ajuda na criação de Botões

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Fernando Almeida
Usuário Nível 2
Usuário Nível 2
Mensagens: 57
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Ajuda na criação de Botões

Mensagem por Fernando Almeida »

Bom dia Caros colegas. Tenho uma rotina que faz a criaçâo de botões dos grupos e estÁ a funcionar bem. Caso eu selecione um elemento do Grupo, ele apresenta num segundo panel os botoes correspondentes aos artigos desse mesmo grupo.
É aqui que eu não sei porque dá erro e preciso da vossa ajuda porque tento criar o botão e da erro de parametros.
Vejam a rotina:

Código: Selecionar todos

FUNCTION Carrega_Botoes_Artigos( aNomeButton )
LOCAL LinhaBotao, ColunaBotao
PRIVATE xNomeBotao 

SELECT('GRUPOS')
IF GRUPOS->(DBSEEK( aNomeButton ))
   SELECT("ARTIGOS")
   OrdSetFocus('ArtGrupo')
   IF ARTIGOS->(DBSEEK( aNomeButton ))
      LinhaBotao  :=0
      ColunaBotao :=0
      SELECT('P_MESAS')
      LOCATE FOR P_MESAS->Abrevia="BT"
      SELECT('ARTIGOS')
      DO WHILE .NOT. EOF() .AND. ARTIGOS->Grupo=GRUPOS->Familia .AND. ARTIGOS->SubGrupo==GRUPOS->SubFam .AND. ARTIGOS->SubSubGrup=GRUPOS->SubSubFam
	    xNomeBotao :=ALLTRIM(ARTIGOS->Codigo)
	    DEFINE BUTTON &xNomeBotao	 
	         ROW    P_MESAS->LnIniArtBt + LinhaBotao
                 COL    P_MESAS->CoIniArtBt + ColunaBotao
                 WIDTH  P_MESAS->LargBTArt 
                 HEIGHT P_MESAS->AltuBTArt
                 ACTION Nil 
                 CAPTION '&'+UPPER(RTRIM(ARTIGOS->Descritivo)) 
                 FONTNAME "Arial"
                 FONTSIZE 8
                 TOOLTIP ""
                 FONTBOLD .T.
                 FONTITALIC .F.
                 FONTUNDERLINE .F.
                 FONTSTRIKEOUT .F.
                 ONGOTFOCUS {|| SetProperty('PanelArtigos', This.Name, 'FONTBOLD', .t.) }
	         ONLOSTFOCUS {|| SetProperty('PanelArtigos', This.Name, 'FONTBOLD', .f.) } 
                 HELPID Nil
                 FLAT .F.
                 TABSTOP .T.
                 VISIBLE .T.
                 TRANSPARENT .T.
                 MULTILINE .T.
                 PICTURE ARTIGOS->ImageBotao 
                 PICTALIGNMENT LEFT	
	     END BUTTON 
	     ColunaBotao +=(P_MESAS->LargBTArt + P_MESAS->DISTCOBTAR)
	     IF ColunaBotao>=690 - ( P_MESAS->LargBTArt + P_MESAS->CoIniArtBt ) 
	         ColunaBotao :=0  
	         LinhaBotao  +=(P_MESAS->AltuBTArt + P_MESAS->DistLnBTAr)
	     ENDIF
										
	     IF LinhaBotao>=700 - ( P_MESAS->LnIniArtBT + P_MESAS->AltuBTArt )
	         LinhaBotao :=0
	         ColunaBotao:=0    
	     ENDIF 	   
         SKIP
      ENDDO
   ENDIF
ENDIF 
Return
Me digam como posso usar esta instrução ControlExist( "MeuBotao" ). Porque não consigo usar-la para verificar se o botão existe.
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 180
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Re: Ajuda na criação de Botões

Mensagem por ivanil »

Olá,

Ao definir um objeto fora da estrutura da janela, é obrigatório informar a propriedade PARENT. Caso contrário, o sistema não saberá onde alocar o objeto.
Outro adendo é: se você estiver criando o objeto acima da criação do formulário ou em módulo diferente, não esqueça de declarar a janela;
at.
Fernando Almeida
Usuário Nível 2
Usuário Nível 2
Mensagens: 57
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Re: Ajuda na criação de Botões

Mensagem por Fernando Almeida »

Obrigado, tinha me esquecido desse detalhe.
Sr. Ivanil porque não consigo usar o ControlExist(). Essa função faz parte de alguma Dll que tem que ser acrescentada.
Consegue alterar os icones de um formulário desta forma: SetProperty("Form1", "Icon", "xxxxxxxxxxx"). Eu não consigo fazer a alteração dos icones.
Aproveito para o parabenizar sobre a ferramenta que criou, eu nunca a tentei usar, mas pergunto se executa em 32bits ou 64bits.
Tem alguma informação dela para que eu possa consultar?
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 180
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Re: Ajuda na criação de Botões

Mensagem por ivanil »

Olá Fernando,

Sugiro que faça uma leitura atenta do manual da MiniGUI, disponível na pasta doc. É possível que existam recursos ali descritos que você ainda não conheça e que possam ajudá-lo.

Em relação à sua pergunta sobre a verificação da existência de um controle, a função correta é:

IsControlDefined (<ControlName>,<WindowName>) --> lBoolean

Quanto à redefinição de um ícone em uma janela em tempo de execução, esse recurso não está documentado e também não está previsto no translate do pré-processador.

O Designer está preparado para ambiente 32 bits; no entanto, ele gera todos os arquivos de configuração do hbmk2 e deixa a disposicao do usuário. Dessa forma, basta copiá-los para um nome diferente e ajustá-los para um ambiente 64 bits, seja utilizando MinGW, Zig ou outro compilador. É importante considerar que todo o ambiente deve ser consistente: se optar por MinGW, por exemplo, o Harbour, a MiniGUI e os pacotes adicionais também devem estar nesse mesmo ecossistema.

Trata-se de um conjunto com diversas variáveis. Quando se adquire domínio sobre esse processo, a configuração torna-se trivial. Não costumo divulgar esse procedimento de forma ampla justamente para evitar a mistura de bibliotecas, o que pode causar conflitos, erros recorrentes e, muitas vezes, frustração ou desistência por problemas simples.

Você ainda pode adicionar seu próprio método de compilação e sobrepor a compilação atual; mas aí requer mais afinidade com a ferramenta.

A ferramenta está no git e sempre atualizada com a última versão da Minigui, e ocasionalmente produzo algum vídeo de demonstração, basta procurar "designer + minigui", deve aparecer no topo da pesquisa.
Fernando Almeida
Usuário Nível 2
Usuário Nível 2
Mensagens: 57
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Re: Ajuda na criação de Botões

Mensagem por Fernando Almeida »

A instrução IsControlDefined(xNomeBotao, "PanelArtigos") não está a cumprir para o que é determinado.
Vou lhe mostrar a rotina que cria os botões dos artigos correspondentes ao grupo escolhido.
Como não está a fazer o pretendido, dá um erro na verificação da existencia do control.
Imprimi o valor de retorno e só obtenho .F.. Com o control criado ou não.

Código: Selecionar todos

FUNCTION Carrega_Botoes_Artigos( aNomeButton )
LOCAL xNomeBotao, ColunaBotao, LinhaBotao

SELECT('GRUPOS')
OrdSetFocus('Familias')
IF GRUPOS->(DBSEEK( aNomeButton ))
   SELECT("ARTIGOS")
   OrdSetFocus('ArtGrupo')
   IF ARTIGOS->(DBSEEK( aNomeButton ) )
      LinhaBotao  :=0
      ColunaBotao :=0
      SELECT('P_MESAS')
      LOCATE FOR P_MESAS->Abrevia="BT"
      SELECT('ARTIGOS')
      DO WHILE .NOT. EOF() .AND. ARTIGOS->Grupo=GRUPOS->Familia .AND. ARTIGOS->SubGrupo==GRUPOS->SubFam .AND. ARTIGOS->SubSubGrup=GRUPOS->SubSubFam
	    xNomeBotao :=ALLTRIM(ARTIGOS->Codigo)
	    IF IsControlDefined(xNomeBotao, "PanelArtigos")
		IF GetProperty('PanelArtigos', xNomeBotao, 'VISIBLE' ) == .F.
		    SetProperty('PanelArtigos', xNomeBotao, 'VISIBLE', .T.)
		ENDIF
           ELSE 		 
	        DEFINE BUTTON &xNomeBotao
		      PARENT PanelArtigos
                      ROW    P_MESAS->LnIniArtBt + LinhaBotao
                      COL    P_MESAS->CoIniArtBt + ColunaBotao
                     WIDTH  P_MESAS->LargBTArt 
                     HEIGHT P_MESAS->AltuBTArt
                     ACTION Nil 
                     CAPTION '&'+UPPER(RTRIM(ARTIGOS->Descritivo)) + TRANSF(ARTIGOS->PrecoUnit, "@E 999,999.99")+' R$ '     
                     FONTNAME "Arial"
                     FONTSIZE 9
                     TOOLTIP ""
                     FONTBOLD .F.
                     FONTITALIC .F.
                     FONTUNDERLINE .F.
                     FONTSTRIKEOUT .F.
                     ONGOTFOCUS {|| SetProperty('PanelArtigos', This.Name, 'FONTBOLD', .t.) }
	             ONLOSTFOCUS {|| SetProperty('PanelArtigos', This.Name, 'FONTBOLD', .f.) } 
                     HELPID Nil
                     FLAT .F.
                    TABSTOP .T.
                    VISIBLE .T.
                    TRANSPARENT .T.
                    MULTILINE .T.
                    PICTURE RTRIM(ARTIGOS->ImageBotao) 
                    PICTALIGNMENT TOP 			  
              END BUTTON 
	      ColunaBotao +=(P_MESAS->LargBTArt + P_MESAS->DISTCOBTAR)
	       IF ColunaBotao>=690 - ( P_MESAS->LargBTArt + P_MESAS->CoIniArtBt ) 
	           ColunaBotao :=0  
	           LinhaBotao  +=(P_MESAS->AltuBTArt + P_MESAS->DistLnBTAr)
	       ENDIF								
	        IF LinhaBotao>=700 - ( P_MESAS->LnIniArtBT + P_MESAS->AltuBTArt )
	           LinhaBotao :=0
	           ColunaBotao:=0    
	       ENDIF
         ENDIF			
         SKIP
      ENDDO
   ENDIF
ENDIF 
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 180
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Re: Ajuda na criação de Botões

Mensagem por ivanil »

Ola Fernando;

use a função diretamente conforme abaixo, tem coisas que não deveria existir; a forma que te passei, envolve a variável com aspas desta forma sempre será falso.

_IsControlDefined ( xNomeBotao , "PanelArtigos" )
Fernando Almeida
Usuário Nível 2
Usuário Nível 2
Mensagens: 57
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Re: Ajuda na criação de Botões

Mensagem por Fernando Almeida »

Muito obrigado Sr. Ivanil, pergunto-lhe se me permite pedir-lhe aguns conselhos e sugestões porque estou a desenvolver o aplicativo sozinho e não conheço a linguagem de uma forma aprefundada. Não quero abusar do seu tempo e espero que não lhe cause transtorno.
O aplicativo está a funcionar bem. O Módulo de vendas.
Para fazer esta rotina de processo de venda por botões tive que criar alguns processos e gostaria de saber se posso lhe perguntar o que acha desses mesmos processos.
Vou citar aqui a forma como consegui fazer esta gestão e gostaria de saber se acha certo ou podia fazer de uma forma mais consistente.
Como tenho interesse em mudar os botões no panel de artigos quando me desloco nos botões de grupos, usei a propriedade ONGOTFOCUS() e ONLOSTFOCUS() no PanelFamilias com este detalhe:

Código: Selecionar todos

ONGOTFOCUS  {|| IF(BTAnterior !=Nil, SetProperty('PanelFamilias', BTAnterior, 'FONTBOLD', .f.), Nil),;
		                          SetProperty('PanelFamilias', This.Name, 'FONTBOLD', .t.),;
 		                          CFG_Botoes_Artigos( This.Name, BTAnterior ) }                       
           ONLOSTFOCUS {|| BTAnterior :=IF(This.Name==BTAnterior, BTAnterior, This.Name), SetProperty('PanelFamilias', This.Name, 'FONTBOLD', .t.) }

onde aproveito e mudo a fonte para bold para realçar o Caption do botão e envio a uma função 2 parametros, o botão atual e o botão anterior.
Na função de configurção de botões, criei uma matriz STATIC para poder verificar se já criei o botão. Segue abaixo o código.

Código: Selecionar todos

FUNCTION CFG_Botoes_Artigos( aNomeButton, oldNomeBT )
LOCAL ponteiro 

STATIC matriz_Botao_Artigo :={}

IF oldNomeBT !=Nil .AND. aNomeButton !=oldNomeBT      &&VAI VERIFICAR SE PODE ANULAR O BOTAO ANTERIOR 
   ponteiro :=HB_AScan(matriz_Botao_Artigo, { |x,y| ValType( x[1] ) == "C" .AND. x[1] == oldNomeBT } )
   IF ponteiro>0 
	  IF matriz_Botao_Artigo[ponteiro,2]=2   	  
             AnulaBotoesArtigos( oldNomeBT )
	     matriz_Botao_Artigo[ponteiro,2] :=1
		
             // HB_ADel( matriz_Botao_Artigo, ponteiro, .T. )
	  ENDIF 	
   ENDIF 
ENDIF
   
IF aNomeButton !=Nil 
   ponteiro :=HB_AScan(matriz_Botao_Artigo, { |x,y| ValType( x[1] ) == "C" .AND. x[1] == aNomeButton } )    &&Cria o Botão caso seja novo
   IF ponteiro>0
  	  IF matriz_Botao_Artigo[ponteiro,2]>0 .AND. matriz_Botao_Artigo[ponteiro,2]<2
              Carrega_Botoes_Artigos( aNomeButton )
	      matriz_Botao_Artigo[ponteiro,2] :=2
	  ENDIF
   ELSE 
	  AADD(matriz_Botao_Artigo, { aNomeButton, 1 }) 
   ENDIF
ENDIF 
Return Nil 
Pergunto-lhe, acha que devo fazer um RELEASE aos botões quando mudo de grupo ou familia os simplesmente esconde-los.
Estava para fazer com RELEASE para poupar recursos, como memoria, mas usei o visible==.F. porque com o RELEASE ele só me apaga 2 botões e salta fora do ciclo, e ainda não descobri o porquê. Segue a rotina de anulação abaixo:

Código: Selecionar todos

FUNCTION AnulaBotoesArtigos( oldNomeBT )
LOCAL oButton 

SELECT('GRUPOS')
OrdSetFocus('Familias')
IF GRUPOS->(DBSEEK(oldNomeBT))
   SELECT("ARTIGOS")
   OrdSetFocus("ArtGrupo")
   IF ARTIGOS->(DBSEEK(oldNomeBT))
      DO WHILE .NOT. EOF() .AND. ARTIGOS->Grupo=GRUPOS->Familia .AND. ARTIGOS->SubGrupo==GRUPOS->SubFam .AND. ARTIGOS->SubSubGrup=GRUPOS->SubSubFam
	   oButton :=AllTrim( ARTIGOS->Codigo )
	   IF _IsControlDefined (oButton , "PanelArtigos" )      
	      IF GetProperty('PanelArtigos', oButton, 'VISIBLE' ) == .T.
		  SetProperty("PanelArtigos", oButton, "Visible", .F.)              //DoMethod('PanelArtigos', oButton, 'RELEASE')
	      ENDIF 
	 ENDIF 
         SKIP
     ENDDO 
   ENDIF      
ENDIF   
Return Nil 
Está tudo a funcionar mas como tem mais bagagem que eu, gostaria muito da sua opinião.
alxsts
Colaborador
Colaborador
Mensagens: 3107
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Ajuda na criação de Botões

Mensagem por alxsts »

Olá!
Fernando Almeida escreveu: 09 Jan 2026 00:50

Código: Selecionar todos

ONGOTFOCUS  {|| IF(BTAnterior !=Nil, SetProperty('PanelFamilias', BTAnterior, 'FONTBOLD', .f.), Nil),;
		                          SetProperty('PanelFamilias', This.Name, 'FONTBOLD', .t.),;
 		                          CFG_Botoes_Artigos( This.Name, BTAnterior)
 		                          
 		                 }                       
           ONLOSTFOCUS {|| BTAnterior :=IF(This.Name==BTAnterior, BTAnterior, This.Name), SetProperty('PanelFamilias', This.Name, 'FONTBOLD', .t.) }
Se me permite o aparte, sem entrar na questão da Minigui, que desconheço, gostaria de te mostrar algo que, creio, desconheças.

Trata-se de um recurso muito bom, disponivel tanto no Harbour quanto no xHarbour: codeblocks estendidos. Dentro deles, poderá escrever um Prg inteiro, caso necessite:

Código: Selecionar todos


LOCAL bBlock := { |n|

                   LOCAL nVar 

                   FOR nVar := 1 To 10
                      QOut( nVar * n )  
                   NEXT

                   RETURN nVar
                }

// ...

? Eval( bBlock, 7 )
O teu código que destaquei acima ficaria bem mais legível:

Código: Selecionar todos

 
LOCAL bGotFocus, bLostFocus
 
bGotFocus := { ||
               IF BTAnterior !=Nil
                  SetProperty('PanelFamilias',BTAnterior , 'FONTBOLD', .f.)
               Endif
                
	       SetProperty('PanelFamilias', This.Name, 'FONTBOLD', .t.)
 	       CFG_Botoes_Artigos( This.Name, ), BTAnterior )
              }         
                
// definir o code block estendido para o evento ONLOSTFOCUS                 
bLostFocus := { ||
                 ...
              }

// Na definição dos botões:
   ONGOTFOCUS bGotFocus
   ONLOSTFOCUS bLostFocus 
   
   
Nota:
Em Harbour, um codeblock estendido é delimitado da mesma forma como em Cl*pper: { || ... }. Já no xHarbour, um codeblock estendido é delimitado pelos símbolos menor que e maior que: < || ... >
[]´s
Alexandre Santos (AlxSts)
Fernando Almeida
Usuário Nível 2
Usuário Nível 2
Mensagens: 57
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Re: Ajuda na criação de Botões

Mensagem por Fernando Almeida »

Muito obrigado alxsts, não tinha pensado em usar code block, fiz direto. Tem Vantagens ?
Pergunto se acha que a rotina de CFG_BoToes está feita da forma mais certa porque foi a forma que encontrei para apresentar os botões, criando a matriz estática e fazendo uma procura para poder ativar e desativar a visibilidade deles.
Aproveito e pergunto se acha mais conveniente fazer um RELEASE aos botões a serem desativados ou posso simplesmente passar a visibilidade deles para .F.
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 180
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Re: Ajuda na criação de Botões

Mensagem por ivanil »

Ola Fernando;
.. pergunto-lhe se me permite pedir-lhe alguns conselhos e sugestões porque estou a desenvolver o aplicativo sozinho e não conheço a linguagem de uma forma aprofundada...
É basicamente impossível emitir uma opinião para seu sistema sem conhece-lo, olhando pequenos fragmentos não da uma visibilidade real e pode induzir ao erro;
Mas posso te afirmar que um Hide/Show é muito mais eficiente que destruir e reconstruir o botão; na verdade, não ha muito sentido em fazer isso pensando em memoria; quando tiver um tempo dê uma olhada em quanto o navegador usa, seu sistema não chega 1% de consumo do que o browser consome;

Como você mencionou que tudo esta funcionando bem, isso significa que esta no caminho certo; aos poucos as novidades vão surgindo e você vai evoluindo; isso é natural.

Grande abraço.
Fernando Almeida
Usuário Nível 2
Usuário Nível 2
Mensagens: 57
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Re: Ajuda na criação de Botões

Mensagem por Fernando Almeida »

Sr. Evanil compreendo.
Agradeço imenso a sua atenção e sempre que tiver dúvidas, pergunto.
Vou usar então o HIDE E SHOW para mostrar os botões, fica mais rápido.

Pergunto como posso usar esta propriedade aControls := Form.Controls porque precisava da matriz de controles associado ao objeto para poder fazer pesquisas.

Forte abraço.
Fernando Almeida
Usuário Nível 2
Usuário Nível 2
Mensagens: 57
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Re: Ajuda na criação de Botões

Mensagem por Fernando Almeida »

Sr. alxsts cria as variaveis LOCAIS, bGOTFOCUS e bLOSTFOCUS onde?
E atribuo esse CodeBlock a elas no PRG principal ?
É que pelo conecimento que tenho acho que no arquivo FMG não posso declarar variaveis locais. Faço essa declaração no PRG principal ?
Caso faça no PRG principal, elas são reconhecidas NO Formulário ?

Forte abraço.
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 180
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Re: Ajuda na criação de Botões

Mensagem por ivanil »

Ola Fernando;

Para usar bloco estendido basta declarar normalmente;

Código: Selecionar todos

function xx
local b:={||
                Local i,b:=100
                for i=1 to b
                    //faca algo
                next
                return //algo
                }

Local blostfocus:={||facaAlgumacoisa()}
Eu o uso apenas em situações muito especiais, por deixar o código pouco legível, e tem um detalhe, só vai funcionar nos controles se você atribuir diretamente a propriedade depois da criação, pois se fizer antes, o pre-processador ira colocar o bloco dentro de outro bloco e provavelmente falhara.
Fernando Almeida escreveu: 09 Jan 2026 17:14 ... como posso usar esta propriedade aControls := Form.Controls porque precisava da matriz de controles associado ao objeto...
Anexos
2026-01-09_203941.png
2026-01-09_203941.png (27.48 KiB) Exibido 219 vezes
Fernando Almeida
Usuário Nível 2
Usuário Nível 2
Mensagens: 57
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Re: Ajuda na criação de Botões

Mensagem por Fernando Almeida »

Vou experimentar. Se tiver alguma duvida, volto a perguntar.

Um abraço. :D
Fernando Almeida
Usuário Nível 2
Usuário Nível 2
Mensagens: 57
Registrado em: 24 Set 2016 12:53
Localização: Dourados - MS

Re: Ajuda na criação de Botões

Mensagem por Fernando Almeida »

Bom dia colegas, acho que devo apresentar a função corrigida e mais simplificada de configuração de botões para não induzir a erro.

Código: Selecionar todos

FUNCTION CFG_Botoes_Artigos( aNomeButton, oldNomeBT )
LOCAL ponteiro 

STATIC matriz_Botao_Artigo :={}

IF oldNomeBT !=Nil .AND. aNomeButton !=oldNomeBT      &&VAI VERIFICAR SE PODE DESATIVAR O BOTAO ANTERIOR 
   ponteiro :=HB_AScan(matriz_Botao_Artigo, { |x| ValType( x ) == "C" .AND. x == oldNomeBT } )
   IF ponteiro>0 
	  AnulaBotoesArtigos( oldNomeBT )
			
      // HB_ADel( matriz_Botao_Artigo, ponteiro, .T. )	
   ENDIF 
ENDIF
   
IF aNomeButton !=Nil    &&ATIVA OS BOTOES DA ESCOLHA CORRENTE
   ponteiro :=HB_AScan(matriz_Botao_Artigo, { |x| ValType( x ) == "C" .AND. x == aNomeButton } )  
   IF ponteiro==0
      HB_AIns( matriz_Botao_Artigo, , aNomeButton, .T. )
   ENDIF 
   Carrega_Botoes_Artigos( aNomeButton )
ENDIF 
Return Nil 
Basta fazer isto com o nome do botão na matriz.
Sr. Ivanil na pasta DOC só encontro arquivos HTML que fazem parte da ajuda do IDE, presumo eu.
Não se referia a estes arquivos?
Responder