Refesco

Post Reply
Mike Serra
Posts: 287
Joined: Fri Apr 14, 2006 5:52 pm
Location: Córdoba (España)

Refesco

Post by Mike Serra »

Buenos días foro:

Tengo en un dialogo desde resursos (Microsoft C++) con un combobox y 2 checks, los checks tienen que estar activados solo cuando se haya seleccionado un valor específico del combo, con el resto de valores tienen que estar desactivados. Por defecto, cuando se activa el dialogo, los check estan activados porque el valor del combo es que el lo activa, pues cuando selecciono un valor que los deviera de desactivar, no se refresca los checks y siguen activos. Solo se desactivan cuando vuelve a coger el foco el combo o cuando pincho sobre cualquiera de los 2 checks. He probado con sysrefres, refrescando los checks en el ON CHANGE del combo, ¿sabeis de que puede ser?

Code: Select all

redefine combobox oCombo var vCombo items aCombo id 801 of oDlg STYLE CBS_DROPDOWN ON CHANGE (ocheck1:refresh(),ocheck2:refresh())

ocombo:blostfocus:={||ocheck1:refresh(),ocheck2:refresh()}

redefine checkbox ocheck1 var porprecio id 702 of odlg when  objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA" on change (Desactiva(ocheck2,@porconstructora),sysrefresh()) UPDATE

redefine checkbox ocheck2 var porconstructora id 703 of odlg when  objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA" on change (Desactiva(ocheck1,@porprecio),sysrefresh()) UPDATE
Muchas Gracias.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Mike,

Hazlo así:

Code: Select all

redefine combobox oCombo var vCombo items aCombo id 801 of oDlg STYLE CBS_DROPDOWN ON CHANGE If( objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA", ( ocheck1:Enable(), ocheck2:Enable() ), ( ocheck1:Disable(), ocheck2:Disable() ) )

redefine checkbox ocheck1 var porprecio id 702 of odlg when  objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA" on change (Desactiva(ocheck2,@porconstructora),sysrefresh()) UPDATE

redefine checkbox ocheck2 var porconstructora id 703 of odlg when  objeto:lPuedoModificar .and. alltrim(vCombo)="NO ADJUDICADA" on change (Desactiva(ocheck1,@porprecio),sysrefresh()) UPDATE
regards, saludos

Antonio Linares
www.fivetechsoft.com
Mike Serra
Posts: 287
Joined: Fri Apr 14, 2006 5:52 pm
Location: Córdoba (España)

Post by Mike Serra »

Perfecto Antonio!! :D

No se por que sería, pero MUCHAS GRACIAS
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Mike,

Las claúsulas WHEN se evaluan cuando algun control pierde el foco.

En tu caso, estas cambiando la selección del combobox, pero no estás perdiendo su foco, por eso los WHEN no se evalúan.

Con el cambio propuesto ahora tu realizas la misma acción que los WHEN cuando cambia la selección del combobox y no tienes que aguardar a que se cambie el foco.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Mike Serra
Posts: 287
Joined: Fri Apr 14, 2006 5:52 pm
Location: Córdoba (España)

Post by Mike Serra »

La explicación, perfecta, sólo comentarte que en mi ejemplo cuando seleccionaba un valor en el combobox y luego pulsaba intro, ahí si se debería de ejecutar la clausula WHEN, porque si que me saltaba a otro objeto. De todas formas te agradezco enormemente tus soluciones y explicaciones ya que me harán pensar.

UN SALUDO,
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Mike,

Por favor, prueba tu código original con sólo este cambio:

redefine combobox oCombo var vCombo items aCombo id 801 of oDlg STYLE CBS_DROPDOWN ON CHANGE (ocheck1:refresh(),ocheck2:refresh()) VALID ( oDlg:AEvalWhen(), .T. )
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply