2 de mayo de 2014

Búsquedas mas claras

Código publicado en el Blog del filipino Jun Tangunan con el cual podemos realizar búsquedas mas claras en nuestras grillas.

A medida que escribimos un texto para buscar, se filtra y se colorea el texto coincidente en los cada registro de la grilla. Este efecto se logra con las propiedades DynamicForeColor y DynamicFontBold de cada columna



LOCAL oForm
oForm = NEWOBJECT("Form1")
oForm.SHOW
READ EVENTS
RETURN

DEFINE CLASS Form1 AS FORM
  HEIGHT = 390
  WIDTH = 770
  AUTOCENTER = .T.
  CAPTION = "Resultados de búsquedas claros"
  SHOWTIPS = .T.
  _cSearch = ""

  ADD OBJECT grid1 AS GRID WITH ;
    GRIDLINES = 0, HEIGHT = 328, LEFT = 10, TOP = 50, WIDTH = 750, ;
    GRIDLINES = 3, DELETEMARK = .F., GRIDLINECOLOR = RGB(192,192,192) ,;
    FONTNAME = "Tahoma", FONTSIZE = 8, READONLY = .T., ANCHOR = 15

  ADD OBJECT label1 AS LABEL WITH ;
    TOP = 15, LEFT = 10, ;
    CAPTION = "Buscar", BACKSTYLE = 0

  ADD OBJECT Text1 AS TEXTBOX WITH ;
    TOP = 10,LEFT = 55, HEIGHT = 23,WIDTH = 300, VALUE = "", ;
    TOOLTIPTEXT = "Comience a escribir para buscar los registros coincidentes. " + ;
    "Doble clic para borrar la búsqueda"

  PROCEDURE LOAD
    SET TALK OFF
    SET SAFETY OFF
    CLOSE DATABASES ALL
    SELECT company, contact, TITLE ;
      FROM (HOME(2)+"data\customer") ;
      WHERE .F. ;
      INTO CURSOR junk1 READWRITE
  ENDPROC

  PROCEDURE grid1.INIT
    WITH THIS
      .RECORDSOURCETYPE = 6
      .RECORDSOURCE = "junk1"
      .Column1.DYNAMICFORECOLOR = "IIF(thisform._cSearch $ UPPER(company),RGB(220,0,0),RGB(0,0,0))"
      .Column2.DYNAMICFORECOLOR = "IIF(thisform._cSearch $ UPPER(contact),RGB(220,0,0),RGB(0,0,0))"
      .Column3.DYNAMICFORECOLOR = "IIF(thisform._cSearch $ UPPER(title),RGB(220,0,0),RGB(0,0,0))"
      .Column1.DYNAMICFONTBOLD = "IIF(thisform._cSearch $ UPPER(company),.T.,.F.)"
      .Column2.DYNAMICFONTBOLD = "IIF(thisform._cSearch $ UPPER(contact),.T.,.F.)"
      .Column3.DYNAMICFONTBOLD = "IIF(thisform._cSearch $ UPPER(title),.T.,.F.)"
    ENDWITH
  ENDPROC

  PROCEDURE Text1.DBLCLICK
    THIS.VALUE = ""
    ZAP IN junk1
    THISFORM.grid1.REFRESH
  ENDPROC

  PROCEDURE Text1.INTERACTIVECHANGE
    LOCAL lcSearch
    lcSearch = UPPER(ALLTRIM(THIS.VALUE))
    THISFORM._cSearch = m.lcSearch

    SELECT company, contact, TITLE ;
      FROM HOME(2)+"data\customer" ;
      WHERE UPPER(cust_id+company+contact+TITLE) LIKE "%"+m.lcSearch+"%" ;
      INTO CURSOR junk2 NOFILTER

    SELECT junk1
    ZAP IN junk1
    APPEND FROM DBF("Junk2")
    GO TOP
    THISFORM.grid1.REFRESH
  ENDPROC

  PROCEDURE DESTROY
    CLEAR EVENTS
  ENDPROC
ENDDEFINE

Fuente: Sandstorm's Blog (Jun Tangunan, Cabanatuan, Philippines) 20 jun 2012