10 de marzo de 2010

Saber si una cadena dada, corresponde con un criterio

Algunas veces necesitamos saber si por ejemplo el nombre del archivo que nos da el usuario cumple con algun criterio para nombres que deseamos mantener.

Digamos:

Usuario="2002_123.Ext"
y nuestro criterio es:
Criterio ="????-???.*"
como saber si se cumple ?

Declare long PathMatchSpec IN "shlwapi.dll" string pszFile, string pszSpec

?PathMatchSpec("C:/dir/archivo.txt","*.t?t")
?PathMatchSpec("C:/dir/archivo.tft","*.t?t")
?PathMatchSpec("archivo.tft","*.t?t")
?PathMatchSpec("C:/dir/archivo.txr","*.t?t")
?PathMatchSpec("archivo.txr","*.t?t")

El Primer Parametro es la cadena que queremos comprobar con el criterio, que es el segundo parametro, en este caso puede tener cualquier cosa de nombre pero la extension debe empezar con t, la segunda letra no importa, la tercera debe ser t.

El archivo, puede o no existir, lo que esta api hace es realizar una busqueda como la que se hace en DOS con el dir, digamos DIR ???_*.txt

Lo cual nos devolveria todos los archivos que empiezen con 3 caracteres cualquiera, que el cuarto sea un "_", el resto no importaria, pero de extension TXT.

Jorge Mota

5 de febrero de 2010

Un reemplazo para FULLPATH()

Artículo original: A Replacement for FULLPATH()
http://doughennig.blogspot.com/2010/02/replacement-for-fullpath.html)
Autor: Doug Hennig
Traductor: Luis María Guayán

¿Está tan molesto como yo de que FULLPATH() devuelve la ruta completa de un archivo en mayúsculas? Esto hace un poco difícil, respetar las mayúsculas y minúsculas en un nombre de archivo introducido por el usuario. Afortunadamente, la función GetFullPathName de la API de Windows no cambia las mayúsculas y minúsculas. Aquí hay una pequeña función que recibe un nombre de archivo y devuelve la ruta completa usando la función de la API:
LPARAMETERS tcName
LOCAL lcBuffer1, ;
  lcBuffer2, ;
  lnLen

#DEFINE MAX_PATH 260

DECLARE LONG GetFullPathName IN Win32API ;
  STRING lpFileName, LONG nBufferLength, STRING @lpBuffer, ;
  STRING @lpFilePart

STORE SPACE(MAX_PATH) TO lcBuffer1, lcBuffer2
lnLen = GetFullPathName(tcName, MAX_PATH, @lcBuffer1, @lcBuffer2)
RETURN LEFT(lcBuffer1, lnLen)

18 de enero de 2010

Saber cuantos decimales tiene un número

Con esta función podemos saber la cantidad de decimales de un número pasado como parámetro.

? CuantosDecimales(1234.567) 
? CuantosDecimales(1234.500) 
? CuantosDecimales(9.999999) 

FUNCTION CuantosDecimales(tn) 
  LOCAL ln
  ln = 0 
  DO WHILE .T. 
    IF INT(tn * 10 ^ ln) == tn * 10 ^ ln 
      EXIT 
    ENDIF 
    ln = ln + 1 
  ENDDO 
  RETURN ln 
ENDFUNC 

Nota: La función solo soporta hasta 16 decimales

Luis María Guayán

9 de enero de 2010

Poner la imagen del papel tapiz de Windows como fondo de un formulario

Una forma fácil de poner la misma imagen del papel tapiz de Windows como fondo de un formulario.

Para ello leemos el valor de la Registry: HKCU\Control Panel\Desktop\Wallpaper con WSH (Windows Script Host)

Ejemplo:
LOCAL loForm, loWsh, lcWallpaper

loWsh = CreateObject("wscript.shell")  
lcWallpaper = loWsh.RegRead("HKCU\Control Panel\Desktop\Wallpaper")
loWsh = Null

loForm = CREATEOBJECT("Form")
loForm.WIDTH = 800
loForm.HEIGHT = 600
loForm.AUTOCENTER = .T.
loForm.PICTURE = lcWallpaper
loForm.SHOW(1)
loForm = Null

RETURN

Luis María Guayán

1 de enero de 2010

Visual FoxPro 9.0 EULA (End-User License Agreement)

Contrato de Licencia con el Usuario Final de Visual FoxPro 9.0

LICENSE TERMS FOR MICROSOFT SOFTWARE

MICROSOFT VISUAL FOXPRO VERSION 9.0

THESE LICENSE TERMS ARE AN AGREEMENT BETWEEN MICROSOFT CORPORATION (OR, IF APPLICABLE BASED ON WHERE YOU ACQUIRED THE SOFTWARE, ONE OF ITS AFFILIATES) AND YOU.  PLEASE READ THEM.  THEY APPLY TO THE SOFTWARE NAMED ABOVE WHICH INCLUDES THE MEDIA ON WHICH YOU RECEIVED IT, IF ANY.  THE TERMS ALSO APPLY TO THE MICROSOFT:

* UPDATES, 
* SUPPLEMENTS,
* INTERNET-BASED SERVICES, AND
* SUPPORT SERVICES,

FOR THIS SOFTWARE UNLESS OTHER TERMS ACCOMPANY THOSE ITEMS.  IF SO, THOSE TERMS APPLY.