miércoles, febrero 24, 2016

VFP: Seleccionar palabras de un textbox con un solo click

Más de uno habrá tenido la necesidad de poder seleccionar una palabra con un solo click dentro de un textbox:




Aprovechando que alguien hizo la pregunta en un foro de si se podía hacer esto en FoxPro con un solo click, me tomé un momento para aceptar el reto y dar la respuesta.

El siguiente código está en formato texto (guardarlo como "test_selword.sc2") y se puede regenerar el form original con FoxBin2Prg.

*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (ES) AUTOGENERADO - ¡¡ATENCIÓN!! - ¡¡NO PENSADO PARA EJECUTAR!! USAR SOLAMENTE PARA INTEGRAR CAMBIOS Y ALMACENAR CON HERRAMIENTAS SCM!!
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
*--------------------------------------------------------------------------------------------------------------------------------------------------------
*< FOXBIN2PRG: Version="1.19" SourceFile="test_selword.scx" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
*
*
DEFINE CLASS dataenvironment AS dataenvironment
     *< CLASSDATA: Baseclass="dataenvironment" Timestamp="" Scale="" Uniqueid="" ClassIcon="1" />

    DataSource = .NULL.
    Height = 0
    Left = 0
    Name = "Dataenvironment"
    Top = 0
    Width = 0

ENDDEFINE

DEFINE CLASS form1 AS form
     *< CLASSDATA: Baseclass="form" Timestamp="" Scale="" Uniqueid="" />

    *-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
    *< OBJECTDATA: ObjPath="Text1" UniqueID="" Timestamp="" />
    *< OBJECTDATA: ObjPath="Text2" UniqueID="" Timestamp="" />
    *< OBJECTDATA: ObjPath="Label1" UniqueID="" Timestamp="" />

    Caption = "Form1"
    DoCreate = .T.
    Name = "Form1"

    ADD OBJECT 'Label1' AS label WITH ;
        Caption = "Selected word:", ;
        Height = 17, ;
        Left = 32, ;
        Name = "Label1", ;
        Top = 84, ;
        Width = 84
        *< END OBJECT: BaseClass="label" />

    ADD OBJECT 'Text1' AS textbox WITH ;
        Height = 23, ;
        Left = 28, ;
        Name = "Text1", ;
        Top = 28, ;
        Value = This is phrase for selecting words with a click, ;
        Width = 276
        *< END OBJECT: BaseClass="textbox" />

    ADD OBJECT 'Text2' AS textbox WITH ;
        Height = 23, ;
        Left = 28, ;
        Name = "Text2", ;
        Top = 104, ;
        Width = 100
        *< END OBJECT: BaseClass="textbox" />
  
    PROCEDURE Text1.Click
        LOCAL lnLeftLim, lnRightLim, lnWordLen, lnSelStart
        lnSelStart    = THIS.SelStart
       
        *-- Search Left Limit
        lnLeftLim    = 1
        FOR I = lnSelStart + 1 TO lnLeftLim STEP -1
            IF SUBSTR(THIS.Text, I, 1) == ' ' THEN
                lnLeftLim    = I + 1
                EXIT
            ENDIF
        ENDFOR
       
        *-- Search Right Limit
        lnRightLim    = LEN(THIS.Text)
        FOR I = lnSelStart + 1 TO lnRightLim
            IF SUBSTR(THIS.Text, I, 1) == ' ' THEN
                lnRightLim    = I - 1
                EXIT
            ENDIF
        ENDFOR
       
        lnWordLen    = lnRightLim-lnLeftLim+1
       
        *-- If a space was selected, then do nothing
        IF lnWordLen >= 1
            THISFORM.text2.Value = SUBSTR(THIS.text,lnLeftLim,lnWordLen)
            THIS.SelStart = lnLeftLim-1
            THIS.SelLength = lnWordLen
        ENDIF
       
    ENDPROC

ENDDEFINE



Hasta la próxima! :-)

viernes, febrero 12, 2016

Nueva versión v1.19.46 de FoxBin2Prg (arreglos y mejoras) y Extensiones para PlasticSCM v2.5.46


Parte 1: FoxBin2Prg / Parte 2: Extensiones para Plastic

Parte 1: FoxBin2Prg


FoxBin2Prg es un programa pensado para sustituir a SccText/X y TwoFox y mejorar sus funcionalidades, generando versiones de texto estilo-PRG que pueden ser modificadas y permiten recrear el binario original. Puede ser utilizado con herramientas SCM (Administradores de Control de Código Fuente, como VSS, CVS, SVN) y herramientas DVCS (como Git, Mercurial, Plastic, and others), o como programa independiente, para hacer operaciones de Diff (ver diferencias) y Merge (mezclar cambios).


La lista de cambios es la siguiente:

* Bug Fix: Arreglo de bug en método set_UserValue() cuando se intenta obtener información de un error que no puede abrir la tabla (por ej, porque el memo está corrupto)
 

   Cuando ocurre o se detecta algún error se intenta obtener más información de contexto dentro del memo (vcx/scx) para mostrarlo. Si el memo está corrupto se interrumpe la recolección de datos y se queda a medias. Ahora se puede continuar adelante hasta el final, aunque no se pueda leer el memo.

