![]() |
Modificar un dfm desde fuera del entorno
Hola, estoy trabajando en un programilla para reducir el tiempo de desarrollo de un tipo concreto de aplicacion a traves de automatizar tanto el diseño de los formularios como los controles de obligatoriedad de ciertos campos a rellenar por el usuario, para ello Estoy creando un programilla que a partir de un fichero de texto (o de xml) crea (en realidad modifica) un dfm añadiendo controles al formulario contenido en el fichero, basicamente funciona, pero cuando abro el dfm desde el entorno de delphi (en este caso vers 6) pese a respetar los controles nuevos que he introducido les cambia algunas de las propiedades como el tamaño de la fuente y la anchura!!!. alguien puede indicarme por que ocurre esto (y como evitarlo),
Gracias a todos de antemano Alex |
Puedes ponernos un ejemplo, digamos un trozo del código del DFM como para verlo.
Saludos! |
Ejemplo Codigo
aqui va el ejemplo
Cuando yo ejecuto mi aplicacion lo que hace es crear un fichero .dfm con la descripcion de un formulario, en este (el que yo creo) un de los objetos es este ---------------------------------------------------------------- object P2: TRadioGroup Left = 11 Top = 95 Width = 750 Height = 501 Font.Charset = ANSI_CHARSET Font.Color = clNavy Font.Height = -17 Font.Name = 'Arial' Font.Style = [fsBold] Items.Strings = ( 'Opcion 1' 'Opcion 2' 'Opcion 3' 'Opcion 4' 'Opcion 5' 'Opcion 6') ParentFont = False TabOrder = 0 end ------------------------------------------------------------- hasta aqui todo Ok, yo cojo el fichero que me ha creado la aplicacion y lo copio en un directorio en el que tengo el proyecto de delphi en el que tiene que estar ese dfm, sustituyo al dfm que ya hay en el proyecto con el mio, despues desde delphi abro el proyecto y todo correcto excepto que al fijarme en el objeto concreto que he metido en el codigo del formulario veo que esta de otro tamaño, pongo el formulario en modo texto y veo que: ------------------------------------------------------------ object P2: TRadioGroup Left = 14 Top = 117 Width = 923 Height = 617 Font.Charset = ANSI_CHARSET Font.Color = clNavy Font.Height = -20 Font.Name = 'Arial' Font.Style = [fsBold] Items.Strings = ( 'Opcion 1' 'Opcion 2' 'Opcion 3' 'Opcion 4' 'Opcion 5' 'Opcion 6') ParentFont = False TabOrder = 0 end ------------------------------------------------------------- Las propiedades han sido cambiadas sin que yo hiciese absolutamente nada mas que abrir el proyecto!! Si ahora las corrijo (en modo texto) no hay problema ninguno, pero la idea es tener el .dfm creado perfectamente sin tener que retocar las propiedades para simplemente compilar el proyecto y terminar. A ver si veis o sabeis algo que a mi se me este escapando, porque no veo cual es la razon de que Delphi modifique esos valores la verdad Muchas gracias a todos una vez mas |
Plantillas
Ya, si plantillas ya uso, todo lo que siempre es comun, que en este caso es practicamente toda la aplicacion esta en una plantilla, la idea es que si se pudiese modificar el diseño de los formularios automaticamente dependiendo justamente de esa parte de la aplicacion que es variable, el tiempo de desarrollo seria practicamente nulo. Es decir si desde la informacion de un pequeño fichero de texto o xml yo pudiese modificar y dar forma al dfm de la plantilla, solo tendria que hacer el ficherito (tarea para la que ya tengo otra aplicacion diseñada que hace que puedas tenerlo hecho en menos de 5 min), procesar ese fichero con mi aplicacion de modo que se le añadiesen al dfm todos los objetos que necesite y despues llamar al compilador de linea de comandos o bien abrir el proyecto y compilar desde Delphi. Tendria una aplicacion funcional a partir de la plantilla sin haber escrito una sola linea de codigo. (la aplicacion tambien añade lineas con procedimientos,variables y eventos al .pas dependiendo de las opciones rellenadas en el ficherito xml)
En cualquier caso muchas gracias por la idea Alex |
Propiedad ParentFont
Por si os interesa:
Por ahi me han indicado que el problema podia tener que ver con la propiedad ParentFont de los controles que añado, de tal modo que si la propiedad estuviese a true los controles asumirian la fuente de su Control Padre, de todas formas me asegure de que en los controles insertados ponia explicitamente esa propiedad a false, aun asi las propiedades de los controles se cambian al reabrir el formulario. Teoria: me da la impresion de que si los controles tienen unos valores que no encajan con los de los controles creados de manera estandar por el entorno los cambia al valor estandar mas cercano. en cualquier caso muchas gracias a todos por la ayuda Alex |
Pues no es gran ayuda lo que te puedo dar pero sí te comento que hace unos días cuando pusiste tu mensaje, simplemente copié el objeto del dfm que pusiste y lo pegué tal cual en un dfm cualquiera y funcionó perfectamente.
¿Has probado "poco a poco"? Es decir, hacer pruebas con un formulario más sencillo al que le pegues sólo un objeto dfm. Por cierto, yo lo probé con Delphi7 pero no debería haber gran diferencia con Delphi6. // Saludos |
La franja horaria es GMT +2. Ahora son las 00:13:08. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi