Newsgroup: it.comp.programmare.win32
Titolo: Dubbi con C++ Builder

Salve.Ho due dubbi(penso siano banali,ma sono alle prime armi):
1) Ho trovato il seguente esempio(premendo il bottone si apre una nuova
finestra)
void __fastcall TForm1::Button1Click(TObject* /*Sender*/)
{
    TForm2 *Form2;
    Form2 = new TForm2(Application);
    Form2->ShowModal();
    delete Form2;
}
Non basta solo l'istruzione   Form2->ShowModal();  ???
2)Il mio programma è costituito da una finestra principale (Form1) e una
finestra di opzioni (Form2).
Form2 deve passare a Form1 le impostazioni scelte dall'utente,ma Form1
non le "vede",dato che queste variabili sono definite e visibili solo
nel modulo di Form2 .Come devo fare?C'entra forse "extern"?
Grazie.

nel modulo di Form2 .Come devo fare?C'entra forse "extern"?
Devi modificare il prototipod i Form2 in modo che Form2->ShowModal
richieda una struttura passata per reference, da riempire con i dati
che devi passare a form1.
Quando Form1 chiama Form2->ShowModal(nomstuttura strutt) invece di
Form2->ShowModal();
Pero' devi anche ricordarti prima di chiamare Form2 di creare una
struttura vuota.
-- 
DGP85
http://daps.cjb.net/
No HTML or Binaries with this address


1) In grossi progetti creare tutte le form all' avviamento dell'
applicazione produce un consistente quanto ingiustificato spreco di risorse.
Occorre quindi, caso per caso, valutare la convenienza di utilizzare un modo
o l' altro.
2) Puoi passare i parametri alla creazione della form modificando il
costruttore oppure alla visualizzazione modificandosempre il prototipo della
funzione ShowModal oppure senza toccare le funzioni standard puoi creare una
funzione SetForm2(... parametri...) pubblica da chiamare prima di
ShowModal() oppure ancora (nei soli casi in cui si giustifica e quindi da
evitare dai principianti in quanto pessimo stile di programmazione) definire
dei membri dati pubblici della classe Form2 ed inizializzarli prima di
ShowModal().
Tieni comunque presente che i componenti VCL della form sono published e
quindi visibili.
es. Form2->Edit1->Text = "pippo";
a ritroso dopo lo ShowModal e prima dell' eventuale delete(o, meglio,
Free()) : AnsiString valore1 =  Form2->Edit1->Text;
oppure puoi creare funzioni del tipo GetForm2Param() oppure andare a leggere
i membri pubblici.
Sergio Bianchi

 nel modulo di Form2 .Come devo fare?C'entra forse "extern"?
Da quello che scrivi forse il problema e' che Form2 non si vede da
Form1.
Se questo e' il problema il motivo piu' probabile e' che manca
all'inizio
del file .cpp di codice della Form1 (default e' "Unit1.cpp"):
#include "Nome_del_file_di_codice_di_Form2.h"  //(default e' "Unit2.h")
In effetti il Builder mette alla fine di ogni header la dichiarazione
del puntatore all'oggetto che rappresenta la form, tipo:
extern PACKAGE TForm2 *Form2;
che e' appunto extern e quindi visibile a livello piu' alto.
Se includi quindi in un qualsiasi .cpp l'header corrispondente alla form
(in questo caso quello di Form2) vedrai Form2. Tutti gli oggetti (o
variabili) di Form2 che ti serviranno le userai come:
Form2->Width = 100;
Ciao
Giovanni

 Giovanni
...o forse hai messo le variabili in questione nella sezione protected  o
private, se e' cosi' il compilatore ti dice che tali variabili non sono
visibili. In questo caso metti le variabili in questione nella sezione
public o dichiara una funzione public che ti ritorni il valore delle
variabili
ciao
Ermando