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
Thema durchsuchen
Ansicht
Themen-Optionen

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

Record, Array, Class und Schreiben in das Array

  Alt 9. Jul 2024, 14:26
Delphi-Version: 5
Hallo zusammen,

ich steh voll auf den Schlauch und bin mir sicher für einige hier ist das was ich brauche pillepalle. Der Titel ist auch doof aber was besseres fällt mir auch hier nicht ein... und Kaffee ist heute aus

Ich hab ein Record der verkürzt so aussieht

Delphi-Quellcode:
type TProgReleaseItem=record
        ProductID:Integer;
        MachineTypeName:String;
        ProgfieldName:String;
end;
eine Klasse dazu wo dieser Record als array deklariert ist
Delphi-Quellcode:
type TProgRelease=class(TObject)
     strict private
       FItem: TArray<TProgReleaseItem>;
       function getItem(Index:Integer):TProgReleaseItem;
...
       property Item[Index:Integer]:TProgreleaseItem Read GetItem;
wie muss ich den setter schreiben das ich sowas machen kann wie

meinRelease.Item[x].ProductID:='Testeintrag'; Schonmal vielen Dank an euch

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.

Geändert von TBx (10. Jul 2024 um 05:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Record, Array, Class und Schreiben indas Array

  Alt 9. Jul 2024, 14:39
Garnicht.

Es wird beim Zugriff auf einen Property leider immer nur entweder der Getter oder der Setter benutzt.

Da hier auf eine Eigenschaft des Records zugegriffen wird, wird also der Getter benutzt und der Schreibzugriff auf das Record-Feld geht dann in die Kopie des Records (also ins Result des Getter)
und wird anschließend nicht automaisch via Setter zurückgeschrieben. (abgesehn davon, dass du eh keinen Setter hast)

* eine Datenklasse anstatt des Records (kann auch eine zuzätliche Access-Implementation sein, welche ihre Proertyzugriffe auf den Record umleitet)

* das Property als Pointer
property Item[Index:Integer]: PProgreleaseItem Read GetItem;

* den Record mit Property+Setter, wobei der Record vom GetItem einen Zeiger auf TProgRelease mitbekommt, um Änderungen weiterzugeben.

* ...
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Record, Array, Class und Schreiben indas Array

  Alt 9. Jul 2024, 14:41
Mit einem Record geht das nicht, es sei denn du verwendest Pointer. Grund: Beim Zugriff auf den Getter bekommst du eine Kopie des Records. Wenn du nun also etwas in den Record schreibst, passiert das in der Kopie, nicht im Original in der Liste.

Das ist mit einer Klasse viel einfacher, denn das ist von Hause aus nur eine Referenz, so dass es sofort funktioniert. Wenn dir die Referenzzählung wichtig ist, der Speicher also automatisch freigegeben werden soll, kannst du auch ein Interface mit der Klasse verwenden.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
matashen

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

AW: Record, Array, Class und Schreiben indas Array

  Alt 10. Jul 2024, 05:10
Also das der Setter fehlt hab ich im Text geschrieben, Zitat: wie muss ich den setter schreiben das ich sowas machen kann wie ...

Wenn das geht als Klasse und ich den Record entsprechend umschreiben muss, kein Problem. Ein kleines Beispiel wär nicht schlecht da ich heute immer noch aufm Schlauch stehe.

Das bei einem Record nur eine Kopie gezogen wird war mir nicht klar. Dachte das auch dort nur intern ein Pointer gesetzt wird. Danke für dir Info.
Matthias
Das Leben ist eines der härtesten.

Geändert von TBx (10. Jul 2024 um 05:19 Uhr) Grund: Full quote entfernt
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

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

  Alt 10. Jul 2024, 08:00
Im einfachsten Fall schreibst du statt record einfach Klasse und du bist was den Zugriff inkl. Schreiben angeht fertig.
Die einzige andere Änderung ist, dass du die Instanzen dann explizit mit Create erstellen musst, sprich FItems[0] := TProgReleaseItem.Create; , aber ich frage mich, ob du das überhaupt so möchtest. Mit dem Array ist das unnötig kompliziert.

Viel einfacher:
Delphi-Quellcode:
uses
  System.Generics.Collections;

type
  TProgReleaseItem = class
  public
    ProductID: Integer;
    MachineTypeName: String;
    ProgfieldName: String;
    constructor Create(AProductID: Integer; AMachineTypeName: String; AProgfieldName: String);
  end;

  TProgRelease = class(TObjectList<TProgReleaseItem>)
  end;

constructor TProgReleaseItem.Create(AProductID: Integer; AMachineTypeName: String; AProgfieldName: String);
begin
  ProductID := AProductID;
  MachineTypeName := AMachineTypeName;
  ProgfieldName := AProgfieldName;
end;

var
  Test: TProgRelease;
begin
  Test := TProgRelease.Create(True);
  try
    Test.Add(TProgReleaseItem.Create(1, '2', '3'));
    DoSomething(Test);
  finally
    Test.Free;
  end;
end;
Natürlich wären ggf. propertys statt einfacher Felder sinnvoller, aber funktionieren tut es so.
Sebastian Jänicke
AppCentral

Geändert von jaenicke (10. Jul 2024 um 08:02 Uhr)
  Mit Zitat antworten Zitat
matashen

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

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

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

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
 
#8

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
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 00:19 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