AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TImages verwalten

Ein Thema von Schwedenbitter · begonnen am 10. Okt 2014 · letzter Beitrag vom 5. Nov 2014
Antwort Antwort
Seite 3 von 3     123   
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#21

AW: TImages verwalten

  Alt 4. Nov 2014, 14:13
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:
With tStringList.Create Do
Begin
  Append('Datenmüll');
End;
FastMM scheint schon lange nicht mehr gepflegt und explizit zu XE5 und FastMM konnte ich nichts finden.

Was mache ich falsch?
Falls FastMM nicht mehr funktioniert, womit erforscht man denn heutzutage Speicherlecks?

Gruß, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: TImages verwalten

  Alt 4. Nov 2014, 14:41
FastMM ist seit ??? in Delphi integriert, wird also schon direkt mitgeliefert.

Wenn du den Bericht über Speicherlecks am Ende haben möchtest, dann musst du das lediglich einschalten mit ReportMemoryLeaksOnShutdown := true; (am besten gleich am Anfang in der Projekt-Datei)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 5. Nov 2014 um 10:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#23

AW: TImages verwalten

  Alt 4. Nov 2014, 15:13
FastMM ist seit ??? in Delphi integriert,
Ich glaub D2006/TDE, also würde passen.

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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#24

AW: TImages verwalten

  Alt 5. Nov 2014, 10:33
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 hier (etwas weiter unten) bereits geschrieben, wie ich auf die einzelnen Forms im PageControl zugreife. Den Code habe ich um 2 Zeilen kürzen können. Ich würde es aber gern noch übersichtlicher gestalten und daher den Zugriff casten. Folgendes funktioniert leider nicht:
Delphi-Quellcode:
// 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;
Wieso geht es so nicht?
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:
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;
Aus 8 Zeilen 3 gemacht. Sehr schön.
[/edit]

Gruß, Alex
Alex Winzer

Geändert von Schwedenbitter ( 5. Nov 2014 um 10:44 Uhr) Grund: Lösung gefunden
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#25

AW: TImages verwalten

  Alt 5. Nov 2014, 11:40
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:
If (Key = VK_DELETE) And (PCPics.PageCount > 0) Then
  TDockForm(fPicList.Items[PCPics.ActivePageIndex]).BtnDelete.Click;
So fällt auch das unschöne (ich weiß: auch weider Geschmacksache) vorzeitige exit weg.
Ralph
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#26

AW: TImages verwalten

  Alt 5. Nov 2014, 12:30
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)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#27

AW: TImages verwalten

  Alt 5. Nov 2014, 13:08
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 ...
So fällt auch das unschöne (ich weiß: auch weider Geschmacksache) vorzeitige exit weg.
Das stimmt. Es fragt sich bloß, was am Ende (durch mich) besser zu warten sein wird. Das weiß nur die Zeit.
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.

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)
Danke für die Erläuterung. Das mit dem Hauptform als Owner gilt dann sicherlich auch für Objekte auf dem Hauptform (z.B. TPageControl) als Owner. Das würde ich natürlich auch gern testen.

Gibt es einen Schalter, mit dem man auch die bösen, unsichtbaren Lecks des Hauptforms herausfindet?
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz