J'ai un formulaire que j'utilise pour afficher des informations pendant quelques secondes. Est-il acceptable que le formulaire se libère? Puis-je démarrer une minuterie dans le constructeur, puis appeler self.free dans l'événement timer? Ou cela va-t-il entraîner des problèmes?Delphi: Est-il acceptable pour un formulaire de se libérer?
Répondre
En outre, avec un formulaire, vous pouvez appeler la libération.
Il envoie un message CM_RELEASE au formulaire. En réaction, il appelle Free. L'avantage de la version est qu'il n'y a plus de messages pour le formulaire, ce qui pourrait provoquer un plantage.
J'ai toute une suite d'objets qui se libèrent, et j'ai effectué divers tests sur eux sans problèmes/fuites. Un TForm peut être plus complexe, mais tant que Self.Free() est le dernier appel effectué, vous devriez être en sécurité.
(Pour ceux qui se demandent pourquoi diable j'ai un objet qui se libère, je le passe beaucoup autour du système, donc je le mets en œuvre par son propre système de comptage de référence, quand l'objet se libère).
Mais Self.Free ne sera presque jamais * le dernier appel d'un formulaire car un formulaire exécute presque toujours du code en réaction à une action de l'utilisateur. Utilisez Release à la place. –
Pourquoi ne pas simplement utiliser Interfaces pour le comptage de références? –
Vous pouvez faire le formulaire pour se libérer quand il est fermé par l'utilisateur ou à partir du code:
procedure TForm27.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm27.FormCreate(Sender: TObject);
begin
Timer1.Enabled := True;
end;
procedure TForm27.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
Close;
end;
Assurez-vous que vous fournissez un propriétaire dans le constructeur Incase les arrêts d'application et la forme n'est pas détruite à le temps. Le propriétaire va libérer le formulaire avant de se libérer.
Plus j'y pense, plus j'aime l'idée TCloseAction. Peut-être que je devrais utiliser cela au lieu de la publication ... – Vegar
si seulement les formulaires avaient des propriétés DefaultCloseAction, alors pone pourrait les libérer automatiquement sans assigner de gestionnaires d'événements. –
C'est exactement ce qui est fait avec Interfaces.
Oui, mais vous devez vous rappeler que TComponent de Delphi écrase le comptage de références de l'interface, ce qui provoque souvent de la confusion. –
En utilisant les interfaces, le formulaire serait libéré lorsqu'il sortirait du scoop. Je ne veux pas ça. Je veux qu'il vive aussi longtemps qu'il le veut, sans aucune référence, et qu'il se libère quand c'est fini. – Vegar
Fabio: Je suis sûr que vous pourriez passer outre. Vegar: Les interfaces sont comptées par référence, pas par la portée. – Arafangion
- 1. Libérer plusieurs objets dans delphi
- 2. Est-il acceptable de libérer un objet dans une méthode de la classe de l'objet?
- 3. Comment libérer un tableau d'objets dans un destructeur Delphi 7?
- 4. Créer un formulaire d'options dans Delphi
- 5. Delphi - prévisualiser un rapport Rave sur le formulaire
- 6. Mise à jour des polices récursivement sur un formulaire Delphi
- 7. Comment sous-classer un formulaire dans Delphi? Les meilleures pratiques?
- 8. Dans Delphi 2009 ai-je besoin de libérer des tableaux de variantes?
- 9. Libérer un port TCP/IP?
- 10. Est-il acceptable de renvoyer un KeyValuePair d'une fonction .NET?
- 11. Fichiers de ressources pour Delphi
- 12. Existe-t-il un moyen de stocker un formulaire Delphi dans un fichier .dll?
- 13. L'événement Form_Load ne se déclenche pas sur un formulaire qui hérite d'une autre classe de formulaire
- 14. Lutter avec l'utilisation acceptable de la variable Session dans ASP.NET
- 15. allouer et libérer un char * en C++
- 16. C# normes/style pour un développeur Delphi?
- 17. FitNesse pour Delphi 2006/Delphi 2007/Delphi 2009
- 18. Comment puis-je sortir avec grâce un formulaire MDI qui a l'exécution de code dans Delphi
- 19. Un autre importateur WSDL pour Delphi?
- 20. Horde est-il un cadre acceptable pour le développement de groupware PHP?
- 21. Quand libérer l'objet NSUrlConnection
- 22. Requête pour un formulaire de recherche
- 23. Comment puis-je libérer ou libérer la mémoire allouée à un fichier .wav?
- 24. Motifs pour libérer de la mémoire en C?
- 25. Libérer CGImage (CGImageRef)
- 26. Extraits de code pour Delphi?
- 27. est-il nécessaire de libérer un NSInteger dans iphone?
- 28. Flex n'exporte pas de ressources pour libérer construire
- 29. Générateur d'analyseur pour Delphi?
- 30. Est-il acceptable d'inclure un identifiant dans l'URL?
+1, Ceci est, à mon humble avis, la seule façon propre à faire dans ce cas – Fred
Je pense que je vais aller pour celui-ci, en combinaison avec la définition du propriétaire comme une assurance supplémentaire. – Vegar