Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Startwerte bei Records einstellen. (https://www.delphipraxis.net/105699-startwerte-bei-records-einstellen.html)

snow 27. Dez 2007 22:29


Startwerte bei Records einstellen.
 
hallo ich hab folgendes....

Delphi-Quellcode:
type TGAusrichtung = (normal,grad90,grad180,grad270);
type TGGleisstellung = (gerade, abzweig1, abzweig2, abzweig3);
  {eigenes record deklaieren}
type
    TGleisElement = record
      Gleiselement: -1..254;
      Ausrichtung : TGAusrichtung;
      Gleisstellung : TGGleisstellung;
end;
nun will ich den variablen in dem record einen startwert geben.

normalerweise geht das ja so

Delphi-Quellcode:
var
  i: Integer = 42;
aber leider nicht bei mir. Geht das bei records nicht oder bei typisierten variablen.

gruß snow

Namenloser 27. Dez 2007 22:40

Re: Startwerte bei Records einstellen.
 
Hi,

nei Records geht das imo nicht, aber du könntest stattdessen eine Klasse deklarieren und die Initialisierung im Construktor übernehmen.

Hawkeye219 27. Dez 2007 22:54

Re: Startwerte bei Records einstellen.
 
Hallo,

initialisierte Records lassen sich durchaus verinbaren:

Delphi-Quellcode:
var
  Element : TGleisElement = (
    GleisElement : 42;
    Ausrichtung  : grad90;
    Gleisstellung : gerade
  );
Diese Art der Initialisierung ist bei Variablen nur möglich, wenn sie global vereinbart werden. Konstanten lassen sich auch initialisieren, wenn sie lokal vereinbart werden. In beiden Fällen findet die Initialisierung nur einmal statt, nämlich beim Start der Anwendung.

Gruß Hawkeye

PaddyL 27. Dez 2007 22:58

Re: Startwerte bei Records einstellen.
 
Dürfte sicher auch irgendwo ind er Hilfe/im Netz stehen, aber hier:

Delphi-Quellcode:
type
  TMyRecord = record
    Int: Integer;
    Bool: Boolean;
  end;

var
  Test: TMyRecord = (Int: 0; Bool: True);

Dax 27. Dez 2007 23:08

Re: Startwerte bei Records einstellen.
 
Sowas wie das folgende, bei dem jede Variable/Konstante des Typs TGleisElement die angegebenen Werte hat, geht nicht, nur die Hawkeye gezeigt Variante funktioniert.
Delphi-Quellcode:
type TGAusrichtung = (normal,grad90,grad180,grad270);
type TGGleisstellung = (gerade, abzweig1, abzweig2, abzweig3);
  {eigenes record deklaieren}
type
    TGleisElement = record
      Gleiselement: -1..254 = -1;
      Ausrichtung : TGAusrichtung = normal;
      Gleisstellung : TGGleisstellung = gerade;
end;

fLaSh11 27. Dez 2007 23:17

Re: Startwerte bei Records einstellen.
 
Ich finde es witzig, dass der Compiler hierbei meckert:
Delphi-Quellcode:
type
  TRec = record
    a: integer;
    b: string;
    c: boolean;
  end;

procedure Blah(Rec1: TRec = (a: 1; b: 'huhu'; c: true));

snow 27. Dez 2007 23:22

Re: Startwerte bei Records einstellen.
 
hilft mir leider kaum.

Die variable ist private deklariert, und muss es auch bleiben. Außerdem ist es ein Array of TGleiselement.(dynamisch,2D).

muss ich es also beim start und bei veränderungen der größe überschreiben bzw die neuen einträge auf den startwert setzen.

gruß snow

Hawkeye219 27. Dez 2007 23:40

Re: Startwerte bei Records einstellen.
 
Immerhin kannst du ja zum Initialisieren einen konstanten Record benutzen:

Delphi-Quellcode:
procedure Setup;
const
  Startwert : TGleisElement = (
    GleisElement : -1;
    Ausrichtung  : normal;
    Gleisstellung : gerade
  );
var
  Gleise : array of TGleisElement;
  Index : Integer;
begin
  SetLength (Gleise, 100);

  for Index := Low(Gleise) to High(Gleise) do
    Gleise[Index] := Startwert;
end;
Die lokale Array-Variable ist hier natürlich nur ein (sinnloses) Beispiel, du wirst stattdessen deine private Variable verwenden.

Gruß Hawkeye

dominikkv 28. Dez 2007 06:18

Re: Startwerte bei Records einstellen.
 
Zitat:

Zitat von snow
Die variable ist private deklariert

Also ist sie ein Feld einer Klasse -> damit nur in einer Instanz gültig die durch einen Constructor erzeugt wurde...
Also kannst du im Constructor die initialisierung selbst übernehmen. Entweder benutzt du das entsprechende Ereignis (onFormCreate) oder du überschreibst den bisherigen.

snow 28. Dez 2007 11:15

Re: Startwerte bei Records einstellen.
 
und genau da liegt das problem....

Die Records befinden sich in einem Dynamischen 2 dimensionalen Array, dessen größe erst zur laufzeit feststeht. Somit kann ich nicht auf die records zugreifen, weil sie noch gar nicht exestieren.

ich muss also die records mit der vergrößern-procedure verknüpfen.

Gruß snow


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.
Seite 1 von 2  1 2      

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