Ajuda na criação de Botões

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

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 »

Boa tarde Fernando;
Fernando Almeida escreveu: 10 Jan 2026 11:52 ... acho que devo apresentar a função corrigida e mais simplificada de configuração de botões para não induzir a erro.
Desculpe, mas ainda não consigo ver a utilidade da função real; mas não perca tempo tentando me explicar, só vou colocar alguns pontos que talvez não saiba;

você pode testar/atribuir/inverter a visibilidade de um controle qualquer assim;

form.control.visible := !form.control.visible

Se ainda assim precisa guardar nome antigo que ainda não compreendo a utilidade, você pode usar a propriedade cargo da janela, lembrando que todos os objetos têm uma propriedade cargo, perceba que com isso, você pode dar um grande salto com pouco código;

Se ainda não conhece hash; procure conhecer, vejo muita economia de código usando esse tipo de dado;
...pasta DOC só encontro arquivos HTML que fazem parte da ajuda do IDE, presumo eu.
Você deve baixar a Minigui da página oficial https://www.hmgextended.com/download.html
O Manual da Minigui fica aqui:
Anexos
2026-01-10_172656.png
2026-01-10_172656.png (53.29 KiB) Exibido 196 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 »

Boa tarde, mas repare com o conhecimento que tenho, preciso de verificar se já estão criados os botões dos artigos que compreendem o determinado grupo.
Para conseguir isso, criei essa função de nome CFG_CriaBotoes() e faço a leitura na matriz. Encontrando esse nome de botão de grupo na matriz ele vai a função carregaBotões e ai faz essa operação Form.Control.Visible :=.t.. Também existe outra função que verifica se é para desligar o visible quando o botão de grupo vai ser substituido por outro.
Se não encontrar o botão, cria na matriz esse nome de grupo e em seguida carrega os respectivos artigos. E assim sucessivamente em relação ao resto dos elementos do grupo ou familia.
Se não como iria apresentar os artigos por exemplo do grupo de nome "Porções" ou "Pratos de Peixe".
A não ser que criasse uma variável lógica no arquivo DBF onde se encontram os artigos, fizesse uma procura e verificasse o estado dessa mesma variável.
Como é que sugeria fazer essa leitura de artigos correspondentes ao botão de grupo em causa e os apresentava?
Eu estou a trabalhar com HMG 3.4.4. NÃo é a extended, elas são compativeis?
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;
Como é que sugeria fazer essa leitura de artigos correspondentes ao botão de grupo em causa e os apresentava?
Não faço nem ideia do que você esta falando, entenda que não conheço seu sistema...minha imaginação pode levar a outra direção..
Passe pelo menos um print para ativar minha imaginação corretamente.. :lol:
Quando seu código falava em mesas, até fazia algum sentido ter uma tela com as mesas, onde visualmente poderia indicar os atendimentos; mas quando entram tipos de pratos, na minha cabeça parece fazer mais sentido algo como um combo dinâmico associando a outros combos até direcionar a um grid com checkbox com a lista itens.
Eu estou a trabalhar com HMG 3.4.4. NÃo é a extended, elas são compativeis?
Até onde sei são compatíveis, mas sempre tem uma coisa ou outra que precisa ajustar e não sou a pessoa indicada para falar a respeito, pois nunca procurei ver diferença em ambas;

at;
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: 10 Jan 2026 18:37 Se não como iria apresentar os artigos por exemplo do grupo de nome "Porções" ou "Pratos de Peixe".
Tenho o mesmo problema do Ivanil, ou seja, não conheço a tua necessidade.

Pelo pouco que entendi, se entendi, você está usando componente errado.

Se quer exibir categorias de produtos e seus respectivos produtos, me parece melhor ideia carregar as categorias em um componente Tree View, do lado esquerdo da tela. Do lado direito, colocar um grid selecionável, exibindo os itens da categoria que estiver selecionada no Tree View...
[]´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 »

