AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Record, Array, Class und Schreiben in das Array

Record, Array, Class und Schreiben in das Array

Ein Thema von matashen · begonnen am 9. Jul 2024 · letzter Beitrag vom 11. Jul 2024
Antwort Antwort
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
483 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AW: Record, Array, Class und Schreiben in das Array

  Alt 10. Jul 2024, 08:42
Hi jaenicke,


generische Listen, danke für den Tip.

hatte ich nicht aufn Schirm.

Ich bau dann mal das um.

Wenn ich in einem ListenItem die einzelnen Records zu propertys ändere noch was beachten, oder reichts wenn ich die Variablen wie üblich ins private schreibe und den getter und setter einfach darauf lege?


Gruß Matthias

PS:
Wärst du nicht so elendig weit weg würd ich dich jetzt aufn Mittagsessen einladen.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Record, Array, Class und Schreiben in das Array

  Alt 10. Jul 2024, 08:46
Und wenn das gespeichert werden soll, statt Liste vielleicht eine Collection ... geht auch generisch.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
483 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Record, Array, Class und Schreiben in das Array

  Alt 10. Jul 2024, 09:15
OK Collection Generisch kenn ich noch nicht - wie funktioniert das? Dachte die Generische Listen vom Beispiel jaenicke wäre eine Collection
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Record, Array, Class und Schreiben in das Array

  Alt 10. Jul 2024, 09:39
Collections sind auch Listen, also prinzipiell.

Bei der TCollection ist es aber grundsätzlich so, dass immer nur ein Typ in der "Liste" steckt.
Bei den TList, und vor allem bei der generischen TList<>, können auch Nachfahren der Item-Klasse drin stecken.

Die Collection und ihre Items sind auch so gestaltet, dass sie automatisch serialisiert wird. (also selbst oder z.B. im DFM-Reader/Writer)
Und beim Ändern der Größe der Liste wird die Item-Instanz ebenfalls automatisch verwaltet.

Also erstmal wie OwnsObjects bei der TObjectList bzw. TList<>, wird es freigegeben, aber auch beim Hinzufügen, wird die Item-Instanz automatisch erstellt.
Und es gibt einen Default-PropertyEditor für den FormDesigner, um dort Collections zu bearbeiten. (die Items vieler VCL-Komponenten, wie z.B. Actions, ButtonsGroups, Gestures, Grids, Skia, Taskbars uvm.)

Für die VCL, wenn ausschließlich über den FormDesigner bearbeitet, da ist das generische nicht.
Soll die Liste/Collection vom Code aus bearbeitet werden, dann ist eine manuelle Ableitung oder eine Generische, halt sehr hilfreich, da grundsätzlich keine Casts nötig sind und immer der entsprechende Item-Typ aus den Property und Methoden der Liste kommt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
483 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Record, Array, Class und Schreiben in das Array

  Alt 11. Jul 2024, 09:51
Guten Morgen DP,

hab jetzt den Code umgeschrieben von Record auf Class, leider kommen die Daten in der Liste nicht an, abweichend zu jaenicke habe ich nicht beim Item.Create die ganzen Variablen übergeben sondern ein Item erstellt, befüllt und dann per Add hinzugefügt. Es wird auch ein Item erstellt zumindest geht der Count hoch, aber der Inhalt ist dann leer. Muss ich wirjklich im Create des Items die Variablen schreiben, dachte das geht automatisch. Hab auch gegoogelt und dieses Beispiel sieht ziemlich nach meiner Anwendungaus.
https://www.codersblog.de/generische-listen-in-delphi/

Code Teile zusammenkopiert

Delphi-Quellcode:
type TProgReleaseItemClass=Class
      public
        ProductID:Integer;
        MachineTypeName:String;
        ProgfieldName:String;
     
End;
erweitert um einen Index - brauch ich für spätere Funktionen
Delphi-Quellcode:
type TProgReleaseclass=class(TObjectlist<TProgreleaseItemClass>)
       private
          FSelectedItem:Integer;
       public
       property ItemIndex:Integer read FSelectedItem write FSelectedItem;

end;

var ReleaseSteps:TProgreleaseClass;
      myitem:TProgreleaseitemClass;

...
Releasesteps:=TProgreleaseClass.Create(true);
...
myitem:=TProgreleaseitemClass.create;
myitem.ProductID:=1234;
myitem.MachineTypeName:='Wunschkiste';
myitem.ProgfieldName:='Test';

releasesteps.add(myitem);
myitem.Free;
und dann versuche ich Daten raus zu lesen, bekomm aber nichts da ich

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#6

AW: Record, Array, Class und Schreiben in das Array

  Alt 11. Jul 2024, 09:59
Was passiert?
Delphi-Quellcode:
Releasesteps:=TProgreleaseClass.Create(true); //True = Liste ist Eigentümer der Items

myitem:=TProgreleaseitemClass.create; // erzeugen Item
releasesteps.add(myitem); // Item in Liste
myitem.Free; // Item wegwerfen ... auch auch aus der Liste. Die hällt nur dem Pointer auf das Objekt.


PS: Müßte eine Zugriffsverletzung geben beim "Free" der Liste, weil der Poiner in der Liste schon freigegeben ist.
PS: Dein Code ist schwierig zu lesen wegen der ungewöhnlichen Einrückung und der ungewöhnlichen Groß/Kleinschreibung.

Geändert von haentschman (11. Jul 2024 um 10:06 Uhr)
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
483 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Record, Array, Class und Schreiben in das Array

  Alt 11. Jul 2024, 10:34
Zitat:
PS: Müßte eine Zugriffsverletzung geben beim "Free" der Liste, weil der Poiner in der Liste schon freigegeben ist.
ja, hab das mit den Pointer vermutet

mir hilft aber dann auch kein

progrelease.items[0]:=myitem, denn dann wird ja auch nur der Pointer verschoben wenn ich das richtig verstehe. also doch im add die Werte in das Item schreiben - schade hatte gehofft es geht einfacher


Zitat:
PS: Dein Code ist schwierig zu lesen wegen der ungewöhnlichen Einrückung und der ungewöhnlichen Groß/Kleinschreibung.
Für die Profis unter euch brauchts halt ein Handicap das es nicht zu luschi ist

Danke für die Erklärung.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:48 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