Estimados usuarios de Xailer,
La versión definitiva de Xailer 2 incorpora un gestor de asistentes que facilita enormemente la creación de formularios rutinarios y/o repetitivos. Un ejemplo típico de un formulario de este tipo sería aquel que creamos cada vez que queremos realizar la edición de todos los campos de una tabla en cualquier tipo de mantenimiento.
Primero vamos a ver lo fácil que resulta utilizar cualquier asistente, para luego adentrarnos en la modificación o creación de nuestros propios asistentes, que es igualmente fácil.
Para acceder a la opción de Asistentes utilizaremos la opción de menú Componentes->Asistentes y se nos mostrará el siguiente diálogo:
Observe que todos los asistentes están incluidos de alguna forma dentro de una DLL. Dicha DLL ha sido creada por el propio Xailer, y de hecho podrá incluso analizar su código fuente en el directorio samplesWizards. Por supuesto también podrá modificarla y reconstruirla para que los asistentes se adapten a su forma de trabajo.
Las DLL de los asistentes deben de estar ubicadas necesariamente en los directorio XailerTemplate o XailerUser.
Una vez seleccionado un asistente en concreto entra en funcionamiento el código interno del mismo que o bien puede directamente realizar el trabajo requerido o es posible que le muestre algún diálogo para pedirle algún dato adicional.
Si selecciona el asistente DBF table assistant que permite crear un formulario de mantenimiento de tablas DBF, se le mostrará el siguiente diálogo:
/>
Simplemente indique como quiere que se comporte el asistente para cada tipo de datos que pueda tener el fichero DBF y pulse el botón Run y podrá observar como de forma instantánea el formulario es creado por usted
La creación o modificación de asistentes es igualmente sencilla, y si le echa un vistazo al ejemplo sampleswizardsBasic se dará cuenta inmediatamente de ello. Básicamente todo el trabajo consiste en crear una clase descendente de TIDEWizard que tan sólo necesita sobrecargar el método Run(). Eso es todo.
Lo más sencillo es ver un pequeño ejemplo:
CLASS TWzdSample FROM TIDEWizard
METHOD Run()
END CLASS
METHOD Run() CLASS TWzdSample
LOCAL oForm
WITH OBJECT oForm := ::AddForm()
:SetBounds( 246, 223, 307, 137 )
:SetClientSize( 299, 103 )
END WITH
WITH OBJECT ::AddComponent( TLabel(), oForm )
:SetBounds( 12, 12, 26, 14 )
:cText := "User:"
END
RETURN Nil
Este pequeño ejemplo lo único que hace es crear un nuevo formulario en el IDE y añadir un objeto TLabel. Observe las llamadas a AddForm() y AddComponent() que son métodos de la propia clase TWizard.
Para que el IDE sea capaz de reonocer ese código dentro de la DLL es necesario indicarle su existencia en un INIT PROCEDURE dentro de la propia DLL y utilizando la función RegisterWizard. Como suele ocurrir, un ejemplo es lo más descriptivo para entenderlo:
INIT PROCEDURE WzdInit()
RegisterWizard( "A sample",;
{|| TWzdSample():New() },;
"comments",;
cBitmap )
RETURN
A continuación os dejo el prototipado de la clase TWizard cuya documentación se encontrará en la ayuda del propio IDE para que veáis todos los miembros de dicha clase cuyo uso es prácticamente auto explicativo.
CLASS TWizard FROM TComponent
PROPERTY aForms
PROPERTY oActiveForm
DATA nLanguage
METHOD GetActiveForm( oForm ) // --> Nil
METHOD SetActiveForm( oForm ) // --> Nil
METHOD SetActiveModule( cModule ) // --> Nil
METHOD AddForm( lShow ) // --> oForm
METHOD AddModule( cType ) // --> cModule
METHOD AddComponent( oObject, oParent ) // --> lSuccess
METHOD AddCode( cCode ) // --> lSuccess
METHOD AddMethod( cMethod, cParams, cBody, cReturn ) // --> lSuccess
METHOD AddFunction( cMethod, cParams, cBody, cReturn, lStatic ) // --> lSuccess
METHOD AddProcedure( cMethod, cParams, cBody, lStatic ) // --> lSuccess
METHOD AddProperty( cName, cClauses ) // --> lSuccess
METHOD AddEvent( cName, cParams ) // --> lSuccess
METHOD AddEventCode( aObjs, cEventName, cMethod, cBody, cReturn ) // --> lSuccess
METHOD SetControl( oObject ) // --> Nil
METHOD TabWidth() // --> nTabWidth
METHOD ProjectDir() // --> cDir
METHOD Run() VIRTUAL
ENDCLASS
Un cordial saludo,
[El equipo de Xailer]