AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Record Properties

Ein Thema von FAM · begonnen am 18. Feb 2015 · letzter Beitrag vom 18. Feb 2015
Antwort Antwort
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#1

Record Properties

  Alt 18. Feb 2015, 12:56
Delphi-Version: 5
Hallo Zusammen,

ich habe einen eigenen Datentypen über record definiert.

Delphi-Quellcode:
  TRedundancyLivedataResult = record
  private
    FAppTime: String;
    FOpcTime: string;
    procedure SetRedundanyLivedataAppTime(const Value: String);
    procedure SetRedundanyLivedataOpcTime(const Value: String);
  public
    property AppTime: String read FAppTime write SetRedundanyLivedataAppTime;
    property OpcTime: string read FOpcTime write SetRedundanyLivedataOpcTime;
  end;
diesen Benutze ich in einer Klasse

Delphi-Quellcode:
 TViewModel = class(TModel)
  private
...

    FConsoleHandler: TConsoleHandler;

    FRedundancyLivedata: TRedundancyLivedataResult;

    property RedundanyLivedata: TRedundancyLivedataResult
      read FRedundancyLivedata write SetRedundancyLivedata;
...

procedure TViewModel.SetRedundancyLivedata(const Value
  : TRedundancyLivedataResult);
begin
FRedundancyLivedata := Value;
end;

...
Im Haupt-Programm
Delphi-Quellcode:
// Daten ins Model schreiben
FViewModel.RedundanyLivedata.AppTime := Result.AppTime;
dann wird intern das ausgeführt, mein Problem ist wie komme ich aus den Record-Setter TRedundancyLivedataResult.SetRedundanyLivedataAppTime zurück zur "Parent-Klasse" TViewModel um auf dessen Member-Vars zurückzugreifen (z.B. FConsoleHandler)



Delphi-Quellcode:
procedure TRedundancyLivedataResult.SetRedundanyLivedataAppTime
  (const Value: String);
begin

  // Nur wenn sich die Daten geändert haben
  if (FAppTime <> Value) then
  begin
    // Neue Daten speichern
    FAppTime := Value;


// An dieser Stelle möchte gerne auf Members aus der Klasse (TViewModel) zugreifen
// TViewModel.FConsoleHandler <- geht logischerweise nicht


  end;
end;

Geändert von FAM (18. Feb 2015 um 13:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Record Properties

  Alt 18. Feb 2015, 13:04
Wenn du deine Delphi-Version nicht im Profil angegeben hast, dann setze doch bitte in den Threads die Version richtig. Delphi 5 ist ja wohl nicht richtig.

Oder meinst du, wir führen hier jeder einzeln für alle Mitglieder (die es nicht schaffen ihre Version korrekt zu kommunizieren) ein Versions-Verzeichnis auf das wir dann zurückgreifen können.
(Ich definitiv nicht)

Kann doch nicht so schwer sein ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#3

AW: Record Properties

  Alt 18. Feb 2015, 13:07
Ok, sorry gemacht.

Delphi XE Enterprise
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Record Properties

  Alt 18. Feb 2015, 13:15
Und nein, du kannst das gleich ganz vergessen.

Dein Record kommt aus einem Property (Getter) und ist somit nur eine Kopie, also selbst wenn du über die Property im Record die Schreibschutzprüfung "umgehst", bringt das nichts, da diese Änderungen niemals zurückgespeichert werden.

Einzige Lösungen:
  • Kein Record, sondern eine Klasse.
  • Der Getter muß in dem Record einen "versteckten" Zeiger auf die Originaldaten (das Feld) enthalten, aber besser doch ein Callback-Zeiger für eine Funktion in TViewModel, welche die Änderung in ihr Feld schreibt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Record Properties

  Alt 18. Feb 2015, 13:22
Delphi-Quellcode:
// Daten ins Model schreiben
FViewModel.RedundanyLivedata.AppTime := Result.AppTime;
Das zum Beispiel verschwindet schon mal im Nirwana.
  Mit Zitat antworten Zitat
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#6

AW: Record Properties

  Alt 18. Feb 2015, 13:38
danke für den hinweis

mache es jetzt ansatzweise so...

Delphi-Quellcode:

  TViewModel = class(TModel)

  private type

    TRedundancyLivedataResult = class
    private
      FConsoleHandler: TConsoleHandler;
      FAppTime: String;
      FOpcTime: string;
      procedure SetRedundanyLivedataAppTime(const Value: String);
      procedure SetRedundanyLivedataOpcTime(const Value: String);
    public
      property AppTime: String read FAppTime write SetRedundanyLivedataAppTime;
      property OpcTime: string read FOpcTime write SetRedundanyLivedataOpcTime;
    end;

  private

    FRedundancyLivedata: TRedundancyLivedataResult;

  // constructor TViewModel.Create;
constructor TViewModel.Create(const EventHandler: TEventHandler;
  const ConsoleHandler: TConsoleHandler);
begin
  inherited Create;

// hier könnte ich jetzt die Membervars mitübegeber? z.b. TRedundancyLivedataResult.Create(EventHandler)

  FRedundancyLivedata := TRedundancyLivedataResult.Create;

// die könnte ich dann hier verwenden, richtig?

procedure TViewModel.TRedundancyLivedataResult.SetRedundancyLivedataAppTime
  (const Value: String);
So funktioniert es:

Delphi-Quellcode:
 



  TViewModel = class(TModel)

    FRedundancyLivedata: TRedundancyLivedataResult; // (see @TRedundancyLivedataResult = class)
...
    property RedundanyLivedata: TRedundancyLivedataResult
      read FRedundancyLivedata write FRedundancyLivedata;
...

implementation

  // constructor TViewModel.Create;
constructor TViewModel.Create(const EventHandler: TEventHandler;
  const ConsoleHandler: TConsoleHandler);
begin
...

FRedundancyLivedata := TRedundancyLivedataResult.Create(self);

...
end;

{ TViewModel.TRedundancyLivedataResultTest }

constructor TViewModel.TRedundancyLivedataResult.Create
  (const parent: TViewModel);
begin
  FParentModel := parent;
end;

procedure TViewModel.TRedundancyLivedataResult.SetRedundancyLivedataAppTime
  (const Value: String);
begin
FParentModel.FooBar := 1; // Membervarriable aus der Hauptklasse
end;

Geändert von FAM (18. Feb 2015 um 14:30 Uhr)
  Mit Zitat antworten Zitat
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 00:38 Uhr.
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