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.