Page 1 of 1

xBrowse Multiselect == Twbrowse H.C.

Posted: Mon May 19, 2008 6:15 pm
by Ale SB
Necessito trabjar com el xBrowse == ao twbrowse de Hernan; explico:

Quero el xbrowse com MultiSelec e Bitmaps, assim:

Image

Mas, meu bitmap no esta ligado a nenhuno campo del DBF, es apenas um Bitmap, q basta uno click com el mouse para mudar el Bmp e selecionar el Linha.

E me retorna uno valor, para yo saber quais linhas estao selecionadas.

Es possible com xbrowse, isto ???

Es possible me apresentar uno exemplo simple ???

saludos Ale

Posted: Tue May 20, 2008 4:54 pm
by miragerr
Tambem gostaria de saber como fazer isso, uso a TSBROWSE, mais já estou mudando todos os MEUS BROWSEs para XBROWSE, e gostaria de ver esta possibilidade

Fico no aguardo

Posted: Tue May 20, 2008 5:43 pm
by Manuel Aranda
Con XBrowse se puede hacer. Os "entresaco" el código que utilizo. Al clickar
con el botón derecho del ratón el registro se vuelve de color amarillo y se activa
un icono a su izquierda. Igualmente el array aSeleccion contiene algunos datos del registro
y el array aSele contiene el número de registro

Saludos,
Manuel

Code: Select all

..................
STATIC aSeleccion,aSele
.................
Local oLbx
//
oLbx := TXBrowse():New(oDlg)
oLbx:CreateFromResource(200)
oLbx:nFreeze           := 4
oLbx:bClrStd := { || {CLR_BLACK,SelColor2(EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre,aSeleccion ),CLR_WHITE } }
//
   oCol := oLbx:AddCol()
   oCol:AddResource("LEVELB")
   oCol:AddResource("LEVELR")
   oCol:bBmpData   := { || IIF(ASCAN(aSeleccion,EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre)=0,1,2 ) }
   oCol:cHeader   := "S"
   AADD(aCols,1)
   //
   oCol := oLbx:AddCol()
   oCol:bStrData  := { || EMPRESAS->Numcliente}
   oCol:cHeader   := "Núm.")
   oCol:oDataFont := oFont1
   AADD(aCols,2)
   //
   oCol := oLbx:AddCol()
   oCol:bStrData  := { || SUBSTR(EMPRESAS->Nombre,1,35)}
   oCol:cHeader   := "  Nombre o razón social"
   oCol:oDataFont := oFont1
   AADD(aCols,3)
.....................................
.....................................
   //
   for nFor := 1 to len(aCols)
      oLbx:aCols[ nFor ]:blDClickData  := {|| (Empresas(oLbx,"Ver/Modificar datos",.F.,nSerie),oLbx:Refresh()) }
      oLbx:aCols[ nFor ]:bRClickData   := {|| (ESeleccionar(oLbx),oLbx:refresh(),IIF(LEN(aSeleccion) > 0,oBtn7:enable(),oBtn7:disable())   ) }
      oLbx:aCols[ nFor ]:bRClickHeader := {|r,c,f,o| NIL }
   next
   //

**********************************
STATIC FUNCTION ESELECCIONAR(oLbx)
**********************************
Local nPos
Local nPos2
     nPos := AScan(aSeleccion, EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre)
     nPos2:= AScan(aSele, EMPRESAS->(Recno()))
      //
      IF  nPos # 0                 // quita la marca si ya la tiene
          ADel(aSeleccion, nPos)
          ASize(aSeleccion, Len(aSeleccion)-1)
       ELSE
          AAdd(aSeleccion, EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre)  // pone la marca
      ENDIF
      //
      IF  nPos2 # 0                 // quita la marca si ya la tiene
          ADel(aSele, nPos)
          ASize(aSele, Len(aSele)-1)
       ELSE
          AAdd(aSele, EMPRESAS->(Recno()))  // pone la marca
      ENDIF
      //
RETURN NIL

*************************************
FUNCTION SELCOLOR2( cItem, aSeleccion )
*************************************

   local nColor := CLR_WHITE
   local nPos

     nPos := AScan(aSeleccion, cItem)
     //
      IF  nPos # 0
          cItem = aSeleccion [nPos]
          nColor = CLR_YELLOW
      ENDIF
     //
RETURN nColor

Las mismas funciones son válidas para un LISTBOX

Code: Select all


     REDEFINE LISTBOX oLbx ;
            FIELDS IIF(ASCAN(aSeleccion,EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre)=0," ",aLevel[ 2 ] ),;            
            " "+EMPRESAS->NumCliente+" ",;
            " "+EMPRESAS->Nombre; 
            FIELDSIZES 13,40,250;
            HEADERS "S"," Núm.","  Nombre o Razón Social");
            ID 200;          
            FONT oFont1;
            COLOR rgb(0,0,0),rgb(255,234,175);
            ON RIGHT CLICK (ESeleccionar(oLbx),oLbx:refresh(),IIF(LEN(aSeleccion) > 0,oBtn7:enable(),oBtn7:disable())   );
            ON LEFT DBLCLICK Empresas(oLbx,"Ver/Modificar datos",.F.,nSerie); // Al doble click se editar  el registro
            OF oDlg
            
     oLbx:nClrText     := { || SelColor(EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre,aSeleccion ) }
     oLbx:nClrPane     := { || SelColor3(EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre,aSeleccion ) }
     oLbx:nClrForeFocus:= { || SelColor2(EMPRESAS->NumCliente+"-"+EMPRESAS->Nombre,aSeleccion ) }          


Posted: Wed May 28, 2008 3:11 pm
by Ale SB
Gracias Manuel por el ejemplo, mas, ainda no estoy conseguindo montar el Prg.

Es possible postar uno ejemplo, na Pratica com uno DBF e uno EXE, para un mejor entendimento ???

Gracias pela ajuda.

Saludos Ale

Posted: Wed May 28, 2008 8:40 pm
by Manuel Aranda

Posted: Wed May 28, 2008 11:48 pm
by Ale SB
Perfect Manuel, Gracias,

Muito bom este ejemplo.

Saluds Ale

Posted: Thu May 29, 2008 7:32 am
by Otto
Hello Manuel,
Good sample - may I put your sample on:

http://fwcodesnips.com

Regards,
Otto

Re: xBrowse Multiselect == Twbrowse H.C.

Posted: Thu Jan 26, 2012 10:22 pm
by Manuel Aranda
Muy buenas a todos:

¿ Alguien conserva por ahí el fichero ejemplo.zip ?

Lo he perdido y me gustaría recuperarlo.

Gracias.