TLISTGET, con Recursos(WS)?

TLISTGET, con Recursos(WS)?

Postby karinha » Wed Oct 25, 2017 2:59 pm

Caros amigos, como puedo hacer esta pesquisa incremental con TLISTGET, usando GET del Workshop.exe?


Code: Select all  Expand view

#Include "FiveWin.Ch"
#include "xbrowse.ch"

REQUEST DBFCDX

Function Main()
   Local oDlg
   Local oGet, oGet1, oGet2
   local cVar := space( 20 ), cVar1 := space( 20 ), cVar2 := space( 20 )
   local a := {}

   RddSetDefault( "DBFCDX" )
   SET SOFTSEEK ON

   USE customer

   INDEX ON first TAG FIRST1 TO customer

   CLOSE

   USE customer INDEX customer NEW
   customer -> ( DBEVAL( {|| AADD( a, field -> street ) } ) )

   GO TOP

   // BROWSE()

   DEFINE DIALOG oDlg from 0,0 to 400,400 pixel
   
   oGet  := tListGet():new(15,15,{ | u | If( PCount()==0, cVar, cVar:= u ) },oDlg,120,12,"@!",,,,,,,.T.)

   oGet:aSource  := a
   oGet:bSearch  := {|i,e| AT( i, UPPER(e) ) > 0 }
   oGet:cSource  := 'ARRAY'
   oGet:lenDisplay := 15
   
   oGet1 := tListGet():new(29,15,{ | u | If( PCount()==0, cVar1, cVar1:= u ) },oDlg,120,12,"@!",,,,,,,.T.)
     
   oGet1:bSearch  := {|i,e| AT( i, UPPER(e) ) > 0 }
   oGet1:cSource  := 'DBF'
   oGet1:lenDisplay := 15
   oGet1:bBeforeFill := {|u| customer -> ( DBGOTOP() )  }
   oGet1:cAlias := "customer"
   oGet1:cfield := "city"

   oGet2 := tListGet():new(43,15,{ | u | If( PCount()==0, cVar2, cVar2:= u ) },oDlg,120,12,"@!",,,,,,,.T.)
     
   oGet2:bSearch  := {|i,e| i = LEFT( UPPER(e), LEN( i ) ) }
   oGet2:cSource  := 'DBF'
   oGet2:lenDisplay := 15
   oGet2:bBeforeFill := {|u| customer -> ( DBSEEK( u ) )  }
   oGet2:cAlias := "customer"
   oGet2:cfield := "last"
   //oGet2:bValid := {|| customer -> ( DBSEEK( oGet2:ctext() ) ), MSGINFO( customer -> first ), .T. }
   
   ACTIVATE DIALOG oDlg
 
   USE

return nil

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

CLASS tListGet FROM tGet

   DATA   oBrw, oWin, aData, lenBuffer, bSearch, aSource, cSource, cField, cAlias, lenDisplay, bBeforeFill, nAt

   METHOD new() CONSTRUCTOR
   METHOD redefine() CONSTRUCTOR
   METHOD FillList()
   METHOD Initiate()
   METHOD keyDown()
   METHOD keychar()

ENDCLASS

//---------------------------------------------------------------
METHOD New( nRow, nCol, bSetGet, oWnd, nWidth, nHeight, cPict, bValid,;
            nClrFore, nClrBack, oFont, lDesign, oCursor, lPixel, cMsg,;
            lUpdate, bWhen, lCenter, lRight, bChanged, lReadOnly,;
            lPassword, lNoBorder, nHelpId, lSpinner,;
            bUp, bDown, bMin, bMax, bAction, cBmpName, cVarName, cCueText ) CLASS tListGet 
//---------------------------------------------------------------

RETURN ::super:new( nRow, nCol, bSetGet, oWnd, nWidth, nHeight, cPict, bValid,;
            nClrFore, nClrBack, oFont, lDesign, oCursor, lPixel, cMsg,;
            lUpdate, bWhen, lCenter, lRight, bChanged, lReadOnly,;
            lPassword, lNoBorder, nHelpId, lSpinner,;
            bUp, bDown, bMin, bMax, bAction, cBmpName, cVarName, cCueText )
//---------------------------------------------------------------

METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, cPict, bValid, nClrFore,;
                 nClrBack, oFont, oCursor, cMsg, lUpdate, bWhen, bChanged,;
                 lReadOnly, lSpinner, bUp, bDown, bMin, bMax, bAction, cBmpName,;
                 cVarName, cCueText ) CLASS tListGet
//---------------------------------------------------------------

