Tengo un dialogo escrito en PHP, que cuando en una población escribo unos cuantos caracteres, compara con una BD de poblaciones, y si encuentra esos caracteres en el nombre de la poblacion, me ofrece todos los resultados posibles, aqui muestro el video:
Y me gustaria hacer esto en un xbrowse
hacer esa búsqueda en la columna Poblacion.
Esto lo tengo hecho en un Dialogo:
- Code: Select all Expand view RUN
Function Locmun(oDlga)
***********************************************************
local oDlg
local oSay,osay1,oboton,i
local oLbx,ogroup
local oRadmsenu
local oCurDedo
local oFont,oFont1
local cTexto:="Nombre"
local nOpcion:=1
local cTitulo
local obusco,oradmenu
local nClave
local titi:=.F.
local cBusco:=space(25)
local cindi:=munici->(Ordsetfocus())
local cSearch := ""
Publicas:Filtro:=.F.
select("munici")
munici->(Ordsetfocus("cnommun"))
DEFINE DIALOG oDlg RESOURCE "BUSQUEDAIN" BRUSH Publicas:oBrush1 TRANSPARENT Font Publicas:oWPpal:ofont
DEFINE CURSOR oCurDedo RESOURCE "Dedo"
DEFINE FONT oFont NAME "Ms Serif" SIZE 0, 16
DEFINE FONT oFont1 NAME "Ms Serif" SIZE 3, 20 BOLD ITALIC
REDEFINE GROUP oGroup ID 300 COLOR CLR_HBLUE, CLR_GRAY OF oDlg FONT Publicas:oWPpal:oFont TRANSPARENT
REDEFINE SAY oSay VAR cTexto ID 120 OF oDlg COLOR CLR_GREEN UPDATE FONT oFont1
REDEFINE BUTTON oboton ID 111 OF oDlg PROMPT "Pegar" ;
ACTION ( Publicas:ncCodmun:=munici->ccodmun,Publicas:ncnommun:=munici->cnommun ,;
Publicas:cControlSal:=Left(Publicas:cControlSal,1)+"*",oDlga:Update(),oDlg:End() )
REDEFINE BUTTON oboton ID 112 OF oDlg PROMPT "Alta" ;
ACTION (oDlg:Refresh())WHEN titi=.T.
REDEFINE BUTTON oboton ID 113 OF oDlg PROMPT "Zoom" ;
ACTION (oDlg:Refresh())WHEN titi=.T.
REDEFINE BUTTON oboton ID 114 OF oDlg PROMPT "Salir" ;
ACTION (oDlg:End())
REDEFINE RADIO oRadMenu VAR nOpcion ID 117,118 OF oDlg ;
ON CHANGE ( munici->(OrdSetFocus( iif(nOpcion=1,"ccodmun","cnommun"))),oLbx:Refresh(),cBusco:=iif(nOpcion=1," ",space(25)),cTexto:=iif(nOpcion=1,"Código","Nombre")+" Municipio",oDlg:Update(),oBusco:SetFocus() )
REDEFINE LISTBOX oLbx FIELDS Munici->ccodmun,;
Munici->cnommun ;
HEADER "Código","Nombre";
ALIAS "Munici";
CURSOR oCurDedo;
COLOR CLR_BLACK, CLR_WHITE ;
ON LEFT DBLCLICK ( Publicas:ncCodmun:=munici->ccodmun,Publicas:ncnommun:=munici->cnommun ,;
Publicas:cControlSal:=Left(Publicas:cControlSal,1)+"*",oDlga:Update(),oDlg:End() );
FONT oFont ID 110 OF oDlg
Munici->(dbGoTop())
REDEFINE SAY oBusco VAR cSearch ID 119 OF oDlg COLOR CLR_RED FONT oFont
oLbx:bKeyChar = { | nKey, nFlags | Search( nKey, @cSearch ), olBx:Refresh(),;
oBusco:Refresh() }
* oLbx:bUpdateBuffer:= {|| oBusco:Refresh() }
* oLbx:bSeek := {|| oLbx:DbfSeek(.T.) }
oLbx:nStyle:= nOr( WS_VSCROLL, WS_HSCROLL )
oLbx:nLineStyle := 1
oLbx:nClrBackHead := RGB(248,191,36)
oLbx:nClrPane:={||iIF((oLbx:cAlias)->(OrdKeyNo())%2==0,nRGB(245,219,175),nRGB(255,255,255))}
oLbx:bKeyDown := {|nKey| iif(nKey==13, (Publicas:ncCodmun:=munici->ccodmun,Publicas:ncnommun:=munici->cnommun ,;
Publicas:cControlSal:=Left(Publicas:cControlSal,1)+"*",oDlga:Update(),oDlg:End()), ),;
iif(nKey<>40, ( iif(isdigit(cSearch),munici->(Ordsetfocus("ccodmun")),munici->(Ordsetfocus("cnommun"))) ), ) }
ACTIVATE DIALOG oDlg CENTERED ON INIT (oLbx:SetFocus(), .f. )
munici->(OrdSetFocus(cindi))
RETURN NIL
Pero no me aclaro para hacerlo desde el xbrowse
Mi xbrowse es este:
- Code: Select all Expand view RUN
@ 30, 490 xbrowse oBrw3 OF oDlg ;
Datasource aData3;
AUTOCOLS LINES CELL FOOTERS NOBORDER SIZE -5,-30 PIXEL
AEval( oBrw3:aCols, { |o| o:oDataFont := oFont2} )
WITH OBJECT oBrw3:aCols[ 3 ]
:cHeader := "Consignatario"
:nWidth := 190
:oHeaderFont:=oFont1
END WITH
WITH OBJECT oBrw3:aCols[ 2 ]
:cHeader := "Domicilio"
:nWidth := 180
:oFooterFont:= Publicas:frosa
:bFooter := { || "SIN CONDUCTOR: "+str(publicas:nalba) }
:oHeaderFont:=oFont1
END WITH
WITH OBJECT oBrw3:aCols[ 1 ]
:cHeader := "Poblacion"
:nWidth := 150
:oFooterFont:= Publicas:frosa
:bFooter := { || "TOTAL: "+str(Manifiesto->(lastrec())) }
:oHeaderFont:=oFont1
:nEditType = EDIT_GET
:bOnPostEdit = { | oCol, xVal, nKey | If( nKey == VK_RETURN,Refresca1(xval,oBrw3),),;
refrescar(aAlias),xnuconduc:=oBrw1:aCols[4]:value,aData2:=creaelarray2(xnuconduc),aData3:=creaelarray3(xnuconduc),oBrw2:aArrayData:=aData2,oBrw3:aArrayData:=aData3,oBrw1:Refresh(),oBrw2:Refresh(),oBrw3:Refresh()}
END WITH
WITH OBJECT oBrw3:aCols[ 4 ]
:cHeader := "Bultos"
:nWidth := 40
:oHeaderFont:=oFont1
END WITH
WITH OBJECT oBrw3:aCols[ 5 ]
:cHeader := "Kilos"
:nWidth := 40
:oHeaderFont:=oFont1
END WITH
WITH OBJECT oBrw3:aCols[ 6 ]
:cHeader := "C"
:nWidth := 50
:oHeaderFont:=oFont1
END WITH
WITH OBJECT oBrw3:aCols[ 7 ]
:cHeader := "Orden"
:nWidth := 60
:oHeaderFont:=oFont1
END WITH
WITH OBJECT oBrw3:aCols[ 8 ]
:cHeader := "Albaran"
:nWidth := 60
:oHeaderFont:=oFont1
END WITH
WITH OBJECT oBrw3
:SetGroupHeader( "Entregas de otros conductores", 1, 5, oFont)
:nColDividerStyle := LINESTYLE_BLACK
:lColDividerComplete := .T.
:l2007 := .T.
:nHeadStrAligns:= AL_CENTER
:lRecordSelector := .F.
:lAllowColHiding := .F.
:lAllowColSwapping := .F.
:nStretchCol := 2
:bLDblClick:= {|| ponentrega(oBrw3,aAlias),xnuconduc:=oBrw1:aCols[4]:value,aData2:=creaelarray2(xnuconduc),aData3:=creaelarray3(xnuconduc),oBrw2:aArrayData:=aData2,oBrw3:aArrayData:=aData3,oBrw1:Refresh(),oBrw2:Refresh(),oBrw3:Refresh()}
:bClrStd := {|| If(oBrw3:aArrayData[oBrw3:nArrayAt,6]=space(5) , {CLR_BLACK,nRGB(250,219,216)}, {CLR_BLACK,If( oBrw3:KeyNo % 2 == 0, nRGB(242,247,252),nRGB(207,222,240) )}) }
:nMarqueeStyle := MARQSTYLE_HIGHLROWMS //6
:MakeTotals()
END WITH
oBrw3:CreateFromCode()
Esta basado en un array, y la busqueda la quiero hacer sobre una DBF que tiene todas las poblaciones de España.