Está en la página 1de 58

14/6/2016

jgpg07:TrucosVisualFoxPro

Ms Siguienteblog

lunes,30deabrilde2007
TrucosVisualFoxPro
LOSTRUCOSAQUIMOSTRADOSHANSIDORECOPILADOS
DEVARIASPAGINASYNOSONPROPIEDADINTELECTUAL
DELAUTORDEESTEBLOG,HANSIDORECOPILADOSCONEL
FINDEQUESIRVANCOMOAYUDAAMUCHOS
PROGRAMADORES.
Mostrarunreportedentrodeunformulario
Excelentetrucoconelcualpodrsmostrartureporteenun
formulario.
oRep=Createobject("Form")
WithoRep
.Caption="TitulodelReporte"
.WindowState=2
.Show()
Endwith
ReportFormMiReporte.frxPreviewWindow(oRep.Name)
HacerquehableelPC
ExcelentetrucoqueutilizaelobjetoCOMSAPIquevieneconWinXP
elcual"pronuncia"loqueleescribas.
oVoz=CreateObject("SAPI.SpVoice")
oVoz.Speak("VisualfoxPro")
oVoz.Speak("Lomejor")

Crearblog Acceder

Suscribirsea
Entradas
Comentarios

JaimePeaDesarrollo
deSoftwarealamedida
desuEmpresa
@rrobaypunto
http://jgpg07.googlepages.com
http://www.jgpg07.tk

Acercadem
jgpg07
Vermiperfilcompleto

Buscaresteblog
Buscar

ExtraerinformacindelosMP3
QuieresconocerlainformacindelosarchivosMP3??...autor,
titulo,lbum,ao...
lnFile=Fopen(Getfile())
Fseek(lnFile,128,2)
lcTag=Fread(lnFile,128)
?"Titulo:",Strtran(Substr(lcTag,4,30),Chr(0))
?"Artista:",Strtran(Substr(lcTag,34,30),Chr(0))
?"Album:",Strtran(Substr(lcTag,64,30),Chr(0))
?"Ao:",Val(Substr(lcTag,94,4))
Fclose(lnFile)
Suprimirventana"Imprimiendo"enVFP8
UnodelasnuevascaractersticasincorporadasenVFP8,sideseas
puedesimpedirquesevealaventana"Imprimiendo"quesemuestra
cuandoejecutasunreporte.
http://jgpg07.blogspot.com/2007/04/foxpro26.html

1/58

14/6/2016

jgpg07:TrucosVisualFoxPro

