Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Sa 28.07.12 12:47 
Hallo Delphi Programmierer,
ich wollte mal anfangen Klassen und Objekte zu verwenden um alles übersichtlicher zu machen und hab mir mal eine kleine Klasse erzeugt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
TLast = class
  private
  FWindsog:single;
  Fwinddruck:single;
  FSchneelast:single;
  FEigengewicht:single;
  public
  Procedure SetWindsog(Sogkraft:single);
  property Windsog: single read FWindsog write SetWindsog;

  end;

Diese Steht direkt unter der Deklaration von TMainForm.

Im Implementation Teil steht das die Prozedur TLast.Setwindsog
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Procedure TLast.SetWindsog(Sogkraft:single);
begin
FWindsog:=Sogkraft;
end;


Dann hab ich mir einen Button gemacht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TMainForm.Button5Click(Sender: TObject);
var
BereichF:Tlast;
begin
BereichF.Create;
BereichF.SetWindsog(40);
showmessage(Floattostr(BereichF.FWindsog));

BereichF.Free;
end;


Wenn ich allerdings darauf klicke und dann mein Showmessage Dialog wegklicke erhalte ich Zugriffsverletzungen als Fehler.
Wenn ich "Free" weglasse funktioniert alles bis zum schließen den Programms, dann kommt wider die Zugriffsverletzung.

Wo liegt denn der Anfängerfehler?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 28.07.12 12:50 
user profile icondaywalker0086 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TMainForm.Button5Click(Sender: TObject);
var
BereichF:Tlast;
begin
BereichF.Create;
BereichF.SetWindsog(40);
showmessage(Floattostr(BereichF.FWindsog));

BereichF.Free;
end;


Es muss heißen:
ausblenden Delphi-Quelltext
1:
BereichF:=TLast.Create;					

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: So 29.07.12 14:23 
Dankeschön!
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 29.07.12 22:03 
user profile icondaywalker0086 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
BereichF.SetWindsog(40);					

Da du eine Eigenschaft mit einem Setter deklariert hast, musst du diese Methode nicht direkt aufrufen, sondern kannst den Wert übersichtlich direkt zuweisen:

ausblenden Delphi-Quelltext
1:
BereichF.Windsog := 40;					

:idea:
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mo 30.07.12 08:12 
Den Setter deklariert man normalerweise im protected-Bereich:

ausblenden Delphi-Quelltext
1:
2:
  protected
    procedure SetWindsog(Sogkraft:single);


Und Ressourcen-Schutzblöcke sind auch keine schlechte Sache ;-)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TMainForm.Button5Click(Sender: TObject);
var
  BereichF:Tlast;
begin
  BereichF := TLast.Create;
  try
    BereichF.Windsog := 40;
    showmessage(Floattostr(BereichF.Windsog));
  finally
    BereichF.Free;
  end;
end;