Il codice NON deve essere copiato.
Spiego meglio con un esempio pratico, anche se in modo discorsivo.
Supponi di creare una form di base che al suo interno contenga una IBTable (per semplicità), un controllo DBGrid e un controllo DBNavigator, più l'essenziale DataSource.
Inoltre, immagina di aggiungere un paio di pulsanti per aprire e chiudere la tabella, scrivendo il codice appropriato che richiami i metodi Open e Close del componente TTable.
Questa "base" potrebbe andare benissimo per qualsiasi dato che devi sfogliare sottoforma di griglia.
Se devi usare la stessa interfaccia per diverse tabelle, perchè copiare e incollare i componenti, i controlli e il codice di gestione degli eventi?
Ti basta configurare la form di base affinchè sia in grado di agire su una tabella specifica; successivamente, crea un discendente di questa form nel modo che ti ho indicato precedentemente e prova a sostituire il nome della tabella nel discendente.
Usando un progetto di prova contenente la form base e due discendenti per i quali sono state attribuite due tabelle differenti al TTable, prova a creare (in modo rapido, puramente esemplificativo) un'istanza del primo discendente e del secondo, oppure puoi metterli in AutoCreate e visualizzarli.
Noterai che senza scrivere una riga di codice, salvo che per la finestra di base, le due form funzioneranno egregiamente ciascuna basandosi sulla tabella ad essa assegnata.
Il principio si basa sull'introduzione nella form di base di un componente e del codice che consente di aprire, chiudere, aggiornare la tabella, sempre parlando per esempi; creare un discendente significa ereditare tutte le caratteristiche della form di origine, infatti ritrovi all'interno della tua form gli stessi controlli e componenti della form di base, ma senza la necessità di ridichiararli poichè fanno parte della form discendente per principio.
Il codice introdotto nella form di base funziona allo stesso modo anche nel discendente, ma hai la possibilità di modificare le proprietà del discendente affinchè la tua classe di form si comporti in modo più specifico.
Il concetto è più facile da comprendere che da spiegare.
Un esempio ancora più banale: supponi di aver bisogno di un numero elevato di form nel tuo programma per le quali vuoi costruire una barra per un titolo usando un pannello colorato, magari con un gradiente, posizionato nella parte alta. Metterlo in tutte le form può risultare tedioso, mentre ti basterebbe definire la tua form di base posizionando il pannello su di essa e, successivamente, ereditare da questa form per avere subito un modello già pronto che abbia il pannello presente nella parte alta.
Ti basterebbe semplicemente cambiare il titolo nel pannello, ma per il resto non devi scrivere ne progettare nulla: è già tutto pronto.
L'esempio è chiaramente banale, ma se pensato in modo astratto e per problematiche più complesse, può rendere drammaticamente rapido lo sviluppo di un'applicazione, ridurre drasticamente il codice necessario a realizzarla e organizzarlo meglio per renderlo più mantenibile limitando il numero di bug, spesso dovuti al copia e incolla di codice errato che devi correggere allo stesso modo in tutta l'applicazione.
Se trovo qualche tutorial apprezzabile riguardo questo argomento, te lo segnalo.
Ciao!![]()