Juste pour ajouter à la réponse de Ken White.
Si vous regardez la source CreateForm:
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
Instance: TComponent;
begin
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try
Instance.Create(Self);
except
TComponent(Reference) := nil;
raise;
end;
if (FMainForm = nil) and (Instance is TForm) then
begin
TForm(Instance).HandleNeeded;
FMainForm := TForm(Instance);
end;
end;
Vous voyez que la fonction (malgré son nom) peut être utilisé pour créer d'autres composants. Mais seul le premier composant qui est un TForm et qui est créé avec succès, peut être la forme principale.
Et puis une diatribe sur les variables globales.
Les globals globaux sont souvent incorrects, mais pour un objet application et un objet mainform, vous pouvez créer une exception. Bien que vous pouvez omettre le global pour la mainform mais vous devez modifier le DPR fichier vous-même:
Change:
begin
Application.Initialize;
Application.CreateForm(TMyMainForm, MyMainFormGlobal);
Application.Run
end.
Pour:
procedure CreateMain;
var
mainform : TMyMainForm;
begin
Application.CreateForm(TMyMainForm, mainform);
end;
begin
Application.Initialize;
CreateMain;
Application.Run
end.
Et vous avez perdu toutes les formes mondiales.
J'avais des souvenirs de quelque chose à voir avec la commande quelque part. L'astuce est que c'est le premier CreateForm (TForm, ...). L'application que je regarde a eu la création de formulaire enfouie parmi les créations de module de données de sorte qu'il n'était pas évident qu'il était le premier. Merci pour le rappel :) – WileCau
Oui, les datamodules ne sont pas éligibles pour être des formulaires principaux (évidemment), et ils sont exclus de la règle du "premier appel" que j'ai mentionnée. Je vais modifier mon message pour refléter cette correction. –
@Ken: Pourquoi est-ce que l'auto-création de modules de données pour y accéder dans le constructeur du formulaire principal serait meilleure que de les créer là? – mghie