Création dynamique de fiches
Remonter à Contrôle du stockage en mémoire des fiches
Toutes les fiches de votre application n'ont pas besoin d'être en mémoire simultanément. Pour réduire la quantité de mémoire nécessaire au chargement de l'application, vous pouvez créer certaines fiches uniquement quand vous en avez besoin. Ainsi, une boîte de dialogue n'a besoin d'être en mémoire que pendant le temps où l'utilisateur interagit avec elle.
Pour spécifier dans l'EDI que la fiche doit être créée à un autre moment pendant l'exécution, procédez de la manière suivante :
- Sélectionnez Fichier > Nouveau > Fiche dans le menu principal afin d'afficher la nouvelle fiche.
- Retirez la fiche de la liste Fiches créées automatiquement dans la page Projet > Options > Fiches.Cela supprime l'appel de la fiche au démarrage. Vous pouvez également retirer manuellement la ligne suivante au point d'entrée principal du programme
Application.CreateForm(TResultsForm, ResultsForm);
Application->CreateForm(__classid(TResultsForm), &ResultsForm);
- Appelez la fiche au moment souhaité en utilisant la méthode Show de la fiche si la fiche est non modale ou la méthode ShowModal si la fiche est modale.
Un gestionnaire d'événement de la fiche principale doit créer et détruire une instance de la fiche résultat. Une manière d'appeler cette fiche consiste à utiliser la variable globale comme dans le code suivant. Remarquez que ResultsForm étant une fiche modale, le gestionnaire utilise la méthode ShowModal
procedure TMainForm.Button1Click(Sender: TObject);
begin
ResultsForm := TResultForm.Create(self);
try
ResultsForm.ShowModal;
finally
ResultsForm.Free;
end;
end;
void __fastcall TMainMForm::FirstButtonClick(TObject *Sender)
{
ResultsForm = new TResultsForm(this);
ResultsForm->ShowModal();
delete ResultsForm;
}
Dans l'exemple précédent, notez l'utilisation de try..finally. Placer la ligne ResultsForm.Free; dans la clause finally garantit que la mémoire allouée à la fiche est libérée même si la fiche déclenche une exception.
Dans cet exemple, le gestionnaire d'événement supprime la fiche après sa fermeture, la fiche doit donc être recréée si vous avez besoin de ResultsForm ailleurs dans l'application. Si la fiche était affichée en utilisant Show, vous ne pourriez la supprimer dans le gestionnaire d'événement car, après l'appel de Show, l'exécution du code du gestionnaire se poursuit alors que la fiche est toujours ouverte.
Remarque : Si vous créez une fiche en utilisant son constructeur, assurez-vous que la fiche n'apparaît pas dans la liste Fiches créées automatiquement de la page Projet > Options > Fiches. En effet, si vous créez une nouvelle fiche sans avoir détruit la fiche de même nom dans la liste, Delphi crée la fiche au démarrage et le gestionnaire d'événement crée une nouvelle instance de la fiche, ce qui remplace la référence à l'instance auto-créée. L'instance auto-créée existe toujours mais l'application n'y a plus accès. A la fin du gestionnaire d'événement, la variable globale ne pointe plus sur une fiche valide. Toute tentative d'utiliser la variable globale entraînera probablement le blocage de l'application.