Page 1 of 1

ComboBox DropDown modificacion a clase

Posted: Mon Apr 18, 2016 7:32 pm
by ratazul
He modificado la clase combobox, ya que estoy utilizando el estilo DropDown, el cual al escribir algo en el get para realizar una búsqueda incremental en el arreglo de la lista de opciones que tengo, al presionar RETURN, no evalúa el siguiente combobox en un when y se salta a otro control.

Las lineas que se agregaron en la combobox son las siguientes lineas:


METHOD GetKeyChar( nKey ) CLASS TComboBox

local nAt, cText
local cSearch

if ( nKey == VK_TAB .and. ! GetKeyState( VK_SHIFT ) ) .or. nKey == VK_RETURN // mi modificacion
**************
if ::bChange != nil // estas son la lineas que se agregaron,
Eval( ::bChange, Self, ::VarGet() ) // ahora funciona a la perfeccion
endif // sin ocasionar problemas
**************
::oWnd:GoNextCtrl( ::hWnd )
return 0
else
if nKey == VK_TAB .and. GetKeyState( VK_SHIFT )
::oWnd:GoPrevCtrl( ::hWnd )
return 0
endif
endif

Espero esto sea de utilidad para aquellos que experimentan con esta clase.

Saludos

Re: ComboBox DropDown modificacion a clase

Posted: Mon Apr 18, 2016 7:58 pm
by cnavarro
Puedes poner un pequeño ejemplo de implementacion para entender bien tu objetivo?

You can put a small example of implementation to better understand your goal?

Re: ComboBox DropDown modificacion a clase

Posted: Tue Apr 19, 2016 3:37 pm
by ratazul
static function AddModAlumno( oRec, lEmpty )

local oDlg, oBtn := Array(2), cTitle, cFoto, oFoto, lLic := .F.

IF( lEmpty,;
( cTitle := LoadString( , 10015 ), cFoto := cDirImg+"Foto.png" ),;
( cTitle := LoadString( , 10016 ), cFoto := cDirImg+"DSCN"+oRec:Foto+".jpg" ) )

IF !FILE( cFoto ) .or. EMPTY( oRec:Foto )
cFoto := cFoto := cDirImg+"Foto.png"
ENDIF

IF( oRec:NIvel_Escolar == "LICENCIATURA", lLic := .T., )

DEFINE DIALOG oDlg RESOURCE "DLGALU" TITLE cTitle PIXEL TRANSPARENT

REDEFINE GET oRec:Matricula ID 601 OF oDlg PICT "@!KS" UPDATE
REDEFINE GET oRec:Nombre ID 602 OF oDlg PICT "@!KS" UPDATE
REDEFINE GET oRec:Telefono ID 603 OF oDlg PICT "9999999999" UPDATE
REDEFINE GET oRec:CCT ID 604 OF oDlg PICT "@!KS" UPDATE
REDEFINE COMBOBOX oRec:Nivel_Escolar ITEMS aNivelEsc ID 605 OF oDlg // Aquí, despliega una lista, que tiene búsqueda incremental, cuando se presiona
// RETURN, evalúa el WHEN y salta dos controles del dialogo, sin permitir
// la selección del COMBOBOX donde se evalúa el WHEN. Con la modificación
// en la clase COMBOBOX, ahora trabaja perfectamente. Obvio deberá configurar
// el bChange del control. Lineas adelante se muestra como.
REDEFINE COMBOBOX oRec:Licenciatura ITEMS aLic ID 606 OF oDlg WHEN oRec:Nivel_Escolar == "LICENCIATURA" // Evalúa un WHEN
REDEFINE COMBOBOX oRec:Grado ITEMS aGrado ID 607 OF oDlg
REDEFINE COMBOBOX oRec:Grupo ITEMS aGrupo ID 608 OF oDlg
REDEFINE COMBOBOX oRec:Turno ITEMS aTurno ID 609 OF oDlg
REDEFINE CHECKBOX oRec:Cenlex ID 610 OF oDlg UPDATE
REDEFINE GET oRec:Cuenta_Cenlex ID 611 OF oDlg PICT "@!KS" UPDATE WHEN oRec:Cenlex
REDEFINE GET oRec:Beca ID 612 OF oDlg PICT "999" UPDATE
REDEFINE GET oRec:Descuento ID 613 OF oDlg PICT "999" UPDATE
REDEFINE COMBOBOX oRec:Estado ITEMS aEstado ID 614 OF oDlg
REDEFINE GET oRec:Foto ID 615 OF oDlg PICT "9999" UPDATE VALID( oRec:Foto := StrZero( Val( oRec:Foto ), 4, 0 ), oDlg:UpDate(), .T. )
REDEFINE IMAGE oFoto ID 616 OF oDlg FILE cFoto ADJUST
oFoto:Progress( .F. )

REDEFINE BTNBMP oBtn[1] WHEN oRec:Modified() RESOURCE "ACEPTAR" ID 617 OF oDlg ;
ROUND NOBORDER TRANSPARENT PROMPT "Aceptar" LEFT ;
ACTION ( oRec:Elaboro := AllTrim( cLogin ), oRec:Fecha_Hora := DateTime() ,oRec:Save(), oDlg:End() ) TOOLTIP { "Guardar" }
REDEFINE BTNBMP oBtn[2] RESOURCE "CANCELAR" ID 618 OF oDlg ;
ROUND NOBORDER TRANSPARENT PROMPT "Cancelar" LEFT ;
ACTION oDlg:End() TOOLTIP { "Cancelar" }

oDlg:lHelpIcon := .F.

AEval( oDlg:aControls, { |o| IF( o:ClassName == "TCOMBOBOX",;
( o:lIncSearch := .T., o:lCaseSensitive := .T. ),;
( o:nClrText := CLR_BLUE, o:nClrPane := nRGB( 0xFE, 0xFF, 0xDB ) ) ) } )

oDlg:aControls[5]:bChange := { || oRec:Nivel_Escolar := oDlg:aControls[5]:oGet:GetText(), oDlg:AEvalWhen(), oDlg:Update() } // Aquí como se realiza el bChange del control.

ACTIVATE DIALOG oDlg CENTERED

return nil

//----------------------------------------------------------------------------//