Imagem
Boa noite, talvez não me tenha explicado bem, venho desta forma tentar explicar como estou a desenvolver a aplicação de vendas.
Abram esse link e vejam as imagens.
A 1ª imagem de nome "Quadro de Vendas" é a que apresento por defeito e faz a venda com os grupos apresentados por uma TREE do lado esquerdo e ao seu lado apresento a GRID de artigos que vão sendo filtrados pela escolha do grupo ou familia.
Do lado direito apresento A GRID de pedidos de venda e ao seu lado os botões da operações do aplicatido como abertura de Caixa, Novo Pedido, abertura de Gaveta, Conferência de Conta, etc.
O aplicativo pode fazer venda livre ou venda por mesas, com gestão de cadeiras vinculadas a mesa, pedidos de ifood ou através de comandas como mostra a imagm de nome "Quadro da Gestão de Mesas com Cadeiras" que é apresentado quando solicitamos "Novo Pedido".
Agora se quisermos usar uma tela TouchScreen, clicamos com o lado direito do mouse e é-nos apresentado um menu de contexto como mostra a imagem de nome "Quadro de Venda com Menu e Contexto". Escolhendo a ultima opção ele vai alterar parte desse Form de Vendas e faz a apresentação do lado esquerdo do Form como está na imagem de nome "Quadro de Vendas por Botões" e ai os usuários podem usufruir de um sistema por botões que acham mais pratico. Ainda não juntei os 2 módulos por isso a apresentação está em separado.
Para fazer essa gestão tive que criar essas rotinas que filtram os artigos por grupo e criam e apresentam esses mesmos artigos por botões.
Agora se me disserem que há outras formas de o fazer, eu aceito, mas esta forma foi a que eu encontrei e está a funcionar muito bem.
Aproveito e menciono também que faz transferencia de parte ou de todos os itens de uma mesa para outra ou para uma cadeira, e é feito nesse Form de escolha de mesa.
o link: https://mega.nz/folder/yNNykJzJ#NG0hka9Q_-DOtgP1UiY8TQ
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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

Mensagem por JoséQuintas »

Crie um array com os botões, pode facilitar.
Não tenho certeza se precisa mexer nos CHs pra aceitar igual HMG Extended.

Código: Selecionar todos

aButtons := {}
...
DEFINE BUTTON ( "xxx" )
AAdd( aButtons, "XXX" )
...
A partir daí, pode verificar o array, como um array comum.
Não se esqueça que, se tiver exclusão no array, melhor trabalhar em ordem decrescente do array.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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

Mensagem por JoséQuintas »

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 
Não estou vendo pra retornar índices, mas se assim funciona o resto, a sugestão é reduzir esse fonte pra facilitar enxergar.
Isto evita deixar um IF gigante em aberto.

Código: Selecionar todos

FUNCTION Carrega_Botoes_Artigos( aNomeButton )

   LOCAL xNomeBotao, ColunaBotao, LinhaBotao

   SELECT('GRUPOS')
   OrdSetFocus('Familias')
   IF ! GRUPOS->(DBSEEK( aNomeButton ))
      RETURN Nil
   ENDIF   
   SELECT("ARTIGOS")
   OrdSetFocus('ArtGrupo')
   IF ! ARTIGOS->(DBSEEK( aNomeButton ) )
      RETURN Nil
   ENDIF
   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

   RETURN Nil
O que acontece se xNomeBotao contiver número ?
Acho que vai desprezar o nome ao usar &xNomeBotao
Talvez trocar pra "but" + codigo.

Faça testes sobre isso.
Se aceitar assim ( xNomeBotao ), isso evita ser transformado em número, se é que número é válido pra isso.

Nota: usar TAB no fonte causa mudanças na formatação, por isso não é recomendado usar TAB.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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

Mensagem por JoséQuintas »

Reescrito no estilo do dlgauto.
Notei algo estranho no DO WHILE:
o que acontece se um botao já existir ? vai reposicionar ?
ou vai acabar colocando por cima de um já existente ?
Digo isso porque só soma coluna quando cria botão novo.
Talvez o ENDIF antes de somar colunas.

Código: Selecionar todos

FUNCTION Carrega_Botoes_Artigos( aNomeButton )

   LOCAL xNomeBotao, ColunaBotao, LinhaBotao

   SELECT('GRUPOS')
   OrdSetFocus('Familias')
   IF ! GRUPOS->( DBSEEK( aNomeButton ) )
      RETURN Nil
   ENDIF   
   SELECT("ARTIGOS")
   OrdSetFocus('ArtGrupo')
   IF ! ARTIGOS->( DBSEEK( aNomeButton ) )
      RETURN Nil
   ENDIF
   SELECT('P_MESAS')
   LOCATE FOR P_MESAS->Abrevia="BT"
   SELECT('ARTIGOS')
   LinhaBotao  := 0
   ColunaBotao := 0
   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
         xRow        := P_MESAS->LnIniArtBt + LinhaBotao
         xCol        := P_MESAS->CoIniArtBt + ColunaBotao
         xWidth      := P_MESAS->LarbBTArt
         xHeight     := P_MESAS->AltuBtArt
         xCaption    := '&'+UPPER(RTRIM(ARTIGOS->Descritivo)) + TRANSF(ARTIGOS->PrecoUnit, "@E 999,999.99")+' R$ ' 
         bGotFocus   := {|| SetProperty('PanelArtigos', xNomeBotao, 'FONTBOLD', .t.) }
	      bLostFocus  := {|| SetProperty('PanelArtigos', xNomeBotao, 'FONTBOLD', .f.) } 
         xPicture    := RTRIM( ARTIGOS->ImageBotao ) 
         CriaBotao( xNomeBotao, "PanelArtigos", xRow, xCol, xWidth, xHeight, xCaption, bGotFocus, gLostFocus, xPicture )
	      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

   RETURN Nil