RETURN ::super:ReDefine( nId, bSetGet, oWnd, nHelpId, cPict, bValid, nClrFore,;
                 nClrBack, oFont, oCursor, cMsg, lUpdate, bWhen, bChanged,;
                 lReadOnly, lSpinner, bUp, bDown, bMin, bMax, bAction, cBmpName,;
                 cVarName, cCueText )
   
//---------------------------------------------------------------
METHOD Initiate( hDlg ) CLASS TListGet
//---------------------------------------------------------------
LOCAL oSelf := SELF, aRect

   ::super:Initiate( hDlg )

   ::lenBuffer          := LEN( cValToChar( Eval( ::bSetGet ) ) )
   ::aData              := ARRAY(1)
   DEFAULT ::lenDisplay := 5

   DEFINE DIALOG ::oWin OF oSelf:oWnd FROM 100, 100 TO 100, 100 + ::nWidth PIXEL STYLE nOR( WS_CHILD, WS_POPUP, WS_VISIBLE )

   @ 0, 0 XBROWSE ::oBrw OF oSelf:oWin ARRAY oSelf:aData COLUMNS 1 SIZEs ::nWidth

   ::oBrw:lHeader         := .F.
   ::oBrw:lRecordSelector := .F.
   //::oBrw:lFlatStyle      := .T.
   ::oBrw:nStyle    -= WS_BORDER
   ::oWin:oClient   := ::oBrw
   ::oBrw:bChange   := {|| ::cText( PADR( ::aData[ ::oBrw:nArrayAt ], ::lenBuffer, ' ' ) ), ::refresh(), ::SetPos( LEN( ALLTRIM( ::aData[ ::oBrw:nArrayAt ] ) ) + 1 ), ::setFocus() }
   ::oBrw:bLClicked := {|| ::oWin:hide() }
   ::oBrw:lHScroll  := .F.
   ::oBrw:lVScroll  := .F.
   ::oBrw:createFromCode()
 
   ::bPostKey     := {|oGet, cBuffer| ;
              IF( EMPTY( cBuffer ), ::oWin:hide(), NIL  ),;
                      oGet:aData[1] := cBuffer, ;
              oGet:Assign(), ;
              ::FillList() }
               
  ::oWin:hide()
  ::oWin:move(-1,-1)
 
  ACTIVATE DIALOG oSelf:oWin NOWAIT

  ::oWnd:bMoved := {|| ::oWin:hide() }

return nil

//---------------------------------------------------------------
METHOD FillList() CLASS TListGet
//---------------------------------------------------------------
LOCAL i := 1, aRect

       IF ::bBeforeFill != NIL
          EVAL( ::bBeforeFill, ::aData[1] )
       ENDIF

       ASIZE( ::aData, 1 )
       DO CASE
          CASE ::cSource = 'ARRAY'
               DO WHILE  LEN( ::aData ) < ::lenDisplay .AND. i <= LEN( ::aSource )
                  IF EVAL( ::bSearch, ALLTRIM(::aData[1]), ::aSource[i] )
                 AADD( ::aData, ::aSource[i] )
              ENDIF
                  i++
               ENDDO
          CASE ::cSource = 'DBF'
               DO WHILE  LEN( ::aData ) < ::lenDisplay .AND. ! (::cAlias)-> ( EOF() )
                  IF EVAL( ::bSearch, ALLTRIM(::aData[1]), (::cAlias)-> ( fieldGet( fieldPos( ::cField ) ) ) )
                 AADD( ::aData, (::cAlias)-> ( fieldGet( fieldPos( ::cField ) ) ) )
              ENDIF
                  (::cAlias) -> ( DBSKIP() )
               ENDDO
       ENDCASE
       
       ::oWin:SetSize( ::nWidth, ( LEN( ::aData ) ) * GetTextHeight( ::hWnd ) + LEN( ::aData ) )
       aRect := getWndRect( ::hWnd )
       ::oWin:move( aRect[1] + ::nHeight + 3, aRect[2] )
       ::oBrw:refresh()
       ::oWin:show()


RETURN NIL

//---------------------------------------------------------------
METHOD KeyDown( nKey, nFlags ) CLASS TListGet
//---------------------------------------------------------------

   IF ::oWin:lVisible
      DO CASE
         CASE nKey == VK_UP
          ::oBrw:GoUp()
          RETURN 0

         CASE nKey == VK_DOWN
          ::oBrw:GoDown()
          RETURN 0
      ENDCASE
   ENDIF

   IF nKey == VK_DELETE .or. nKey == VK_BACK
      Super:KeyDown( nKey, nFlags )
      ::aData[1] := ::cText()
      IF( EMPTY( ::aData[1] ), ::oWin:hide(), ::FillList() )
      RETURN 0
   ENDIF  

