![]() |
AW: TImages verwalten
Ich bin jetzt (urlaubsbedingt) schon etwas weiter:
Mein DockForm bietet ein Ereignis an, welches vor dem Löschen ausgelöst wird und die Adresse des DockForms übergibt. Damit bekommt das Hauptfenster mit, das und was gelöscht wurde. Danke insoweit für Eure wertvollen Tipps! Jetzt wollte ich das gern auf Speicherlecks untersuchen, bevor ich weitermache. Dazu habe ich mir FastMM4991 runtergeladen. Ich hatte FastMM schon vor Jahren benutzt. Meiner Erinnerung nach muss man es einfach als erste Unit in die dpr-Datei einbinden. Anderes Infos habe ich trotz Suche im Forum nicht gefunden. Kann es sein, dass FastMM unter Delphi XE5 nicht mehr funktioniert? Es kommt keine Meldung. Auch dann nicht, wenn ich in FormCreate einfach folgenden Code einfüge:
Delphi-Quellcode:
FastMM scheint schon lange nicht mehr gepflegt und explizit zu XE5 und FastMM konnte ich nichts finden.
With tStringList.Create Do
Begin Append('Datenmüll'); End; Was mache ich falsch? Falls FastMM nicht mehr funktioniert, womit erforscht man denn heutzutage Speicherlecks? Gruß, Alex |
AW: TImages verwalten
Delphi-Quellcode:
ist seit ??? in Delphi integriert, wird also schon direkt mitgeliefert.
FastMM
Wenn du den Bericht über Speicherlecks am Ende haben möchtest, dann musst du das lediglich einschalten mit
Delphi-Quellcode:
(am besten gleich am Anfang in der Projekt-Datei)
ReportMemoryLeaksOnShutdown := true;
|
AW: TImages verwalten
Zitat:
Das externe FastMM braucht man eigentlich nur, wenn man z.B. die erweiterten Debuggingfunktionen nutzen möchte. (Prüfen auf Pufferüberläufe, Schreiben nach Free, wer hat was wann erstellt usw.) FastMM funktioniert noch und ja, es muß als Erstes in die DPR (außer man benutzt Packages, denn da muß es als Erstes in die DPK des ersten Packages) |
AW: TImages verwalten
Danke!
Und da ich Delphi jetzt einfach mal so glaube, freue ich mich, dass mein Code bis hierhin keine Speicherlecks produziert hat. Eine letzte Frage habe ich dann aber trotzdem noch: Ich hatte ![]()
Delphi-Quellcode:
Wieso geht es so nicht?
// Aus diesem hier ...
Procedure TMainForm.FormKeyDown(Sender: TObject; Var Key: Word; Shift: TShiftState); Var lDockForm : TDockForm; Begin If (PCPics.PageCount = 0) Then Exit; If (Key = VK_DELETE) Then Begin lDockForm:=fPicList.Items[PCPics.ActivePageIndex]; lDockForm.BtnDelete.Click; End; End; // ... soll auch an mehreren anderen Stellen so etwas hier werden: Procedure TMainForm.FormKeyDown(Sender: TObject; Var Key: Word; Shift: TShiftState); Begin If (PCPics.PageCount = 0) Then Exit; If (Key = VK_DELETE) Then With (fPicList.Items[PCPics.ActivePageIndex] As TDockForm) Do BtnDelete.Click; // geht auch nicht :-) (fPicList.Items[PCPics.ActivePageIndex] As TDockForm).BtnDelete.Click; End; Kann man es irgendwie (anders) machen? [edit] Ich wäre nicht auf die Idee gekommen, dass es mind. 3 Varianten gibt, wie man casten kann. So klappt es:
Delphi-Quellcode:
Aus 8 Zeilen 3 gemacht. Sehr schön.
Procedure TMainForm.FormKeyDown(Sender: TObject; Var Key: Word;
Shift: TShiftState); Begin If (PCPics.PageCount = 0) Then Exit; If (Key = VK_DELETE) Then TDockForm(fPicList.Items[PCPics.ActivePageIndex]).BtnDelete.Click; End; [/edit] Gruß, Alex |
AW: TImages verwalten
Kürzer heißt ja nicht unbedingt übersichtlicher/lesbarer, sprich ich finde den 8-Zeiler verständlicher, aber das ist ja bekanntlich Geschmacksache. Aber getreu dem Motto Wenn-Schon-Denn-Schon würde ich dann aber auch einen Zweizeiler draus machen:
Delphi-Quellcode:
So fällt auch das unschöne (ich weiß: auch weider Geschmacksache) vorzeitige exit weg.
If (Key = VK_DELETE) And (PCPics.PageCount > 0) Then
TDockForm(fPicList.Items[PCPics.ActivePageIndex]).BtnDelete.Click; |
AW: TImages verwalten
ReportLeaksOnShutdown zeigt natürlich nur Speicherlecks, die beim Beenden der Anwendung noch bestehen. Ist also z.B. nicht geeignet um 24/7 Anwendungen Lecks zu finden, wenn Objekte mit dem Hauptform als Owner erstellt werden. (Soll es ja geben)
|
AW: TImages verwalten
Zitat:
Einen Zweizeiler kann ich nicht drauß machen, weil später andere Tastenabfragen hinzukommen werden. Ich fange gerade erst an. Ich mag ein solches Exit auch nicht wirklich aber es spart einen Tab-Einzug und macht den weiteren Code damit lesbarer. Zitat:
Gibt es einen Schalter, mit dem man auch die bösen, unsichtbaren Lecks des Hauptforms herausfindet? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz