Duvida com o Checkbox

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Duvida com o Checkbox

Mensagem por Clipper »

Prezados Colegas

Alguém poderia me explicar o porque disso :

Código: Selecionar todos

@ 70,30 CHECKBOX cB12 CAPTION 'Hipofaringe'  ACTION Naso.cB12.Enabled :=  IF(Naso.cB11.Value :=.T. , .F. , .T.)
Não funciona. Dá erro na compilação.
@ 40,30 CHECKBOX cB11 CAPTION 'Nasofaringe'  ACTION IF(Naso.cB12.Value := .T. ,Naso.cB11.Enabled := .F. ,Naso.cB11.Enabled := .T.)
Também dá erro na compilação.

Mas isso funciona...

@ 670,440 BUTTON BUTTON_5 CAPTION "Teste" PICTURE "imprimir.bmp"  ACTION IF(Naso.cB11.Value= .T. ,MsgInfo("Marcado") , MsgInfo("Desmarcado"))
Basicamente o que eu quero é que quando uma opção for marcada a outra seja desabilitada.

Agradeço a atenção.

Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Duvida com o Checkbox

Mensagem por Pablo César »

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:
  1. 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 :=
  2. 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,
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder