AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Variable in einem Record mit defaultwert
Thema durchsuchen
Ansicht
Themen-Optionen

Variable in einem Record mit defaultwert

Ein Thema von Maa83 · begonnen am 18. Mär 2003 · letzter Beitrag vom 19. Mär 2003
Antwort Antwort
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#1

Variable in einem Record mit defaultwert

  Alt 18. Mär 2003, 12:43
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:
type test=record
   var1: String;
   var2: Integer;
   var3: Boolean = true; //Oder irgendwie sowas
end;
mfg
Maa

[EDIT=Luckie'chen]Delphi-Tags hinzugefügt, beim nächsten mal bitte selber machen, danke[/EDIT]
Martin
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 18. Mär 2003, 12:46
Probier es doch aus! Wenn es geht, dann so, wie du es geschrieben hast.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#3
  Alt 18. Mär 2003, 15:10
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???
Martin
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4
  Alt 18. Mär 2003, 16:21
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;
  Mit Zitat antworten Zitat
Benutzerbild von Specialwork
Specialwork

Registriert seit: 10. Jan 2003
Ort: Schwall
71 Beiträge
 
Delphi 8 Professional
 
#5
  Alt 18. Mär 2003, 16:52
Hallo Maa83,

Wenn Du nicht unbedingt auf Records angewiesen bist, dann versuche es mal so :

Delphi-Quellcode:
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.
Gruß, Tom
Thomas van Veen
Es gibt keine Probleme, nur Lösungen, auf die man nicht gleich kommt !
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 18. Mär 2003, 17:05
Delphi-Quellcode:
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;
Wo ist der Ressourcen-Schutzblock und wo wird das Objekt wieder freigegeben?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Specialwork
Specialwork

Registriert seit: 10. Jan 2003
Ort: Schwall
71 Beiträge
 
Delphi 8 Professional
 
#7
  Alt 19. Mär 2003, 09:06
Hallo Luckie,

1. Was bitte verstehst Du unter einem Ressourcen-Schutzblock !?

2. Beim Verlassen der Procedure TForm1.Button1Click(Sender: TObject); wird soweit ich weis automatische der Destructor von TObject aufgerufen. Der wiederrum gibt das Object zuvor mit free wieder frei.

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
Thomas van Veen
Es gibt keine Probleme, nur Lösungen, auf die man nicht gleich kommt !
  Mit Zitat antworten Zitat
Maa83

Registriert seit: 7. Nov 2002
220 Beiträge
 
Delphi 10.3 Rio
 
#8
  Alt 19. Mär 2003, 09:15
Also irgendwie muss das doch bei Records gehen...
Es funktioniert doch auch bei Arrays und bei Variablen die man an Methoden übergibt...
Martin
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9
  Alt 19. Mär 2003, 09:20
Zitat von Specialwork:
Hallo Luckie,

1. Was bitte verstehst Du unter einem Ressourcen-Schutzblock !?
try-finally-end.
Zitat:
2. Beim Verlassen der Procedure TForm1.Button1Click(Sender: TObject); wird soweit ich weis automatische der Destructor von TObject aufgerufen. Der wiederrum gibt das Object zuvor mit free wieder frei.
Seit wann denn das? Lokale Variablen verlieren ihre Gültigkeit, aber reservierter Speicher von selbst erzeugten Objekten wird meines Wissens nicht wieder freigegeben.
Zitat:
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.
Ich beantworte die Fragen so wie ich will - unabhängig von meinem Posten als Moderator. Moderator bin ich nur dann, wenn ich eingreifen muß.
Zitat:
4. Bei einer schnellen Testlösung, ist es oft erforderlich, auf übliche Schutzmechanismen zu verzichten, oder !? Z.B. Exceptionhandling, usw.
Kein Grund unsauber zu arbeiten. Stell dir vor jemand sieht das der keine Ahnung hat, der macht das dann immer so, weil er es nicht anders gesehen hat bei dir.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Specialwork
Specialwork

Registriert seit: 10. Jan 2003
Ort: Schwall
71 Beiträge
 
Delphi 8 Professional
 
#10
  Alt 19. Mär 2003, 12:37
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 finally muss das Object TTest mit TTest.free freigegeben werden. Habs mal getestet.
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:
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;
Gruß, Tom
Thomas van Veen
Es gibt keine Probleme, nur Lösungen, auf die man nicht gleich kommt !
  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:50 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