Tengo estas dos funciones que me buscan una poblacion por el nombre, todo funciona bien, pero hay una cosa que me mosquea, y es que me he dado cuenta que evalúa dos veces la función ponciudad, por lo tanto me mustra dos veces el mensaje "Poblacion ya existía" , en su caso. la primera vez se muestra el mensaje con el xbrowse de fondo, y la segunda vez, solo el mensaje, ya se ha cerrado el browse
- Code: Select all Expand view
//----------------------
static Function BuscaPo(oBrw3,nRow,ncol,apoint)
Local oDlgB, oBrw, lOk:= .F.
local ocol,oFont2
DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-12 BOLD
DEFINE DIALOG oDlgB SIZE 200,250 PIXEL ; oDlgB:lHelpIcon:=.F.
@ 10,0 xBrowse oBrw Of oDlgB ALIAS "Munici" AUTOSORT SIZE -2,-2 PIXEL
oBrw:lheader:=.f.
oBrw:nMarqueeStyle:=5
oBrw:lHScroll:= .f.
oBrw:lVScroll:= .f.
oBrw:nRowDividerStyle:= 0
oBrw:lRecordSelector := .f.
oBrw:lIncrFilter:= .t.
oBrw:lSeekWild := .t.
oBrw:bLDblClick:={ || ( SysWait(.2),__KeyBoard(Chr(13)) ) }
oCol:=oBrw:AddCol()
oCol:bStrData := { || Munici->cnommun }
// oCol:cSortOrder:="cNommun"
oCol:nWidth:=200
oCol:oDataFont := oFont2
oBrw:CreateFromCode()
@ 1.5,3 SAY oBrw:oSeek PROMPT oBrw:cSeek SIZE 55,8 OF oDlgB PIXEL
oBrw:bKeyDown:= { | nKey | iif(nKey=VK_RETURN,(lOk:=.T.,oBrw:End(),oDlgB:End()), ) }
ACTIVATE DIALOG oDlgB centered ON INIT oDlgB:Move( aPoint[ 1 ], aPoint[ 2 ] );
VALID ( iif( lOk, (Ponciudad(oBrw3,oBrw)), ),.T. )
oDlgB:End()
oFont2:End()
Return Nil
//-------------
Static function ponciudad(oBrw3,oBrw)
local cruta:=Munici->Ruta
local nombreant:=oBrw3:aCols[1]:Value
local nombrenuevo:=oBrw:aCols[1]:value
if !errpobla->(Dbseek(nombreant))
if cruta = Space(2)
msgalert("No puedo agregar una poblacion que no tiene ruta"+chr(13)+;
"Antes de debes asignar una ruta a "+alltrim(nombrenuevo),"ATENCION")
else
While .not. errpobla->(Rlock()); end
errpobla->(Dbappend())
errpobla->Poblaant:=nombreant
errpobla->Poblacion:=nombrenuevo
errpobla->Ruta:=cruta
errpobla->(Dbunlock())
msginfo("Poblacion añadida")
endif
else
msgalert("Poblacion ya existia","Atencion")
endif
return nil
Estas funciones son llamadas desde aqui
- Code: Select all Expand view
DEFINE DIALOG oDlg FROM 5, 100 TO 45, 138; oDlg:lHelpIcon:=.F.
oDlg:cTitle:=titulo
@ 5, 5 Say oSay PROMPT "Poblaciones Para asociar (en Rojo)" OF oDlg PIXEL SIZE 600,15 COLOR nRGb( 251, 151, 71 ) Font Publicas:frosa
@ 12, 5 Say oSay PROMPT "En verde ya estan asociadas" OF oDlg PIXEL SIZE 400,15 COLOR nRGb( 251, 151, 71 ) Font Publicas:frosa
@ 25, 10 xbrowse oBrw3 OF oDlg ;
ALIAS cAlias1;
COLUMNS "Poblacion"," ";
AUTOCOLS LINES CELL NOBORDER SIZE -2,-30 PIXEL
WITH OBJECT oBrw3:aCols[ 1 ]
:cEditPicture := "@!"
:cHeader := "Poblacion"
:nWidth := 230
:AddResource('darrow')
:nBtnBmp := 1
:nEditType := 3
:bEditBlock := { |nRow,nCol,oCol| nRow := ( oBrw3:nRowSel * oBrw3:nRowHeight ) + oBrw3:HeaderHeight( .t. ) - 1,;
aPoint := ClientToScreen( oBrw3:hWnd, { nRow, oBrw3:SelectedCol():nDisplayCol } ),;
(BuscaPo(oBrw3,nRow,nCol,apoint))}
END WITH
WITH OBJECT oBrw3:aCols[ 2 ]
:cDataType := 'F'
:nDataBmpAlign := AL_CENTER
:nWidth := 20
:cHeader := "A"
:AddBitmap("bmpcrcred")
:AddBitmap("bmpcrcgreen")
:bBmpData := { || iif(errpobla->(Dbseek(oBrw3:aCols[1]:Value)),2,1 ) }
END WITH
WITH OBJECT oBrw3
:nColDividerStyle := LINESTYLE_BLACK
:lColDividerComplete := .T.
:l2007 := .T.
:lHscroll:=.F.
:nHeadStrAligns:= AL_CENTER
:lRecordSelector := .F.
:lAllowColHiding := .F.
:lAllowColSwapping := .F.
:nStretchCol := 1
:bClrStd := {|| {CLR_BLACK,If( oBrw3:KeyNo % 2 == 0, nRGB(242,247,252),nRGB(207,222,240) )} }
:nMarqueeStyle := MARQSTYLE_HIGHLROWMS //6
:MakeTotals()
END WITH
oBrw3:CreateFromCode()
@ 280,60 BTNBMP RESOURCE "salirsql" SIZE 20,20 OF oDlg NOBORDER ACTION (oDlg:End())
ACTIVATE DIALOG oDlg ON INIT (oDlg:Move(Publicas:owppal:nHeight()/10,(Publicas:oWPpal:nWidth()/2) - (oDlg:nWidth()/2) ),oBrw3:Setfocus())
Dbcloseall()
ferase(Publicas:cUnidad+Publicas:cSubd+"\Mani1.dbf")
ferase(curdrive()+":\"+curdir()+"\Munici.DBF")
endif
return nil