9 de abril de 2012

FoxRibbon versión 0.10 Beta

FoxRibbon es una biblioteca de clases VCX 100% Visual FoxPro que ofrece una serie de herramientas para mejorar el aspecto visual de nuestras aplicaciones. Su uso y distribución es libre para toda la Comunidad de Visual FoxPro.

FoxRibbon fue desarrollada por Guillermo Carrero (Barcelona, España)

Pueden descargar y probar esta nueva clase desde:
http://sites.google.com/site/foxribbonclass



29 de marzo de 2012

Clase que encapsula funciones de javascript para URLs

Esta clase encapsula las funciones de javascript necesarias para trabajar con Urls.

Utiliza el msscript control. Fácilmente puedes extenderla para incluir cualquier otra funcion de javascript que necesites.

*----------------------------------------------------------------
* Clase: UrlEncDec
* Autor: Marco Plaza, 28/03/2012
* Eencapsula las siguientes funciones de javascript via MsScriptcontrol:
* Escape/Unescape
* EncodeUriComponent/DecodeUriComponent
* EncodeUri/DecodeUri
*
* referencia de las funciones:http://msdn.microsoft.com/en-us/library/ht8a077w%28v=vs.94%29.aspx
*
* fácilmente extensible a otras funciones de javascript
*
*-----------------------------------------------------------------
* uso:
* o = create('urlEncDec')
* ? o.decodeuri('http://msdn.microsoft.com/en-us/library/ht8a077w%28v=vs.94%29.aspx')
* ? o.oResult
*
*------------------------------------------------------------------


*************************************
DEFINE CLASS URLENCDEC AS CUSTOM

  oJs = ''
  oResult=''

  *---------------------------
  PROCEDURE INIT

    WITH THIS
      .oJs=CREATEOBJECT('MSScriptcontrol.scriptcontrol.1')
      .oResult=CREATEOBJECT('EMPTY')
      ADDPROPERTY(.oResult,'ResultadoJs')
      .oJs.LANGUAGE =[JavaScript]
      .oJs.ADDOBJECT('oResult',.oResult)

    ENDWITH
  ENDPROC

  *------------------------------------------
  FUNCTION ESCAPE(lcCadena AS STRING ) AS STRING
    RETURN THIS.ejecutar('escape',lcCadena)
  ENDFUNC

  *------------------------------------------
  FUNCTION encodeURI(lcCadena AS STRING ) AS STRING
    RETURN THIS.ejecutar('encodeURI',lcCadena)
  ENDFUNC

  *--------------------------------------------
  FUNCTION decodeURIComponent(lcCadena AS STRING ) AS STRING
    RETURN THIS.ejecutar('decodeURIComponent',lcCadena)
  ENDFUNC

  *------------------------------------------
  FUNCTION encodeURIComponent(lcCadena AS STRING ) AS STRING
    RETURN THIS.ejecutar('encodeURIComponent',lcCadena)
  ENDFUNC

  *------------------------------------------
  FUNCTION unescape(lcCadena AS STRING ) AS STRING
    RETURN THIS.ejecutar('unescape',lcCadena)
  ENDFUNC

  *------------------------------------------
  FUNCTION decodeURI(lcCadena AS STRING ) AS STRING
    RETURN THIS.ejecutar('decodeURI',lcCadena)
  ENDFUNC

  *------------------------------------------
  FUNCTION ejecutar(lcComando,lcCadena AS STRING ) AS STRING
    THIS.oJs.ExecuteStatement( [oResult.ResultadoJs=]+lcComando+[(']+lcCadena+[')] )
    RETURN THIS.oResult.resultadoJs
  ENDFUNC

ENDDEFINE
*---------------------------------
Marco Plaza

24 de febrero de 2012

Obtener Propiedades/Atributos extendidos de archivos

Muy buen código del turco Cetin Basoz para ver las propiedades extendidas de diferentes tipos de archivos.
Clear
lcFile = GETFILE("MP3") && Ejemplo con archivos MP3
loShell = Createobject("Shell.Application")
loFolder = loShell.Namespace(JUSTPATH(m.lcFile))
loItem = loFolder.ParseName(JUSTFNAME(m.lcFile))
If !Isnull(loItem)
  IF loItem.IsLink
    objLink = loItem.GetLink()
    ? "Link properties of shortcut:"
    ? "-------------------------------------"
    ? "Description:", objLink.Description
    ? "Path:", objLink.Path
    ? "Arguments:", objLink.Arguments
    ? "WorkingDirectory:", objLink.WorkingDirectory
    ? "-------------------------------------"
  else
    For ix= 0 To 34 && version based. win 7: 0 to 266. Property order differs too.
      ? "Column "+Str(m.ix,2)+": "+ ;
        loFolder.GetDetailsOf(loItem, m.ix)
    Endfor
  endif
