Harbour Minigui

Nueva Versión de Harbour MiniGUI 2.0.010

Harbour MiniGUI
Harbour MiniGUI

 

  • Ya está disponible la versión 2.0.010  de Harbour MiniGUI



Este es el Changelog:



Optimizado: Administración de variables internas de HMG. Todas las variables públicas usadas por HMG fueron reemplazadas por un array público único que contiene todos los datos de uso interno. Este array se denomina _HMG_SYSDATA.

 


Una referencia completa del uso de cada elemento en este array se encuentra al inicio del archivo 'h_init.prg' ubicado en la carpeta SOURCE.

 


A partir de este cambio el uso de memoria para una aplicación HMG típica se redujo aproximadamente 100k y el tamaño de los ejecutables aproximadamente 50k.

 

- Nuevo: Soporte para HMG User Components.

He creado una interfase estándar para permitir a los usuarios de HMG crear sus propios componentes (por ejemplo controles) sin necesidad de modificar la librería.

Referencia de HMG User Components:

- InstallEventHandler ( <cEventHandlerFunctionName> )

Cada vez que un evento es iniciado por el sistema, la función especificada será invocada.

Esta función recibirá los siguientes parámetros:

hWnd, nMsg, wParam, lParam

Si ña función procesa el mensaje, esta debe retornar un valor diferente de NIL. De lo contrario, debe retornar NIL.

- InstallMethodHandler(<cMethodName>,<cMethodHandlerProcName>)

Cada vez que el método especificado sea invocado, el procedimiento <cMethodHandlerProcName> será ejecutado.

Si este procedimiento procesa el método, debe asignarse .T. al 'user process flag' ( _HMG_SYSDATA [63] ). De lo contrario debe asignárseLe .F.

- InstallPropertyHandler(<cPropName>,<cSetFucName>,<cGetFuncName>)

Cuando se le asigne un valor a la propiedad especificada se invocará <cSetFucName> con todos los parámetros originales.

Cuando el valor de la propiedad especificada sea leído, será invocada <cGetFucName> con todos los parámetros originales.

En ambos casos, si se procesa la función, debe asignarse .T. al 'user process flag' ( _HMG_SYSDATA [63] ). De lo contrario debe asignárseLe .F.

- Otras Consideraciones:

Si los componentes creados requieren directivas #command (por ejemplo un control) las definiciones deben agregarse al archivo i_UsrInit.ch ubicado en la carpeta INCLUDE.

Estas definiciones deben incluir marcadores de inicio y fin que serán usados para la creación de procedimientos automáticos de instalación y mantenimiento para los componentes.

El formato para el marcador de inicio es:

#define BASEDEF_<YourComponentTypeName>

El formato para el marcador de finalización es:

#undef BASEDEF_<YourComponentTypeName>

Si se han creado métodos o propiedades con nuevos nombres (no especificados actualmente en la definición del comando DECLARE WINDOW en el archivo i_windows.ch) debe agregarse las directivas de traducción para ellas en el archivo i_UsrSOOP.ch
ubicado en la carpeta INCLUDE.

Estas definiciones deben incluir marcadores de inicio y fin y las directivas de traducción deben seguir reglas especiales.

El formato para el marcador de inicio es el siguiente:


#define SOOP_<YourComponentTypeName> ;;

EL formato para las directivas #translate de los métodos es:

#xtranslate <Window> . <Control> . MethodName  => Domethod (<"Window">, <"Control"> , "MethodName" ) ;;

El formato para las directivas #translate de las propiedades es:

#xtranslate <Window> . <Control> . PropName  => GetProperty (
<"Window">, <"Control"> , "PropName" )  ;;
#xtranslate <Window> . <Control> . PropName  := <v> => SetProperty (
<"Window">, <"Control"> , "PropName" , <v> )  ;;

El formato para el marcador de finalización es:

#undef SOOP_<YourComponentTypeName> ;;

- Ejemplo:

c:\hmg\samples\user_components

- Solucionado: Warnings reportados por Harbour al construir la librería.

- Solucionado: Problemas varios en algunos ejemplos de BROWSE y GRID.

- Solucionado: Definicion del comando TOOLBAR (estilos de fuente).

 

Saludos.

 

Roberto.