FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Otra opción más sencilla que se me ocurre es esta:
(1) Abrir los ficheros (DFM) (2) Cambiar las líneas como esta:
Por otra como esta:
Y crear un componente como este:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#2
|
||||
|
||||
Ahora que has comentado lo de RTTI, se me ha ocurrido otra forma de hacerlo durante la ejecución, en la que no haría falta modificar el código fuente de los DFM.
(1) Poddemos capturar la apertura de un formulario utilizando:
(2) Y en ese momento podemos modificar en ejecución todos los TDBGrid que existan en ese formulario cambiandoles la propiedad ReadOnly.
Lo he probado con un ejemplo y en mi caso en diseño todos los DBGrid son blancos y en ejecución les cambio el color (pero podría cambiar el ReadOnly).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
||||
|
||||
La primera opción es más sencilla, al alcance de casi cualquiera.
La segunda opción es más profesional, aunque no sé si valdría la pena "cargar" con un nuevo componente clonado. Desde luego, la opción sencilla y "semi" chapucera es la más cómoda EDITO: La tercera opción, también bastante profesional puede que añada unos milisegundos más en la carga de cada Form, sobre todo si hay muchos componentes.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 14-04-2016 a las 18:27:21. |
#4
|
||||
|
||||
La segunda opción es ingeniosa, no cabe duda, pero cargaríamos con un componente de palo que sería como un invitado molesto . La tercera opción es la más sencilla pero, como dice maese Casimiro, un poco chapucera y quizá buena para algo temporal.
Por RTTI, pensaba yo más bien en leer un DFM como lo hace el IDE, usando un TReader, pero creo que puede complicarse el asunto al no saber de antemano las clases que deben registrarse. La primera opción, el parseo del texto, creo que sería la más adecuada, pero de pronto no me parece tan sencilla o al alcance de cualquiera, considerando que el DBGrid puede estar anidado en otros contenedores y hay que determinar bien dónde termina la lista de sus propiedades. Vamos, creo que es algo que parece sencillo pero que presentará complicaciones a la hora de implementarlo. Creo que es un reto interesante, y me parece que sería igual de sencillo (e igual de difícil) pensar en algo más general: parsear todo el DFM y almacenarlo en una estructura de datos manejable por código. Pero desconozco con qué detalles podemos encontrarnos. Por ejemplo, en principio había pensado que el DFM era una lista de propiedades y subobjetos Código:
object name: class property = value property = value ... object name: class .. end .. Código:
property = < item property = value property = value ... end item property = value property = value ... end ... LineComment Saludos |
#5
|
||||
|
||||
Las "sorpresas" que comenta román, las he vivido.
En algunos componentes, al cambiar una propiedad a cierto valor, el IDE de Delphi retoca automáticamente otras propiedades para que todo sea coherente (no recuerdo el caso concreto). La ventaja de hacerlo con Cnpacks, es que cambia la propiedad y ordena al IDE que cargue el componente, así que el IDE retoca las demás. Un ejemplo, aunque no sea el caso, si modificas la propiedad Color de un panel, se cambia la propiedad ParentColor a False. Si el cambio lo haces tú por RTTI, tendrás que modificar ambas propiedades porque "Delphi no se entera del cambio que has hecho". Repito que este no es el caso porque lo hace la clase TControl, pero cuando tienes paquetes en tiempo de diseño de algunos componentes, ellos hacen el trabajo sucio por tí. Por cierto, como siempre, ideas alternativas muy ingeniosas. Cuidadito con proyectos que tengan algún form guardado en Binario en lugar de "text DFM" (ya sea por error o lo que sea, también me ha pasado ) Saludos!
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
||||
|
||||
Cita:
Luego, como no encontraba información acerca de la estructura del DFM, se me ocurrió googlear DfmToJson, ya que, a final de cuentas, mi intención es guardar el DFM de forma estructurada y, como quiera, eso es lo que hace Json. Y pues resulta que ya alguien pensó en eso y -para mi sorpresa- básicamente usa lo que había pensado: una copia ad hoc de ObjetTextToBinary LineComment Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
¿Como sincronizar dos o mas Grids? | AzidRain | Varios | 4 | 23-12-2011 03:41:28 |
Modificar el exe resultante de un Proyecto en Delphi 5 | radge | Varios | 5 | 08-09-2010 17:36:10 |
Cambiar propiedad a todos los componentes de un proyecto | jcarteagaf | Varios | 6 | 06-03-2008 23:55:33 |
Un proyecto para todos los reportes o... | Johnny Q | Impresión | 0 | 28-07-2005 22:50:08 |
acceder a todos pero modificar algunos... | Alfredo | OOP | 5 | 21-12-2004 17:55:39 |
|