ReportFormNombreReporteToPrinterPromptNODIALOGPreview
NombredeldominioenqueselogeoelPC
palign="justify">Unpequeotrucoparacuandoquierasdeterminar
enquedominioselogeoundeterminadoPC.
?GetEnv("USERDOMAIN")
Determinarsiunaunidadderedestadisponible
Estaeslaformamssencillaparadeterminarsiunequipodelared
estaencendidoosiestadisponibleunadeterminadaunidaddered.
Silaunidadestadisponiblesedevolver1ysilaunidadnoexisteo
estaapagadoelPCentoncesdevolver1
?DISKSPACE("\\NombreServidor\C\")
CompactarbasededatosdeAccessdesdeVFP
MuybuentrucoquepermitecompactarunabasededatosdeAccess
desdeVFP.
oJE=CreateObject("JRO.JetEngine")
oJE.CompactDatabase("DataSource="+"d:articulos.mdb","Data
Source="+"d:articulos1.mdb")
LosparmetrosparaelmtodoCompacDatabasesonlossiguientes
Primerparmetro
"DataSource="+"rutadelabasededatosacompactar"
Segundoparmetro
"DataSource="+"rutadelanuevabasededatoscompactada"
InsertandoregistrosenAccessdesdeVFP
Esteesunejemplobsicoperobuenodecomointeractuarconuna
basededatosdeAccessdesdeVFP.
cStrConn="DRIVER={MicrosoftAccessDriver(*.mdb)}"+
"Dbq=C:somedata.mdb"+
"Uid=usuario"+
"Pwd=password"
lnAccess=SQLSTRINGCONNECT(cStrConn)
IflnAccess>0
SQLEXEC(lnAccess,"INSERTINTONombreTabla(campo1,campo2)
VALUES(00001,485745)")
Else
=MessageBox("NofueposibleconectarsealaBasedeDatos")
EndIf
ImprimirelcontenidodeunRTF
ElRTFesuncontrolActiveXquepermitedarcaractersticasaltexto
alestilodeWord.Enelejemplosemuestracomoimprimirel
contenidodeesteActiveX.
ParaimprimirelcontenidodebesutilizarelmtodoSelPrintdel
controlRTF...
WithThisform.Rtf
.selstart=1
.sellength=len(.textrtf)
.selprint

Seguidores
Participarenestesitio
GoogleFriendConnect

Miembros(2)

Yaeresmiembro?Iniciarsesin

DesplegarelContenidodeunCombo
EnocasionesqueremosconocerelcontenidodeunComboBoXsin
http://jgpg07.blogspot.com/2007/04/foxpro26.html

2/58

14/6/2016

jgpg07:TrucosVisualFoxPro

hacerclickenl,solamentealoquelrecibeelenfoque.Estaesla
formamsfcildehacerlo.
KEYBOARD_{F4}_
EnestecasoagregamosestecdigoaleventoGOTFOCUS()y
cuandoelComborecibaelenfoqueentoncesestesedesplegara
mostrandolainformacincontenidasenl.
DesplegarunComboBoxalrecibirelEnfoqueII
Enrealidadmuchasvecesdeseamoshaceresto,perolopensamos
bastanteynoencontramoslaformadehacerlo.Porfinaquestasu
implementacin.
CreaunformularioyagrgaleunComboyunBotn.Alhacerclicken
elbotndebedesplegarseautomticamenteelCombo.
ProgramalosiguienteeneleventoGotfocusdelCombo
tColumna=THISFORM.Combo1.Left+THISFORM.Combo1.Width4
tFila=THISFORM.Combo1.Top+2
MOUSECLICKATtFila,tColumnaPIXELSWINDOW
(THISFORM.Name)
EneleventoClickdelbotnquecreastellamaaleventoSetfocus()
delcombo,As:
Thisform.combo1.Setfocus()
Quitaracentosdeunacadenasdecaracteres
Algunasveceslosacentossonalgomolestosynoscausan
inconvenientes,sobretodoalmomentoderealizarbsquedasdentro
tablas
lCadena="Elamoreselperdnmsfcil"
?CHRTRAN(lCadena,"","aeiouAEIOU")
Agregarimagenal_Screen
Enocasionesqueremosqueenelfondodenuestrasaplicaciones,es
decirenel_screenseveaellogodenuestroprogramaodela
empresa.Esteesunbuentrucoparapersonalizarlasaplicaciones.
_screen.addobject("oImg","image")
_screen.oImg.picture="c:imagen.jpg"
_screen.oImg.visible=.T.
_screen.oImg.stretch=1
_screen.oImg.width=800
_screen.oImg.height=600
QuitarbotonesdelabarradelPreview
Trucoindispensablesideseasquitaralgunosbotonesdelabarradel
previeweimpedirasqueseimprimadesdeahoseseleccione
algunaopcin.
Buenopararealizarestetrucoterecomiendocierrestodo.Ahorave
almenVER,luegoaToolBars(Barradeherramientas),luego
seleccionalabarraPrintPreview(VISTAPRELIMINAR)yahorahaz
clickenCustomize(PERSONALIZAR).Ahoralabarrateaparecer
deshabilitadadetrsdeventanadepersonalizacin,vealabarray
conclicksostenidoquitatodoslosbotonesquequierasylistola
configuracinseguardaraenFoxuser.dbf
Sideseasqueelusuariofinalnopuedaacceder
SolucionarproblemasdeMemoriaconWinXP
http://jgpg07.blogspot.com/2007/04/foxpro26.html

3/58

14/6/2016

jgpg07:TrucosVisualFoxPro

EvitarelerrordeMemoriaenXPalejecutarcomandosdeD.O.S
EditaelarchivoSYSTEM.INI,enlaseccin386ENHagregala
siguientelinea:
PerVMFiles=80
InvocarcuadrosdedialogodeWindows
ExisteunaformasencilladeinvocarcuadrosdedialogodeWindows,
talescomo:Guardar,Abrir,Fuentes,Color,Impresoras,Ayuda.
loComDialog=newobject("mscomdlg.commondialog")
locomdialog.ShowFont&&MostrarFuente
locomdialog.ShowPrinter()&&MostrarImpresora
locomdialog.ShowColor()&&MostrarColores
locomdialog.ShowSave()&&MostrarGuardar
loComDialog.ShowOpen&&MostrarAbrir
Unidadyseriallgicodelasunidadesdedisco
Deunaunidaddediscoesposibleobtener2seriales:eldefabricay
elqueleasignaelsistemaoperativoenesteejemplosedevuelveel
serialdelsistemaoperativo.
objWMI=Getobject("winmgmts:\\")
cCadWMI="Select*fromWin32_LogicalDisk"
oSistema=objWMI.ExecQuery(cCadWMI)
ForEachDiscoInoSistema
?"Unidad:"+Disco.Name+"Serial:"+Disco.VolumeSerialNumber
Next
Cancelartodoslostrabajosenimpresin
Aqutienesunejemplodecomocancelarlostrabajosqueseesten
imprimiendoutilizandoWMI.
objWMI=GetObject("winmgmts:\\")
cCadWMI="Select*fromWin32_PrinterWhereName='Canon
S200'"
objImp=objWMI.ExecQuery(cCadWMI)
ForEachobjPrinterinobjImp
objPrinter.CancelAllJobs()
Next
Informacindeltiempolocal
UtilizandoWMIparaconocerelda,mes,ao,dadelmes,nmero
desemanaenelmes,minutos,segundos....etc.
objWMI=GetObject("winmgmts:\\")
cCadWMI="Select*fromWin32_LocalTime"
oTime=objWMI.ExecQuery(cCadWMI)
ForEachoLocalinoTime
?"Da:"+Transform(oLocal.Day)
?"Dadelasemana:"+Transform(oLocal.DayOfWeek)
?"Hora:"+Transform(oLocal.Hour)
?"Minutos:"+Transform(oLocal.Minute)
?"Mes:"+Transform(oLocal.Month)
?"Segunds:"+Transform(oLocal.Second)
?"Semanaenelmes:"+Transform(oLocal.WeekInMonth)
http://jgpg07.blogspot.com/2007/04/foxpro26.html

4/58

14/6/2016

jgpg07:TrucosVisualFoxPro

?"Ao:"+Transform(oLocal.Year)
Next
Mandarunreporteaunaimpresoraespecifica
*BeginningofprogramforExample1*
*******************************************************
*ThisprogramassumesareportcalledTestwhichhasbeen
*savedwiththedefaultprinterinthePrintSetupdialog.
*LOCALlcPrinter
lcPrinter=''
lcPrinter=GETPRINTER()
IF!EMPTY(lcPrinter)
SETPRINTERTONAME(lcPrinter)
REPORTFORMTestTOPRINTERNOCONSOLE
ELSE
WAITWINDOW'PrintJobCancelled'TIME1
ENDIF*
IMPRIMIRENUNPUERTOUSB
PrintingtoUSBPrintersfromFoxPro2.6
Thereareseveralsolutions,dependingonyourconfiguration.
1.Ifyouareusingasharedprinteronanothercomputer,you
shouldn'thaveaproblem.Shareitfromtheothercomputer,and
pointtoitfromtheFoxPro2.6computer.
2.ToprinttoaUSBprinterontheFoxPro2.6computer.OnWindows
XPand2000,youcansharetheprinter,thenuseaNETUSE
commandtoredirectLPT1tothesharedprinter.Thisislikethe
Novellcapturesequences.
Installtheprinterandshareit.Youmayneedtosetpermissionsto
allowAuthenticatedUserstousetheprinter.
AddNETUSELPT1:\\CRAIG\USBPRINTERtothelogonscriptforthe
user'sprofile.
Forhelponlogonscripts,lookup"Toassignalogonscripttoa
profile"inXPHelp.
3.ToprinttoaUSBprinterontheFoxPro2.6computer.OnWindows
XP,youcanuseprinterpooling.
InstalltheUSBprinteronthecomputer.
InstallalocalprinteronLPT1(worksbest,orLPT2).Don'thaveXP
search,butpicktheprinterbybrand.Letitbesimilarorcommon
printeryourecognize.
NowselectprinterpropertiesforthenewLPT1(virtual)printer.On
theportstab,putchecksfortheLPT1(forthevirtualprinter)andthe
USBfortherealprinter.NowchooseEnableprinterpooling.TheDOS
driverswillprinttoLPT1.SinceXPpoolstheports,theoutputwill
thenbedirectedtotheUSBprinter.
Goodluck!
Ifthiswashelpful,sendme(craigr@computeru.com)anemail.
JoostDekkeroftheNetherlandssays"Itworks."
ComprimirconWinZIP
PuedesutilizarWinZIPparacomprimirarchivosdesdeVFP.
oZip=CreateObject("WScript.Shell")
oZip.Run("Winziparpexc:\archivo.zipc:\Dir_a_Comprimir\*.*",
0,.T.)
ReleaseoZip
http://jgpg07.blogspot.com/2007/04/foxpro26.html

5/58

14/6/2016

jgpg07:TrucosVisualFoxPro

oZip=Null
LeerarchivoINI
Unaalternativamuyfrecuenteparaalmacenaralgunosdatosdetu
aplicacinsonlosarchivoINIs...aqutieneslaformadeleerlas
entradasdeestosarchivos.
ParaelejemplocreaunarchivoINIllamado"archivo.ini"enc:y
agrgalelossiguientesdatos:
[RUTADB]
Directorio=C:MiProgramaDB
AhorasidesdeVFPquisiramosconocerelvaloralmacenadoenla
entradaDirectoriodeberamoshacerloas:
?LeerIni("RutaDB","Directorio","c:archivo.ini")
FunctionLeerIni(cSection,cEntry,cINIFile)
LOCALcDefault,cRetVal,nRetLen
cDefault=""
cRetVal=Space(255)
nRetLen=LEN(cRetVal)
DECLAREintegerGetPrivateProfileStringINWIN32API
STRINGcSection,StringcEntry,
STRINGcDefault,STRING@cRetVal,
INTEGERnRetLen,STRINGcINIFile
nRet=GetPrivateProfileString(cSection,cEntry,cDefault,
@cRetVal,nRetLen,cINIFile)
ReturnLeft(cRetVal,nRetLen)
EndFunc
Desplazamientocon"ENTER"engrid
Pordefectocuandopresionamos"Enter"enungridestesedesplaza
alasiguientecolumna,peropodemoshacerquesedesplaceal
siguienteregistro.
LoquedebeshaceresiraleventoKeyPressdelTextBoxvinculadoa
lacolumnayescribirelsiguientecdigo
IfnKeyCode=13
Nodefault
Keyboard"{DNARROW}"
EndIf
Devolvernmerocon2decimalessinaproximarlo
Enmuchasocasionestenemosunnmeroconmsde2decimalesy
queremosquesolonosdevuelva2,peroalhacerloelnmeroes
aproximado,locualqueremosevitar.
nNum1=9874.6935
nNum2=1235.05685
?Round(Floor(nNum1*100)/100,2)
?Round(Floor(nNum2*100)/100,2)
AbrirundocumentodeWordeimpedirqueloediten
EnesteejemploseabreundocumentodeWordatravsde
automatizacinyseimpidequeelusuariopuedarealizarcambios
sobrel.GraciasaGorka.
LocalloWordAsObject
loWord=Createobject("word.application")
loWord.Documents.Open(Getfile(),,1)
http://jgpg07.blogspot.com/2007/04/foxpro26.html

6/58

14/6/2016

jgpg07:TrucosVisualFoxPro

loWord.ActiveDocument.Protect(1)
loWord.ActiveDocument.PrintPreview
loWord.Visible=.T.
loWord.ActiveDocument.Close(.F.)
loWord.Quit
ReleaseloWord
Mostrarunreportedentrodeunformulario
Excelentetrucoconelcualpodrsmostrartureporteenun
formulario.
oRep=Createobject("Form")
WithoRep
.Caption="TitulodelReporte"
.WindowState=2
.Show()
Endwith
ReportFormMiReporte.frxPreviewWindow(oRep.Name)
Deshabilitaralgunascombinacionesdeteclas
Interesantetrucoconelcualpodrsdeshabilitaralgunas
combinacionesdeteclasyhastafuncionesdeVFP.
Elasterisco(*)permiteinhabilitaralgunascositasdeVFP....eneste
caso,nofuncionaranlascombinacionesdeteclasparacopiar
(CTRL+C),Pegar(CTRL+V).
ONKEYLABELCTRL+V*
ONKEYLABELCTRL+C*
Cuandoelusuariopresionedichascombinacionesdeteclasnoharn
nada.ydeigualformapuedeshacercontodaslasteclas.
Quieresquetuprogramanuncamandeunerror...mejordicho
quieresescondertuserrores?...Interesanteno?
OnError*
Ysideseasevitarqueelusuariosalgadelprograma..
OnShutdown*
Pruebaconotrasopcionesycomprobaraslotilqueeselasterisco(
*)
Anclarbarradelpreviewdelosreportes
Sideseasquecuandohacerunreportformlabarradelpreviewse
anclepuedesutilizarestecdigo.
ColocaelsiguientecdigoenelInitdelDataenvironment
Ifwexist("PrintPreview")&&OWEXIST(_VistaPreliminar_)siutilizas
VFPXESN.DLL
MoveWindow_PrintPreview_to10,10
MouseDblclickat11,11
Endif
AnclarlaBarradelPreviewdeReportes
CuandoejecutamosunreporteyestemuestralabarradePreview,
muchasvecesdeseamoscolocarlaancladaalrestodebarras.
Primeroejecutamoselreporteconlaclusulatradicional:
ReportFormnombrereporte.frxpreviewnowait
Ifwexist("PrintPreview")
movewindow_PrintPreview_to10,10
http://jgpg07.blogspot.com/2007/04/foxpro26.html

7/58

14/6/2016

jgpg07:TrucosVisualFoxPro

mousedblclickat11,11
Endif
Previewdelosreportesaunzoomespecifico
Nuestroclientespidenmuchascosas(pornodecirotracosa)aunos
lesgustaelpreviewal100%aotroslesgustaverloal50%.....aqu
estalaformadehacerlo.
AgregaelsiguientecdigoenelmtodoBeforeOPenTabledel
dataenvironment(entornodedatos)delreporte
ZOOMWINDOW"ReportDesigner"MAX
KEYBOARD"{F3}"&&75%
*KEYBOARD"{F3}{F3}"&&50%
*KEYBOARD"{F3}{F3}{F3}"&&25%
*KEYBOARD"{F3}{F3}{F3}{F3}"&&10%
LoquedebeshaceresenviarlepulsacionesdelatablaF3conla
funcinKeyboardcadaF3queenvesharqueelzoomdelpreview
seamspequeo
ComprimirydescomprimirconWinXP
Puedeincorporardentrodesusaplicacionesrutinasparacomprimiry
descomprimirarchivosatravsdeWinXPoWinME.
************************************
*COMPRIMIR
************************************
cNuevoZip="C:MiArchivo.Zip"
cOrigen="c:Directorio"
Strtofile(Chr(0x50)+Chr(0x4B)+Chr(0x05)+Chr(0x06)+Replicate(Chr(
0),18),cNuevoZip)
oShell=Createobject("Shell.Application")
ForEachoArchiInoShell.NameSpace(cOrigen).Items
oShell.NameSpace(cNuevoZip).CopyHere(oArchi)
Endfor
************************************
*DESCOMPRIMIR
************************************
cMiZip="C:MiArchivo.Zip"
cDirDesti="c:Directorio"
oShell=Createobject("Shell.Application")
ForEachoArchiInoShell.NameSpace(cMiZip).Items
oShell.NameSpace(cDirDesti).CopyHere(oArchi)
EndFor
Devolvernmerocon2decimalessinaproximarlo
Enmuchasocasionestenemosunnmeroconmsde2decimalesy
queremosquesolonosdevuelva2,peroalhacerloelnmeroes
aproximado,locualqueremosevitar.
nNum1=9874.6935
nNum2=1235.05685
?Round(Floor(nNum1*100)/100,2)
?Round(Floor(nNum2*100)/100,2)
CerrarelBotniniciodeWindows
http://jgpg07.blogspot.com/2007/04/foxpro26.html

8/58

14/6/2016

jgpg07:TrucosVisualFoxPro

Enocasionesnoqueremosqueelusuariotengaaccesoalbotninicio
deWindowsloquehacemosentoncesescerrarlo.
DeclareLongFindWindowIn"user32"
StringlpClassName,StringlpWindowName
DeclareLongSendMessageIn"user32"
LongHWnd,LongwMsg,LongwParam,LongLparam
DeclareLongFindWindowExIn"user32"
LonghWnd1,LonghWnd2,Stringlpsz1,Stringlpsz2
#DefineWM_CLOSE0x10
SendMessage(FindWindowEx(FindWindow("Shell_TrayWnd",""),0x0,
"Button",.Null.),WM_CLOSE,0,0)
Calcularelnmerodeldaenelao
Funcinquetedevuelvecuantosdashanpasandoenelaohasta
unafechadeterminada.
?DiaDelAo(Date())
?DiaDelAo(Date()10)
?DiaDelAo(Date()60)
FunctionDiaDelAo(dDate)
nDia=dDateDate(Year(Date()),1,1)+1
Return(nDia)
Endfunc
Determinarsiunaoesbisiesto
Nohacefaltaexplicar....je,je,je...
Existendiversasformasdeterminarlo...laprimera:
nAo=2004
?!Empty(Date(nAo,02,29))
nAo=2005
?!Empty(Date(nAo,02,29))
OtraformautilizandoMOD
?Mod(2004,4)
?Mod(2005,4)
GridyDynamicBackColor
UnexcelenteejemplodecomopodemosutilizarDynamicBackColor
paraestableceruncoloralaceldadependiendodeunacondicin.
Localo
o=Createobject("myform")
o.Show(1)
DefineClassmyformAsForm
DoCreate=.T.
DataSession=2
AutoCenter=.T.
Caption="TrabajandoconDyamicBackGround"
Width=600
Height=400
MinHeight=300
MinWidth=300
http://jgpg07.blogspot.com/2007/04/foxpro26.html

9/58

14/6/2016

jgpg07:TrucosVisualFoxPro

AddObjectgrid1AsGridWith
HEIGHT=This.Height,
WIDTH=This.Width,
DELETEMARK=.F.
ProcedureLoad
Select*From(_samples+"datacustomer")
OrderByMaxOrdAmtDesc
IntoCursorTmpCust
UseIn"customer"
EndProc
ProcedureInit
This.grid1.SetAll("dynamicbackcolor",
"Thisform.GetBackColor(allt(country))")
EndProc
ProcedureResize
This.grid1.Width=This.Width
This.grid1.Height=This.Height
EndProc
FunctionGetBackColor(cCountry)
LocalnColor
DoCase
CasecCountry=="Germany"
nColor=Rgb(255,255,255)
CasecCountry=="UK"
nColor=Rgb(224,224,0)
CasecCountry=="Sweden"
nColor=Rgb(224,224,160)
CasecCountry=="France"
nColor=Rgb(100,224,160)
CasecCountry=="Spain"
nColor=Rgb(100,224,160)
Otherwise
nColor=Rgb(224,100,224)
EndCase
ReturnnColor
EndFunc
EndDefine

EjecutarcomandosdeMSDOSsinquesemuestrelaventana
Excelente...PodrsejecutartuscomandodeMSDOSsinquese
muestrelaventananegradelDOS.
EnlavariablecComandopuedescolocarcualquierinstruccinvlida
deMSDOSqueluegoserejecutadaSideseasquelaventanasea
visiblesolocambiaelltimoparmetrodeafuncinShellExecutey
colcaloen1
DeclareIntegerShellExecuteInshell32.Dll
IntegerhndWin,StringcAction,StringcFile,
StringcParams,StringcDir,IntegernShow
http://jgpg07.blogspot.com/2007/04/foxpro26.html

10/58

14/6/2016

jgpg07:TrucosVisualFoxPro

cComando="Dirc:*.*"
cArchivo=GetEnv("TEMP")+""+Sys(2015)+".bat"
=StrToFile(cComando,cArchivo)
=ShellExecute(0,"Open",cArchivo,"","",0)

DeterminarelnmerodelneasdeunEditBox
MUYBUENO...Conestetrucopodrsdeterminarlenmerode
lneasqueocupaunadeterminadacadenadetextoenunEditBox.
nActSetMemo=Set("MemoWidth")
WithThisform.Edit1
SetMemowidthTo
Floor(.Width/(Fontmetric(6,.FontName,.FontSize)+1))
nLines=Memlines(.Value)
EndWith
?"Nmerodelneas..."+Transform(nLines)
SetMemowidthTonActSetMemo
Convertirsegundosadashorasminutossegundos
Cdigobastantetil....podemosconvertirunnmerodeterminado
desegundosendas,horas,minutos...
nSeg=276786
?Padl(Int(nSeg/86400),3)+"Das"
+Padl(Int((nSeg%86400)/3600),2,"0")+"Hrs"
+Padl(Int((nSeg%3600)/60),2,"0")+"Min"
+Padl(Int(nSeg%60),2,"0")+"Seg"
Waitwindowcentradoenlapantalla
Truquitosencilloperobueno.
lcMess="Mesajecentradoenlapantalla"
WaitlcMessWindowAtSrows()/2,(Scols()/2
(Len(lcMess)/2))Nowait
Dejarfijaprimeracolumnadeungrid
Esteesuntrucobastantesolicitado....ConVFP8osuperioryaes
posiblehacerlomsfcilmente.Aqutienes2formasdehacerlo.
EnelAfteRowColchangedelGriddigitalosiguiente:
LparametersnColIndex
Thisform.LockScreen=.T.
This.Columns(1).ColumnOrder=This.LeftColumn
Thisform.LockScreen=.T.
**YenelScrolleddelGridesto:
LparametersnDirection
Thisform.LockScreen=.T.
IfnDirection>3
This.Columns(1).ColumnOrder=This.LeftColumn
Endif
Thisform.LockScreen=.F.
OTRAFORMA
**EnelAfteRowColchangedelGriddigitalosiguiente:
nPos=This.ActiveColumnThis.RelativeColumn
http://jgpg07.blogspot.com/2007/04/foxpro26.html

11/58

14/6/2016

jgpg07:TrucosVisualFoxPro

IfnPos>0
This.COlumn1.ColumnOrder=nPos+1
Else
This.COlumn1.ColumnOrder=1
Endif
DiferenciaentredosDateTimeHorasMinutosSegundos
Estetrucoesbastantetil...Calcularelnmerodehoras,minutosy
segundosentredosvalorDateTime.
?HMSDif(Datetime(),Dtot(Date()10))
FunctionHMSDif(tDateTime1,tDateTime2)
LocalcRet,nS
cRet=""
If!Vartype(tDateTime1)="T"Or!Vartype(tDateTime2)="T"
cRet="E"
Endif
IfEmpty(cRet)
IftDateTime2>tDateTime1
nS=tDateTime2tDateTime1
Else
nS=tDateTime1tDateTime2
Endif
nS=Int(nS)
cTime=Transform(Int(nS/3600),"9999")+":"+
Transform(Mod(Int(nS/60),60),"99")+":"+
Transform(Mod(nS,60),"99")
ReturncTime
Else
=Messagebox("LosvaloresdebenserDateTime")
Return""
Endif
Endfunc
Sistemaoperativoqueutilizas
Existendiversasformasdeconocerquesistemaoperativoutilizas
estesunaformasencillaperobastantebuena.
cOsx=Os(1)
cSistema=""
DoCase
Case"6.00"$cOsx
cSistema="LongHorn"
Case"5.02"$cOsx
cSistema="2003"
Case"5.01"$cOsx
cSistema="XP"
Case"5.0"$cOsx
cSistema="2000"
Case"NT"$cOsx
cSistema="NT"
Case"4.1"$cOsx
cSistema="98"
http://jgpg07.blogspot.com/2007/04/foxpro26.html

12/58

14/6/2016

jgpg07:TrucosVisualFoxPro

Case"4.9"$cOsx
cSistema="ME"
Case"4.0"$cOsxOr"3.9"$cOsx
cSistema="95"
Case"3."$cOsx
cSistema="3.1"
Endcase
?"Windows"+cSistema
Obtenerlapartefraccionariadeunnumero
UntrucoEXCELENTEEEE....decomodeterminarlapartedecimalo
fraccionariadeunnmero.
?ABS(78.53)%1
?ABS(329.12)%1
Seleccionareltextodeuncontrol
Unaformasencilladeseleccionareltextodeuncontrol...
EneleventoGotFocus()delcontrolcolocaslosiguiente:
Keyboard'{END}'
Keyboard'{SHIFT+HOME}'
ApagarrpidamenteconWinXP
PuedeshacerquetuPCseapaguecondobleclic,paraellodebers
crearuniconoquetepermitahacerestafuncin,pararealizareste
trucosigueestospasos:
HazclicconelratnderechoenunazonalibredelEscritorioyluego
seleccionaNuevoyAccesodirecto.
Enlaventanadelaccesodirectodebesescribirshutdownst00y
pulsaelbotnSiguiente,despusleponeselnombrequequierasal
accesodirectoypinchaselbotnFinalizar.
Siquieresdejaralgodetiempoparacerrarlasaplicacionesdebes
ponerestoshutdown.exest12deestaformadejarsunmargen
prudencialde12segundosparaapagarelPC.
CalculartiempoquetardarealizarunaOperacin
Unsimpleperomuyinteresanteejemplodecomoydonde
implementarestastilesfunciones.
lnInicio=SECONDS()
fori=1to10000&&enesteejemplocuantotardarealizar
&&elcicloforde1hasta10000
endfor
?SECONDS()lnInicio
Textoparpadeante
Pararealizarelefectodebemoscrearunformulario,unaetiquetay
uncontroltimerlapropiedadIntervaldeesteselaestablecemosa
700(milisegundos).
Cambiamoslapropiedadcaptiondelaetiquetaaaltextoque
deseamos,luegoejecutamos.
http://jgpg07.blogspot.com/2007/04/foxpro26.html

13/58

14/6/2016

jgpg07:TrucosVisualFoxPro

EneleventoTimerdelControlTimerescribimos:
THISFORM.Label1.Visible=!THISFORM.Label1.Visible
ImpedirquecambienlaconfiguracindelPreviewdeReportes
SinoquieresquetemodifiquenlaconfiguracindelPreviewde
reportesdesdeabrirlatabladerecursosdeVFP(Foxuser.dbf)y
cambiaraverdadero(.t.)elcamposololectura(ReadOnly)dela
barra.
UseSYS(2005)Again
LocateForId=_TTOOLBAR_andname=_PrintPreview_
Replacereadonlywith.T.
Use
DeterminarlaImpresorapredeterminada
EnVFPlaimpresincausaalgunosmalestaresydebemosconocer
cualeslaimpresorapredeterminadatantoenWindowscomoen
VFP.
?SET("PRINTER",2)&&ImpresorapredeterminadadeWindows
?SET("PRINTER",3)&&ImpresorapredeterminadadeVFP
ImprimirpaginasdeterminadasdeunReporte
Cuandotenemosunreporteyqueremosimprimirunapagina
determinadaodesdeunapaginaaotrapodemosutilizarel
argumentoRANGE.Despusdelindicamoslapaginadeinicioy
finaldelreporteaimprimir.
Supongamosquetenemosunreportede20paginas,yopuedo
mandaraimprimirdelapagina10ala15delasiguientemanera
REPORTFORMnombreinformeRANGE10,15
CrystalReportyVFP
UnodelosgrandesproblemasdeVFPsonlosreportespero
podemosrealizarlosreportesenCristalReportyluegollamarlos
desdeVFP.Noquierodecirconestoqueseamejor,msfciloms
cmodosimplementeesotraformadehacerloytienemuchas
ventajas.
Enlosejemplosquedemuestroestoyutilizandolaversin8del
CristalReportdeSeagateperoconsideroquesedebecomportar
igualconlasdemsversiones.
Primeroveamoscomopuedoexportarunreporteaextensin.DOC
(Word)
oCristalReport=createobject("crystal.crpe.application")
oRepx=oCristalReport.OpenReport("C:eporteventas.RPT")
oRepx.ExportOptions.FormatType=14&&FormatodeWord
oRepx.ExportOptions.DiskFileName="c:eporteventasdelmes.doc"
oRepx.ExportOptions.DestinationType=1&&TipodeDestinoa
guardar
oRepx.Export(.F.)&&NomuestraninguncuadrodeDialogo
releaseoRepx
releaseoCristalReport
Losotrosformatosenquepodemosguardarlosreportesson:
ExtensinFormatType
RTF4
EXCEL727o28
http://jgpg07.blogspot.com/2007/04/foxpro26.html

14/58

14/6/2016

jgpg07:TrucosVisualFoxPro

EXCEL829o30
Paraverenvistapreviaunreporte:
oCristalreport=createobject("crystal.crpe.application")
oRep=oCristalreport.OpenReport("C:eporteventas.RPT")
oRep.Preview
Paramandarloaimprimir
oCristalreport=createobject("crystal.crpe.application")
oRep=oCristalreport.OpenReport("C:eporteventas.RPT")
oRep.Printout(.F.)&&.F.nomuestracuadroparaconfigurar
impresora
CrystalReportyVFP
UnodelosgrandesproblemasdeVFPsonlosreportespero
podemosrealizarlosreportesenCristalReportyluegollamarlos
desdeVFP.Noquierodecirconestoqueseamejor,msfciloms
cmodosimplementeesotraformadehacerloytienemuchas
ventajas.
Enlosejemplosquedemuestroestoyutilizandolaversin8del
CristalReportdeSeagateperoconsideroquesedebecomportar
igualconlasdemsversiones.
Primeroveamoscomopuedoexportarunreporteaextensin.DOC
(Word)
oCristalReport=createobject("crystal.crpe.application")
oRepx=oCristalReport.OpenReport("C:eporteventas.RPT")
oRepx.ExportOptions.FormatType=14&&FormatodeWord
oRepx.ExportOptions.DiskFileName="c:eporteventasdelmes.doc"
oRepx.ExportOptions.DestinationType=1&&TipodeDestinoa
guardar
oRepx.Export(.F.)&&NomuestraninguncuadrodeDialogo
releaseoRepx
releaseoCristalReport
Losotrosformatosenquepodemosguardarlosreportesson:
ExtensinFormatType
RTF4
EXCEL727o28
EXCEL829o30
Paraverenvistapreviaunreporte:
oCristalreport=createobject("crystal.crpe.application")
oRep=oCristalreport.OpenReport("C:eporteventas.RPT")
oRep.Preview
Paramandarloaimprimir
oCristalreport=createobject("crystal.crpe.application")
oRep=oCristalreport.OpenReport("C:eporteventas.RPT")
oRep.Printout(.F.)&&.F.nomuestracuadroparaconfigurar
impresora
WaitWindowcentradoenlapantalla
PordefectoelmensajemostradoporWaitWindowsemuestraenla
partesuperiorderechadelapantalla,conestetrucosemuestra
centradoenlapantalla.
http://jgpg07.blogspot.com/2007/04/foxpro26.html

15/58

14/6/2016

jgpg07:TrucosVisualFoxPro

cMensage="Esteesunejemplodelmensaje"
_Screen.Scalemode=0
WaitWindowcMensageAtInt(_Screen.Height/2),
Int(_Screen.Width/2Len(cMensage)/2)
Cambiarpropiedadesdelosreportesdesdecdigo
Podemosmanipularlaspropiedadesdeunformulariodesdecdigo.
Comosabemosunreportenoesmsqueunatabladondese
almacenanlosobjetosylaspropiedadesdeestosqueluegoson
invocadosporelDataenvironment.
Buenoparacambiarlaspropiedadesdelosreportesdesdecdigo
debemosabrirelreportecomounatabla:
USEnombrereporte.frx
REPLACEfontfacewith"Verdana",fontsizeWITH10,fontstyleWITH
1FORobjtype=1
ConestoponemoscomopredeterminadolafuenteVerdanaa10
puntosynegrilla,sienfontstyleponemos0tendremosletranormal.
QuitarbotonesdelabarradelPreview
Trucoindispensablesideseasquitaralgunosbotonesdelabarradel
previeweimpedirasqueseimprimadesdeahoseseleccione
algunaopcin.
Buenopararealizarestetrucoterecomiendocierrestodo.Ahorave
almenVER,luegoaToolBars(Barradeherramientas),luego
seleccionalabarraPrintPreview(VISTAPRELIMINAR)yahorahaz
clickenCustomize(PERSONALIZAR).Ahoralabarrateaparecer
deshabilitadadetrsdeventanadepersonalizacin,vealabarray
conclicksostenidoquitatodoslosbotonesquequierasylistola
configuracinseguardaraenFoxuser.dbf
Sideseasqueelusuariofinalnopuedaaccederalosbotonesdebes
distribuirelarchivoFoxuser.dbfcontuproyecto.
SolucionarproblemasdeMemoriaconWinXP
EvitarelerrordeMemoriaenXPalejecutarcomandosdeD.O.S
EditaelarchivoSYSTEM.INI,enlaseccin386ENHagregala
siguientelinea:
PerVMFiles=80
ImpedirquecambieneltamaodelasColumnasdeunGrid
Siquierequenadiecambieeltamaodelascolumnasdeungrid,
puedeutilizarestaforma.
THISFORM.Grid1.SetAll("Resizable",.F.,"Column")
DeterminarelSerialdelDiscoconWSH
OtrodelostemasdebastanteconsultaescomoobtenerelSerialde
unDisco,estaformaesspersencillayconpococdigo.
oFS=CreateObject("scripting.filesystemobject")
?oFS.Drives("c").SerialNumber
InvocarcuadrosdedialogodeWindows
ExisteunaformasencilladeinvocarcuadrosdedialogodeWindows,
talescomo:Guardar,Abrir,Fuentes,Color,Impresoras,Ayuda.
http://jgpg07.blogspot.com/2007/04/foxpro26.html

16/58

14/6/2016

jgpg07:TrucosVisualFoxPro

loComDialog=newobject("mscomdlg.commondialog")
locomdialog.ShowFont&&MostrarFuente
locomdialog.ShowPrinter()&&MostrarImpresora
locomdialog.ShowColor()&&MostrarColores
locomdialog.ShowSave()&&MostrarGuardar
loComDialog.ShowOpen&&MostrarAbrir
Suprimircuadrodedilogo"Imprimiendo"conelAPI
CuandomandamosreportesalaImpresoraalgunasvecesqueremos
personalizarestaoperacinperosiemprenosmuestraslaventanita
"Imprimiendo".Estaeslaformadeomitiresaventana
DECLAREINTEGERGetDesktopWindowINWIN32API
DECLAREINTEGERLockWindowUpdateINWIN32APIINTEGER
lnHandle
hWin=GetDeskTopWindow()
LockWindowUpdate(hWin)&&Bloqueaactualizacindelapantalla
REPORTFORMNombreReporte.frxTOPRINTER
LockWindowUpdate(0)&&Noactualizalapantalla
Unidadyseriallgicodelasunidadesdedisco
Deunaunidaddediscoesposibleobtener2seriales:eldefabricay
elqueleasignaelsistemaoperativoenesteejemplosedevuelveel
serialdelsistemaoperativo.
objWMI=Getobject("winmgmts:\\")
cCadWMI="Select*fromWin32_LogicalDisk"
oSistema=objWMI.ExecQuery(cCadWMI)
ForEachDiscoInoSistema
?"Unidad:"+Disco.Name+"Serial:"+Disco.VolumeSerialNumber
Next
Numerodeseriedeldiscoduro
Unadelasformasmssencillasdeobtenerelserialdefabricadelas
unidadesdedisco.
objWMI=Getobject("winmgmts:\\")
cCadWMI="Select*fromWin32_PhysicalMedia"
oSistema=objWMI.ExecQuery(cCadWMI)
ForEachDiscoInoSistema
?"Serialdefabrica:"+Disco.SerialNumber
Next
Fechadeinstalacindelsistemaoperativo
UtilizandoWMIdesdeVFPparaconocerlafechadeinstalacindel
sistemaoperativo.
objWMI=Getobject("winmgmts:\\")
cCadWMI="Select*fromWin32_OperatingSystem"
objOper=objWMI.ExecQuery(cCadWMI)
http://jgpg07.blogspot.com/2007/04/foxpro26.html

17/58

14/6/2016

jgpg07:TrucosVisualFoxPro

ForEachoSysInobjOper
?oSys.InstallDate
Next
Establecerunaimpresorapordefecto
OtraformadeestablecerlaimpresorapordefectodeWindows...
estavezutilizandoWMI.
objWMI=GetObject("winmgmts:\\")
cCadWMI="Select*fromWin32_PrinterWhereName='Canon
S200'"
objImp=objWMI.ExecQuery(cCadWMI)
ForEachobjPrinterinobjImp
objPrinter.SetDefaultPrinter()
Next
Cancelartodoslostrabajosenimpresin
Aqutienesunejemplodecomocancelarlostrabajosqueseesten
imprimiendoutilizandoWMI.
objWMI=GetObject("winmgmts:\\")
cCadWMI="Select*fromWin32_PrinterWhereName='Canon
S200'"
objImp=objWMI.ExecQuery(cCadWMI)
ForEachobjPrinterinobjImp
objPrinter.CancelAllJobs()
Next
Velocidadytipodeprocesador
UtilizarWMIdesdeVFPparaobtenerlavelocidadytipode
procesadordelPC.
objWMI=GETOBJECT("winmgmts:\\")
colItems=objWMI.ExecQuery("Select*fromWin32_Processor",,48)
ForEachobjItemIncolItems
?objItem.Name
?objItem.CurrentClockSpeed
NEXT
P./Hayalgunaformadeimprimirlaspginas10y11deunReport
especificandoslo1011?
R./UsalaclausulaPROMPTdelaordenREPORTFORMparamostrar
eldilogodeimpresin.Aqusepuedesealarelrangodepginas
paraserimpresos
P./DequformapuedousarlateclaESCparasalirdeun
Formulario?
R./LamejorformaesponerlapropiedaCanceldelbotnde
comandosa.T..Estoseralaformamscorrectadetrabajaren
perfectaconsonanciaconeldiseodeInterfacesdewindows.Enel
eventoClick()deelbotndecomandosescribe:
Thisform.Release()
TambinsepodrausareleventoKeyPressdelformulariocon:
PROCEDUREKeyPress
LPARAMETERSnKeyCode,nShiftAltCtrl
http://jgpg07.blogspot.com/2007/04/foxpro26.html

18/58

14/6/2016

jgpg07:TrucosVisualFoxPro

IFnKeyCode=27
RELEASETHISFORM
ENDIF
ENDPROC
Gridmultiseleccin
Unadelaspreguntashabiltalesescomopodemoshacerparapoder
seleccionarmltiplesregistrosenungrid.
Enestecasoutilizamosuncheckboxparahacerlaseleccindelos
registros....
PublicoForm
oForm=Createobject("FrmGrid")
oForm.AddObject("Grid1","Grid")
WithoForm.Grid1
.ColumnCount=3
.Height=288
.Width=320
.Left=24
.Top=24
.Column1.Width=17
.Column1.Header1.Caption=""
.Column1.AddObject("Check1","CheckBox")
.Column1.Check1.Visible=.T.
.Column1.CurrentControl="Check1"
.Column1.Sparse=.F.
.Column2.Width=50
.Column2.Header1.Caption="Cdigo"
.Column3.Width=194
.Column3.Header1.Caption="Nombre"
.SetAll("DynamicBackColor","IIF(Ok,RGB(0,220,210),
RGB(255,255,255))","COLUMN")
.Visible=.T.
Endwith
oForm.Visible=.T.
DefineClassFrmGridAsForm
Top=0
Left=0
Height=334
Width=376
DoCreate=.T.
Caption="Gridmultiseleccin"
WindowType=1
WindowState=0
Name="FrmGrid"
ProcedureLoad
UseHome()+"SamplesDataemployee.dbf"
Select.F.AsOK,Emp_ID,Trim(Last_Name)+""+Trim(First_Name)

FromEmployeeIntoCursorEmpleadosReadwrite
EndProc
ProcedureUnload
UseInEmployee
EndProc
EndDefine
http://jgpg07.blogspot.com/2007/04/foxpro26.html

19/58

14/6/2016

jgpg07:TrucosVisualFoxPro

Sibienconlatecla[Esc]salesdelbrowse,debesdetenercuidado,
debidoaquedichateclacancelalaopcionquepuedasestar
ejecutando.terecomiendoporcuestiondidacticaqueutilicesmejor
lossiguienteritina:
OnKeyLabelEnterKeyboard"Ctrl+W"
*Rutinasdetubrowse
Browse
OnKeyLabelEnter
Nota:
esimportantequeluegodelarutinadetubrowseretorneslatecla
enterasuestadonatural
ParapodersalirdelbrowseusandolateclaENTER,puedesutilizarel
siguientecdigo:
*************************
*Primerodesconectamoslateclaescape.
SETESCAPEOFF
USE
*AhoracadavezquepresionesENTER,sercomopresionar
escape.
ONKEYLABELENTERKEYBOARD"{ESC}"
BROWSE
*DesconectamoslateclaENTER,paraquefuncionecomotal.
ONKEYLABELENTER
****************************
Esmuyimportanteque"desconectes",elENTER,puesdelocontrario
cadavezquepresionesenter,FOX"entiende"quehaspresionado
ESCAPE.
MostrarbarradeProgresoenunSelectSQL
Amuchoslesgustaramostrarunabarradeprogresoensus
consultasSelectSQLnoesmuybuenohacerlopuestoquealestar
activoelSetTalklasconsultastardaramuchomsperosianas
quieresutilizarla....
Parapoderverlabarralatabladebetenerbastantesregistros....
DefineWindowWinSQLFrom12,30To16,70
SHADOWColorScheme5DoubleNameloWind
ActiveWindowWinSQLNoshow
SetTalkWindowWinSQL
SetTalkOn
SetNotifyOn
Select*FromTabla
ReleaseWindowWinSQL
LlenarformulariosenpaginasdesdeVFP
Atravsdeautomatizacinpuedeslosformulariosdecapturade
datosdelaspaginaswebs...
Enesteejemplosemuestracomologearseenmisitiowebatravs
deVFPlasesincomousuariodebeestarcerradaparapoder
http://jgpg07.blogspot.com/2007/04/foxpro26.html

20/58

14/6/2016

jgpg07:TrucosVisualFoxPro

probarelejemplo.
oIE=Createobject("InternetExplorer.Application")
oIE.Navigate("http://www.davphantom.net")
DoWhile(oIE.Busy)
DoEvents
EndDo
oIE.Visible=.T.
oDoc=oIE.Document
oForm=oDoc.forms[0]
oForm.item[0].value="USUARIO"
oForm.item[1].value="CLAVE"
oForm.submit()
QuitarelmendeVFP
SiquieresquitarelmendeVFPpuedeshacerlodelasiguiente
forma...
SETSYSMENUTO
CerrarelBotniniciodeWindows
Enocasionesnoqueremosqueelusuariotengaaccesoalbotninicio
deWindowsloquehacemosentoncesescerrarlo.
DeclareLongFindWindowIn"user32"
StringlpClassName,StringlpWindowName
DeclareLongSendMessageIn"user32"
LongHWnd,LongwMsg,LongwParam,LongLparam
DeclareLongFindWindowExIn"user32"
LonghWnd1,LonghWnd2,Stringlpsz1,Stringlpsz2
#DefineWM_CLOSE0x10
SendMessage(FindWindowEx(FindWindow("Shell_TrayWnd",""),0x0,
"Button",.Null.),WM_CLOSE,0,0)
AbrirundocumentodeWordeimpedirqueloediten
EnesteejemploseabreundocumentodeWordatravsde
automatizacinyseimpidequeelusuariopuedarealizarcambios
sobrel.GraciasaGorka.
LocalloWordAsObject
loWord=Createobject("word.application")
loWord.Documents.Open(Getfile(),,1)
loWord.ActiveDocument.Protect(1)
loWord.ActiveDocument.PrintPreview
loWord.Visible=.T.
loWord.ActiveDocument.Close(.F.)
loWord.Quit
ReleaseloWord
GenerargraficaenExcelatravsdeautomatizacin
Muybuenoysencilloejemplodecomogenerargrficosdereasen
Excelatravsdeautomatizacin.
oExcel=Createobject("Excel.Application")
oExcel.Workbooks.Add
Fori=1To3
http://jgpg07.blogspot.com/2007/04/foxpro26.html

21/58

14/6/2016

jgpg07:TrucosVisualFoxPro

Forx=1To13
oExcel.Cells(i,x).Value=Ceil(Rand()*1000)
Next
Next
oExcel.Range("A1:M1A2:M2A3:M3").Select
oGraph=oExcel.Charts.Add()
WithoGraph
.Type=4101
.Legend.Clear
.Perspective=100
.Elevation=0
EndWith
oExcel.Visible=.T.
Buscarregistrosduplicadosenunatabla
Trucobsicoperobastantetil.
Enestecasodeterminadoslosregistrosduplicadosporuncampo
especifico
SelectCampoFromTablaGroupByCampoHavingCount(Campo)>1
Enestecasodeterminadoslosregistrosduplicadosportodoel
registro
SelectCampo1+Campo2+Campo3+Campo4AsXFromTabla
GroupByX
HavingCount(Campo1+Campo2+Campo3+Campo4)>1
Mostrarunreportedentrodeunformulario
Excelentetrucoconelcualpodrsmostrartureporteenun
formulario.
oRep=Createobject("Form")
WithoRep
.Caption="TitulodelReporte"
.WindowState=2
.Show()
Endwith
ReportFormMiReporte.frxPreviewWindow(oRep.Name)
PCsconectadosalaRed
ltimamenteseaconvertidoenunapreguntafrecuente...Puedes
conocerlosnombresdelosequiposeimpresorascompartidas.
Estotedevolverlosnombresdetodoslosequiposquese
encuentranenlaREDconelnombrequelepases..

ANetResources(APcs,"NOMBRERED",1)
Fori=1toAlen(APcs)
?APcs(i)
Next

http://jgpg07.blogspot.com/2007/04/foxpro26.html

22/58

14/6/2016

jgpg07:TrucosVisualFoxPro

Justificartextosenreportes
Truquitomuybuenoquepermitepoderjustificartextosenlos
reportesutilizandoelcontrolRTF.
Paraprobarelejemplocreaunreportellamadortfdemo.frxy
agrgaleuncontrolRTF,lecolocascomocontrolsourcectext.gTexty
lemarcaslaopcinquedice"Campogeneraldeunatabla"
LocalcStr
cStr="Notethatthereisalimitof32characters"+
"totalforthesumoftextbeforeandtext"+
"afterforsimplenumbering.Multilevelnumbering"+
"hasalimitof64characterstotalforthesum"+
"ofalllevels.NOTE:Thefilemusthavea"+
".RTFextensiontoworkproperly."+
"Notethatthereisalimitof32characters"+
"totalforthesumoftextbeforeandtext"+
"afterforsimplenumbering.Multilevelnumbering"+
"hasalimitof64characterstotalforthesum"+
"ofalllevels.NOTE:Thefilemusthavea"+
".RTFextensiontoworkproperly."
CreateCursorctext(lctextm,gTextg)
InsertIntoctext(lctext)Values(cStr)
_rtfFile="c:"+Sys(3)+".rtf"
Scan
SetTextmergeTo&_rtfFileNoshow
SetTextmergeOn
\{tf1ansiqj<>}
SetTextmergeTo
AppendGeneralgTextFrom&_rtfFileClass
"RICHTEXT.RICHTEXTCTRL.1"
EndScan
ReportFormrtfdemo.frxPreviewNoconsole

Rellenarconcerosalaizquierda
Otraformaderellenarconcerosalaizquierdaunacadena.Enel
ejemploquierorellenarconceroselnmero80...
?TRANSFORM(80,"@L99999999")
Elresultadosera00000080
DeterminarelnmerodelneasdeunEditBox
MUYBUENO...Conestetrucopodrsdeterminarlenmerode
lneasqueocupaunadeterminadacadenadetextoenunEditBox.
nActSetMemo=Set("MemoWidth")
WithThisform.Edit1
SetMemowidthTo
Floor(.Width/(Fontmetric(6,.FontName,.FontSize)+1))
nLines=Memlines(.Value)
EndWith
http://jgpg07.blogspot.com/2007/04/foxpro26.html

23/58

14/6/2016

jgpg07:TrucosVisualFoxPro

?"Nmerodelneas..."+Transform(nLines)
SetMemowidthTonActSetMemo
MessageboxporencimadetodaslasventanasdeWindows
GeneralmentelosMessageboxsolosemuestrandentrodel_Screen
deVFPperoexisteunvalornodocumentadoquehacequeel
MessageboxsemuestreencimadetodaslasventanasdeWindows.
nEstilo=4+32+4096&&elvalornodocumentadoes4096
MESSAGEBOX("ESTEESUNMESSAGEBOX",nEstilo,"DIEFERNTE")
CdigoESCparacortarelpapelenimpresorasEpson
Estetrucoteexplicacualeslasecuenciaescapequedebesenviara
laimpresoraEpson(TMU)paraquecorteelpapel.
SetConsoleOff
SetDeviceToPrinter
SetPrinterToNameNombreDeImpresora
SetPrintOn
???Chr(27)+"m"&&CortaelPapel
SetPrintOff
SetDeviceToScreen
SetPrinterTo
SetConsoleOn
Dejarfijaprimeracolumnadeungrid
Esteesuntrucobastantesolicitado....ConVFP8osuperioryaes
posiblehacerlomsfcilmente.Aqutienes2formasdehacerlo.
EnelAfteRowColchangedelGriddigitalosiguiente:
LparametersnColIndex
Thisform.LockScreen=.T.
This.Columns(1).ColumnOrder=This.LeftColumn
Thisform.LockScreen=.T.
**YenelScrolleddelGridesto:
LparametersnDirection
Thisform.LockScreen=.T.
IfnDirection>3
This.Columns(1).ColumnOrder=This.LeftColumn
Endif
Thisform.LockScreen=.F.
OTRAFORMA
**EnelAfteRowColchangedelGriddigitalosiguiente:
nPos=This.ActiveColumnThis.RelativeColumn
IfnPos>0
This.COlumn1.ColumnOrder=nPos+1
Else
This.COlumn1.ColumnOrder=1
Endif
ImprimirunarchivoPDF
EnmuchasocasionessenecesitaimprimirunarchivoPDF(Acrobat
Reader)ypensamosdiferentesformasdehacerlo....estaesunade
lasmssencillas.
ParaesoutilizamoslafuncinShellExecutedelAPIdeWindows.
DeclareIntegerShellExecuteInshell32.Dll
longHWnd,StringcOperation,
http://jgpg07.blogspot.com/2007/04/foxpro26.html

24/58

14/6/2016

jgpg07:TrucosVisualFoxPro

stringcFile,StringtcParam,
stringcDir,IntegernShow
cRutaPDF="C:Rutaarchivo.pdf"
ShellExecute(0,"print",cRutaPDF,"",Fullpath(""),0)
NombredeldominioenqueselogeoelPC
palign="justify">Unpequeotrucoparacuandoquierasdeterminar
enquedominioselogeoundeterminadoPC.
?GetEnv("USERDOMAIN")
ConectarseaunabasededatosdeSQLServer
Estaesotradelaspreguntasfrecuentes....aqutienesvarios
ejemplosdecomohacerlo.
cCadConnDSN="driver=SQL
Serverserver=tu_serveruid=sapwd=sa_pw"
O
cCadConnDSN="driver={SQL
Server}server=tu_serveruid=sapwd=sa_pw"
O
cCadConnDSN="DRIVER={SQLServer}"
+"SERVER=tu_server"
+"UID=nombre_usuario"
+"PWD=clave_pw"
+"DATABASE=PUBS"&&Nombredelabasededatos
+"WSID=nombre_usuario"
+"APP=__"
nHanConn=Sqlstringconnect(m.cCadConnDSN)
IfnHanConn>0
=MessageBox("ConectadoalabasededatosdeSQlServer")
Else
=MessageBox("ErroralconectarsealabasededatosdeSQlServer")
EndIf
AgregarimagenalScreencentrada
Esteesunantiguotrucoquetepermiteagregarunaimagenal
screendeVFPcentrada.Viejoperobueno.
@2.000,2.000Say"c:imagen.jpg"BitmapSTYLE"T"Center
Devolverelnombrefsicodelformularioactual
Enmuchasocasionessenecesarioconocerelnombredelformulario
queseestaejecutando.LafuncinSys(1271)haceexactamenteesto.
Creaunformularioyunbotnycolocaestecdigoeneleventoclick
delbotn.
cForm=SYS(1271,Thisform)
WaitwindowcForm
ImprimirelcontenidodeunRTF
http://jgpg07.blogspot.com/2007/04/foxpro26.html

25/58

14/6/2016

jgpg07:TrucosVisualFoxPro

ElRTFesuncontrolActiveXquepermitedarcaractersticasaltexto
alestilodeWord.Enelejemplosemuestracomoimprimirel
contenidodeesteActiveX.
ParaimprimirelcontenidodebesutilizarelmtodoSelPrintdel
controlRTF...
WithThisform.Rtf
.selstart=1
.sellength=len(.textrtf)
.selprint
ExportaraHTMLdeformasencilla
Estaesunadelasformasmssencillasdeexportarunatablaa
HTML...Enesteejemploserecorrenumerodecamposquetengala
tablayluegoeltotalderegistros...
Scan
ForlnField=1ToAfields(laFields)
\<>
Endfor
Endscan

SetTextmergeOff
SetTextmergeTo
Strtofile(lcHTML,"c:TablaExportada.htm")
DeterminarlaDireccinIPdelEquipo
UnaformadeconocerladireccinIPdelequipoesinvocandouna
funcinAPI,perocomentareotraformadehacerloyespasndoleel
parmetroalprogramaRUNdelDOS,elnicoinconvenienteesque
semostraralaventanadelDOS,peroesotambintienesoluciny
serexplicadaenlaseccindeAPIS
LocalF,X,Y,U,K
F=Sys(2023)+""+SubStr(Sys(2015),1,8)+".txt"
X=SubStr(sys(0),1,At("",Sys(0))1)
RunPING&X>&F
Y=FileToStr(F)
DeleteFile&F
U=At("[",Y)+1
K=At("]",Y)
?SubStr(Y,U,KU)
Loprimeroquerealizaestecdigoesdefiniralgunasvariables,luego
obtieneeldirectoriodearchivotemporalesygeneraunarchivonico.
Acontinuacinseobtieneinformacinsobrelaunidadderedyestas
valoresselepasancomoparmetroalprogramaPING.
CrystalReportyVFP
UnodelosgrandesproblemasdeVFPsonlosreportespero
podemosrealizarlosreportesenCristalReportyluegollamarlos
desdeVFP.Noquierodecirconestoqueseamejor,msfciloms
cmodosimplementeesotraformadehacerloytienemuchas
http://jgpg07.blogspot.com/2007/04/foxpro26.html

26/58

14/6/2016

jgpg07:TrucosVisualFoxPro

ventajas.
Enlosejemplosquedemuestroestoyutilizandolaversin8del
CristalReportdeSeagateperoconsideroquesedebecomportar
igualconlasdemsversiones.
Primeroveamoscomopuedoexportarunreporteaextensin.DOC
(Word)
oCristalReport=createobject("crystal.crpe.application")
oRepx=oCristalReport.OpenReport("C:eporteventas.RPT")
oRepx.ExportOptions.FormatType=14&&FormatodeWord
oRepx.ExportOptions.DiskFileName="c:eporteventasdelmes.doc"
oRepx.ExportOptions.DestinationType=1&&TipodeDestinoa
guardar
oRepx.Export(.F.)&&NomuestraninguncuadrodeDialogo
releaseoRepx
releaseoCristalReport
Losotrosformatosenquepodemosguardarlosreportesson:
ExtensinFormatType
RTF4
EXCEL727o28
EXCEL829o30
Paraverenvistapreviaunreporte:
oCristalreport=createobject("crystal.crpe.application")
oRep=oCristalreport.OpenReport("C:eporteventas.RPT")
oRep.Preview
Paramandarloaimprimir
oCristalreport=createobject("crystal.crpe.application")
oRep=oCristalreport.OpenReport("C:eporteventas.RPT")
oRep.Printout(.F.)&&.F.nomuestracuadroparaconfigurar
impresora
Quitaracentosdeunacadenasdecaracteres
Algunasveceslosacentossonalgomolestosynoscausan
inconvenientes,sobretodoalmomentoderealizarbsquedasdentro
tablas
lCadena="Elamoreselperdnmsfcil"
?CHRTRAN(lCadena,"","aeiouAEIOU")
Agregarceros(0)alaizquierdadeunnmero
Sideseasagregar0aunnmeroalaizquierdadeeste,puedes
haceresto.SeutilizamuchoenlageneracindeFactura.
LnVar=350&&Variableaagregar0
?PADL(lnVar,5,_0_)
&&elnmero5especificaelanchodelacadenadenmeros
Resultado
00350
InvocarcuadrosdedialogodeWindows
ExisteunaformasencilladeinvocarcuadrosdedialogodeWindows,
talescomo:Guardar,Abrir,Fuentes,Color,Impresoras,Ayuda.
http://jgpg07.blogspot.com/2007/04/foxpro26.html

27/58

14/6/2016

jgpg07:TrucosVisualFoxPro

loComDialog=newobject("mscomdlg.commondialog")
locomdialog.ShowFont&&MostrarFuente
locomdialog.ShowPrinter()&&MostrarImpresora
locomdialog.ShowColor()&&MostrarColores
locomdialog.ShowSave()&&MostrarGuardar
loComDialog.ShowOpen&&MostrarAbrir
diferenciaentrehoras
FUNTIONDifHoras
LparametersttIni,ttFin
Localln,lnDia,lnHor,lnMin,lnSeg
IfEmpty(ttFin)
ttFin=Datetime()
Endif
ln=ttFinttIni
lnSeg=Mod(ln,60)
ln=Int(ln/60)
lnMin=Mod(ln,60)
ln=Int(ln/60)
lnHor=Mod(ln,24)
lnDia=Int(ln/24)
Return
Transform(lnHor,"@L99")+":"+
Transform(lnMin,"@L99")
HolaAmigos:
LesescriboporquetengoelsiguienteproblemayquizsConozcanla
solucin
TengounaaplicacincompiladaconVfp8hiceuninstaladoryanda
muybienentodaslasredesendondelaheinstalado
salvoenunacondicin
CuandoelclienteesunWinXPconSP2medaelsiguienteerror
R:\AdmCons\AdmCons.exe
Nosepudoiniciarlaaplicacinporquesuconfiguracinesincorrecta.
Reinstalarlaaplicacinpuedesolucionarelproblema.

Porsupuestoqueyalareinstale1000vecesde80manerasdistintas
MepasaconcualquierservidorWinMeWinXPetcperosiempre
cuandoelclienteesunXPconSP2
SielclienteesotracosaoWinXPsinSP2andafenmeno
TengotodaslasDllregistradasestatodoperfecto
EnlamismasituacinhehechoparaprobarEXEcompiladoconVFP6
http://jgpg07.blogspot.com/2007/04/foxpro26.html

28/58

14/6/2016

jgpg07:TrucosVisualFoxPro

yandasinproblema
TambinhedescubiertoqueejecutandoDo
R:\Admcons\Admcons.exedesdelaventanadecomandodeVFP8
andaperfectamente
EnlaempresatenemoslaaplicacincompiladaenVfp8y
funcionandoenvariosequiposconXPSP2yfuncionasin
problemas....
Soloquecomosonmuchoslospuestosqueconectanalservidor,en
vezdeinstalarlosRuntimedeVfoxacadapuestoloscolocamosen
elDirectorioRaizdelaaplicacin,deestaformanotuvimosque
registrarlosencadaequipo.
Losficherosquecopiamoseneldirectoriodelaaplicacinson:
gdiplus.dll
msvcr70.dll
vfp8r.dll
vfp8resn.dll
vfp8t.dll
Re:RESALTARUNACELDADEUNGRID....
Porsotero(#866)alas20:40del14022006
*Metodoiluminar,allamardesdeelAFTERROWCOLCHANGEdel
grid.
*Hayquepasarledondeestalaubicacindelgrid.
*Ejemplo:Thisform.Iluminar("Thisform.pgfPiso.Page6.grdVisitas",
"clientes")
*EnelformulariohayquecrearlaPROPIEDAD"HITROW"
LPARAMETERStcGrid,tcTabla
Thisform.HitRow=RECNO(tcTabla)
ThisForm.LockScreen=.T.
cDynamic='IIF(RECNO()=Thisform.HitRow,RGB(255,255,0),
RGB(255,255,255))'
&tcGrid..SetAll('DynamicBackColor',cDynamic,'Column')
&tcGrid..Refresh
ThisForm.LockScreen=.F.
***********************************************
SiestsenVFP9estolopuedessuprimiryponerenelGRIDla
propiedad
HighlightStylea2(Enablehighlightingforcurrentrowandpersist
whengridis
notthecurrentactivecontrol.)
Re:Problemaconla""
PorRamnRodrguez(#5229)alas04:50del18012006
Elproblemaesquesoncdigosdepginadiferentesentrelos
archivosdosyWindows,pruebaesto
x="Esperoquetengaselmsfelizdeloscumpleaos"
@1,1saycpconvert(1252,850,Allt(x))
http://jgpg07.blogspot.com/2007/04/foxpro26.html

29/58

14/6/2016

jgpg07:TrucosVisualFoxPro

Re:Problemaconla""
PorChristian(#4698)alas15:17del19012006
Hola,Almomentodeimprimir,haceunchrtranscdeladescripcion,
cambiandouncaracterporotro
EJECUTAROUTLOOKEXPRESSDESDEVFP
DECLAREINTEGERShellExecute
INSHELL32.DLL
INTEGERnWinHandle,
STRINGcOperation,
STRINGcFileName,
STRINGcParameters,
STRINGcDirectory,
INTEGERnShowWindow
ShellExecute(0,"Open","msimn.exe","","C:\ProgramFiles\Outlook
Express",1)

CAMBIARRESOLUCIONDELAPANTALLA
Cuandodiseamosnuestraaplicaciontenemoscomobaseuna
resolucionparanuestraaplicacion,normalmenteyoladiseoen800
x600,paragarantizarelbuenfuncionamientoyoleindicoalos
usuariossiestanusandolaconfiguracinbsicaaceptable.
Esperolespuedaayudar:
IFdimensiones()=.T.
=cambiar_resolucion(800,600)
ENDIF
FUNCTIONdimensiones
#DEFINEh_screenwidth0&&Screenwidth
#DEFINEh_screenheight1&&ScreenHEIGHT
LOCALlnalto_screen,lnancho_screen
DECLAREINTEGERGetSystemMetricsINWin32API
INTEGERnIndex
lnalto_screen=getsystemmetrics(h_screenheight)
lnancho_screen=getsystemmetrics(h_screenwidth)
IF(lnalto_screen<600ORlnancho_screen<800)
IFMESSAGEBOX("Esrecomendablequelaresolucin"+CHR(13)+
"desumonitorseade800x600"+CHR(13)+"Paraqueelsistemase
ejecuteadecuadamente"+CHR(13)+CHR(13)+
"Deseacambiarla?",4+32+0,"Verifiquepregunta")=6
RETURN.T.
ELSE
RETURN.F.
ENDIF
ELSE
RETURN.F.
ENDIF
#undefineh_screenwidth
#undefineh_screenheight
ENDFUNC
http://jgpg07.blogspot.com/2007/04/foxpro26.html

30/58

14/6/2016

jgpg07:TrucosVisualFoxPro

FUNCTIONcambiar_resolucion
LPARAMETERStnwidth,tnheight
LOCALlnwidth,lnheight,lnmodenum,lcdevmode,lnresp
lnmodenum=0
lcdevmode=REPLICATE(CHR(0),156)
lnwidth=IIF(EMPTY(tnwidth),800,tnwidth)
lnheight=IIF(EMPTY(tnheight),600,tnheight)
DECLAREINTEGEREnumDisplaySettingsINWin32APISTRING
lpszDeviceName,INTEGERiModeNum,STRING@lpDevMode
DECLAREINTEGERChangeDisplaySettingsINWin32APISTRING
@lpDevMode,INTEGERdwFlags
*!*Seusaobtenertodoslosmodosdisponibles
DOWHILEenumdisplaysettings(NULL,lnmodenum,@lcdevmode)<>
0
lnmodenum=lnmodenum+1
ENDDO
lcdevmode=STUFF(lcdevmode,41,4,long2str(1572864))
lcdevmode=STUFF(lcdevmode,109,4,long2str(tnwidth))&&Ancho
lcdevmode=STUFF(lcdevmode,113,4,long2str(tnheight))&&Alto
lnresp=changedisplaysettings(@lcdevmode,1)
IFlnresp=0
MESSAGEBOX("Laresolucindesumonitorhasido
cambiada"+CHR(13)+
"Ahorapodratrabajaradecuamente",0+48+0,"atencin")
ELSE
MESSAGEBOX("Nosepudocambiarlaresolucindesu
monitor",0+48+0,"atencin")
ENDIF
ENDFUNC
FUNCTIONlong2str
LPARAMETERSlnlongval
*!*Convierteunlongintegeraun4bytecharacterstring
*!*Sintaxis:LongToStr(lnLongVal)
*!*Valordevuelto:lcRetStr
*!*Argumentos:lnLongVal
*!*lnLongValespecificaellongintegeraconvertir
LOCALlncnt,lcretstr
lcretstr=''
FORlncnt=24TO0STEP8
lcretstr=CHR(INT(lnlongval/(2^lncnt)))+lcretstr
lnlongval=MOD(lnlongval,(2^lncnt))
NEXT
RETURNlcretstr
ENDFUNC
*****
Lesexplico,siudhacediseadounaaplicacinenunaresolucinde
800x600(enestecaso)podraadvertiralosusuariosquesumonitor
noestaconfiguradoadecuadementeyesteporsisolopodrasinsalir
delsistemacambiarlaresolucin.
INFORMACIONDEDRIVES
Quieresconocertodalainformacindetodaslasunidadesodrives
instaladosentusistema?BuenopuesestafuncinrelizadaconWSH
http://jgpg07.blogspot.com/2007/04/foxpro26.html

31/58

14/6/2016

jgpg07:TrucosVisualFoxPro

lohaceparati.
FunctionWSHListDrives
LOCALloFSO,loDrivesCol,loDrive,
llIsReadyDrive,lnDriveType,lcDriveType,lnWait
loFSO=CREATEOBJECT('Scripting.FileSystemObject')
loDrivesCol=loFSO.Drives
?"Elnumerodedrivesenelsistemason:"+
ALLTRIM(STR(loDrivesCol.Count))
FOREACHloDriveINloDrivesCol
?"Drive:"+loDrive.DriveLetter
lnDriveType=loDrive.DriveType
DOCASE
CASElnDriveType=1
lcDriveType=[removible]
CASElnDriveType=2
lcDriveType=[fijo]
CASElnDriveType=3
lcDriveType=[network]
CASElnDriveType=4
lcDriveType=[CDROM]
CASElnDriveType=5
lcDriveType=[RAMdisk]
ENDCASE
?"Eltipodedrivees:"+lcDriveType
llIsReadyDrive=loDrive.IsReady
?IIF(llIsReadyDrive=.T.,[ElDriveestalisto.],[Eldrivenoesta
listo.])
IFllIsReadyDrive
?"Espaciodisponible:"+ALLTRIM(STR(loDrive.AvailableSpace))+[
bytes.]
?"EspacioLibre:"+ALLTRIM(STR(loDrive.FreeSpace))+[bytes.]
?"Tamaototal:"+ALLTRIM(STR(loDrive.TotalSize))+[bytes.]
?"Ruta:"+loDrive.Path
?"Nombredelvolumen:"+loDrive.VolumeName
ENDIF
IFINLIST(lnDriveType,1,2,4)ANDllIsReadyDrive
?"Nmerodeserie:"+ALLTRIM(STR(loDrive.SerialNumber))
ENDIF
IFlnDriveType=3
?"Nombrecompartido:"+loDrive.ShareName
ELSE
IFlnDriveType=2
?"Nombrecompartido:"+RTRIM(LEFT(SYS(0),15))
ENDIF
ENDIF
WAIT
CLEAR
http://jgpg07.blogspot.com/2007/04/foxpro26.html

32/58

14/6/2016

jgpg07:TrucosVisualFoxPro

NEXT
Endfunc
CREARARCHIVODETEXTOCONFILESYSTEMS
FunctioncrearArchivo()
Localfso,fldr
fso=CreateObject("Scripting.FileSystemObject")
fldr=fso.CreateTextFile("C:prueba.txt")
Endfunc
BORRARCARPETACONFILESYSTEM
FunctionBorrarcarpeta()
Localfsoasobject
fso=CreateObject("Scripting.FileSystemObject")
fldr=fso.DeleteFolder("C:\borrame")
Endfunc
ABRIRCUADRODEDIALOGOCONECTARAREDOIMPRESORA
Estafuncinpermiteabrirelcuadrodedilogoconectaraunidadde
redoimpresora
#DEFINERESOURCETYPE_DISK1
#DEFINERESOURCETYPE_PRINT2
DeclareIntegerWNetConnectionDialogInWin32Api
IntegerHandle,IntegerResourceType
DeclareIntegerFindWindowInWin32Api
IntegerHandle,StringcTitle
*Paraconectaraunaunidaddered
WNetConnectionDialog(FindWindow(0,_Screen.Caption),
RESOURCETYPE_DISK)
*Paraconectaraunaimpresora
WNetConnectionDialog(FindWindow(0,_Screen.Caption),
RESOURCETYPE_PRINT)
HACERPARPADEARUNAVENTANATIPOMSN
EsteEjemplopermitehacerParpadearunFormdelamismamanera
quelohaceelMicrosoftMessenger,cuandollegaunnuevomensaje,
ynoestaactivalaventanaenesemomento,yqueparacuandose
Activa.
***OpcionesDeParpadeo
#DefineFlashW_Stop0&&ParaelParpadeodeunaventana.
#DefineFlashW_Caption0x1&&HaceParpadearElTitulodeUna
Ventana
#DefineFlashW_Tray0x2&&HaceParpadearlaVentanaenla
TaskBar
#DefineFlashW_All3&&ParpadeaElTitulodelaventanayenla
Taskbar
http://jgpg07.blogspot.com/2007/04/foxpro26.html

33/58

14/6/2016

jgpg07:TrucosVisualFoxPro

#DefineFlashW_Timer0x4&&ParpadeaInfinitamente,ohasta
EnviarUnFlashW_Stop
#DefineFlashW_TimerNoFg0xC&&ParpadeahastaqueSeActivela
Ventana
***DeclaraciondeLasApis
DeclareLongFlashWindowExIn"user32"String@CFlashWInfo
DeclareLongFindWindowInUser32StringcClass,StringcCaption
***IniciaElCodigo
LocalcFlashInfo
cFlashInfo=Space(20)
***CreamosLaEstructura
cFlashInfo=Num2dWord(20)+&&LongituddelaEstructura
Num2dWord(FindWindow(.Null.,'Calculadora'))+&&Handledela
Ventanaa"Flashear"
Num2dWord(FlashW_All+FlashW_TimerNoFg)+&&Opciones
Num2dWord(5)+&&CantidaddeVecesqueParpadeara(0
=Infinito)
Num2dWord(0)&&TiempoentreParpadeo(enMilisegundos,
0=Default)
***HacemosParpadearlaVentana.
FlashWindowEx(@cFlashInfo)
ProcedureNum2dWord
LparametertnNum
Localc0,c1,c2,c3
lcresult=Chr(0)+Chr(0)+Chr(0)+Chr(0)
IftnNum<(2^311)then
c3=Chr(Int(tnNum/(256^3)))
tnNum=Mod(tnNum,256^3)
c2=Chr(Int(tnNum/(256^2)))
tnNum=Mod(tnNum,256^2)
c1=Chr(Int(tnNum/256))
c0=Chr(Mod(tnNum,256))
lcresult=c0+c1+c2+c3
Endif
Returnlcresult
Endproc
CONOCERELTAMAODEUNARCHIVO
Estafuncionpermitesabereltamaodeunarchivoenespecifico(en
bytes),pormediodeapi.
#DefineOF_READ0x0
?GetInfoF("c:config.sys")
??"Bytes"
FunctionGetInfoF(cFile)
DeclareLong_lopenIn"kernel32"AslOpenStringlpPathName,Long
iReadWrite
DeclareLong_lcloseIn"kernel32"AslcloseLonghFile
DeclareLongGetFileSizeIn"kernel32"LonghFile,Long
@lpFileSizeHigh
LocalnArchivoAsLong,nLongitudAsLong
LocallpMaxAsLong
lpMax=1
http://jgpg07.blogspot.com/2007/04/foxpro26.html

34/58

14/6/2016

jgpg07:TrucosVisualFoxPro

nArchivo=lOpen(cFile,OF_READ)
nLongitud=GetFileSize(nArchivo,@lpMax)
lclose(nArchivo)
ReturnnLongitud
Endfunc
HACERCONEXINODBCDESDEVFP
AquiestaelcdigoparahacerlomedianteAPI.
DECLAREIntegerSQLConfigDataSourceINodbccp32.dll
Integer,Short,String@,String@

ODBC_ADD_SYS_DSN=1

lc_driver="MicrosoftVisualFoxProDriver"+CHR(0)
lc_dsn="dsn=BasesBodega1"+CHR(0)+
"BackgroundFetch=Yes"+CHR(0)+
"Description=descripciondelaconexion"+CHR(0)+"Exclusive=No"
+CHR(0)+
"SourceDb=
uta.dbc"+CHR(0)+
"Sourcetype=DBC"
IFSQLConfigDataSource(0,ODBC_ADD_SYS_DSN,@lc_driver,
@lc_dsn)=1
RETURN.T.&&OK
ENDIF
RETURN.F.&&error

*.lc_driver=DrivedeVisualFoxPro
*.lc_dsn=dsn=NombredelaConexion
*.BackgroudFetch=BusquedadedatossecundariosValoresYeso
No
*.Description=Descripciondedelaconexion
*.SourceDb=Mapeoodirecciondelatablaobasededatosa
conectar
*.SourceType=tipodeconexionvaloresDBCoDBFsifueratabla
libre
HACERPARPADEARLABARRADETITULODENUESTRA
http://jgpg07.blogspot.com/2007/04/foxpro26.html

35/58

14/6/2016

jgpg07:TrucosVisualFoxPro

APLICACIN
Esteefectoesmuycomunenlasaplicacioneshoyendiatal,como
MSN.quecuandonosescribenunmensaje,parpadeaeltitulodeuna
ventanaenlabarradetareas.
DesdeVFPpodemoshacerlo.Lafuncinquenospermitehacerlola
declaramosasi:
DeclareFlashWindowINuser32.dll
LONGhwnd,
LongbInvert
Cuandoquerramosquenuestraaplicacionparpadeeejecutamoslo
siguiente:Siqueremosqueel_screenParpadee
FlashWindow(application.hWnd,.t.)
Siqueremosqueelformlohaga
FlashWindow(thisform.HWnd,.t.)
NOTA:FlashWindowsoloharquelaventanaparpadeeunasola
vez,siqueremosqueelparpadeopersista,deberemoscolocarel
cdigoenunTimer,yeneleventoActivatedelForm,desactivarel
Timer,oqueelTimerloejecuteXveces.Elsegundoparmetronos
permitedecirlesiqueremosqueparpadeesiestaactivadaono.Al
pasarle.T.laventanaparpadearaunasolavez,esteonoactivada,si
lepasamos.F.parpadearasolosilaventanaestainactivayquedara
deotrocolorelbotonenlabarradetareas.EstecdigoestaenVFP
7.SiquierenejecutarladesdeVFP6deberanobtenerelhandledela
ventanaalaquelequieranaplicarelefecto.EnPortalFoxestala
funcinparahacerlo.CreoquesonestasAPIs:
GetWindow
FindWindow
OBTENERDIRECCIONIPCONWINSOCK
UnamaneradeconseguirladireccinIPlocalconWinsock.
*********************************************************
***
*
*Clase:GET_IPADDRESS
*
*DevuelveladireccinIPlocal
*
*Parametros:
*
*ninguno
*
*Ejemplos:
*
*ipdir=get_ipaddress()
*
*Retorno
*
*direccinIPocadenavaciasinoestinstaladoelWinSock
*
*Nota
*
*AdaptadodeJohnHarvey
*
http://jgpg07.blogspot.com/2007/04/foxpro26.html

36/58

14/6/2016

jgpg07:TrucosVisualFoxPro

*FechadeCreacin:29/01/2001PabloRoca
*UltimaModificacion:29/01/2001PabloRoca
*
*********************************************************
***
LOCALlcret
IPSocket=CreateObject("MSWinsock.Winsock")
IFTYPE('IPSocket')='O'
lcret=IPSocket.LocalIP
ELSE
MESSAGEBOX("Winsocknoestinstalado!")
lcret=""
ENDIF
RETURNlcret
CAMBIARRESOLUCIONDELAPANTALLA
*!*Cambialaresolucindelapantalla
*!*Sintaxis:ChangeRes(tnWidth,tnHeight)
*!*Valordevuelto:llRetVal
*!*Argumentos:tnWidth,tnHeight
*!*tnWidthespecificalanuevaanchuradelapantallaenpixels
*!*tnHeightespecificalanuevaalturadelapantallaenpixels
FUNCTIONChangeRes
LPARAMETERStnWidth,tnHeight
LOCALlnWidth,lnHeight,lnModeNum,lcDevMode
*!*Valores
lnModeNum=0
lcDevMode=REPLICATE(CHR(0),156)
lnWidth=IIF(EMPTY(tnWidth),800,tnWidth)
lnHeight=IIF(EMPTY(tnHeight),600,tnHeight)
*!*InstruccionesDECLAREDLLparacambiarresolucin
DECLAREINTEGEREnumDisplaySettingsINWin32APISTRING
lpszDeviceName,
INTEGERiModeNum,STRING@lpDevMode
DECLAREINTEGERChangeDisplaySettingsINWin32APISTRING
@lpDevMode,
INTEGERdwFlags
*!*Bucleparaobtenertodoslosmodosdisponibles
DOWHILEEnumDisplaySettings(NULL,lnModeNum,@lcDevMode)
<>0
lnModeNum=lnModeNum+1
ENDDO
*!*ConfigurarlastructuraDevMode
lcDevMode=STUFF(lcDevMode,41,4,LongToStr(1572864))
lcDevMode=STUFF(lcDevMode,109,4,LongToStr(tnWidth))&&
Ancho
lcDevMode=STUFF(lcDevMode,113,4,LongToStr(tnHeight))&&
Alto
*!*Cambiarresolucion
ChangeDisplaySettings(@lcDevMode,1)
ENDFUNC
*!*Convierteunlongintegeraun4bytecharacterstring
http://jgpg07.blogspot.com/2007/04/foxpro26.html

37/58

14/6/2016

jgpg07:TrucosVisualFoxPro

*!*Sintaxis:LongToStr(lnLongVal)
*!*Valordevuelto:lcRetStr
*!*Argumentos:lnLongVal
*!*lnLongValespecificaellongintegeraconvertir
FUNCTIONLongToStr
LPARAMETERSlnLongVal
LOCALlnCnt,lcRetStr
lcRetStr=''
FORlnCnt=24TO0STEP8
lcRetStr=CHR(INT(lnLongVal/(2^lnCnt)))+lcRetStr
lnLongVal=MOD(lnLongVal,(2^lnCnt))
NEXT
RETURNlcRetStr
ENDFUNC
OCULTABARRADETAREASDEWINDOWS
*!*Ocultalabarradetareasdewindows
*!*Sintaxis:HideTaskBar()
*!*Valordevuelto:
*!*Argumentos:
FUNCTIONHideTaskBar
*!*Constantesparaocultaromostrarlabarradetareasdewindows
*SgtelineanotificadaporHugoRanea20/06/2001
#DEFINETOGGLE_HIDEWINDOW128
LOCALlnHwnd
*!*Valores
lnHwnd=0
*!*InstruccionesDECLAREDLLparamanipularlabarradetareas
DECLAREINTEGERFindWindowAINWin32APISTRING
lpClassName,
STRINGlpWindowName
DECLAREINTEGERSetWindowPosINWin32APIINTEGERhwnd,
INTEGERhwndInsertAfter,INTEGERx,INTEGERy,INTEGERcx,
INTEGERcy,INTEGERwFlags
*!*Valores
lnHwnd=FindWindowA('Shell_traywnd','')
*!*Ocultarlabarradetareas
IFlnHwnd<>0
SetWindowPos(lnHwnd,0,0,0,0,0,TOGGLE_HIDEWINDOW)
ENDIF
ENDFUNC
MOSTRARBARRADETAREASDEWINDOWS
*!*Muestralabarradetareasdewindows
*!*Sintaxis:ShowTaskBar()
*!*Valordevuelto:
*!*Argumentos:FUNCTIONShowTaskBar
*!*Constantesparaocultaromostrarlabarradetareasdewindows
*SgtelineanotificadaporHugoRanea20/06/2001
#DEFINETOGGLE_UNHIDEWINDOW64
LOCALlnHwnd
*!*Valores
lnHwnd=0
http://jgpg07.blogspot.com/2007/04/foxpro26.html

38/58

14/6/2016

jgpg07:TrucosVisualFoxPro

*!*InstruccionesDECLAREDLLparamanipularlabarradetareas
DECLAREINTEGERFindWindowAINWin32APISTRING
lpClassName,STRINGlpWindowName
DECLAREINTEGERSetWindowPosINWin32APIINTEGERhwnd,
INTEGERhwndInsertAfter,INTEGERx,INTEGERy,INTEGERcx,
INTEGERcy,INTEGERwFlags
*!*Valores
lnHwnd=FindWindowA('Shell_traywnd','')
*!*Mostrarlabarradetareas
IFlnHwnd<>0
SetWindowPos(lnHwnd,0,0,0,0,0,TOGGLE_UNHIDEWINDOW)
ENDIF
ENDFUNC
EVITARQUEUNAAPLICACIONSECARGUEDOSVECES
Lamismafuncinquehemosvistoenelcasoanteriorpuedeser
usadaparaevitarqueunprogramaexternosecarguemsdeuna
vez.
UnejemplosencilloeseldelacalculadoradeWindows.
Imaginemosqueennuestraaplicacindemoslaposibilidadde
utilizar
lacalculadora.Pondramosunalneacomeesta:
RUN/NCALC.EXE
Perosiestalnealaejecutamosmsdeunavez,secargarsla
calcuadoraunayotravez.
*Antesdeactivarlacalculadora:
IFNOTF_ActivaWin("Calculadora")
*Lacalculadoranoestcargada:
RUN/NCALC.EXE
ENDIF
*YESTAESLAFUNCIONQUELOHACETODO:
*
FUNCTIONF_ActivaWin(cCaption)
*
LOCALnHWD
DECLAREINTEGERFindWindowINWIN32API
STRINGcNULL,
STRINGcWinName
DECLARESetForegroundWindowINWIN32API
INTEGERnHandle
DECLARESetActiveWindowINWIN32API
INTEGERnHandle
DECLAREShowWindowINWIN32API
INTEGERnHandle,
INTEGERnState
http://jgpg07.blogspot.com/2007/04/foxpro26.html

39/58

14/6/2016

jgpg07:TrucosVisualFoxPro

nHWD=FindWindow(0,cCaption)
IFnHWD>0
*VENTANAYAACTIVA
*LA"LLAMAMOS":
ShowWindow(nHWD,9)
*LAPONEMOSENCIMA
SetForegroundWindow(nHWD)
*LAACTIVAMOS
SetActiveWindow(nHWD)
RETURN.T.
ELSE
*VENTANANOACTIVA
RETURN.F.
ENDIF
ComosaberelnombredelPCyelrecursocompartidodeuna
conexindered.
*
FUNCTION_GetConnec(lcDrive)
*
*RetornaelnombredelaPCyrecursocompartido
*deunaconecciondered
*PARAMETROS:lcDrive
*USO:_GetConnec("K:")
*
DECLAREINTEGERWNetGetConnectionINWIN32API
STRINGlpLocalName,
STRING@lpRemoteName,
INTEGER@lpnLength
LOCALcRemoteName,nLength,lcRet,llRet
cRemoteName=SPACE(100)
nLength=100
llRet=WNetGetConnection(lcDrive,@cRemoteName,@nLength)
lcRet=LEFT(cRemoteName,AT(CHR(0),cRemoteName)1)
RETURNlcRet
ENDFUNC
EjemplodecomoagregarunmenenunformularioSDI(Interfazde
unsolodocumentoSingleDocumentInterface).
AgregarunmenenunformularioSDI
Introduccin
ContinuandoconeltemadeformulariosSDI(Interfazdeunsolo
documentoSingleDocumentInterface),estavezmostrarcomo
agregarunmenenunformulariodenivelsuperior.
Crearelformulariodenivelsuperior
Comoyavimosenunartculoanterior,paracrearunformularioSDI
enVisualFoxPro,debemoscrearunFormulariodenivelsuperior,
configurandolapropiedadShowWindow=2(Comoformulariode
nivelsuperior).Unformulariodenivelsuperioraparececomouna
ventanaindependientesobreelescritoriodeWindowsysemuestra
enlabarradetareasdeWindows.
http://jgpg07.blogspot.com/2007/04/foxpro26.html

40/58

14/6/2016

jgpg07:TrucosVisualFoxPro

Crearelmen
LacreacindeunmenSDIparaagregarenunformulariodenivel
superior,esigualquelacreacindecualquierotromen,solo
debemosmarcarlacasilladeverificacinFormulariodenivel
superiorenelcuadrodedialogoOpcionesgeneralesquesemuestra
alseleccionarlaopcinVer>Opcionesgeneralesdesdeel
diseadordemen,comolomuestralafigurasiguiente:
Cuandogeneramoselmenconestaopcinactivada,sedeber
llamaralmendesdeelmtodoInitdelformulariodenivelsuperior
conunasentenciacomolasiguiente
DOMiMenu.mprWITHTHISFORM,.T.
EditandoelarchivoMiMenu.mprpodemosverenlasprimeraslneas
comentadas,unaayudaconlasdistintasformasdellamaralmen
generado.
Cdigodeejemplo
Elsiguientecdigoesunejemploparamostrarunformulariodenivel
superiorconunmenincorporado.Paraejecutarloconunmen
personalizado,sedebehabilitarlalneaDOMiMenu.mprWITH
Thisform,.T.enelmtodoInitdelformulario,yquitarlallamadaal
procedimientoMiMenuEjemplo.
PUBLICgoMiForm
goMiForm=CREATEOBJECT("MiForm")
goMiForm.SHOW(1)
RETURN
*
*DefinicindeMiForm
*
DEFINECLASSMiFormASFORM
SHOWWINDOW=2
DOCREATE=.T.
AUTOCENTER=.T.
CAPTION="EjemplodemenenunformularioSDI"
NAME="MiForm"
PROCEDUREINIT
*DOMiMenu.mprWITHThisform,.T.
DOMiMenuEjemploWITHTHISFORM,.T.
ENDPROC
PROCEDUREDESTROY
RELEASEMENU(THIS.NAME)EXTENDED
ENDPROC
ENDDEFINE
*
*MiMenuEjemplo.spr
*
PROCEDUREMiMenuEjemplo
LPARAMETERSoFormRef,getMenuName,lUniquePopups
LOCALcMenuName,nTotPops,a_menupops,cTypeParm2,
cSaveFormName
IFTYPE("m.oFormRef")#"O"OR
LOWER(m.oFormRef.BASECLASS)#'form'OR
m.oFormRef.SHOWWINDOW#2
http://jgpg07.blogspot.com/2007/04/foxpro26.html

41/58

14/6/2016

jgpg07:TrucosVisualFoxPro

MESSAGEBOX([Estemensolopuedeserllamadoenunformulario
denivelsuperior])
RETURN
ENDIF
m.cTypeParm2=TYPE("m.getMenuName")
m.cMenuName=SYS(2015)
m.cSaveFormName=m.oFormRef.NAME
IFm.cTypeParm2="C"OR(m.cTypeParm2="L"AND
m.getMenuName)
m.oFormRef.NAME=m.cMenuName
ENDIF
IFm.cTypeParm2="C"AND!EMPTY(m.getMenuName)
m.cMenuName=m.getMenuName
ENDIF
DIMENSIONa_menupops[3]
IFTYPE("m.lUniquePopups")="L"ANDm.lUniquePopups
FORnTotPops=1TOALEN(a_menupops)
a_menupops[m.nTotPops]=SYS(2015)
ENDFOR
ELSE
a_menupops[1]="archivo"
a_menupops[2]="edicin"
a_menupops[3]="ayuda"
ENDIF
*
*Definicindelmen
*
DEFINEMENU(m.cMenuName)IN(m.oFormRef.NAME)BAR
DEFINEPAD_1mv0kg6reOF(m.cMenuName)PROMPT"\DEFINE
PAD_1mv0kg6rfOF(m.cMenuName)PROMPT"\DEFINEPAD
_1mv0kg6rgOF(m.cMenuName)PROMPT"A\ONPAD_1mv0kg6re
OF(m.cMenuName)ACTIVATEPOPUP(a_menupops[1])
ONPAD_1mv0kg6rfOF(m.cMenuName)ACTIVATEPOPUP
(a_menupops[2])
ONPAD_1mv0kg6rgOF(m.cMenuName)ACTIVATEPOPUP
(a_menupops[3])
DEFINEPOPUP(a_menupops[1])MARGINRELATIVESHADOW
COLORSCHEME4
DEFINEBAR1OF(a_menupops[1])PROMPT"\DEFINEBAR2OF
(a_menupops[1])PROMPT"\DEFINEBAR3OF(a_menupops[1])
PROMPT"\"
DEFINEBAR4OF(a_menupops[1])PROMPT"\DEFINEBAR5OF
(a_menupops[1])PROMPT"\DEFINEBAR6OF(a_menupops[1])
PROMPT"\DEFINEBAR7OF(a_menupops[1])PROMPT"\"
DEFINEBAR8OF(a_menupops[1])PROMPT"\ONSELECTIONBAR
8OF(a_menupops[1])DO_Salir
DEFINEPOPUP(a_menupops[2])MARGINRELATIVESHADOW
COLORSCHEME4
DEFINEBAR1OF(a_menupops[2])PROMPT"\DEFINEBAR2OF
(a_menupops[2])PROMPT"\"
DEFINEBAR3OF(a_menupops[2])PROMPT"Cor\DEFINEBAR4
OF(a_menupops[2])PROMPT"\DEFINEBAR5OF(a_menupops[2])
http://jgpg07.blogspot.com/2007/04/foxpro26.html

42/58

14/6/2016

jgpg07:TrucosVisualFoxPro

PROMPT"\
DEFINEPOPUP(a_menupops[3])MARGINRELATIVESHADOW
COLORSCHEME4
DEFINEBAR1OF(a_menupops[3])PROMPT"\DEFINEBAR2OF
(a_menupops[3])PROMPT"\"
DEFINEBAR3OF(a_menupops[3])PROMPT"Acerca\
ACTIVATEMENU(m.cMenuName)NOWAIT
IFm.cTypeParm2="C"
m.getMenuName=m.cMenuName
m.oFormRef.NAME=m.cSaveFormName
ENDIF
ENDPROC
PROCEDURE_Salir
_SCREEN.ACTIVEFORM.RELEASE
ENDPROC
Alejecutarelcdigoanterior,veremoselformularioSDIconelmen
comolomuestralasiguientefigura:
Comentarios
RecordarqueVisualFoxProtraeenlaaplicacin"Solution"un
ejemplosimilardondesemuestraunformularioSDI,enelcualse
agregaunmen,unabarradeherramientas,ysecreanventanas
secundarias.Paraverlaaplicacin"Solution"ejecute:
DO(HOME(2)+"Solution\Solution")
OdirectamentecorraelejemplodelformularioSDIejecutando:
DOFORM(HOME(2)+"\Solution\Forms\SDIForm.scx")
BuscartextoenunCuadrodeEdicion
Paraverelejemploejecuteelsiguientecdigo:
*Creounarchivodetexto
SETSAFETYOFF
LOCALlc
TEXTTOlcNOSHOW
Esteesuntextotomadodeunarchivode
texto,parabuscarunapalabrayremarcarla
silaencuentra.
Escribaenelcuadrodetextounapalabra
queseencuentreaquyhagaclickenel
botnBuscar.
VisualFoxPro.Nadacorrecomounzorro.
ENDTEXT
STRTOFILE(lc,"MiTxt.txt")
*Creoelformulario
PUBLICgoForm
goForm=CREATEOBJECT("Form1")
goForm.SHOW
DEFINECLASSForm1ASFORM
CAPTION="EjemplodebsquedaenunEditBox"
NAME="Form1"
ADDOBJECTText1ASTEXTBOXWITH
http://jgpg07.blogspot.com/2007/04/foxpro26.html

43/58

14/6/2016

jgpg07:TrucosVisualFoxPro

HEIGHT=24,
LEFT=24,
TOP=12,
NAME="Text1"
ADDOBJECTCommand1ASCOMMANDBUTTONWITH
HEIGHT=24,
TOP=12,
LEFT=144,
CAPTION="Buscar",
NAME="Command1"
ADDOBJECTEdit1ASEDITBOXWITH
HEIGHT=180,
LEFT=24,
TOP=48,
WIDTH=300,
NAME="Edit1"
PROCEDUREINIT
THISFORM.Edit1.VALUE=FILETOSTR("MiTxt.txt")
ENDPROC
PROCEDURECommand1.CLICK
LOCALlcBusca,lnPos,lnLen
lcBusca=ALLTRIM(THISFORM.Text1.VALUE)
lnLen=LEN(lcBusca)
lnPos=AT(lcBusca,THISFORM.Edit1.VALUE)
IFlnPos>0
THISFORM.Edit1.SELSTART=lnPos1
THISFORM.Edit1.SELLENGTH=lnLen
THISFORM.Edit1.SETFOCUS
ELSE
MESSAGEBOX("Noseencuentra",64,"Aviso")
ENDIF
ENDPROC
ENDDEFINE
EVITARRETORNODECARROENUNEDITBOX
publicoForm
oForm=CREATEOBJECT("MyForm")
oForm.Show()
DEFINECLASSMyFormASForm
Caption="NoRetornodeCarro"
ADDOBJECTMyLabelASLabel
WITHAutoSize=.T.,
Caption="Introduzcasutexto,nosepermiteteclaENTER"
ADDOBJECTmyEditBoxASEditBox
WITHTop=20,Width=300,Height=200
PROCEDUREMyEditBox.KeyPress
LPARAMETERSnKeyCode,nShiftAltCtrl
****SiseintroducelateclaENTER***
IFnKeyCode=13
NODEFAULT&&Nohacernada(Inhibir)
ENDIF
ENDPROC
ENDDEFINE
http://jgpg07.blogspot.com/2007/04/foxpro26.html

44/58

14/6/2016

jgpg07:TrucosVisualFoxPro

BUSQUEDAINCREMENTALENUNFORMULARIO
Unaformadehacerunabusquedaincrementalenunformulario,
ingresandountextoenunTextBoxyvisualizandoelresultadoenun
Grid
EnesteejemplodeBUSQUEDAINCREMENTALenunFormulario,
debemosponerunTextBox(Text1)yunaGrilla(Grid1).
EnelEntornodedatosinsertaremoslatabla(MiTabla)
EnelmtodoInteractiveChangedelTextBoxdebemosescribirel
siguientecdigo:
*InteractiveChange
LOCALlc,lnRecno
SELECTMiTabla
lc=ALLT(THIS.VALUE)
lnRecno=RECNO()
IFMiTabla.Nombre>=lc
IFNOTBOF()
SKIP1
ENDIF
IFMiTabla.Nombre<lc&&debequedardondeestaba
IFlnRecno<=RECC()
GORECNO()
ELSE
GOBOTT
ENDIF
RETURN
ENDIF
IFNOTEMPTY(ORDER())&&busquedaconindice
SEEKlc
ELSE
GOTOP
LOCATERESTFORMiTabla.Nombre=lcWHILEMiTabla.Nombre<=
lcNOOPTIMIZE
ENDIF
ELSE
LOCATERESTFORMiTabla.Nombre=lcWHILEMiTabla.Nombre<=
lcNOOPTIMIZE
ENDIF
IFlnRecno#RECNO()
THISFORM.Grid1.SETFOCUS&&elnombredelTextBox
THISFORM.Text1.SETFOCUS&&elnombredelGrid
ENDIF
RETURN
*ENDInteractiveChange
NOTA:SEDEBETENERLASSIGUIENTESCONSIDERACIONES:
LatabladebeestarordenadaASCENDENTEMENTEoexistirunindice
porNombreyestarseleccionado(elmtodobuscasihayunSET
ORDERestablecido)
FijarsebienelnombredelTextBoxydelGridparainvocarelmtodo
SetFocus(enelejemploGrid1yText1)
Fijarseelaliasdelatabladelgrid(enelejemploMiTabla)
Convienequelosnombresestnenmaysculasyaadirenla
propiedadFormatdelTextBox=!paraqueseaningresadosen
maysculas
http://jgpg07.blogspot.com/2007/04/foxpro26.html

45/58

14/6/2016

jgpg07:TrucosVisualFoxPro

ConvienequelapropiedaddelGridRecordMark=.T.paraquese
veaelregistromarcado,omanejarelcolordelregistroseleccionado
LIMITARUNCAMPOMEMO
ComolimitarlaentradadeuncampomemoaXlineas.DeKen
Weber.
Simplementehayqueponerenelkeypresslosiguiente:
LPARAMETERSnKeyCode,nShiftAltCtrl
IFnkeycode=13
IFOCCURS(chr(13),this.value)>=5
NODEFAULT
ENDIF
ENDIF
Enesteejemploselimitaa6lineas.
ElmodelodeobjetosdeOutlookesmuyricoypoderoso.Esta
interfazestdisponiblecomounservidordeautomatizacin,osea,
quetodolopodemosautomatizarmedianteprogramacindesde
VisualFoxPro.
EnviaryleercorreoconOutlookdesdeVisualFoxPro
ElmodelodeobjetosdeOutlookesmuyricoypoderoso.Esta
interfazestdisponiblecomounservidordeautomatizacin,osea,
quetodolopodemosautomatizarmedianteprogramacindesde
VisualFoxPro.
Unbreveejemplo
UnadelastareasmsfcildeautomatizarenOutlookeselenvode
uncorreo.Veremosunejemplodesolamenteunaspocaslneas.
LoprimeroquedebemoshacerparaautomatizarOutlook,escrear
unobjetoOutlook.Unavezcreadoelobjeto,debemosaccederal
origendelosdatos,peroestonolologramosenformadirecta,
debemoscrearunobjeto"NameSpace"apropiadoqueactuarcomo
entrada(enesteejemploMAPI).ElobjetoNameSpaceproporciona
entreotros,losmtodosLogonyLogoff.
LOCALlcPerfilASCHARACTER,lcContraseniaASCHARACTER,
lcDestinatarioASCHARACTER,lcTemaASCHARACTER,
lcCuerpoASCHARACTER
LOCALloOutlookAS"Outlook.Application",
loNameSpaceASOBJECT,loMailItemASOBJECT
#DEFINELF_CRCHR(10)+CHR(13)
*DatosdelMail
lcPerfil="Prueba"
lcContrasenia="prueba"
lcDestinatario="prueba@portalfox.com"
lcTema="Prueba:"+TTOC(DATETIME())
lcCuerpo="PruebaenviandounmaildesdeVisualFoxPro."+LF_CR
lcCuerpo=lcCuerpo+"Saludos."+LF_CR
*CreoobjetosOutlookyNameSpace
loOutlook=CREATEOBJECT("Outlook.Application")
loNameSpace=loOutlook.GetNameSpace("MAPI")
*Ejecutolosmtodos
loNameSpace.Logon(lcPerfil,lcContrasenia)
http://jgpg07.blogspot.com/2007/04/foxpro26.html

46/58

14/6/2016

jgpg07:TrucosVisualFoxPro

loMailItem=loOutlook.CreateItem(0)
loMailItem.Recipients.ADD(lcDestinatario)
loMailItem.Subject=lcTema
loMailItem.Body=lcCuerpo
loMailItem.Send
loNameSpace.Logoff
loNameSpace=.NULL.
loOutlook=.NULL.
Problemasdeseguridad
OutlookXPyOutlook2000SP2,incluyenlosparchesdeseguridadde
Microsoft.Estosparchesrestringen,entreotrascosas,elaccesoala
libretadedireccionesyelenvodecorreomedianteautomatizacin,
conelfindeevitarcdigosmaliciososquetomanlosdatosde
nuestralibretadedireccionesyenvancorreosinnuestro
consentimiento.
CuandointentamosenviaruncorreodesdeVisualFoxPro,senos
presentaelsiguientecuadrodedialogo,queluegode5segundos
habilitaelbotn"Si".
Cuandointentamosaccederalalibretadedireccionesapareceel
cuadrodedialogoelcualnospermitirunaccesoinmediato,ode1,
2,5,10minutosquedebemosseleccionar.
Cmosolucionamosesteproblema?
Estassonalgunasdelasopcionesquedisponemosnosotrospara
trabajarconestosparchesdeseguridad:
MantenerlaversindeOffice2000SR1ynoactualizarlaniinstalarle
parchesdeseguridad,conlospeligrosqueestosignifica.
SisetienenOutlookyExchangeinstalados,eladministradorde
Exchange,puededisminuirlasalertasoregistraralgunas
aplicacionescomoseguras.
OutlookRedemption:EsunobjetoCOMqueseadaptafcilmenteala
automatizacinyutilizalaMAPIextendida.EstaDLLfueescritapor
DmitryStreblechenko(MSOutlookMVP)yestadisponibleen
http://www.dimastr.com/redemption.Esteesunproductocomercial
conunvalordeU$S200aproximadamente.Existeparadescargauna
versinlibreconfinesdedesarrollo.
ExpressClickYes:Esunpequeoprogramaresidentequesemaneja
mediantelaAPIdeWindows.Este"presionar"elbotn"Si"antesde
queeldialogoaparezca.Esteprogramaesgratisyestadisponibleen
http://www.expresssoft.com/mailmate/clickyes.html.Enelmismo
sitioexisteunejemploparaVisualFoxPro.
Elformulariodeejemplo
EnesteejemploutilizaremosunformularioconunobjetoPageFrame
condosPginas,unaparaenviarcorreoylaotraparaleerlos
correosdesdelaBandejadeEntrada.
Lasiguientefiguraeslapginaparaelenvodeuncorreo.
Estaotrafiguranosmuestralapginaparalalecturadelabandeja
deentrada.
EnelmtodoInit()creamosunainstanciadelaclasecOutlookconla
sentencia:
http://jgpg07.blogspot.com/2007/04/foxpro26.html

47/58

14/6/2016

jgpg07:TrucosVisualFoxPro

THISFORM.oCorreo=NEWOBJECT('cOutlook','cOutlook.prg')
Creamoselservidordeautomatizacincon:
THISFORM.oCorreo.CrearServidor()
ElmtodoCrearServidor()estableceunareferenciaalainstanciade
OutlookenlapropiedadoOutlook.Enestemtodotambincreamos
unobjetoNameSpacequenospermitiraccederalascarpetas
especialesdeOutlook.
TambinenelInit()delformulario,llamamosaotroformulariopara
eliniciodesesindeOutlook:
*Formulariodeiniciodesesin
DOFORMInicioWITHTHISFORM.oCorreoTOllAceptar
IFNOT(llAceptarANDTHISFORM.oCorreo.IniciarSesion())
MESSAGEBOX('Falleliniciosesin',48,'Iniciodesesin')
RETURN.F.
ENDIF
Enviaruncorreo
AntesdeinvocarelmtodoEnviarCorreo(),configuramostodaslas
propiedadesnecesariasparaelenvodecorreo.Estolohacemosen
elmtodoClick()delbotn"Enviar".
*Armoelmensaje
WITHTHISFORM.oCorreo
.CargarVector(THIS.PARENT.txtTo.VALUE,'aTO')
.CargarVector(THIS.PARENT.txtCC.VALUE,'aCC')
.CargarVector(THIS.PARENT.txtAdjunto.VALUE,'aAdjuntos')
.cTema=ALLTRIM(THIS.PARENT.txtTema.VALUE)
.cCuerpo=ALLTRIM(THIS.PARENT.edtCuerpo.VALUE)
IF.EnviarCorreo()
MESSAGEBOX('Mensajeenviadoconxito.',64,'Aviso')
THISFORM.LimpiarPagina()
ELSE
MESSAGEBOX('Nosepudoenviarelmensaje.',48,'Problemas')
ENDIF
ENDWITH
RETURN
EnelllamadodelmtodoEnviarCorreo()delaclasecOutlookes
dondesecreaunnuevomensajeysearmasegnlaspropiedades
anteriormenteconfiguradas.
Leerloscorreos
Paraleerloscorreosdelabandejadeentradainvocamoselmtodo
LeerMensajes()delaclasecOutlookdesdeelmtodoClick()del
botn"Leer".
ZAPINcurMsg
IFTHISFORM.oCorreo.LeerMensajes(THIS.PARENT.opgTipo.VALUE
=1,'curMsg')
GOTOPINcurMsg
THIS.PARENT.grdMensajes.SETFOCUS
ELSE
MESSAGEBOX('Noexistenmensajesparatraer',64,'Aviso')
ENDIF
THIS.PARENT.edtCuerpo.REFRESH
EnlallamadaalmtodoLeerMensajes()creamosunobjetoloInboxy
traemostodoslosmensajes,osololosmensajes"Noledos"y
recorremosunoaunoparacargarlosenuncursorqueluego
mostraremosenunaCuadrculayunCuadrodeEdicin.
http://jgpg07.blogspot.com/2007/04/foxpro26.html

48/58

14/6/2016

jgpg07:TrucosVisualFoxPro

DefinicindelaclasecOutlook
Enesteejemplodisponemosdeunaclasedefinidaporelusuario,
llamadacOutlookconlosdistintosmtodospararealizarelenvoyla
lecturadeloscorreos.Ladefinicindeestaclaseeslasiguiente:
DEFINECLASScOutlookASCUSTOM
*Propiedades
oOutlook=.NULL.
oNameSpace=.NULL.
cPerfil=''
cContrasenia=''
cTema=''
cCuerpo=''
DIMENSIONaTo(1)ASCHARACTER
DIMENSIONaCC(1)ASCHARACTER
DIMENSIONaBCC(1)ASCHARACTER
DIMENSIONaAdjuntos(1)ASCHARACTER
*
*Creoelservidordeautomatizacin
*
PROCEDURECrearServidor()
LOCALloErr1ASEXCEPTION,loErr2ASEXCEPTION,llRetASLogical
WITHTHIS
*ManejoelerrorconTRY...CATH...FINALLY
TRY
*Instancioelobjeto
.oOutlook=GETOBJECT(,'Outlook.Application')
WAITWINDOW'YaexisteunainstanciadeOutlook...'TIMEOUT2
CATCHTOloErr1
TRY
*Creoelobjeto
.oOutlook=CREATEOBJECT('Outlook.Application')
WAITWINDOW'NuevainstanciadeOutlook...'TIMEOUT2
CATCHTOloErr2
MESSAGEBOX('MicrosoftOutlooknoestinstalado.',16,
'Problemas!!!')
FINALLY
ENDTRY
FINALLY
ENDTRY
IFVARTYPE(.oOutlook)='O'
.oNameSpace=.oOutlook.GetNameSpace('MAPI')
IFVARTYPE(.oNameSpace)='O'
llRet=.T.
ENDIF
ENDIF
ENDWITH
RETURNllRet
ENDPROC
*
*Cierroelservidordeautomatizacin
*
PROCEDURECerrarServidor()
THIS.oOutlook.QUIT()
RETURN
http://jgpg07.blogspot.com/2007/04/foxpro26.html

49/58

14/6/2016

jgpg07:TrucosVisualFoxPro

ENDPROC
*
*Iniciarsesion
*
PROCEDUREIniciarSesion()
LOCALllRetASLogical
TRY
THIS.oNameSpace.Logon(THIS.cPerfil,THIS.cContrasenia)
llRet=.T.
CATCH
*Nopudoiniciarsesin
llRet=.F.
FINALLY
ENDTRY
RETURNllRet
ENDPROC
*
*Cerrarsesion
*
PROCEDURECerrarSesion()
THIS.oNameSpace.Logoff()
RETURN
ENDPROC
*
*Envioelcorreo
*
PROCEDUREEnviarCorreo()
LOCALloMensajeASOBJECT,llRetASLogical
LOCALlnIASINTEGER,lnIndexASINTEGER
*Creounnuevomensaje
WITHTHIS
loMensaje=.oOutlook.CreateItem(0)
IFVARTYPE(loMensaje)='O'
loMensaje.Subject=.cTema
loMensaje.Body=.cCuerpo
*Recipientes
lnIndex=0
*TO
lnLen=ALEN(.aTO)
FORlnI=1TOlnLen
IFNOTEMPTY(.aTO(lnI))
lnIndex=lnIndex+1
loMensaje.Recipients.ADD(.aTO(lnI))
loMensaje.Recipients(lnIndex).TYPE=1
ENDIF
ENDFOR
*CC
lnLen=ALEN(.aCC)
FORlnI=1TOlnLen
IFNOTEMPTY(.aCC(lnI))
lnIndex=lnIndex+1
loMensaje.Recipients.ADD(.aCC(lnI))
loMensaje.Recipients(lnIndex).TYPE=2
ENDIF
http://jgpg07.blogspot.com/2007/04/foxpro26.html

50/58

14/6/2016

jgpg07:TrucosVisualFoxPro

ENDFOR
*BCC
lnLen=ALEN(.aBCC)
FORlnI=1TOlnLen
IFNOTEMPTY(.aBCC(lnI))
lnIndex=lnIndex+1
loMensaje.Recipients.ADD(.aBCC(lnI))
loMensaje.Recipients(lnIndex).TYPE=3
ENDIF
ENDFOR
*Adjuntos
lnLen=ALEN(.aAdjuntos)
FORlnI=1TOlnLen
IFNOTEMPTY(.aAdjuntos(lnI))ANDFILE(.aAdjuntos(lnI))
loMensaje.Attachments.ADD(.aAdjuntos(lnI))
ENDIF
ENDFOR
llRet=loMensaje.SEND
ELSE
llRet=.F.
ENDIF
ENDWITH
RETURNllRet
ENDPROC
*
*Leelosmensajessegnparmetro
*
PROCEDURELeerMensajes(tlNoLeidos,tcAlias)
LOCALloInboxAS'Outlook.MAPIFolder',loMensajesAS
'Outlook.Items'
LOCALloMsgASOBJECT,lnIASINTEGER,llRetASLogical
IFEMPTY(tcAlias)
tcAlias='curMsg'
ENDIF
*Inbox
loInbox=THIS.oNameSpace.GetDefaultFolder(6)
*MensajesdelInbox
IFtlNoLeidos
loMensajes=loInbox.Items.RESTRICT("[Unread]=True")
ELSE
loMensajes=loInbox.Items
ENDIF
IFVARTYPE(loMensajes)='O'
WITHloMensajes
IF.COUNT>0
*Recorrolosmensajes
FORlnI=1TO.COUNT
loMsg=.ITEM(lnI)
WITHloMsg
INSERTINTO(tcAlias)(EnviadoPor,Tema,Recibido,Cuerpo,
NoLeido)
VALUES(.SenderName,.Subject,.ReceivedTime,.Body,.UnRead)
ENDWITH
http://jgpg07.blogspot.com/2007/04/foxpro26.html

51/58

14/6/2016

jgpg07:TrucosVisualFoxPro

ENDFOR
llRet=.T.
ELSE
llRet=.F.
ENDIF
ENDWITH
ELSE
llRet=.F.
ENDIF
RETURNllRet
ENDPROC
*
*Destroy
*
PROCEDUREDESTROY()
WITHTHIS
.oNameSpace=.NULL.
.oOutlook=.NULL.
ENDWITH
ENDPROC
*
*CargounaMatrizconlosdestinatarios
*
PROCEDURECargarVector(tcTexto,tcVector)
LOCALlnASINTEGER,lnIASINTEGER,la(1)ASCHARACTER
IFEMPTY(tcTexto)
RETURN0
ENDIF
tcTexto=CHRTRAN(tcTexto,',','')
ln=ALINES(la,tcTexto,.T.,'')
lcV="This."+tcVector
DIMENSION&lcV.(ln)
FORlnI=1TOln
&lcV.(lnI)=la(lnI)
ENDFOR
RETURNln
ENDPROC
ENDDEFINE&&ClasecOutlook
Aladefinicindelaclase,comoastambinlosformularios,yel
ejemplolospodemosdescargardelsiguientevnculo:outlook.zip
parasuevaluacin.LosejemplosestnrealizadosconVisualFoxPro
8yOutlook2002(OutlookXP).
Unaformafcildecrearunformularioporcdigocomoun
exploradordeinternet.
PUBLICoForm
oForm=NEWOBJECT("MiExplorador")
oForm.SHOW
DEFINECLASSMiExploradorASFORM
TOP=0
LEFT=0
DOCREATE=.T.
CAPTION="PortalFox::Nadacorrecomounzorro"
WINDOWSTATE=0
NAME="Form1"
http://jgpg07.blogspot.com/2007/04/foxpro26.html

52/58

14/6/2016

jgpg07:TrucosVisualFoxPro

WIDTH=800
HEIGHT=600
ADDOBJECTolecontrol1ASOLECONTROLWITH
TOP=10,
LEFT=10,
WIDTH=780,
HEIGHT=580,
NAME="Olecontrol1",
OLECLASS="Shell.Explorer.2"
PROCEDURERESIZE
THIS.olecontrol1.HEIGHT=THIS.HEIGHT20
THIS.olecontrol1.WIDTH=THIS.WIDTH20
ENDPROC
PROCEDUREolecontrol1.REFRESH
NODEFAULT
ENDPROC
PROCEDUREolecontrol1.INIT
THIS.NAVIGATE("http://www.portalfox.com")
ENDPROC
ENDDEFINE
MOSTRARUNAPAGINAWEBDESDETUPROGRAMADEVFP
UnamassobrelasFoxFoundationClasses,enestaocasin,cmo
mostrarunapaginaWebenunformulariodeVisualFoxPro.
PuedenrevisarlasFoxFoundationClasses(FFCs)parasabercmo
funciona:Utilities>ComponentGallery>Internet>WebBroser
ControlUnejemplosencillosobreesto:
loBrowser=NEWOBJECT("_webform",HOME()+"gallery\_webview")
loBrowser.olewebBROWSER.Navigate2("http://www.portalfox.com")
loBrowser.Show(1)
NUMERACIONDEPAGINASENINFORMESCONCAMPOSMEMO
EnlafuncindeRafaelAngelPonceYllanessetieneeldetalledelos
camposMemo,lonicoquemodifiqueeselNOCONSOLEporel
NOWAIT,...
...conestecambioauncuandohayacamposmemosyestosexcedan
sulongitud(lapaginaactual),mesalelanumeracincorrectamente.
Elnicodetalleeselparpadeocuandoselanzaelreportporprimera
vez,peroprefieroestoaunanumeracinincorrecta.
*********************************************************
***
*Funcin:report_contarpaginas
*Devuelveelnmerodepaginasdeunreport
*Parametros:
*Nombredelreport
*Ejemplos:
*lntotpaginas=report_contapaginas("minforme")
*Retorno:
*Elnumerodepaginasdelinforme.
*Notas:
*Creacin:08/09/1999PRR
*UltimaModificacin:14/04/2000RAPYRafaelAngelPonceYllanes
*UltimaModificacin:28/07/2004LINCEITZPabloAlvarezG.
*********************************************************
http://jgpg07.blogspot.com/2007/04/foxpro26.html

53/58

14/6/2016

jgpg07:TrucosVisualFoxPro

***
FUNCTIONreport_contarpaginas(lc_report)
LOCALnPaginas
nPaginas=0
DEFINEWINDOWxFROM1,1TO2,2
ACTIVATEWINDOWxNOSHOW
REPORTFORM(lc_report)NOWAIT
nPaginas=_PAGENO
RELEASEWINDOWx
RETURNnpaginas
ENDFUNC
*********************************************************
***
IMPLEMENTARUNVISORDETEXTO
Sideseasmostrarunbuenvisordetextosquepuedesimplementar
entusaplicaciones,tedamoslamaneramassencillaycon
aparienciabastanteprofesional...
UnavezmsutilizaremosunaclasedelasquevienenenlasFox
FoundationClasses(FFCs)deVisualFoxPro,enestaocasin
haremosunaSubClasebasadaen_ShowTextdelalibreradeclases
_Reports.vcx,paradestamanerahacerlomasbeneficiosoa
nuestropropsito.
oForm=CREATEOBJECT("MyTextEditor",GETFILE(),"Editando
Archivo",2)
oForm.SHow(1)
DEFINECLASSmyTextEditoras_showtextOF
(HOME(1)+"ffc\_reports.vcx")
PROCEDUREINIT
LPARAMETERStcSourceFile,&&PathdelarchivoaMostrar
tcCaption,TtulodelaVenta
tnWindowState&&Estadodelaventana,Normal=0,Minimizado=
1,Maximizado=2
DODEFAULT(tcSourceFile)
WITHThis
.Caption=IIF(VARTYPE(tcCaption)='C'AND
!EMPTY(tcCaption),tcCaption,"VisordeTexto")
.WindowState=IIF(VARTYPE(tnWindowState)='N'AND
INLIST(tnWindowState,0,1,2),tnWindowState,0)
.cmdClose.Caption="Cerrar"
.cmdSave.Caption="Guardarcomo"
.cmdFonts.Caption="Fuentes"
.chkReadOnly.Caption="Slolectura"
ENDWITH
ENDPROC
PROCEDUREActivate
This.Resize()
DODEFAULT()
ENDPROC
ENDDEFINE
Comoideaadicional,podrasutilizartupropiomtodoparagenerar
unreporteomandartureporteaASCII(REPORTFORM<TuReporte
>TOFILEASCII),pasarloaarchivoymostrarlo....
http://jgpg07.blogspot.com/2007/04/foxpro26.html

54/58

14/6/2016

jgpg07:TrucosVisualFoxPro

lcFile=SYS(2015)+".txt"
OPENDATABASEHOME(2)+"data\testdata.dbc"
SETTEXTMERGEON
SETTEXTMERGETO(lcFile)NOSHOW
lcTitle="ReportedeClientes"
IF!USED("Customer")
USECustomerIN0
ENDIF
SELECTCustomer
\<<PADC(lcTitle,80,"")>>
\Clave<<PADC("Compaia",40,"")>>Contacto
SCAN
\<<Cust_id>><<Company>><<Contact>>
ENDSCAN
SETTEXTMERGETO
SETTEXTMERGEOFF
oForm=CREATEOBJECT("MyTextEditor",lcFile,lcTitle,2)
oForm.Show(1)
DELETEFILE(lcFile)
CLOSETABLESall
CLOSEDATABASESall
Nota:PorcuestionesdecodificacionHTMLtuvequeponerespacios
entrelosmayorque,menorque<<>>delaseccinTEXTMERGE,
quitelosparaquefuncionecorrectamente.Nota2:Reviseelarchivo
_reports.hqueselocalizaenelmismodirectoriodelalibrerade
clases,conlsepuedenconfigurarmasopcionesdelaclase.
PREVIEWENFORMAMAXIMIZADAYCONDIALOGODEIMPRESIN
Previewenformamaximizadaycondilogodeimpresin,mucho
msfcilyenunasolalnea...
Estalneadecdigomeparecimuybuena,lonicoquesolo
funcionadelaversin6.0enadelante...
KEYBOARD'{CTRL+F10}'PLAINCLEAR
REPORTFORMtureporteNOCOTOPRINTERPROMPTPREV
INFORMECONVISTAPREVIAMAXIMIZADA
Solohayquehacer...
EstoantesdelanzarelREPORTPREVIEWKEYBOARD"{CTRL+F10}"
Conocerelnmerodepaginastotalesdeuninforme
*********************************************************
***
*
*Clase:report_contarpaginas
*
*Devuelveelnmerodepaginasdeunreport
*
*Parametros:
*
*Nombredelreport
*
*Ejemplos:
*
http://jgpg07.blogspot.com/2007/04/foxpro26.html

55/58

14/6/2016

jgpg07:TrucosVisualFoxPro

*lntotpaginas=report_contapaginas("minforme")
*
*Retorno
*
*Elnumerodepaginasdelinforme.
*
*Nota
*
*
*Creacin:08/09/1999PRR
*UltimaModificacin:14/04/2000RAPYRafaelAngelPonceYllanes
*
*********************************************************
***
PARAMETERSlc_report
LOCALnPaginas
nPaginas=0
DEFINEWINDOWxFROM1,1TO2,2
ACTIVATEWINDOWxNOSHOW
REPORTFORM(lc_report)NOCONSOLE
nPaginas=_PAGENO
RELEASEWINDOWx
RETURNnpaginas
NOTA:graciasaJoseLuisSantanaBlascoyaRafaelAngelPonce
Yllanes
porlaaclaracindelNOCONSOLE,conestosemejoramuchola
velocidad.
Nota:SehareportadoqueconCamposMEMO,siseutilizala
propiedadSTRETCHWITHOVERFLOWsuelenocurrirresultados
inesperados
ObtenerladireccinIPlocaldelamaquina.
loSock=CREATEOBJECT('MSWinsock.Winsock.1')
?loSock.LocalIP
loSock=.NULL.
COMPRIMIRARCHIVOSCONWINRAR
Hasdeseadotenerunprogramaendondeestearchivadotodaslas
rutasdecarpetasacomprimiryconespecificacionesdetiposde
archivosyunarutadealmacenamiento,ysolodarunclickpara
iniciarelprocesoderespaldo.
***creauntablaquecontengalarutadealmacenamiento,endonde
sealmacenarantusrespaldos***ejemplo:resplado.dbf,conel
campo"Almacena"yguardar"e:\backup"***creaunatablaque
tengalosnombreyrutasdelascarpetasarespaldaryuncampoque
***guardelasextensiones,puedesagregarmultiplesregistrosde
carpetasarespaldar***Ejemplo:directorio.dbfconelcampos:ruta
yextensionambosdetipocaracter***Ejemplo:ruta="c:\mis
documentos\"***Ejemplo:extension="*.doc*.xls*.dbf*.ppt"o
bien"*.*",alponermultiplesextensionessolosepararlasconespacio
***inicio***
http://jgpg07.blogspot.com/2007/04/foxpro26.html

56/58

14/6/2016

jgpg07:TrucosVisualFoxPro

USERespaldo
wAlmacena=RESPALDO.ALMACENA
USEDIRECTORIO
***GENERALOSNOMBRESDELOSRESPALDOS
AUTOMATICAMENTE
***YLEAGREGAFECHAPARANOSOBREESCRIBIRLOS
REPLACEALLNOMBREWITH
+RIGHT(SYS(2015),8)+'_'+RIGHT(DTOS(DATE()),6)
GOTOP
***INICIODELAGENERACIONDEARCHIVOSRAR
SCANALL
ZRUTA=ALLTRIM(RUTA)+'\'+ALLTRIM(EXTENSION)
ZSAV=ALLTRIM(wAlmacena)+'\'+ALLTRIM(NOMBRE)+'.RAR'+'
'+ZRUTA
!/N7RARars&ZSAV
ENDSCAN
***
REDONDEARA5CENTAVOSPORARRIBA
Estafuncinesmuytilparaestablecimientosdondelasmonedasde
centavosyanoseusantanfrecuentementey/oporcomodidadse
cobra5centavosarriba,esdecir:$145.02seconvierteen$145.05,
$145.07seconvierteen$145.10.
functionredondeoacincocentimos
lparametersm.nValor
returnceiling(m.nvalor*20)/20
endfunc
INSERTARREGISTROENUNAPOSICION
Cuantasvecesnohemosqueridoingresarunregistroenblancoen
algunaposicionespecificadeunatabla?
Estaesunamaneramuysimpledehacerlo:
GO3
INSERTBLANKBEFORE
Teaconsejonointentarestetipodemanejossobretablasmedianas
ograndes,yaqueesmuylentoyademsnecesitasabrirlatablaen
formaexclusiva.
Publicadoporjgpg07en4/30/200708:06:00p.m.

3COMEN T ARIOS:

Annimodijo...
Muyinteresantelostrucos.Comohagocuandowindowno
refrescaunformulario,yalmoverelformulariomuestrael
escritorioquedandocomotildadoelformulario,peronolo
esta??
Franco
31dejuliode2008,07:59
http://jgpg07.blogspot.com/2007/04/foxpro26.html

57/58

14/6/2016

jgpg07:TrucosVisualFoxPro

ManuelVicdijo...
interesantestusanotaciones.Aversitehapasadoalgocomo
esto,enmisistemageneronotasdeventas,todofunciona
bienhastaqueseusaimpresorasOkioStar(miniprinter),Si
imprimenperotodoinvertido,esdecirlosdatosdelcliente
aparecenhastaabajoyeldetalledelanotaarriba,tienes
algunasolucion??.
Manuel
23defebrerode2011,15:12

JaimeMatheusdijo...
Muyinteresantesprocedimientosytodoenunsolositio,
esperoquelosiganactualizando,losquealcanceaprobar
realmentefuncionan
JaimeMatheus,BogotaCol.
24deagostode2011,11:48
Publicaruncomentario
PginaPrincipal

Entradaantigua

Suscribirsea:Comentariosdelaentrada(Atom)

http://jgpg07.blogspot.com/2007/04/foxpro26.html

58/58