27 de mayo de 2004

Cambiar la imagen del escritorio de Windows con una API

Aquí una cómoda manera de cambiar el escritorio de Windows con una API, podrías poner el logo de tu aplicación después de haberla instalado.

SystemParametersInfo: Esta función tiene muchas utilidades.

En este ejemplo cambia el papel tapiz de Windows, este ejemplo pide que busque un archivo con extensión BMP para colocarlo de papel tapiz.

Declare integer SystemParametersInfo in "user32";
  Long uAction,;
  Long uParam,; 
  string lpvParam,;
  Long fuWinIni
lfFile = getpict()
IF !empty(lfFile)
  = SystemParametersInfo(20, 0,lfFile, 1)
ENDIF
Jimmy Pozo Jiménez

19 de mayo de 2004

Generación de Claves

Esta clase nos permite generar una cadena única de caracteres a partir de otra cadena. Se hizo tomando como base una rutina similar enviada por Luis María, a quien le agradezco inmensamente.

Es muy útil a la hora de generar claves de acceso y/o cadenas de licencias, etc. Los cambios efectuados están básicamente en la semilla que se le pasa a la función RAND, evitando así que en cadenas similares de caracteres se generen claves similares. En esta clase, el RAND se inicializa con el valor de la suma de chequeo (función SYS(2007)) divido por la longitud de la cadena deseada.

La clase es la siguiente.
DEFINE CLASS GenKey AS CUSTOM
  HIDDEN Caracteres
  HIDDEN LenCarac
  Caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  LenCarac = LEN( THIS.Caracteres )
  PROCEDURE GenKey( lsString AS STRING, lnLong AS INT ) AS STRING
    LOCAL lnLenString
    LOCAL lnInt
    LOCAL lsReturn
    lsReturn = ""
    IF TYPE( "lnLong" ) != "N"
      lnLong = 8
    ENDIF
    IF TYPE( "lsString" ) != "C"
      RETURN lsReturn
    ELSE
      lnLong = IIF( lnLong >= 10, 10, lnLong )
      RAND( INT( VAL( SYS( 2007, lsString ) ) / lnLong ) )
      FOR lnCont = 1 TO lnLong
        lsReturn = lsReturn + SUBSTR( THIS.Caracteres, RAND() * THIS.LenCarac + 1, 1 )
      ENDFOR
    ENDIF
    RETURN lsReturn
  ENDPROC
ENDDEFINE
Actualmente está diseñada para generar llaves de 8 caracteres por defecto, y hasta 10 máximo. Se puede extender a cualquier límite. La forma de utilizarla es..
oKey = CREATEOBJECT("GenKey")
? oKey.GenKey("MiTexto", 8)
RELEASE oKey

Mario Cerón Charry 

Nota del editor: Para que los valores retornados por la función RAND() sean lo mas aleatorio posible tener en cuenta la ayuda de la función en la documentación de Visual FoxPro:

Sintaxis:

RAND([nSeedValue])

Parámetros

nSeedValue: Especifica el valor Seed que determina la secuencia de valores que devuelve RAND().
RAND() devuelve la misma secuencia de números aleatorios si utiliza el mismo valor Seed para nSeedValue la primera vez que ejecuta la función RAND(), seguida de llamadas posteriores a la función RAND() sin nSeedValue.

Si nSeedValue es negativo la primera vez que ejecuta RAND(), se usará un valor Seed a partir del reloj del sistema. Para obtener la serie más aleatoria de números, utilice inicialmente RAND() con un argumento negativo y después, ejecute RAND() sin ningún argumento.

Si omite nSeedValue, RAND() utilizará de forma predeterminada el valor Seed 100.001.

10 de mayo de 2004

Conectarse a SQL Server

Una cómoda manera de conectarse a SQL Server mediante un DSN

cCadConnDSN = "DRIVER=SQL Server;" ;
  + "SERVER=tu_server;" ;
  + "UID=nombre_usuario;" ;
  + "PWD=clave_pw;" ;
  + "DATABASE=PUBS;" ;   && Nombre de la base de datos
  + "WSID=nombre_usuario;" ;
  + "APP=__"
nHanConn = SQLSTRINGCONNECT(m.cCadConnDSN)
IF nHanConn > 0
  =MESSAGEBOX("Conectado a la base de datos de SQl Server")
ELSE
  =MESSAGEBOX("Error al conectarse a la base de datos de SQl Server")
ENDIF
Jimmy Pozo Jiménez