Oi Marcelo,
Parabéns pela sua evolução do aprendizado. Logo logo você irá ficar craque ! Serio mesmo.
Programar em GUI é diferente como eu ja tinha mencionado. Alguns conceitos de programação linear/sequencial como estávamos acostumados a fazer com Clipper ou melhor dito em modo console, com GUI é diferente. Basicamente pense em que tudo é tratado como objeto e não precisa obedecer a forma sequencial. Isto porque a ação do mouse permite interagir com qualquer controle mesmo que esteja na cima como em baixo ou no meio...
Em outro post você mencionou que a sua dificuldade agora no começo é entender os eventos.
Os eventos de cada controles, não são todos iguais, algun possui certos eventos que outros não possui.
Sempre que você selecionar cada controle, você vai notar isso na IDE na aba de Eventos (você já deve ter notado).
Eu não sei qual foi a versão do HMG que você baixou. Pelo outro código que você postou do seu projeto, não me parece ter sido em UNICODE, por tanto não é a versão atual que você instalou (3.4.0) certo ?
Para você ter maior compreensão veja C:\hmg.3.4.0\SAMPLES\Events tem alguns exemplos.
Sobre o seu código, notei dois erros graves:
- Você colocou:
@ 70,30 CHECKBOX cB12 CAPTION 'Hipofaringe' ACTION Naso.cB12.Enabled := IF(Naso.cB11.Value := .T. , .F. , .T.)
Perceba que você está atribuindo e não comparando. Este um erro que as vezes cometemos quando não estamos muito familiarizados com :=
- O controle CHECKBOX não possui o evento ACTION como no BUTTON. Ao invés disso você deveria ter utilizado ON CHANGE.
Eu fiz outra mudança para que você abra a mente nesta direção. Sempre é bom criar uma função onde você pode trabalhar muito bem em várias linhas e não sujeito a uma só linha de forma sintética. O importante é a compreensão do seu código e não boniteza.
Então observe como eu fiz:
Código: Selecionar todos
#include <hmg.ch>
Function Main()
DEFINE WINDOW Naso AT 132 , 235 WIDTH 550 HEIGHT 350 TITLE "Teste1" MAIN
@ 70,30 CHECKBOX cB12 CAPTION 'Hipofaringe' ON CHANGE Muda(Upper(This.Name))
// (Naso.cB12.Enabled := IF(Naso.cB11.Value, .F. , .T.))
@ 40,30 CHECKBOX cB11 CAPTION 'Nasofaringe' ON CHANGE Muda(Upper(This.Name))
// (IF(Naso.cB12.Value, Naso.cB11.Enabled := .F., Naso.cB11.Enabled := .T.))
@ 120,30 BUTTON BUTTON_5 CAPTION "Teste" PICTURE "imprimir.bmp" ACTION IF(Naso.cB11.Value, MsgInfo("Marcado"), MsgInfo("Desmarcado"))
END WINDOW
CENTER WINDOW Naso
ACTIVATE WINDOW Naso
Return Nil
Function Muda(cControl)
If cControl="CB11"
If GetProperty("Naso","cB11","Value")=.T.
SetProperty("Naso","cB12","Enabled",.F.)
Else
SetProperty("Naso","cB12","Enabled",.T.)
Endif
Endif
If cControl="CB12"
If GetProperty("Naso","cB12","Value")=.T.
SetProperty("Naso","cB11","Enabled",.F.)
Else
SetProperty("Naso","cB11","Enabled",.T.)
Endif
Endif
Return Nil
Pode ser feito de várias formas. Eu fiz desta forma, para que você entenda melhor. As funções GetProperty e SetProperty são muito úteis e poderosas. Talvez neste exemplo nem precisaria, mas o fiz para o seu aprendizado.
O amadurecimento seu com a ferramenta irá vir com a sua prática e o seu estilo de programar.
Um grande abraço,