![]() |
Variable in einem Record mit defaultwert
Hallole
ich hät da mal ne kleine Frage: ist es möglich bei einer Recorddeklaration eine Variable mit einem defaultwert zu versehen? also z.B.
Delphi-Quellcode:
mfg
type test=record
var1: String; var2: Integer; var3: Boolean = true; //Oder irgendwie sowas end; Maa [EDIT=Luckie'chen]Delphi-Tags hinzugefügt, beim nächsten mal bitte selber machen, danke[/EDIT] |
Probier es doch aus! Wenn es geht, dann so, wie du es geschrieben hast.
|
danke für deinen Post hat mir sehr weit geholfen...
meinst du ich probier das ganze nicht aus bevor ich hier was poste das Beispiel soll meinen Versuch zeigen... also weiss irgendjemand wie das geht??? |
Für alle Variablen vom Typ test geht das nicht. Du kannst aber eine Konstante deklarieren und diese dann immer zuweisen.
Delphi-Quellcode:
const testDefault: test = (
var1: ''; var2: 0; var3: True ); ... var t: test; begin t := testDefault; ShowMessage(IntToStr(Ord(t.var3))); end; |
Hallo Maa83,
Wenn Du nicht unbedingt auf Records angewiesen bist, dann versuche es mal so :
Delphi-Quellcode:
Gruß, Tom
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, StdCtrls, Classes, Controls, Forms; type TTest=class(TObject) private fString: String; fInteger: Integer; fBoolean: Boolean; public constructor Create; property VarString: String read fString write fString; property VarInteger: Integer read fInteger write fInteger; property VarBoolean: Boolean read fBoolean write fBoolean; end; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} constructor TTest.Create; begin inherited Create; VarString :='Tom'; VarInteger :=989; VarBoolean :=True; end; procedure TForm1.Button1Click(Sender: TObject); var Test: TTest; begin Test:=TTest.Create; // <- Hier werden die Defaults gesetzt Memo1.Lines.Clear; Memo1.Lines.Add('VarString:='+Test.fString); Memo1.Lines.Add('VarInteger:='+inttostr(Test.fInteger)); Memo1.Lines.Add('VarBoolean:='+BoolToStr(Test.fBoolean, True)); end; end. |
Delphi-Quellcode:
Wo ist der Ressourcen-Schutzblock und wo wird das Objekt wieder freigegeben? :roll:
procedure TForm1.Button1Click(Sender: TObject);
var Test: TTest; begin Test:=TTest.Create; // <- Hier werden die Defaults gesetzt Memo1.Lines.Clear; Memo1.Lines.Add('VarString:='+Test.fString); Memo1.Lines.Add('VarInteger:='+inttostr(Test.fInteger)); Memo1.Lines.Add('VarBoolean:='+BoolToStr(Test.fBoolean, True)); end; |
Hallo Luckie,
1. Was bitte verstehst Du unter einem Ressourcen-Schutzblock !? 2. Beim Verlassen der Procedure
Delphi-Quellcode:
wird soweit ich weis automatische der Destructor von TObject aufgerufen. Der wiederrum gibt das Object zuvor mit
TForm1.Button1Click(Sender: TObject);
Delphi-Quellcode:
wieder frei.
free
3. Was bitte sollen diese erzieherischen Fragen !? - Ich weiß, dass Du hier zum Moderatorenteam gehörst. Das gehört sich einfach nicht. Ausserdem solltest Du, wenn Du schon Kritik an irgendwelchen postings ausübst, die entsprechenden Erklärungen darin mitliefern. 4. Bei einer schnellen Testlösung, ist es oft erforderlich, auf übliche Schutzmechanismen zu verzichten, oder !? Z.B. Exceptionhandling, usw. Gruß, Tom |
Also irgendwie muss das doch bei Records gehen...
Es funktioniert doch auch bei Arrays und bei Variablen die man an Methoden übergibt... |
Zitat:
Zitat:
Zitat:
Zitat:
|
Hallo Lucky,
1. Es ist erforderlich, den Ressourceschutzblock einzubinden, um das Object TTest in jedem Fall wieder freizugeben. 2. Ich wiederrufe meine Aussage, das Klassen, die von TObject abgeleitet wurden, automatisch den Destructor von TObject aufrufen. Nach
Delphi-Quellcode:
muss das Object
finally
Delphi-Quellcode:
mit
TTest
Delphi-Quellcode:
freigegeben werden. Habs mal getestet.
TTest.free
3. Must Du selbst entscheiden 4. Aufgrund unsauberer Recherchen ist mir der Fehler zu Punkt 2 passiert. Man sollte sich eben nicht immer auf Aussagen anderer berufen, ohne dies selbst überprüft zu haben. In Zukunft werde ich sauberer arbeiten. So muß es wirklich aussehen:
Delphi-Quellcode:
Gruß, Tom
procedure TForm1.Button1Click(Sender: TObject);
var Test: TTest; begin Test:=TTest.Create; // <- Hier werden die Defaults gesetzt try Memo1.Lines.Clear; Memo1.Lines.Add('VarString:='+Test.fString); Memo1.Lines.Add('VarInteger:='+inttostr(Test.fInteger)); Memo1.Lines.Add('VarBoolean:='+BoolToStr(Test.fBoolean, True)); finally Test.free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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