RETURN Super:KeyDown( nKey, nFlags )

//---------------------------------------------------------------
METHOD keychar( nKey, nFlags ) CLASS TListGet
//---------------------------------------------------------------

           IF nKey == VK_RETURN .AND. ::oWin:lVisible
          ::oWin:hide()
       ENDIF
       
RETURN super:keychar( nkey, nFlags )
 


Gracias, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7184
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: TLISTGET, con Recursos(WS)?

Postby karinha » Wed Oct 25, 2017 4:07 pm

Puede ser otro tipo de busqueda incremental en um GET tipo el de TLISTGET.PRG . Gracias, saludos.

Creo no me sirve, pués és fijo(fixed).

viewtopic.php?f=6&t=34192
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7184
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: TLISTGET, con Recursos(WS)?

Postby karinha » Wed Oct 25, 2017 5:58 pm

Cuasi esto, solo que necesito en un GET.

Image

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7184
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: TLISTGET, con Recursos(WS)?

Postby Marcelo Via Giglio » Thu Oct 26, 2017 8:36 pm

Hola,

la verdad la clase no está terminada, espero algún rato terminarla

Code: Select all  Expand view

#Include "FiveWin.Ch"
#include "xbrowse.ch"

REQUEST DBFCDX

FUNCTION main()
   desdecodigo()
   desderecurso()
RETURN NIL  
                 

Function desdecodigo()
   Local oDlg
   Local oGet, oGet1, oGet2
   local cVar := space( 20 ), cVar1 := space( 20 ), cVar2 := space( 20 )
   local a := {}

   RddSetDefault( "DBFCDX" )
   SET SOFTSEEK ON

   USE customer

   INDEX ON first TAG FIRST1 TO customer

   CLOSE

   USE customer INDEX customer NEW
   customer -> ( DBEVAL( {|| AADD( a, field -> street ) } ) )

   GO TOP

   // BROWSE()

   DEFINE DIALOG oDlg from 0,0 to 400,400 pixel
   
   oGet  := tListGet():new(15,15,{ | u | If( PCount()==0, cVar, cVar:= u ) },oDlg,120,12,"@!",,,,,,,.T.)

   oGet:aSource  := a
   oGet:bSearch  := {|i,e| AT( i, UPPER(e) ) > 0 }
   oGet:cSource  := 'ARRAY'
   oGet:lenDisplay := 15
   
   oGet1 := tListGet():new(29,15,{ | u | If( PCount()==0, cVar1, cVar1:= u ) },oDlg,120,12,"@!",,,,,,,.T.)
     
   oGet1:bSearch  := {|i,e| AT( i, UPPER(e) ) > 0 }
   oGet1:cSource  := 'DBF'
   oGet1:lenDisplay := 15
   oGet1:bBeforeFill := {|u| customer -> ( DBGOTOP() )  }
   oGet1:cAlias := "customer"
   oGet1:cfield := "city"

   oGet2 := tListGet():new(43,15,{ | u | If( PCount()==0, cVar2, cVar2:= u ) },oDlg,120,12,"@!",,,,,,,.T.)
     
   oGet2:bSearch  := {|i,e| i = LEFT( UPPER(e), LEN( i ) ) }
   oGet2:cSource  := 'DBF'
   oGet2:lenDisplay := 15
   oGet2:bBeforeFill := {|u| customer -> ( DBSEEK( u ) )  }
   oGet2:cAlias := "customer"
   oGet2:cfield := "last"
   //oGet2:bValid := {|| customer -> ( DBSEEK( oGet2:ctext() ) ), MSGINFO( customer -> first ), .T. }
   
   ACTIVATE DIALOG oDlg    

   USE

return nil

