AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Record zu TStringlist hinzufügen
Thema durchsuchen
Ansicht
Themen-Optionen

Record zu TStringlist hinzufügen

Ein Thema von EWeiss · begonnen am 12. Jun 2017 · letzter Beitrag vom 14. Jun 2017
Antwort Antwort
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.781 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Record zu TStringlist hinzufügen

  Alt 14. Jun 2017, 12:10
.. wenn Du das
Delphi-Quellcode:
 DeleteObject(h_Bitmap);
                        h_Bitmap := 0;
In Destroy der Sprite Klasse durchführst - benötigst Du diese Schleife zum Löschen nicht mehr.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Record zu TStringlist hinzufügen

  Alt 14. Jun 2017, 12:15
.. wenn Du das
Delphi-Quellcode:
 DeleteObject(h_Bitmap);
                        h_Bitmap := 0;
In Destroy der Sprite Klasse durchführst - benötigst Du diese Schleife zum Löschen nicht mehr.

Grüße
Klaus
Jo Danke.
Ich kann es aber so nicht mit Destroy machen weil Sprites.Free schon NIL ist wenn es in Destroy ankommt.
Das führt zu einem Ivalide Poiter error weil Sprite.free schon vorher alles weggeräumt hat.

Zitat:
Wenn "Sprite" bereits der Liste "Sprites" hinzugefügt wurde, ist die Liste Eigentümer dieses Objektes und kümmert sich selbst um die Freigabe.
Ja Ausgenommen davon sind die Ressourcen in dem Fall das HBitmap was ich vorher freigebe. (Ohne Destroy).

gruss

Geändert von EWeiss (14. Jun 2017 um 12:19 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Record zu TStringlist hinzufügen

  Alt 14. Jun 2017, 12:18
Du darfst NICHT die Liste im Destroy des einzelnen Listen-Elements freigeben!!!
Du sägst dir den Ast ab, auf dem du sitzt!

Sorry, aber dir fehlen die banalsten Grundlagen in Objekt-Orientierter-Programmierung!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Record zu TStringlist hinzufügen

  Alt 14. Jun 2017, 12:23
Du darfst NICHT die Liste im Destroy des einzelnen Listen-Elements freigeben!!!
Du sägst dir den Ast ab, auf dem du sitzt!

Sorry, aber dir fehlen die banalsten Grundlagen in Objekt-Orientierter-Programmierung!
Woran siehst du das ich diese freigebe?
Sorry aber lese einfach nochmal was ich freigebe Das HBitmap mehr nicht.
Das ich Destroy definieren soll kam nicht von mir.

Also Lesen!
Bitte und jetzt schreib ops.. dritte hab ich nicht gefunden.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Record zu TStringlist hinzufügen

  Alt 14. Jun 2017, 12:26
Du darfst NICHT die Liste im Destroy des einzelnen Listen-Elements freigeben!!!
Du sägst dir den Ast ab, auf dem du sitzt!

Sorry, aber dir fehlen die banalsten Grundlagen in Objekt-Orientierter-Programmierung!
Woran siehst du das ich diese freigebe?
Sorry aber lese einfach nochmal was ich freigebe Das HBitmap mehr nicht.
Das ich Destroy definieren soll kam nicht von mir.
Einfach genauso machen wie jaenicke das in Beitrag #91 zeigt!
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.961 Beiträge
 
Delphi 12 Athens
 
#6

AW: Record zu TStringlist hinzufügen

  Alt 14. Jun 2017, 12:19
Wer hat denn geschrieben, dass du in dem Destroy eines einzelnen (!) TSprite auf die Liste aller (!) Sprites zugreifen sollst? Ich hatte doch schon geschrieben wie es aussehen muss:
So:
Delphi-Quellcode:
type
  TSprite = class
  ...
  public
    destructor Destroy; override;
  end;

destructor TSprite.Destroy;
begin
  inherited;
  if h_Bitmap <> 0 then
  begin
    DeleteObject(h_Bitmap);
    h_Bitmap := 0;
  end;
end;

// und dann an deiner Stelle nur noch:
      Sprites.Free;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#7

AW: Record zu TStringlist hinzufügen

  Alt 14. Jun 2017, 12:27
Sprites.Free hat keinen Rückgabewert, kann also nicht nil sein.
Der Wert in der Variablen "Sprites" ist nach dem Free einfach ungültig, da er auf ein nicht mehr existierendes Objekt verweist.

Im Destroy des einzelnen Sprite hast du doch überhaupt keine Kenntnis von der Liste.
Du gibst doch nur das lokale Handle frei.
Der Test auf 0 ist vor dem DeleteObject überflüssig.
Ebenso die nachfolgende Zuweisung von 0, da nach dem Destructor das Objekt nicht mehr existiert.
Delphi-Quellcode:
destructor TSprite.Destroy;
begin
  DeleteObject(h_Bitmap);
  inherited;
end;

Sprites.Free; // gibt die Liste frei, die Liste gibt die Objekte frei, jedes Objekt sein Handle
// Keine Schleife einfach fertig.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Record zu TStringlist hinzufügen

  Alt 14. Jun 2017, 12:29
Ok dann habe wir das jetzt geklärt..
Der Gwinner ist @jaenicke

Danke an Blup, TiGü
Aber gut man kann nicht alles wissen hab mit der TObjectList bisher noch nie gearbeitet.
Das hat nix mit OOP Programmierung zu tun. (brauch ich auch nicht unbedingt mit WIN32API Programmierung)

gruss

Geändert von EWeiss (14. Jun 2017 um 15:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:59 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