* Mejora: Agregado soporte interno para consulta de información de cfg de directorio, mediante nuevo parámetro opcional, para los métodos API que lo requieren (por ej: get_Ext2FromExt, hasSupport*)
 

   Las funciones API get_Ext2FromExt y hasSupport* permiten indicar en un nuevo parámetro el directorio donde sobre el que se desea obtener dicha información, de modo que pueda evaluarse antes cualquier archivo de configuración que pueda afectar a ese contexto.

* Bug Fix: Cuando se procesa un directorio o un proyecto con todos los archivos, a veces puede ocurrir el error "Alias already in use" (Dave Crozier)
 

   Un problema de garbage collection estaba causando que en determinadas situaciones de error al procesar múltiples archivos una tabla se quede abierta y luego al intentar analizar la siguiente se estaba reabriendo la misma tabla anterior.

* Bug Fix mnx: Cuando se usa '&&' en los textos de las opciones, se corrompe el binario del menú al regenerarlo (Walter Nichols)
 

   Esto pasaba porque se confundían estos símbolos con los comentarios in-line. Se agregó un algoritmo específico para detectar este caso.

* Mejora: El objeto WSscript.Shell da problemas en algunos entornos o bajo ciertas condiciones, por lo que se reemplaza por llamadas Win32 nativas (Aurélien Dellieux)
 

   En algunos equipos WScritp.Shell no mostraba siempre el reporte de errores, por lo que se sustituyó por funcionalidad equivalente basada en funciones API de Windows.

* Bug Fix Frx/Lbx : El ordenamiento de registros de los reportes cambia el orden Z de los objetos próximos que se solapan, pudiendo causar que se visualicen mal (Ryan Harris)
 

   Hasta ahora se venían ordenando los registros internos de los reportes con un orden que estaba provocando problemas para determinados ordenamientos manuales del usuario, haciendo que se pierda el orden correcto de objeto encima/debajo. Se ha quitado dicho ordenamiento para mantener el indicado por el usuario manualmente.

* Bug Frx/Lbx: Cuando se regeneran reportes o etiquetas con textos multilinea alineados al centro o a la derecha, la alineación no es completamente correcta (Ryan Harris)
 

   Esto ocurria porque internamente se estaban guardando los textos con CR+LF en vez de solamente CR, lo que hacía que el parser de VFP interprete la alineación de forma distinta.

* Bug Frx/Lbx: Cuando se agrupan controles en diseño y se convierte a texto, al regenerar se pierden las agrupaciones (Lutz Scheffler)
 

   Esto ocurría porque se estaban ordenando los objetos (ObjType 1,25,26) alfabéticamente en vez de mantener el orden original.

* Bug Fix Pjx: Los archivos SPR y MPR no estan bien representados en la información del proyecto (Ralf Wagner)
 

   Estos archivos no tenían especificado el tipo correcto para ser detectados como archivos de texto. Code Fix aportado por Ralf Wagner.

* Bug Fix Pj2: Se genera un error al regenerar un PJX desde un PJ2 donde algún archivo contiene paréntesis (EddieC)
 

   Se ha corregido la búsqueda de los nombres de archivo para contemplar estos casos.

* Mejora dbf: Nuevo parámetro ExcludeDBFAutoincNextval para evitar diferencias por este dato (edyshor)
 

   Este nuevo parámetro permite que al generar el archivo DB2 con la información de estructura de un DBF con campo autonumérico, no se guarde el dato del siguiente valor a tomar, lo que evita diferencias producidas por el mismo.

* Bug Fix: Cuando se procesa un archivo en el directorio raiz, se genera un error 2062 (Aurélien Dellieux)

   Se ha corregido el algoritmo de recorrido de directorios para contemplar este caso.

* Nuevo: Se a agregado una nueva herramienta fb2p_diff

   Esta nueva herramienta está pensada para quienes solamente quieren hacer una comparación rápida de binarios para ver las diferencias:





Como actualizar el FoxBin2Prg existente:Con descargar el zip y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.



Link de descarga de VFPx


Link de descarga de GitHub



Parte 2: Extensiones para Plastic



Las extensiones para Plastic son un grupo de scripts vbs y programas Visual FoxPro 9 que se configuran dentro de PlasticSCM (herramienta de control de versiones) para poder invocar a FoxBin2Prg desde dentro de la interfaz de Plastic.


La lista de cambios es la siguiente:

> Actualización de FoxBin2Prg: Versión sincronizada con la última versión de FoxBin2Prg



El README.txt explica como se configura en Inglés y Español, y también está explicado en esta nota: Cómo configurar las Herramientas de VFP 9 para Plastic


Como actualizar las existentes:
Con descargarlas y reemplazar los archivos en el sitio que los hayan puesto antes es suficiente.



Link de descarga de las Extensiones FoxBin2Prg para Plastic de GitHub




Artículos relacionados:

FoxBin2Prg, el sucesor mejorado del Scctext

FoxBin2Prg: Detalle de vistas, Datos de uso, Configuraciones y más

FoxBin2Prg: Guía rápida de uso y configuración


 Saludos!