2013-12-16 38 views
5

Diciamo che ho un datamodule con una ImageList. Ho anche un modulo con un pulsante. Se volessi collegare la proprietà ImageList del pulsante, aggiungerei il DataModule ai moduli, quindi seleziona l'ImageList nel menu a discesa Immagine nelle proprietà del pulsante.Ci saranno effetti dannosi se rimuovo accidentalmente qualcosa da una lista di forme utilizza cui fa riferimento un controllo?

Tuttavia, ora posso rimuovere il DataModule dall'elenco dei moduli utilizza e le cose sembrano funzionare correttamente.

Inoltre, se il DataModule è aperto nell'IDE e non nell'elenco di moduli usa, posso digitare manualmente nella proprietà images del pulsante il nome dell'elenco di immagini e sembra che visualizzi correttamente l'immagine sul pulsante.

La domanda: ci saranno effetti dannosi se rimuovo accidentalmente qualcosa da una lista di moduli utilizza cui fa riferimento un controllo?

Attualmente sono in fase di pulizia degli elenchi degli usi di centinaia di moduli in un progetto di grandi dimensioni (utilizzando cnPack e Icarus) e voglio sapere quanto devo essere attento (o spietato).

+0

Si consiglia di spostare tali unità nella clausola Implementazione usi. questo protegge il DFM e tuttavia rende l'interfaccia utilizza la clausola più pulita. –

risposta

5

per l'IDE di essere in grado di trovare un datamodule (per le proprietà non previa programmazione) in fase di progettazione, le seguenti condizioni devono essere vere:

  • Il DataModule deve essere aperta/creato almeno una volta durante la sessione di l'IDE (può essere chiuso in seguito durante la sessione), vedere (*), e
  • L'unità DataModule deve essere presente nella clausola uses dell'unità Form.

per l'IDE di essere in grado di trovare di nuovo un datamodule (per le proprietà già impostate) in fase di progettazione, le seguenti condizioni devono essere vere:

  • Il DataModule deve essere aperta/creato almeno una volta durante il sessione del IDE (esso può essere richiusa dopo durante la sessione), o
  • l'unità DataModule deve essere presente nella clausola usi dell'unità modulo, o
  • il DataModule ONU deve essere aggiunto al file di progetto.

Per il programma riuscire a trovare un DataModule (per le proprietà già impostate) a runtime:

  • Il DataModule deve essere creato, o
  • L'unità DataModule deve essere presente nel usa la clausola dell'unità Modulo.

Per il programma riuscire a trovare un DataModule (oggetti non impostato) in fase di esecuzione:

  • L'unità DataModule deve essere presente nella clausola usi dell'unità modulo.

Quindi, in teoria, se sono soddisfatte tutte le giuste condizioni, l'unità DataModule potrebbe essere omessa dalla clausola uses del Form. Ma per essere sicuro del collegamento di runtime, concluderei che non c'è alcuna via d'uscita sicura o almeno non conveniente dall'aggiungere l'unità DataModule alla clausola usi dell'unità Form.


(*) In progetti di grandi dimensioni con molte forme e DataModules, è molto comune per non aprire ogni DataModule nell'IDE, e le impostazioni facilmente può perdere. La dipendenza dal vincolo del design in base al nome DataModule può comportare che i tuoi moduli non mostrino mai dati (o immagini in questo caso). Questo è un bug che è difficile prevedere senza verificare le impostazioni di DataModule di ogni modulo.

Una soluzione è quella di impostare manualmente tutte le proprietà che fanno riferimento ai componenti di un DataModule in fase di esecuzione, preferibilmente in un costruttore sovrascritto o in un gestore di eventi OnCreate. Ciò impedisce anche problemi di denominazione duplicati con più istanze DataModule, come le offerte con this question.

4

Il collegamento delle proprietà del componente (come Immagini) è indipendente da una voce appropriata nell'elenco degli usi. La magia è nascosta all'interno del sistema di streaming (cercare xxxFixUpReferences). Finché il compilatore non si lamenta, puoi tranquillamente rimuovere quelle voci.

È ancora possibile che l'IDE non sia soddisfatto.