Page 1 of 1

Se puede tener un Combobox, con esta condición ...

Posted: Thu Jun 11, 2020 5:52 pm
by nanoespinoza
Estimados:

Una consulta, ¿es posible crear un Combobox, de forma que de acuerdo a una condición previa, cambie la seleccionabilidad de algunos de los elementos a mostrarse en la lista de selección (los oCbx:aItems), es decir la lista no cambiaría, pero si la seleccionabilidad de algunos de los elementos, de esta forma se los saltará con el recorrido del cursor y no se los puede seleccionar?.

Saludos

Fernando Espinoza A.

Re: Se puede tener un Combobox, con esta condición ...

Posted: Thu Jun 11, 2020 6:49 pm
by acuellar
Estimado Nano

Quizás ésto te pueda guiar

Code: Select all

  REDEFINE COMBOBOX oCbx1 VAR nSect ID 103 OF oDlgD ITEMS aSect ON CHANGE (lugar(nSect),oCbx2:SetItems( aLugar ), oCbx2:refresh())
  REDEFINE COMBOBOX oCbx2 VAR nLug ID 104 OF oDlgD ITEMS aLugar UPDATE
 

Re: Se puede tener un Combobox, con esta condición ...

Posted: Thu Jun 11, 2020 10:22 pm
by nanoespinoza
Estimado ACuellar:

Gracias por su respuesta, la parte que me indica ya la tengo conocida; lo que quiero es que al abrirse la lista de opciones del combobox, supongamos que son 10, se muestren las 10, pero que algunas no sean elegibles, es decir estén en un modo Disable(), por tanto, no se puedan seleccionar.

Saludos

Fernando Espinoza A.

Re: Se puede tener un Combobox, con esta condición ...

Posted: Sat Jun 13, 2020 2:32 am
by nanoespinoza
Estimados:

Alguien con alguna experiencia en este tema que pueda ayudar.

Saludos

Fernando Espinoza A.

Re: Se puede tener un Combobox, con esta condición ...

Posted: Sat Jun 13, 2020 2:35 pm
by cnavarro
Fernando, lo de no permitir elegir un determinado item, basado en una condición, no es difícil, si cuando estableces la condición, creas un array con el mismo número de elementos que el array que vas a mostrar en el combo, y en la claúsula ON CHANGE valoras si el array de "condiciones" tiene .T. en esa posición ( aCondiciones[ oCbx:nAt ] ), y si está a falso te vas al siguiente ( oCbx:nAt++, aunque tendrás que controlar que no se pase del Len() del array que hay en el combobox )
Por ahí van los tiros, pienso yo
En cuanto a que aparezca en disable, lo veo más complicado, y habría que intentar implementarlo en la claúsula ON DRAWITEM del combo, pienso yo
Por ello, yo para eso, pondría un boton de action en un get y mostraría un menu POPUP, creo que te daría más facilidad de controlar lo que pretendes

Re: Se puede tener un Combobox, con esta condición ...

Posted: Sun Jun 14, 2020 10:18 am
by acuellar
Fernando

Otra opción seria cambiar el COMBOBOX por un GET con BITMAP y mostrar los item en un xBrowse

Code: Select all

 REDEFINE GET oGet Var oDBF:ITEM ID 103 OF oDlg PICTURE "@!" BITMAP "BUSCAR";
         ACTION ( BuscaITEM(oGet,oDlg) )

....
FUNCTION BuscaITEM(oGet,oDlg)
  definir el xbrowse
Return Nil
 

Re: Se puede tener un Combobox, con esta condición ...

Posted: Sat Jul 04, 2020 3:56 am
by Patricio Avalos Aguirre
Hola yo utilizo dbcombo, eso si que tuve que hacer unos ajustes

Code: Select all

#xcommand REDEFINE DBCOMBO [ <oCbx> VAR ] <cVar> ;
             [ <items: ITEMS> <aItems> ] ;
             [ ID <nId> ] ;
             [ <dlg:OF,WINDOW,DIALOG> <oWnd> ] ;
             [ <help:HELPID, HELP ID> <nHelpId> ] ;
             [ ON CHANGE <uChange> ] ;
         [ CONDICION <uCondicion> ] ;
         [ FINCONDICION <uEndCondicion> ] ;
         [ FOR <uFor> ] ;
         [ <lnoblank: NOBLANK> ] ;
             [ VALID   <uValid> ] ;
             [ <color: COLOR,COLORS> <nClrText> [,<nClrBack>] ] ;
             [ <update: UPDATE> ] ;
             [ MESSAGE <cMsg> ] ;
             [ WHEN <uWhen> ] ;
             [ BITMAPS <acBitmaps> ] ;
             [ ON DRAWITEM <uBmpSelect> ] ;
             [ ALIAS <cAlias> ] ;
             [ ITEMFIELD <cFldItem> ] ;
             [ LISTFIELD <cFldList> ] ;
             [ <list: LIST, PROMPTS> <aList> ] ;
       => ;
          [ <oCbx> := ] TDBCombo():ReDefine( <nId>, bSETGET(<cVar>),;
             <aItems>, <oWnd>, <nHelpId>, <{uValid}>, [{|Self|<uChange>}],;
             <nClrText>, <nClrBack>, <cMsg>, <.update.>, <{uWhen}>,;
             <acBitmaps>, [{|nItem|<uBmpSelect>}], ;
             <cAlias>, <(cFldItem)>, <(cFldList)>, <aList>, <{uCondicion}>, <{uEndCondicion}>, <{uFor}>, <.lnoblank.> )
 

Code: Select all

REDEFINE DBCOMBO oCombo VAR dbPAR2:sucursal                                                        ;
    ID 21   OF oDlg UPDATE                                                                  ;
    ALIAS "TABLAS"                                                       ;
    ITEMFIELD "COD_TABLA"                                                   ;
    LISTFIELD "NOM_TABLA"                                                ;
    COLOR CLR_BLACK, RGB(255,255,200)                                               ;
    CONDICION ( Tablas->( OrdScope( 0, "SUC" ) ), Tablas->( OrdScope( 1, "SUC" ) ) ) ;
    FINCONDICION ( Tablas->( OrdScope( 0, NIL ) ), Tablas->( OrdScope( 1, NIL ) ) );
    FOR Tablas->cod_tabla <> "00000";
    ON CHANGE (dbPAr2:Seek( dbPAR2:Sucursal ), dbPAR2:Load(), oDlg:Update());
    NOBLANK