2011-03-30 12 views
7

Después de años de desarrollo Delphi, ahora tengo cientos de formularios compartidos en todas nuestras aplicaciones. La compilación varía de Delphi 7 a XE, por lo tanto, se puede abrir un formulario en cualquier IDE. La bien conocida adición de propiedad Explicitxx después de Delphi 7 tiene soluciones para evitar que una forma adquiera accidentalmente propiedades que los compiladores anteriores no pueden procesar (por ejemplo, Andreas's DDevExtensions) pero me gustaría un 'interruptor' más positivo que evitara que Delphi hiciera o guardara cualquier forma modificaciones en absoluto. Período.¿Hay una opción Delphi para 'bloquear' el diseño (diseño) de un formulario contra cambios accidentales?

Por supuesto, puede usar el indicador de solo lectura, y un sistema de control de versiones proporciona medios adicionales, especialmente para ver que se haya producido dicha modificación. Sin embargo, lo que realmente me gustaría es un conmutador {$ LockDFM} que podría colocar en la unidad del formulario, o una opción de menú contextual al ver el diseño del formulario.

¿Alguien puede pensar en una forma ordenada de lograr esto?

Gracias

+5

No tengo conocimiento de nada. Confío en mi VCS y programa de fusión para tratar con esto. Además de los maravillosos complementos de Andreas. ¡Lo mismo que tú! –

Respuesta

6

La única cosa que puedo pensar (que no sean las únicas opciones de lectura/VCS) que usted ha mencionado es la opción del menú Edición Lock Controls. Esto establece un indicador que evita que los controles se muevan. No estoy seguro de lo bien que realmente sería, ya que nunca lo intenté; Solo sé que está ahí.

+1

Tristemente, los controles de bloqueo no funcionan para este propósito. Cuando abre un formulario, tiene que deshabilitar/habilitar controles de bloqueo nuevamente para que funcione en ese formulario, pero en ese punto el daño ya está hecho. (QC82764) – PetriW

+0

@PetriW: Gracias. No sabía sobre ese informe de control de calidad. Como mencioné, nunca lo he usado. –

1

En tiempo de diseño, hay Editar-> Bloquear Control.

LE: esto es solo para cambiar el tamaño/reposicionar los controles en los formularios. En cuanto al ObjectInspector, no sé si hay algo que pueda "bloquear" los valores establecidos allí (para que el desarrollador no pueda cambiarlos).

+0

Sí, necesito algo para evitar que Delphi 'actualice' la estructura DFM de ninguna manera. –

3

Helo

Estoy bastante seguro de que Delphi no tiene tal cosa. He estado buscando una solución a este problema también.

Pero, hay una cosa que puede hacer: Puede escribir su propio complemento Delphi usando OTA (Open Tools API). Sé que hay algunas clases que pueden avisarte cuando algo está por ser guardado. Puede interceptar este evento y decidir si desea guardarlo (en su caso, si es un DFM).

Por cierto, si tiene planes para hacer tal componente, dígame. :)

EDIT:

he encontrado un trozo de código que pueden ayudarle. Extraído de http://www.gexperts.org/otafaq.html

TMyFormNotifier = class(TNotifierObject, IOTANotifier, IOTAFormNotifier) 
    protected 
    procedure FormActivated; 
    procedure FormSaving; 
    procedure ComponentRenamed(ComponentHandle: TOTAHandle; const OldName, NewName: string); 
    end; 
+0

Interesante, gracias. –

1

Básicamente, no. Además de las propiedades explícitas de tamaño y posición de F'ing (perdóname mi francés) que IMO nunca debería haber estado en .dfm, hay componentes de terceros que cambiarán las cosas con sólo ver el formulario. F.x. Los componentes de TMS actualizarán un número de versión incluso si no cambió nada desde la versión anterior de sus componentes.

Cuestiones relacionadas