2011-12-20 16 views
9

Sto rifattorizzando un progetto di grandi dimensioni e ho la necessità di spostare alcuni componenti in nuovi moduli e moduli. Esiste un modo corretto per assicurarsi che le proprietà dei componenti dipendenti vengano aggiornate?In Delphi c'è un modo per vedere tutti i riferimenti e collegamenti a un componente?

Forse grep dfms del progetto?

Esempio: spostamento di un TDataSource da un enorme DataModule ad una più piccola. In alcuni casi la fonte poteva essere referenze di 40-50 forme. Devo assicurarmi che tutti i controlli che fanno riferimento all'origine dati vengano aggiornati.

+0

Avrei grep i file dfm e quindi userei uno script basato su perge perl per apportare le modifiche necessarie –

+2

Le versioni successive di Delphi consentono di refactoring e rinominare dall'editor. Hai provato quella funzione? Inoltre, è una buona idea rimuoverlo completamente dalla posizione originale o rinominarlo in modo che il compilatore catturi ciò che ti manca. –

+1

@marcus rinomina refactoring non funziona mai con progetti del mondo reale. Sarei sbalordito se gestisse i riferimenti ai file dfm. –

risposta

6

Il GREP in GEXperts permette di cercare entrambi i pas e file DFM.

+0

Questo è stato il modo più veloce per me per ottenere esattamente quello che volevo. –

+0

Non sarei sorpreso se ModelMaker CodeExplorer avesse anche alcune potenti funzionalità in quest'area. –

5

Innanzitutto, spero che tu stia utilizzando il controllo della versione.

Mi rendo conto che questa è una risposta "così ovvia", ma il modo migliore che ho trovato per vedere tutti i riferimenti e collegamenti a un componente è (utilizzando il controllo di versione in modo da poter annullare tutte le modifiche in seguito), rinominare la proprietà o componente, e quindi vedere quali interruzioni.

Pascal Analyzer non è di grande aiuto qui.

Le funzionalità di refactoring di Delphi potrebbero essere utili (provare a ridefinire il nome di refactoring e vedere in quanti punti può suggerire che esso cambierà automaticamente il proprio nome). Non applicare la modifica, semplicemente rivedere i suggerimenti.

Per quanto riguarda "in movimento piuttosto che rinominare" un certo controllo o una risorsa, chiedono "perché" si sta facendo. Perché spostare l'origine dati? Un'origine dati è semplicemente un punto di atterraggio per i tuoi controlli di rilevamento dei dati e ti è consentito avere più di un'origine dati che punta a un singolo set di dati. Perché non spostare solo i set di dati e lasciare le origini dati dove si trovano?

+0

Origini dati incluse in un MEGADATAMODULE che viene ora diviso e le origini vengono inserite nei moduli che ne hanno bisogno. –

+3

In Pascal Analyzer, "Breve riferimento incrociato" mostra dove vengono utilizzati tutti gli identificatori. –

+0

Ok, forse mi sbagliavo allora. +1 a Bruce. –

4

Se stai usando XE o successivo, è possibile fare clic destro sul nome di un componente o altro identificatore nell'editor di codice e selezionare Search for Usages per ottenere la lista dei riferimenti per aggiornare.

Aggiornamento: Sfortunatamente, questo funziona solo per i riferimenti al codice sorgente e non mostra dove viene utilizzato un identificatore nel DFM.

+0

Bel trucco! Non sapevo nemmeno che fosse lì dentro! –

+0

Non vedo questo lavoro sul livello dfm. Devo trovare l'elenco a discesa che ho appena ucciso rinominando o spostando la sua tabella di ricerca. Nella mia esperienza, queste istanze non possono essere trovate tramite il controllo della sintassi né la ricerca degli usi entra in dfms. –

+4

Trova usi nei file DFM? Ho provato una TImageList in un datamodule collegato a un menu e una barra degli strumenti in due diversi frame: nessuno dei frame è stato trovato. –

0

In Delphi o Notepad ++, fare una ricerca in file per MEGADATAMODULE, ed essere sicuri di includere il vostro intero ramo fonte. Questo dovrebbe trovare tutte le istanze. Puoi anche, usando Notepad ++, effettuare la ricerca su tutti i binari .dcp, .bpl, .dll e .exe, per vedere cosa dovrebbe essere ricostruito.

+2

AFAIK, "Trova nei file" in Delphi non trova riferimenti nei file DFM. –

+1

lo fa, se, invece di "cercare in tutti i file nel gruppo di progetto", si utilizza "cerca nelle directory" e si utilizza la maschera file corretta. –

Problemi correlati