Function desdeRecurso()
   Local oDlg
   Local oGet, oGet1, oGet2
   local cVar := space( 20 ), cVar1 := space( 20 ), cVar2 := space( 20 )
   local a := {}

   RddSetDefault( "DBFCDX" )
   SET SOFTSEEK ON

   USE customer

   INDEX ON first TAG FIRST1 TO customer

   CLOSE

   USE customer INDEX customer NEW
   customer -> ( DBEVAL( {|| AADD( a, field -> street ) } ) )

   GO TOP

   // BROWSE()

   DEFINE DIALOG oDlg RESOURCE "LISTGET"
   
   oGet  := tListGet():redefine(100,{ | u | If( PCount()==0, cVar, cVar:= u ) },oDlg,,"@!")

   oGet:aSource  := a
   oGet:bSearch  := {|i,e| AT( i, UPPER(e) ) > 0 }
   oGet:cSource  := 'ARRAY'
   oGet:lenDisplay := 15
   
   oGet1 := tListGet():redefine(101,{ | u | If( PCount()==0, cVar1, cVar1:= u ) },oDlg,,"@!")
     
   oGet1:bSearch  := {|i,e| AT( i, UPPER(e) ) > 0 }
   oGet1:cSource  := 'DBF'
   oGet1:lenDisplay := 15
   oGet1:bBeforeFill := {|u| customer -> ( DBGOTOP() )  }
   oGet1:cAlias := "customer"
   oGet1:cfield := "city"

   oGet2 := tListGet():redefine(102,{ | u | If( PCount()==0, cVar2, cVar2:= u ) },oDlg,,"@!")
     
   oGet2:bSearch  := {|i,e| i = LEFT( UPPER(e), LEN( i ) ) }
   oGet2:cSource  := 'DBF'
   oGet2:lenDisplay := 15
   oGet2:bBeforeFill := {|u| customer -> ( DBSEEK( u ) )  }
   oGet2:cAlias := "customer"
   oGet2:cfield := "last"
   //oGet2:bValid := {|| customer -> ( DBSEEK( oGet2:ctext() ) ), MSGINFO( customer -> first ), .T. }
   
   ACTIVATE DIALOG oDlg
   


   USE

return nil


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

CLASS tListGet FROM tGet

   DATA   oBrw, oWin, aData, lenBuffer, bSearch, aSource, cSource, cField, cAlias, lenDisplay, bBeforeFill, nAt

   METHOD new() CONSTRUCTOR
   METHOD redefine() CONSTRUCTOR
   METHOD FillList()
   METHOD Initiate()
   METHOD keyDown()
   METHOD keychar()

ENDCLASS

//---------------------------------------------------------------
METHOD New( nRow, nCol, bSetGet, oWnd, nWidth, nHeight, cPict, bValid,;
            nClrFore, nClrBack, oFont, lDesign, oCursor, lPixel, cMsg,;
            lUpdate, bWhen, lCenter, lRight, bChanged, lReadOnly,;
            lPassword, lNoBorder, nHelpId, lSpinner,;
            bUp, bDown, bMin, bMax, bAction, cBmpName, cVarName, cCueText ) CLASS tListGet  
//---------------------------------------------------------------

RETURN ::super:new( nRow, nCol, bSetGet, oWnd, nWidth, nHeight, cPict, bValid,;
            nClrFore, nClrBack, oFont, lDesign, oCursor, lPixel, cMsg,;
            lUpdate, bWhen, lCenter, lRight, bChanged, lReadOnly,;
            lPassword, lNoBorder, nHelpId, lSpinner,;
            bUp, bDown, bMin, bMax, bAction, cBmpName, cVarName, cCueText )
//---------------------------------------------------------------

METHOD ReDefine( nId, bSetGet, oWnd, nHelpId, cPict, bValid, nClrFore,;
                 nClrBack, oFont, oCursor, cMsg, lUpdate, bWhen, bChanged,;
                 lReadOnly, lSpinner, bUp, bDown, bMin, bMax, bAction, cBmpName,;
                 cVarName, cCueText ) CLASS tListGet
//---------------------------------------------------------------

RETURN ::super:ReDefine( nId, bSetGet, oWnd, nHelpId, cPict, bValid, nClrFore,;
                 nClrBack, oFont, oCursor, cMsg, lUpdate, bWhen, bChanged,;
                 lReadOnly, lSpinner, bUp, bDown, bMin, bMax, bAction, cBmpName,;
                 cVarName, cCueText )
   
