Newsgroup: it.comp.lang.c++
Titolo: Derivare form in c++ Builder

Ciao a tutto il NG,
il Problema e' il seguente:
ho creato un form che serve a gestire un certo tipo di dati, ma non la
usero' mai, devo invece derivare invece due form che svolgano alcuni compiti
comuni e alcuni differeziati che devo specificare quando derivo dalla form
base.
Pero' il C++ Builder ha un modo un po' proprietario di gestire le form con
le direttive USEFORM e poi
TApplication->CreateForm. Non so come muovermi per risolvere il problema,
qualcuno mi aiuti...
Magari risponderemi in privato a: 
mle...@tin.it
  Saluti e 10x
     Marco Lerda ( MLProg )

qualcuno mi aiuti...
Non so se ho ben capito il problema...
E' vero che puoi derivare da TForm tutte le classi che vuoi, perň non
č cosě che funziona.
Un Form č composto sostanzialmente da due files: .dfm e  .cpp.
Il primo contiene le informazioni 'grafiche' e le impostazioni dei
componenti che ci hai disegnato sopra, mentre il secondo il codice che
hai scritto per il form.
Per creare un form personalizzato che vuoi riutilizzare, lo devi
creare come un normalissimo altro form e poi , se vuoi, aggiungerlo al
repositry, oppure salvarlo da qualche parte e quando ti serve
aggiungerlo al progetto.
Ciao
Roberto Gerola
_________________________________________
e-mail: 
roge...@tin.it
WWW: 
http://space.tin.it/computer/rgerola

Roberto Gerola
Lo so, ma nel mio programma praticamente utilizzo due finestre uguali che
pero' hanno dei comportamenti diversi, ad esempio, la prima deve
inizializare dei TEdit e la seconda no...
Facendo come dici tu, io uso la stessa risorsa due volte duplicando lo
spazio richiesto.
Io volevo sapere se era possibile fare qualcosa di piu' pulito come due
derivazioni in stile c++ con gli screzzi che porta il Builder.
Il fatto e' che sto' traducendo da OWL a VCL ( da Borland C++ 5.0 a C++
Builder 3.0  ) e con OWL la cose erano molto piu' lineari e coerenti
probabilmente per l'ambiente non RAD
ciao

spazio richiesto.
Puoi creare un form con le risorse comuni e le altre le crei
dinamicamente a run-time, a seconda della finestra che viene
utilizzata.
Non è difficile creare componenti a run time.


Non è difficile creare componenti a run time.
Io non devo creare componenti a run time : i componenti sono identici per le
due finestre.
Quello che cambia sono i comportamenti in risposta agli eventi: ma il vero
problema non e' la vera e propria realizzazione della finestra, il problema
e' far capire al c++ Builder che il voglio utilizzare una finestra derivata
da un'altra e lui ha bisogno di utilizzre le direttive USEFOROM e il metodo
CreateForm che non riesco a compatibilzare con la mia finestra.
Un altro inconveniente e' che se faccio due finestre separate anche se mi
copio il .dfm avro' le risorse duplicate e i metodi comuni duplicati.
Ciao
  e Grazie

 
Prima crei il Form base normalmente, avendo poi cura di toglierlo dalla lista dei Forms auto-creati.
Inserisci come al solito i componenti, il codice e imposti le proprietà del Form e dei componenti. 
Poi lanci il comando File | New, selezioni la pagina (tab) col nome della tua applicazione,
selezioni il Form in questione (ci sarà l'opzione 'inherit' automaticamente selezionata) e otterrai
un nuovo Form derivato dal primo, che eredita anche le proprietà impostate a design time del primo
Form e dei suoi componenti. A questo punto puoi aggiungere membri, ridefinire funzioni virtuali e
riassegnare gestori di eventi (eventualmente richiamando quelli della classe base per poi aggiungere
nuovo codice) e proprietà dei componenti. 
Ripeti la stessa procedura per il secondo Form.
Naturalmente, come per le normali classi derivate, tutte le modifiche che farai sul Form base,
riguardante funzioni e proprietà che non sono state ridefinite nei Form derivati, avranno effetto
anche sui Form derivati. In sostanza, tutto funziona come per le normali classi, con l'aggiunta di
un meccanismo di ereditarietà anche per i dati dei file DFM.
Con lo stesso sitema si possono derivare Form di altre applicazioni, solo che in questo caso i Form
base devono prima essere inseriti nel Repository (e in questo caso si ha anche la possibilità di
copiarli o usarli semplicemente, senza creare dei derivati).

un meccanismo di ereditarietà anche per i dati dei file DFM.
Grazie mille
sei l'unico che mi ha dato l'aiuto giusto per questo problema che mi
assillava da settimane