Modo rapido per modificare una proprietà su molti moduli in un progetto Delphi?

StackOverflow https://stackoverflow.com/questions/441060

  •  22-07-2019
  •  | 
  •  

Domanda

Ho pensato che ci fosse qualcosa in GExperts per farlo, ma non riesco a vederlo se c'è.

Devo modificare la proprietà SCALED (dal valore predefinito TRUE a FALSE) in ogni modulo in un progetto che contiene circa 100 moduli diversi. Poiché il valore predefinito di SCALED è TRUE, in realtà non appare come una riga nel file .DFM (quando si visualizza come testo), quindi non c'è nulla che io possa "ottenere" con GREP (ecc.).

Qualcuno può suggerire un modo rapido di impostare questa proprietà in tutte queste forme? I moduli sono sottoclassi di varie classi diverse e non voglio davvero fare una sorta di discendente TForm intermedio che sovrascrive la proprietà SCALED - in parte perché ho provato (brevemente) a farlo e ho scoperto che l'impostazione della proprietà SCALED è falsa dopo la creazione ereditata non ha fatto alcuna differenza nel modulo e impostandola prima la creazione ereditata ha causato un'eccezione. : -)

Qualcuno ha qualche suggerimento? Voglio davvero evitare di aprire tutti quei moduli uno per uno se posso aiutarlo, se non altro perché sono destinato a perderne uno!

È stato utile?

Soluzione

A condizione che tutti i tuoi file DFM non siano binari, ma di testo (che è una buona idea, a meno che tu non abbia bisogno di essere compatibile con Delphi 4 o precedenti) puoi ovviamente usare grep / sed / awk. Il formato di DFM non è fisso e invece di

  OldCreateOrder = False
  Scaled = False

potrebbe contenere anche

  OldCreateOrder = False Scaled = False

Quindi puoi grep per un'altra proprietà che ha solo TForm, che è impostata in tutti i tuoi moduli su un valore archiviato in DFM (OldCreateOrder sarebbe un candidato) e sostituire le righe con un'altra riga contenente due proprietà.

Il formato verrà corretto la prossima volta che salverai quel modulo nell'IDE.

Modifica

Se i moduli sono binari, utilizzare lo strumento convert.exe nella directory bin di Delphi (utilizzare il percorso completo, poiché esiste un altro convert.exe in Windows) per convertire DFM in testo, quindi aggiungere la proprietà mancante, quindi ( facoltativamente) riconvertire DFM in binario. E se non sei soddisfatto del formato strano: converti DFM da testo a binario e torna a testo, questo ti darà un file DFM di testo correttamente formattato. Tutto questo è facilmente gestibile tramite script.

Altri suggerimenti

Consiglierei di cambiare tutti i tuoi moduli per discendere da un antenato comune. Quindi in futuro puoi semplicemente cambiare la classe base e la riparerà ovunque.

In genere preferisco usare sempre una classe discendente personalizzata rispetto a una di scorta che userò frequentemente per questo motivo specifico.

Sì, GExpert include un esperto "Imposta proprietà componente". Ha una modalità di 'simulazione' per vedere cosa farà. Questo strumento è utile per disattivare set di dati o connessioni al database prima di compilare le applicazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top