//---------------------------------------------------------------
METHOD Initiate( hDlg ) CLASS TListGet
//---------------------------------------------------------------
LOCAL oSelf := SELF, aRect

   ::super:Initiate( hDlg )

   ::lenBuffer          := LEN( cValToChar( Eval( ::bSetGet ) ) )
   ::aData              := ARRAY(1)
   DEFAULT ::lenDisplay := 5

   DEFINE DIALOG ::oWin OF oSelf:oWnd FROM 100, 100 TO 100, 100 + ::nWidth PIXEL STYLE nOR( WS_CHILD, WS_POPUP, WS_VISIBLE )

   @ 0, 0 XBROWSE ::oBrw OF oSelf:oWin ARRAY oSelf:aData COLUMNS 1 SIZEs ::nWidth

   ::oBrw:lHeader         := .F.
   ::oBrw:lRecordSelector := .F.
   //::oBrw:lFlatStyle      := .T.
   ::oBrw:nStyle    -= WS_BORDER
   ::oWin:oClient   := ::oBrw
   ::oBrw:bChange   := {|| ::cText( PADR( ::aData[ ::oBrw:nArrayAt ], ::lenBuffer, ' ' ) ), ::refresh(), ::SetPos( LEN( ALLTRIM( ::aData[ ::oBrw:nArrayAt ] ) ) + 1 ), ::setFocus() }
   ::oBrw:bLClicked := {|| ::oWin:hide() }
   ::oBrw:lHScroll  := .F.
   ::oBrw:lVScroll  := .F.
   ::oBrw:createFromCode()
 
   ::bPostKey     := {|oGet, cBuffer| ;
              IF( EMPTY( cBuffer ), ::oWin:hide(), NIL  ),;
                      oGet:aData[1] := cBuffer, ;
              oGet:Assign(), ;
              ::FillList() }
               
  ::oWin:hide()
  ::oWin:move(-1,-1)
 
  ACTIVATE DIALOG oSelf:oWin NOWAIT

  ::oWnd:bMoved := {|| ::oWin:hide() }

return nil

//---------------------------------------------------------------
METHOD FillList() CLASS TListGet
//---------------------------------------------------------------
LOCAL i := 1, aRect

       IF ::bBeforeFill != NIL
          EVAL( ::bBeforeFill, ::aData[1] )
       ENDIF

       ASIZE( ::aData, 1 )
       DO CASE
          CASE ::cSource = 'ARRAY'
               DO WHILE  LEN( ::aData ) < ::lenDisplay .AND. i <= LEN( ::aSource )
                  IF EVAL( ::bSearch, ALLTRIM(::aData[1]), ::aSource[i] )
                 AADD( ::aData, ::aSource[i] )
              ENDIF
                  i++
               ENDDO
          CASE ::cSource = 'DBF'
               DO WHILE  LEN( ::aData ) < ::lenDisplay .AND. ! (::cAlias)-> ( EOF() )
                  IF EVAL( ::bSearch, ALLTRIM(::aData[1]), (::cAlias)-> ( fieldGet( fieldPos( ::cField ) ) ) )
                 AADD( ::aData, (::cAlias)-> ( fieldGet( fieldPos( ::cField ) ) ) )
              ENDIF
                  (::cAlias) -> ( DBSKIP() )
               ENDDO
       ENDCASE
       
       ::oWin:SetSize( ::nWidth, ( LEN( ::aData ) ) * GetTextHeight( ::hWnd ) + LEN( ::aData ) )
       aRect := getWndRect( ::hWnd )
       ::oWin:move( aRect[1] + ::nHeight + 3, aRect[2] )
       ::oBrw:refresh()
       ::oWin:show()


RETURN NIL

//---------------------------------------------------------------
METHOD KeyDown( nKey, nFlags ) CLASS TListGet
//---------------------------------------------------------------

   IF ::oWin:lVisible
      DO CASE
         CASE nKey == VK_UP
          ::oBrw:GoUp()
          RETURN 0

         CASE nKey == VK_DOWN
          ::oBrw:GoDown()
          RETURN 0
      ENDCASE
   ENDIF

   IF nKey == VK_DELETE .or. nKey == VK_BACK
      Super:KeyDown( nKey, nFlags )
      ::aData[1] := ::cText()
      IF( EMPTY( ::aData[1] ), ::oWin:hide(), ::FillList() )
      RETURN 0
   ENDIF  

RETURN Super:KeyDown( nKey, nFlags )

//---------------------------------------------------------------
METHOD keychar( nKey, nFlags ) CLASS TListGet
//---------------------------------------------------------------

           IF nKey == VK_RETURN .AND. ::oWin:lVisible
          ::oWin:hide()
       ENDIF
       
RETURN super:keychar( nkey, nFlags )


el recurso

Code: Select all  Expand view


LISTGET DIALOG 0, 0, 293, 150
STYLE DS_MODALFRAME | DS_SETFONT | WS_CAPTION | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
{
    EDITTEXT        100, 11, 10, 147, 15, ES_AUTOHSCROLL
    EDITTEXT        101, 11, 30, 147, 15, ES_AUTOHSCROLL
    EDITTEXT        102, 11, 50, 147, 17, ES_AUTOHSCROLL
}
 


saludos

Marcelo Vía
Marcelo Via Giglio
 
Posts: 1050
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: TLISTGET, con Recursos(WS)?

Postby karinha » Fri Oct 27, 2017 12:36 pm

Gracias Marcelo Via. Many thanks!! Haciendo pruebas.

Image

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7184
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 15 guests