by FiveWiDi » Tue Jan 10, 2012 6:52 pm
Manuel,
Perdonad todos que me intrometa, pero quizás mi experiencia sirva de algo.
No creo que deban ir por ahí los "tiros". El METHOD cGenPrg() tal como está no creo que nos sirva, es más no creo que se llegue a usar dado que requerimos de otros pasos previos a la obtención del código (como es la propia creación de la ventana/diálogo/control) que nos permiten susbsituirlo completamente; me explico.
Yo empezaría desde el principio y seguiría estos pasos:
A) Tengo una pared blanca.
B) Creo una ventana en ella
C) Creo 'n' controles en la ventana
D) Obtengo el código, que usaré en el PRG de la compilación de mi aplicación de "gestión de almacenes" (por decir algo).
Hasta ahí es muy posible que estemos de acuerdo, otra cosa será cómo hacerlo.
Cómo lo haría yo?
Yo, en el punto B) usaría un interfaz para indicar como debe ser esta ventana: su tamaño, su título, si es ventana o diálogo, su color, etc. y que dándole al 'Aceptar' del interfaz se dibuje en la pared blanca; si no ya me direis como le digo el título de la ventana.
Una vez dibujada se puede habilitar que con doble clic sobre la ventana dibujada se vuelva a llanmar al interfaz para escribir el título si lo queremos cambiar, o escoger un nuevo color, o lo que sea, o incluso escribir el código de su cláusula ON INIT.
Lo mismo haría o muy parecido en el punto C) para el caso de los controles, y naturalmente contemplaría el uso de ratón para dimensionar, posicionar, alinear, duplicar, escoger tipos de letra, BMP, colores, etc.
Y aquí voy:
entonces, si he llamado a un interfaz para escribir contenido de lo que sea, éste mismo interfaz en su botón 'Aceptar' también podría guardar ese contenido en HASES, ARRAY, variables públicas, o donde sea.
Si he guardado la información, en este momento soy el dueño de lo que estoy haciendo; estoy desvinculado del comportamiento de Fivewin, y Fivewin está desvinculado del comportamiento del editor de ventanas; no puedo permitir que algun día uno pueda penalizar el desarrollo/evolución del otro.
Sigo:
posteriormente en el punto D) examinaría esos HASES, ARRAY, variables públicas, o lo que sea, y en base a sus valores (y otros como el orden de creación) crearía código Fivewin.
Además en este punto D) puedo decirle que guarde las definiciones de las variables locales en un fichero.... digamos .LCL, así como la definición completa de la ventana y sus controles en otro fichero... digamos SCR.
Porque? Para que? Sencillo, en el PRG mi aplicación de "gestión de almacenes" tendré "#include" como el de este ejemplo:
Ejemplo:
*-------------------------------
FUNCTION uAltacliente()
#include ventanaaltacliente.lcl
../.. código Fivewin de lo que sea, o inicializando variables, etc.
#include ventanaaltacliente.scr
ACTIVATE DIALOG oVentanitaCliente CENTER
../.. código Fivewin de lo que sea, o enviando avisos al operador, etc.
Return Nil
*-------------------------------
Por tanto estaría prescindiendo del METHOD cGenPRG(), y sin necesidad de alterar las clases propias de Fivewin.
A partir de aquí la imaginación, la información la genero y la manipulo yo, por ejemplo el nombre de las variables lo decido yo. Si tengo que examinar código, un array no me dirá tanta información como el nombre propio de la variable ( 'aControles[25] vs cnombreCliente' por ejemplo ).
Otro asunto sería como:
- releer código PRG y crear una ventana y sus controles.
- usar controles de terceros no estándar de Fivewin.
- personalizar controles para que se creen directamente con una valores por defecto.
- tener un editor de PRG que al hacer doble clic sobre "#include ventanaaltacliente.scr" abra directamente el diseño de la ventana.
- establecer el orden de creación de los controles para que en ejecución el orden del foco sea el deseado.
- provocar que los controles de un GROUP (por ejemplo) se "vean" cuando hemos modificado el GROUP (que no queden 'debajo' del GROUP).
En fin, que no veo claro que cGenPRG() sea el camino.
Y te he soltado este rollo, porque ya has demostrado de lo que eres capaz y tu puedes crear una herramienta que haga todo eso y más.
Si consigo contenerme ya no daré más la lata.
Gracias.
Un Saludo
Carlos G.
FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10