2012-03-02 15 views
8

Recientemente modifiqué uno de mis componentes, y resulta que ya no usa una de las propiedades que usaba anteriormente.Una manera rápida de eliminar propiedades de archivos .dfm en Delphi

Sin embargo, esas propiedades están escritas en varios archivos .dfm durante todo el proyecto. Ahora, cuando intento compilar el proyecto, consigo "Error al leer:. Propiedad < ...> no existe"

La parte complicada es que el valor de la propiedad es de datos binarios (almacenada en múltiples líneas) , y no puedo borrarlo con Delphi replace o notepad ++ regexp (ya que están basados ​​en una única línea).

Así que mi pregunta sería:

¿Hay herramientas de terceros o formas de eliminar fácilmente las propiedades de varios archivos DFM?

+0

si abre su dfm y lo guarda de nuevo, la propiedad no válida no se elimina? se ve extraño ... – teran

+0

@teran El problema es abrir el archivo .dfm en primer lugar. El código de transmisión se objetará en el punto de lectura del archivo .dfm. –

+0

@DavidHeffernan Pensé que IDE pide 'ignorar' o 'eliminar' la propiedad incorrecta con campos binarios. Por ejemplo: coloco 'TAdvGlowButton' (de TMS) en el formulario, luego reemplazo la definición de campo en la clase de formulario (' button1: TButton'), después de abrir la forma como texto (alt + f12) y reemplazo 'TAdvGlowButton' para 'TButton' (por supuesto, el botón TMS tiene más propiedades que el estándar). Entonces, ahora DFM tiene propiedades inválidas. si intento abrir el formulario, IDE pregunta "Ignorar el error y continuar?", y si presiono Ok, se eliminan las propiedades no válidas. – teran

Respuesta

8

Pruebe esta herramienta Delphi DFM properties remover, funciona con versiones anteriores de Delphi pero quizás pueda ayudarlo.

+0

Gracias esto funcionó como un encanto, hace exactamente lo que debería. No estoy seguro de por qué no pude googlearlo – ertx

4

Un posible enfoque es modificar su componente para que sea simplemente capaz de ignorar estas propiedades. De esta forma no tienes que buscarlos en todos y cada uno de los archivos .dfm.

Por ejemplo:

type 
    TIgnoreFormPropertyHelper = class 
    public 
    class procedure IgnoreBooleanProperty(Reader: TReader); 
    class procedure IgnoreIntegerProperty(Reader: TReader); 
    end; 

{ TIgnoreFormPropertyHelper } 

class procedure TIgnoreFormPropertyHelper.IgnoreBooleanProperty(Reader: TReader); 
begin 
    Reader.ReadBoolean; 
end; 

class procedure TIgnoreFormPropertyHelper.IgnoreIntegerProperty(Reader: TReader); 
begin 
    Reader.ReadInteger; 
end; 

type 
    TMyComponent = class(...) 
    .... 
    protected 
    procedure DefineProperties(Filer: TFiler); override; 
    .... 

procedure TMyComponent.DefineProperties(Filer: TFiler); 
begin 
    inherited; 
    Filer.DefineProperty('MyLegacyBooleanProperty', 
    TIgnoreFormPropertyHelper.IgnoreBooleanProperty, nil, False); 
    Filer.DefineProperty('MyLegacyIntegerProperty', 
    TIgnoreFormPropertyHelper.IgnoreIntegerProperty, nil, False); 
end; 
1

El VCL Jedi contiene una herramienta llamada DFMCleaner:

DFMCleaner es una herramienta para quitar propiedades no compatibles desde DFms. Si guarda un archivo dfm en una versión de Delphi y desea usarlo en una versión anterior de , es probable que existan algunas propiedades no compatibles en , generando un error cuando se abre el formulario en Delphi. Lo que es incluso peor, si el dfm es parte de un paquete de tiempo de diseño, Delphi instalará el paquete sin errores pero cuando intente acceder al formulario en tiempo de diseño (por ejemplo, si el formulario es utilizado por un editor de propiedades)), Delphi genera un AV en su lugar.

Se encuentra en jvcl a instalar \ devtools \ DFMCleaner (proyecto con el código fuente y el ejemplo archivo de configuración)

0

En mi caso sólo cerrar el proyecto y la eliminación del archivo DProj ayudó.

Cuestiones relacionadas