![]() |
Delphi-Version: 2007
Der linken Seite wird nichts zugewiesen "Extended Version"
Ich hab folgende Records und eine Liste (Code ist schon etwas älter).
Delphi-Quellcode:
Wenn ich von außen mit einer Instanz von TStabList ausführe
TQuer = record
private FIntergers, FFloats, FString.. public property Intergers, Floats, String.. read ... write ... procedure Clear; end; TStab = record public QuerLeft: TQuer; QuerRight: TQuer; .. procedure CheckQuerRight; end; procedure TStab.CheckQuerRight; var AQuer: TQuer; begin AQuer.Clear; if QuerRight.Compare(AQuer) then QuerRight := QuerLeft; end; TStabList = class private FItems: array of TStab; public property Items[Index: integer]: TStab read GetItem write SetItem; default; end;
Delphi-Quellcode:
werden die Werte nicht in FStabList[I] übernommen?
FStabList[I].CheckQuerRight;
Ist mir unverständlich? Ich hab doch QuerLeft bzw QuerRight public? :gruebel: |
AW: Der linken Seite wird nichts zugewiesen "Extended Version"
Wenn ich's richtig sehe, ist das Problem, dass FStabList[I] per Wert einen temporären Record zurückliefert. Du erhältst keine Referenz auf den Record innerhalb von FItems! Auf diesem temporären Record führst du dann CheckQuerRight aus, und das schreibt auch brav alles da rein, was rein muss. Nur danach löst sich der temporäre Record in Luft auf... und das war's.
Zwei schnelle Lösungen, die mir einfallen, wären:
|
AW: Der linken Seite wird nichts zugewiesen "Extended Version"
Hallo Uli,
versteh ich dennoch nicht? Das wird doch innerhalb der Klasse TStab geändert. Da ist der Wert doch verfügbar und keine temporäre Kopie? Gruß Thomas Edit: Ja, find ich auch nicht so schön, dann hab ich keine default property mehr. |
AW: Der linken Seite wird nichts zugewiesen "Extended Version"
Zitat:
Zitat:
|
AW: Der linken Seite wird nichts zugewiesen "Extended Version"
Logo, als KLasse und TObjectlist, so würde ich das auch heute machen..
BTW, es gibt keinen Funktionsaufruf sondern die Klasse TStab ändert intern eine Variable. Beim anschließenden Read eines Items sollte der doch verfügbar sein ?? |
AW: Der linken Seite wird nichts zugewiesen "Extended Version"
Delphi-Quellcode:
Soll das funktionieren bzw. ausreichend sein um alle Eigenschaften zuzuweisen?
RecordA := RecordB;
(Ich habe lange nichts mit Records gemacht... :oops:) |
AW: Der linken Seite wird nichts zugewiesen "Extended Version"
Zitat:
Delphi-Quellcode:
holst du dir eine Kopie des Records und führst dann darauf die Prozedur aus. Die Änderungen machst du daher in der Kopie.
FStabList[I]
Es geht an der Stelle nur mit Pointern, also am sinnvollsten wie schon genannt mit Klassen. |
AW: Der linken Seite wird nichts zugewiesen "Extended Version"
@jaenicke
Stimmt :thumb: Ich hatte mir immer merken wollen, dass Records quasi wie Strings übergeben bzw. verarbeitet (die Bytes also kopiert) werden. Insofern müsste meine Frage von oben mit ja beantwortet werden - richtig? Das kommt davon, wenn man nur noch mit Klassen arbeitet ;-) |
AW: Der linken Seite wird nichts zugewiesen "Extended Version"
Falls nur Wertetypen oder stat Arrays kann man records so umspeichern.
Klassen kann ich da keine mehr draus machen. Dann halt die public Items. Danke für die Antworten! |
AW: Der linken Seite wird nichts zugewiesen "Extended Version"
Vielleicht doch noch was.
Statt eines Array eine TList bringt an der Stelle ja nichts, weil die Items laufen dort ja auch über den Getter. Richtig? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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 by Thomas Breitkreuz