Mam formularz, którego używam do pokazywania pewnych informacji przez kilka sekund. Czy to jest w porządku, aby formularz sam się uwolnił? Czy mogę uruchomić zegar w konstruktorze, a następnie wywołać self.free w zdarzeniu timera? Czy może to potencjalnie prowadzić do kłopotów?Delphi: Czy jest w porządku, aby formularz mógł go uwolnić?
Odpowiedz
Ponadto za pomocą formularza można zadzwonić do wydania.
Wysyła komunikat CM_RELEASE do formularza. Jako reakcję nazywa Wolny. Zaletą wydania jest to, że nie ma żadnych wiadomości dla formularza, które mogłyby spowodować awarię.
Mam cały pakiet obiektów, które się wyzwalają, a ja przeprowadziłem na nich różne testy bez żadnych problemów/wycieków. TForm może być bardziej złożony, ale tak długo jak Self.Free() jest ostatnim wywołaniem, powinieneś być bezpieczny.
(Dla tych, którzy zastanawiają się, dlaczego na Ziemi mam obiekt, który się wyzwolił, bardzo często przekazuję je dookoła systemu, więc zaimplementowałem je według własnego schematu liczenia odniesień, a gdy ostatnie odniesienie zostanie zwolnione, obiekt uwalnia się).
Ale Self.Free prawie * nigdy * będzie ostatnim wywołaniem formularza, ponieważ formularz prawie zawsze uruchamia kod w reakcji na akcję użytkownika. Zamiast tego użyj opcji Release. –
Dlaczego po prostu nie używać interfejsów do liczenia referencji? –
Można zrobić formę uwolnić się gdy robi się zamknięte przez użytkownika lub z kodu:
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;
upewnij się, podać właściciela w konstruktorze okrywać z postojów aplikacyjnych i forma nie jest zniszczone w czas. Właściciel zwolni formularz przed uwolnieniem się.
Im więcej o tym myślę, tym bardziej podoba mi się pomysł TCloseAction. Może powinienem użyć tego zamiast wydania ... – Vegar
gdyby tylko formularze miały właściwości DefaultCloseAction, więc pone może je automatycznie zwolnić bez przypisywania procedur obsługi zdarzeń. –
Dokładnie to robi się za pomocą interfejsów.
Tak, ale należy pamiętać, że TComponent Delphi zastępuje liczenie odwołań interfejsu, co często powoduje zamieszanie. –
Korzystając z interfejsów, formularz zostanie zwolniony, gdy zniknie z miarki. Nie chcę tego. Chcę, aby żył tak długo, jak chce, bez żadnych odniesień do niego, a następnie uwolnić go, gdy zrobi to samo. – Vegar
Fabio: Jestem pewien, że możesz to zmienić. Vegar: Interfejsy są liczone, a nie zarządzane w zakresie. – Arafangion
- 1. Czy mogę samodzielnie wygenerować plik .RSM, aby mógł go używać Debugger Delphi?
- 2. Czy muszę uwolnić te obiekty?
- 3. Jak wydrukować formularz w Delphi?
- 4. Czy jest możliwe dodanie "gdzieś" haka `before (: each)`, aby mógł go uruchomić cały plik spec?
- 5. debugger popełnienie samobójstwa, aby uwolnić zombie
- 6. Dystrybucja pliku, aby odbiorca nie mógł go odczytać
- 7. Jak sformatować znacznik czasu w JavaScript, aby wyświetlić go na wykresach? UTC jest w porządku.
- 8. Delphi: Jak uwolnić obiekt utworzony dynamicznie jako parametr metody
- 9. Ukryj główny formularz w aplikacji Delphi 2009
- 10. Delphi onshow główny formularz/forma modalna
- 11. Losowe ciągi w Pythonie 2.6 (czy to jest w porządku?)
- 12. Określanie, czy formularz jest całkowicie poza ekranem
- 13. Jak uwolnić json_object?
- 14. Wykrywanie, czy katalog jest węzłem w Delphi
- 15. Czy korzystanie z AWT z JavaFx jest w porządku?
- 16. Czy możliwe jest getMethods w porządku za pomocą odbić?
- 17. Czy możliwe jest posiadanie formularza zagnieżdżonego (formularz: formularz) na wiosnę
- 18. Jak uwolnić statyczną zmienną składową w C++?
- 19. Jak ustawić contentType posta ajax jQuery tak, aby ASP.NET MVC mógł go odczytać?
- 20. Odtwarzaj dźwięk przez aktywne połączenie telefoniczne, aby inny koniec mógł go usłyszeć.
- 21. Czy mogę stwierdzić, czy formularz jest formularzem "edycji" w szablonie?
- 22. Czy w Go jest pętla foreach?
- 23. Czy w projekcie Go wymagane jest main.go?
- 24. "Delphi Fundamentals" w Delphi 2009
- 25. Delphi - Ustaw formularz, aby nie koncentrował się na żadnym komponencie, gdy pokazuje
- 26. Jak uwolnić obiekt znajdujący się w rejestrze?
- 27. Sprawdź, czy obiekt został utworzony czy nie w delphi
- 28. Czy interfejs API Stripe będzie ponownie wywoływał żądanie Webhook, jeśli mój serwer nie mógł go odebrać?
- 29. Delphi - czy wątek TClientDataset jest bezpieczny?
- 30. Czy jest możliwa ogólna nazwa TInterfaceList Delphi?
+1, To jest IMHO, jedyny czysty sposób na zrobienie tego w tej sprawie. – Fred
Myślę, że pójdę na ten, w połączeniu z ustawianiem właściciela jako dodatkowe ubezpieczenie. – Vegar