2012-03-02 12 views
8

Ho recentemente modificato uno dei miei componenti, e così accade che non utilizza più una delle proprietà utilizzate in precedenza.Un modo rapido per rimuovere le proprietà dai file .dfm in Delphi

Tuttavia, tali proprietà sono scritte in più file .dfm in tutto il progetto. Ora, quando provo a compilare il progetto, ottengo "Errore durante la lettura.: Proprietà < ...> non esiste"

La parte complicata è che il valore della proprietà è i dati binari (memorizzati in più linee) e non posso cancellarlo con Delphi replace o notepad ++ regexp (dato che sono basati su una sola riga).

Quindi la mia domanda sarebbe:

Ci sono strumenti di terze parti o modi per rimuovere facilmente oggetti di più file DFM?

+0

se apri il tuo dfm e lo salvi di nuovo, la proprietà non valida non viene rimossa? sembra strano .. – teran

+0

@teran Il problema sta aprendo il file .dfm in primo luogo. Il codice di streaming si opporrà al punto di lettura del file .dfm. –

+0

@DavidHeffernan Ho pensato che l'IDE chiedesse di "ignorare" o "rimuovere" proprietà errate con campi binari. Ad esempio: inserisco 'TAdvGlowButton' (da TMS) nel modulo, quindi sostituisco la definizione del campo in form class (' button1: TButton'), dopo che apro il form come text (alt + f12) e sostituisco 'TAdvGlowButton' in 'TButton' (ovviamente il pulsante TMS ha più proprietà di quelle standard). Quindi, ora DFM ha proprietà non valide. se provo ad aprire il modulo, IDE chiede "Ignora l'errore e continua?", e se premo Ok, le proprietà non valide vengono cancellate. – teran

risposta

8

Prova questo strumento Delphi DFM properties remover, funziona con le vecchie versioni di Delphi ma forse può aiutarti.

+0

Grazie a questo ha funzionato come un fascino, fa esattamente quello che dovrebbe. Non so perché non ero in grado di google – ertx

4

Un possibile approccio consiste nel modificare il componente in modo che sia in grado di ignorare semplicemente queste proprietà. In questo modo non devi cacciarli in tutti i file .dfm.

Ad esempio:

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

Jedi VCL contiene uno strumento chiamato DFMCleaner:

DFMCleaner è uno strumento per rimuovere le proprietà non supportate da DFms. Se si salva un file dfm in una versione di Delphi e si desidera utilizzarlo in una versione precedente di , è probabile che ci siano alcune proprietà non supportate in , generando un errore quando il modulo viene aperto in Delphi. Che cosa è ancora peggio, se la dfm fa parte di un pacchetto in fase di progettazione, Delphi installerà il pacchetto senza errori, ma quando proverai ad accedere al modulo in fase di progettazione (f ex se il modulo è utilizzato da un editor di proprietà), Delphi genera invece un AV.

Si trova nel JVCL-install \ DevTools \ DFMCleaner (progetto con il codice sorgente e file di configurazione esempio)

0

Nel mio caso semplicemente chiudendo il progetto e l'eliminazione ha aiutato il file DProj.