2009-01-13 11 views
5

Pensé que había algo en GExperts para hacer esto, pero no puedo verlo si lo hay.¿Forma rápida de cambiar una propiedad en muchas formas en un proyecto Delphi?

Tengo que cambiar la propiedad SCALED (del valor predeterminado de TRUE a FALSE) en cada formulario en un proyecto que contiene aproximadamente 100 formularios diferentes. Debido a que el valor predeterminado de SCALED es TRUE, en realidad no aparece como una línea en el archivo .DFM (cuando se ve como texto), por lo que no hay nada que pueda 'obtener' con GREP (etc.).

¿Alguien puede sugerir una forma rápida de configurar esta propiedad en todos estos formularios? Los formularios son subclases de varias clases diferentes y realmente no quiero hacer algún tipo de descendiente de TForm intermedio que anule la propiedad SCALED, en parte porque intenté (brevemente) hacer esto y descubrí que el establecimiento de la propiedad SCALED era falso después de la creación heredada no hacía diferencia en el formulario y configurándolo antes de la creación heredada causaba una excepción. :-)

¿Alguien tiene alguna sugerencia? ¡Realmente quiero evitar abrir todos esos formularios uno por uno si puedo evitarlo, aunque sea solo porque me voy a perder uno!

Respuesta

7

Si todos sus archivos DFM no son binarios, sino texto (lo cual es una buena idea, a menos que necesite ser compatible con Delphi 4 o anterior), puede usar grep/sed/awk. El formato de la DFM no es fijo, y en vez de

OldCreateOrder = False 
    Scaled = False 

también podría contener

OldCreateOrder = False Scaled = False 

Para que pueda grep para otra propiedad que sólo TForm tiene, que se fija en la totalidad de su forma un valor que está almacenado en el DFM (OldCreateOrder sería un candidato), y reemplace las líneas con otra línea que contenga dos propiedades.

El formato será corregido la próxima vez que guarde ese formulario en el IDE.

Editar:

Si sus formas son binarios, a continuación, utilizar la herramienta convert.exe en el directorio bin Delphi (usar ruta completa, ya que hay otro convert.exe en Windows) para convertir el DFM en texto , luego agregue la propiedad que falta, luego (opcionalmente) convierta el DFM a binario. Y si no está satisfecho con el formato extraño, convierta el DFM de texto a binario y de nuevo a texto, esto le dará un archivo DFM de texto con el formato correcto. Todo esto es fácilmente scripttable.

+0

Gracias mghie. Los formularios son texto, y este enfoque es lo que estaba tratando de hacer. Sin embargo, dado que la propiedad SCALED es verdadera de manera predeterminada, para empezar no está allí en el archivo .DFM. ¡Esta es una vez en la que hubiera sido útil que las propiedades que quedan en el valor predeterminado se almacenen en la secuencia! – robsoft

+0

¡Acabo de entender a lo que realmente llegabas! Puedo hacer el truco de "dos líneas" para AGREGAR esta asignación a todos los formularios, aunque la propiedad no esté allí. Estoy AGREGANDO una línea, no buscando/reemplazando una propiedad existente. ¡Brillante! Voy a intentar esto ahora. – robsoft

+0

Supongo que no entendiste. Sé que Scaled no está allí, pero puede reemplazar programáticamente "OldCreateOrder = False" por "OldCreateOrder = False Scaled = False" y luego está allí. Tal vez no fui lo suficientemente claro, ¿cómo puedo mejorar mi respuesta? – mghie

8

Recomendaría cambiar todas sus formas para descender de un antepasado común. Luego, en el futuro, puedes cambiar la clase base y la arreglará en todas partes.

Por lo general, prefiero usar siempre una clase de descendiente personalizada sobre una de stock que usaré con frecuencia por este motivo específico.

+0

Este es un buen consejo para nuevos proyectos, pero tal vez demasiado como un cambio en un proyecto maduro. – mghie

+0

Gracias Jim. Probablemente sea lo correcto en el largo plazo, pero obviamente es una pena hacerlo en el corto plazo. :-) – robsoft

+0

Puede hacerlo en un proyecto maduro utilizando una búsqueda y reemplazo globales. Los dividendos son geniales –

2

Sí, GExpert incluye un experto en 'Establecer propiedades de componentes'. Tiene un modo de 'simulación' para ver lo que hará. Esta herramienta es útil para desactivar conjuntos de datos o conexiones de bases de datos antes de compilar sus aplicaciones.

Cuestiones relacionadas