(Delphi 7)
Ho appena provato lo stesso. Date un'occhiata alla prima versione del codice e ai miei commenti qui sotto:
program Project1;
{$IFDEF TESTIFDEF}
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$ELSE}
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$ENDIF TESTIFDEF}
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
A quel punto, ho appena inserito il 2 ° modulo e ho notato che la relativa unità (Unit2.pas) è stato inserito all'interno del primo parte dell'IFDEF, cioè all'interno della parte etichettata "TESTIFDEF", quindi non sovrascrivere il secondo blocco (dopo {$ ELSE}).
Così la soluzione dovrebbe essere:
- definiscono una dichiarazione IFDEF come "{$ IFDEF DELPHIBASISCONFIGURATION}" in luogo del mio "{$ IFDEF TESTIFDEF}" appena verranno tutte le forme.
- definire tante ETICHETTE alternative per le diverse configurazioni con cui si desidera lavorare.
- ogni volta che hai aggiunto un modulo al progetto, copia la riga inserita del primo blocco nei blocchi corrispondenti sotto - a seconda delle tue esigenze ...
- attiva la configurazione richiesta usando l'istruzione define o l'opzione dialogo
- MAI Definire "DELPHIBASISCONFIGURATION";)
Quindi, dovrebbe assomigliare a questa:
program Project1;
{$DEFINE MYCONFIG1} // THIS ONE IS NOW ACTIVE
{$IFDEF DELPHIBASISCONFIGURATION}
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};
{$ELSE}
// THIS IS A "COMMON TO ALL CONFIG" PART
uses
Forms,
// FIRST CONFIGURATION
{$IFDEF MYCONFIG1}
Unit1 in 'Unit1.pas' {Form1},
Unit3 in 'Unit3.pas' {Form3}
{$ENDIF MYCONFIG1}
// SECOND CONFIGURATION
{$IFDEF MYCONFIG2}
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2}
{$ENDIF MYCONFIG2}
// THIS IS THE "COMMON TO ALL CONFIG" END :)
;
{$ENDIF TESTIFDEF}
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
//Application.CreateForm(TForm3, Form3);
//Application.CreateForm(TForm2, Form2);
Application.Run;
end.
come potete vedere, ho scartato le chiamate a Appli cation.CreateForm (...) per Form2 e Form3.
IMHO, di solito è meglio per creare dinamicamente i moduli supplementari al momento in cui si ha realmente bisogno di loro cioè non tutte le forme all'avvio del programma ...
fonte
2009-04-17 14:17:20
Potreste spiegare il motivo per cui si desidera solo _sometimes_ un'unità di essere un membro del vostro progetto? Non capisco lo scopo. –
Nel nostro progetto utilizziamo il FastMM fornito con Delphi per le build di rilascio, ma il FastMM4.pas esterno per le build di debug. Quindi abbiamo un IFDEF intorno "usa FastMM4;" –
@ Url: utilizzo FastMM4 sia per build DEBUG che RELEASE - perché no? Fa parte del repository SVN del progetto e ottengo lo stesso ambiente indipendentemente dalla versione del compilatore. Cosa non va? – mghie