![]() |
Startwerte bei Records einstellen.
hallo ich hab folgendes....
Delphi-Quellcode:
nun will ich den variablen in dem record einen startwert geben.
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; normalerweise geht das ja so
Delphi-Quellcode:
aber leider nicht bei mir. Geht das bei records nicht oder bei typisierten variablen.
var
i: Integer = 42; gruß snow |
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. |
Re: Startwerte bei Records einstellen.
Hallo,
initialisierte Records lassen sich durchaus verinbaren:
Delphi-Quellcode:
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.
var
Element : TGleisElement = ( GleisElement : 42; Ausrichtung : grad90; Gleisstellung : gerade ); Gruß Hawkeye |
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); |
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; |
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)); |
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 |
Re: Startwerte bei Records einstellen.
Immerhin kannst du ja zum Initialisieren einen konstanten Record benutzen:
Delphi-Quellcode:
Die lokale Array-Variable ist hier natürlich nur ein (sinnloses) Beispiel, du wirst stattdessen deine private Variable verwenden.
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; Gruß Hawkeye |
Re: Startwerte bei Records einstellen.
Zitat:
Also kannst du im Constructor die initialisierung selbst übernehmen. Entweder benutzt du das entsprechende Ereignis (onFormCreate) oder du überschreibst den bisherigen. |
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 |
Re: Startwerte bei Records einstellen.
Zitat:
du willst also das array beim vergrößern gleich mit Standartwerten füllen? Dann kannst du dir ja eine eigene Methode schreiben...
Delphi-Quellcode:
type
TMyGleisArray: Array of TGleisElement; {...} procedure SetLengthDef(Ar: TMyGleisArray, l: Integer); var I, Start: Integer; begin Start := Length(Ar); SetLength(Ar, l); for I := Start to Pred(l) do with Ar[I] do begin Gleiselement := 1; Ausrichtung := normal; Gleisstellung := gerade; end; end; |
Re: Startwerte bei Records einstellen.
ICh habs schon ohne vergrößern gelöst.
Es ging im prinzip nur um eine variable, die von -1 bis 254 ging. Mich hat geärgert, dass die am anfang auf 0 steht. Also hab ich das einfach verschoben... hab jetz eine von 0..255 sprich ein Byte. Trotzdem Danke Gruß snow |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 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