FUNCTION CriaBotao( xNomeBotao, xParent, xRow, xCol, xWidth, xHeight, xCaption, bGotFocus, gLostFocus, xPicture )

	DEFINE BUTTON ( xNomeBotao )
      PARENT        ( xParent )
      ROW           ( xRow )
      COL           ( xCol )
      WIDTH         ( xWidth )
      HEIGHT        ( xHeight )
      ACTION        Nil 
      CAPTION       xCaption
      FONTNAME      "Arial"
      FONTSIZE      9
      TOOLTIP       ""
      FONTBOLD      .F.
      FONTITALIC    .F.
      FONTUNDERLINE .F.
      FONTSTRIKEOUT .F.
      ONGOTFOCUS    bGotFocus
      ONLOSTFOCUS   bLostFocus
      HELPID        Nil
      FLAT          .F.
      TABSTOP       .T.
      VISIBLE       .T.
      TRANSPARENT   .T.
      MULTILINE     .T.
      PICTURE       xPicture
      PICTALIGNMENT TOP 			  
   END BUTTON 

   RETURN Nil
Nota:
Lembrando que ( xNomeBotao ) e ( xParent ) pode não ser aceito na HMG3, se não alterar CH
Acho que no dlgauto alterei os CHs da hmg3 pra isso funcionar.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
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 e muito obrigado Sr. José Quintas.
Em relação ao que me disse se "o que acontece se um botao já existir ? vai reposicionar ?" eu faço os devidos testes na primeira rotina antes de enviar a esta de criação e mostra de botão.
É nessa função que crio uma matriz estática com os botões conforme vão surgindo.
Depois envio a esta de carregamento de botões onde faço os devidos testes e verifico se o botão já existe. Se existir ativo ou desativo o "VISIBLE", se não crio o botão.
Quanto ao nome do botão, é a referencia do artigo para me facilitar todo o processo que vem em seguida. Não é numero e sim caracteres do código do artigo.
Eu envio 2 parametros quando faço a escolha do grupo. Parametros esses que representam o nome do botão do grupo escolhido e o outro parametro é o nome do botão que vai ser substituido, se já existir.
Nessa primeira rotina caso o segundo parametro não esteja NIL ele vai desligar os botões ativados e só em seguida processa a nova escolha.
Pergunto-lhe, como domina bem esta matéria também, acha mais lógico fazer um RELEASE aos botões a serem substituidos ou simplesmente fazer um HIDE?
Agora estou a usar HIDE e SHOW para processar os botões mas pensava que para poupar recursos seria melhor usar o RELEASE e voltar a criar o botão se necessario.
Uso o arquivo de nome P_MESAS porque tenho lá as definições dos botões a serem criados como tamanho, imagem destancia entre eles, etc.
Para não ter que alterar código se as pessoas não gostarem do tamanho ou imagens. Caso precise, altero a apresentação nesse arquivo.
Tudo isto está a funcionar muito bem. Eu só pergunto aos colegas porque assim também vou melhorando no desenvolvimento, fazendo da forma mais certa. Saber não ocupa espaço...
Há apresento abaixo a primeira função onde faz essas validações e cria a matriz para receber os botões.

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
   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 
No formulário PanelFamilias quando seleciono uma opão faço isto:

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.) }
estou a repetir para poder entender melhor.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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

Mensagem por JoséQuintas »

Tudo tem limite.
Deve chegar um momento em que tem mais botões escondidos do que visíveis, então acho que seria melhor recriar sempre.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
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 »

Eu não posso criar um botão já existente porque dá erro. Então não vejo como pode haver mais botões escondidos do que os necessários.
Logo só pode mostrar ou não mostrar o botão em causa.
Tinham razão, não há necessidade de criar matrizes para verificar se é a 1ª vez que entra na função.
Simplifiquei o processo, faz a desativação e/ou o carregamento dos botões, sem matrizes.
Sabem me dizer como posso tornear este problema:
No form principal faço a leitura do PanelFamilias desta maneira "LOAD WINDOW PanelFamilias AT 131 , 4 WIDTH 161 HEIGHT 584".
É possível fazer essa leitura fora do form principal ? Se sim como posso fazer, porque pelo que sei tem que estar associada ao Form Pai.
Responder