AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Initialisierung eines Record-Feldes

Ein Thema von s.h.a.r.k · begonnen am 14. Mai 2011 · letzter Beitrag vom 15. Mai 2011
Antwort Antwort
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

AW: Initialisierung eines Record-Feldes

  Alt 15. Mai 2011, 13:32
wie wäre es denn mit:
Delphi-Quellcode:
TBlub = record
private
  FArray : PGenericArray; // Entweder das hier
  FBoolean : Boolean; // ... oder das hier
public
  procedure Init;
end;

procedure TBlub.Init;
begin
  //alle Defaultwerte setzen
end;

var Blub: TBlub;

//an passender Stelle einfach
Blub.Init;
Bei D2007 geht das so.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

AW: Initialisierung eines Record-Feldes

  Alt 15. Mai 2011, 15:32
oder gar eine Klassen-Funktion, die das initialisierte Record als Ergebnis zurückgibt.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Initialisierung eines Record-Feldes

  Alt 15. Mai 2011, 16:18
Genau das will ich vermeiden, da der User dann sehr sehr oft diese Init Methode aufrufen musst. Ich brauche definitiv eine Methode die selbst ausgeführt wird oder eben eine Variable die initialisiert wird.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Initialisierung eines Record-Feldes

  Alt 15. Mai 2011, 16:37
Wie gesagt, es gib leider keine automatische Initialisierung, aber man kann sich sowas basteln.

Alle Felder auf Property umleiten und mit einer Prüfmethode versehen, ebenso alle Methoden.

Delphi-Quellcode:
type
  TMyRecord = record
  pivate
    FInitCheck: array of Byte;
    FInt: Integer;
    FBool: Boolean;
    ...
    procedure InitCheck;
  public
    property Int: Integer read GetInt write SetInt;
    property FBool: Boolean read GetBool write SetBool;
    procedure Machwas;
  end;

procedure TMyRecord.InitCheck;
begin
  if FInitCheck = nil then
  begin
    // Felder initialisieren
    ...
    SetLength(FInitCheck, 1);
  end;
end;
Und dann jeweils am Anfang aller Methoden InitCheck aufrufen.
FInitCheck wird von Windows immer als NIL initialisiert und wenn es mal kein NIL ist, dann wurde InitCheck aufgerufen.

Das umkopieren und freigeben des Records kann man so aber nicht mitbekommen.
Dafür könnte zumindestens das Freigeben, man über ein Interface bewerkstelligen, welches man statt dem Array nimmt und welchem die freizugebenden Daten (schon beim Erstellnen und bei allen wichtigen Änderungen) bekanntgemacht wurden, da das Interface keinen Zugriff auf den Record hat.
Oder man macht eben gleich alle Daten in das Interface rein und baut in den Record nurn noch Weiterleitungen ein.
Ein Therapeut entspricht 1024 Gigapeut.
  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 05:35 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