Delphi-PRAXiS
Seite 7 von 10   « Erste     567 89     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Record zu TStringlist hinzufügen (https://www.delphipraxis.net/193030-record-zu-tstringlist-hinzufuegen.html)

SneakyBagels 13. Jun 2017 17:35

AW: Record zu TStringlist hinzufügen
 
Soweit ich weiß muss man jedes Objekt selber freigeben und dann die Liste.

haentschman 13. Jun 2017 17:35

AW: Record zu TStringlist hinzufügen
 
Moin...:P
Mit TList<> mußt du dich selbst um die Freigabe kümmern. Die TObjectList<> kümmert sich selbst um die Freigabe. 8-)

EWeiss 13. Jun 2017 17:40

AW: Record zu TStringlist hinzufügen
 
Zitat:

Zitat von haentschman (Beitrag 1374422)
Moin...:P
Mit TList<> mußt du dich selbst um die Freigabe kümmern. Die TObjectList<> kümmert sich selbst um die Freigabe. 8-)

Ok ;)
Da ich TObjectList verwende sollte das dann reichen.
OK bevor ich diese Freigebe lösche ich natürlich noch die Bitmap Ressourcen.

Mehr ist das ja nicht.
Danke.

gruss

himitsu 13. Jun 2017 18:29

AW: Record zu TStringlist hinzufügen
 
Bei TList mit Pointern ja,
in TList<IrgendeinPointer> auch,
aber die TList<EinRecordOderEinAndererEinfacherTypSowieDynA rraysUndInterfaces> kümmert sich um alles.

Unter ARC werden auch Objekte gut verwaltet ... da ist dann eine TList<> und TObjektList<> praktisch das Selbe.

Bei TObjectList und Anderen kann man im Constructor angeben, ob sich die Liste um das Free kümmert.

EWeiss 13. Jun 2017 18:40

AW: Record zu TStringlist hinzufügen
 
Zitat:

Bei TObjectList und Anderen kann man im Constructor angeben, ob sich die Liste um das Free kümmert.
Das ist ja wie ich gelesen habe Default auf True gestellt. ;)

Habe es jetzt fertig hoffe das mein Teil noch läuft..
Bei mir geht's (Aber das ist ja immer so).

gruss

himitsu 13. Jun 2017 19:08

AW: Record zu TStringlist hinzufügen
 
Zitat:

Zitat von EWeiss (Beitrag 1374431)
Das ist ja wie ich gelesen habe Default auf True gestellt. ;)

Nicht übeball, wie z.B. beim TDictionary.

jaenicke 14. Jun 2017 04:07

AW: Record zu TStringlist hinzufügen
 
Zitat:

Zitat von EWeiss (Beitrag 1374424)
OK bevor ich diese Freigebe lösche ich natürlich noch die Bitmap Ressourcen.

Befinden diese sich ebenfalls in der Klasse? Dann kannst du einfach den Destruktor überschreiben und das dort machen. Dann musst du dich nicht darum kümmern, dass das vorher passiert. Der wird dann automatisch aufgerufen, wenn die Liste das Objekt freigibt.

EWeiss 14. Jun 2017 09:37

AW: Record zu TStringlist hinzufügen
 
Das mache ich alles nach PostQuitMessage.
Danke.

Delphi-Quellcode:
      // Windows Messagen verarbeiten
      while GetMessage(Msg, 0, 0, 0) do
      begin
        if IsDialogMessage(MainHandle, Msg) = false then
        begin
          TranslateMessage(Msg);
          DispatchMessage(Msg);
        end;
      end;

      KillTimer(MainHandle, 1);
      // Menu Resource freigeben
      GDIP_DisposeImage(ImgBack);
      GDIP_DisposeImage(ImgHover);
      GDIP_DisposeImage(SideBarImg);

      if hNotifyRBin > 0 then
        SHChangeNotifyDeregister(MainHandle);

      CreateIcon.ShowDesktopIcons(True);

      for X := 0 to Sprites.Count - 1 do
      begin
        if Sprites[X].h_Bitmap <> 0 then
        begin
          DeleteObject(Sprites[X].h_Bitmap);
          Sprites[X].h_Bitmap := 0;
        end;
      end;
      Sprites.Free;

      FreeAndNil(CreateIcon);
      FreeAndNil(DockBar);
      FreeAndNil(ShortCut);

      SKAERO_Free;
gruss

jaenicke 14. Jun 2017 10:18

AW: Record zu TStringlist hinzufügen
 
Genau, sauberer wäre aber, wenn sich ein TSprite selbst darum kümmern würde. Sprich statt:
Delphi-Quellcode:
      for X := 0 to Sprites.Count - 1 do
      begin
        if Sprites[X].h_Bitmap <> 0 then
        begin
          DeleteObject(Sprites[X].h_Bitmap);
          Sprites[X].h_Bitmap := 0;
        end;
      end;
      Sprites.Free;
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;

EWeiss 14. Jun 2017 10:29

AW: Record zu TStringlist hinzufügen
 
Du hast recht ;)

Habe zwar den Quelltext schon hochgeladen werde es aber trotzdem deinem Beispiel zu folgen noch ändern.
Danke schön.

Ist dann im nächsten Update enthalten. (Wenn noch eins kommt)

Moment ;)

Nein geht nicht! (Bei normalen Classen schon)
Ich habe ja keine Class in herkömmlichen sinne.
Sondern nur meinen Record umbenannt.

Delphi-Quellcode:
  TSprite = class
    CtrlName: WideString;
    CtrlIndex: Integer;
    Left: Single;
    Top: Single;
    Width: Integer;
    Height: Integer;
    Scale: Single;
    Opacity: Byte;
    ShellTo: string;
    IconPath: WideString;
    WorkDir: WideString;
    UseLabel: string;
    CmdLine: WideString;
    ShowCmd: longint;
    h_Bitmap: HBitmap;
    Visible: Bool;
  end;
  PSprite = ^TSprite;
gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:03 Uhr.
Seite 7 von 10   « Erste     567 89     Letzte »    

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