Else
  ? "File doesn't exist"
Endif
Return
Para ver la información de las columnas:
http://technet.microsoft.com/en-us/library/ee176615.aspx

Para ver la información de las columnas (para mas versiones de Windows):
http://www.kixtart.org/forums/ubbthreads.php?ubb=showflat&Number=160880&page=1

15 de febrero de 2012

Como quemar Discos Ópticos desde VFP

Estuve buscando la forma de quemar un Disco Óptico (CD o DVD) desde VFP y no encontré nada "elegante". Por esta razón tuve que buscar una solución mediante el uso de un programa externo que hiciera este trabajo.

La solución fue descargar el programa Command Burner.

Command Burner lo descargué del sitio www.commandburner.com. Claramente dice en los "Términos de Uso" que el programa se puede usar y distribuir libremente.

El programa solamente requiere que los siguientes 3 archivos estén incluídos en su aplicación:
  • CMDBurn.CHM
  • CMDBurn.EXE
  • MCDB.OCX
La forma en que lo invoqué desde VFP fue la siguiente
   #DEFINE SW_SHOW_INVISIBLE 0
   oShell = createobject("WScript.Shell")
   oShell.Run("CMDBURN.EXE burn /d d:\sistema /l BACKUP /eject /hide", SW_SHOW_INVISIBLE, .T. )
   #UNDEF SW_SHOW_INVISIBLE
   RELEASE oShell
La constante #DEFINE SW_SHOW_INVISIBLE 0 la utilicé para que no se abrá una ventana mostrando la ejecución del programa. De todos modos, el programa incluye el parámetro /hide para ocultar la interface propia del Command Burner.

La línea de comando es esta:
  CMDBURN.EXE burn /d d:\sistema /l BACKUP /eject /hide 

Parámetros:
  • /d d:\sistema - Quiero quemar el directorio (o carpeta) d:\sistema y TODO su contenido
  • /l BACKUP - La etiqueta del Disco a quemar será la palabra BACKUP
  • /eject - Expulsar el disco al terminar de quemar
  • /hide - Ocultar la interface del programa CommandBurner. Si no se incluye este parámetro, se verá una interface mostrando el progreso de "quemado" del disco.
Espero que le sea de utilidad a alguien.

Edgar Acevedo

31 de enero de 2012

Función MessageBox() Extendida - Revisada

Artículo original: Extended Messagebox() function reviewed
http://weblogs.foxite.com/vfpimaging/2012/01/30/extended-messagebox-function-reviewed/
Autor: VFPIMAGING
Traducido por: Luis Maria Guayán

Versión actualizada - ahora sin la necesidad de FLL externa

Esto es sólo una actualización para el artículo original. Inicialmente esta función necesitaba la libria VFPEX.FLL de Craig Boyd para poder de actualizar el cuadro de diálogo del MESSAGEBOX(). En esta nueva versión, estoy usando la función BINDEVENTS de VFP9, para enlazar directamenta a los eventos de Windows.

MSGBOXEX() es una función sencilla que nos permite personalizar los textos de los botones del MESSAGEBOX(), la ventana de diálogo, como en las imágenes se muestra a continuación:
lnOption = MsgboxEx( ;
   "You have entered a wrong password for 5 times." + chr(13) + ;
   "For security reasons this login was suspended.", ; && main message
   0, ; && default icon info
   "Password incorrect", ; && title bar caption
   "\&Retry,&Exit,Get &new pwd", ; && new button captions
   "41.ico") && icon file







lnOption = MsgboxEx(;
   "An unexpected error has occurred and the system needs to be restarted." + ;
   chr(13) + chr(13) + "What do you want to do ?", ;
   "X", ;
   "MsgboxEx sample", ;
   "Restart &Now,Restart &later,&Never restart")



lnOption = MsgboxEx( ;
   "Could not find the file 'Import.csv' in the selected folder.", ;
   0, ;
   "File not found", ;
   "&Abort,\&Retry,Change folder", ;
   "17.ico")



Función: MsgboxEx.prg