AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem mit Fehlermeldung

Ein Thema von Landfloh · begonnen am 8. Mär 2008 · letzter Beitrag vom 8. Mär 2008
Antwort Antwort
Landfloh

Registriert seit: 17. Feb 2008
75 Beiträge
 
Delphi 7 Personal
 
#1

Problem mit Fehlermeldung

  Alt 8. Mär 2008, 19:25
Hallo

Ich habe ein Problem.

Wenn ich mein Programm starte dann kommt diese Fehlermeldung:
Zugriffsverletzung bei Adresse 00403441 in Modul 'MATHE4.exe'. Lesen von Adresse 00000000.

Hier der komplette Quelltext:

Delphi-Quellcode:
unit ZINS1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TZins = class (TObject)
    Kapital,
    Prozent,
    Zinsen: Single;
    constructor Create;
    procedure SetKapital (Txt: String);
    procedure SetProzent (Txt: String);
    procedure SetZinsen (Txt: String);
    function GetKapital: String;
    function GetProzent: String;
    function GetZinsen:String;
  end;
  
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure SetZero;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Zins : TZins;
  Modus: Integer;
implementation

{$R *.dfm}

constructor TZins.Create;
begin
  inherited Create;
end;

procedure TZins.SetKapital(Txt: String);
begin
  Kapital := StrToFloat (Txt);
end;

procedure TZins.SetProzent(Txt: String);
begin
  Prozent := StrToFloat (Txt);
end;

procedure TZins.SetZinsen(Txt: String);
begin
  Zinsen := StrToFloat (Txt);
end;

function TZins.GetKapital: String;
begin
  Kapital := Zinsen * 100 / Prozent;
  GetKapital := FloatToStrF(Kapital,ffNumber,8,2);
end;

function TZins.GetProzent: String;
begin
  Prozent := Zinsen *100 / Kapital;
  GetProzent := FloatToStrF(Prozent,ffNumber,8,2);
end;

function TZins.GetZinsen: String;
begin
  Zinsen := Kapital * Prozent / 100;
  GetZinsen := FloatToStrF(Zinsen,ffNumber,8,2);
end;

procedure TForm1.SetZero;
begin
  Zins.Kapital := 0;
  Zins.Prozent := 0;
  Zins.Zinsen := 0;
  Edit1.Text := '0';
  Edit2.Text := '0';
  Edit3.Text := '0';
  Modus := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Zins := Zins.Create;
  SetZero;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetZero;
  Label1.Caption :=
    'Setz nur die gesuchte Größe auf Null!';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Label1.Caption := 'Das ist das Ergebnis';
  Zins.SetKapital(Edit1.Text);
  if Edit1.Text = '0then inc (Modus);
  Zins.SetProzent(Edit2.Text);
  if Edit2.Text = '0then inc (Modus,10);
  Zins.SetZinsen(Edit3.Text);
  if Edit3.Text ='0then inc (Modus,100);
  case Modus of
    1 : Edit1.Text := Zins.GetKapital;
    10 : Edit2.Text := Zins.GetProzent;
    100: Edit3.Text := Zins.GetZinsen;
    else
      Label1.Caption := 'Keine oder zu viele Nullen!';
  end;
  Modus := 0;
end;

end.
Kann mir jemand helfen?

Hier auch nochmal die Dateien:
Angehängte Dateien
Dateityp: exe mathe4_145.exe (386,5 KB, 2x aufgerufen)
Dateityp: dpr mathe4_108.dpr (186 Bytes, 0x aufgerufen)
Dateityp: dfm zins1_113.dfm (2,8 KB, 0x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Problem mit Fehlermeldung

  Alt 8. Mär 2008, 19:27
Fehler:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Zins := Zins.Create;
  SetZero;
end;

Korrigiert:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Zins := TZins.Create;
  SetZero;
end;
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Landfloh

Registriert seit: 17. Feb 2008
75 Beiträge
 
Delphi 7 Personal
 
#3

Re: Problem mit Fehlermeldung

  Alt 8. Mär 2008, 19:30
Danke
Es leuft . War einfach nur ein dummer Schusselfehler .
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Problem mit Fehlermeldung

  Alt 8. Mär 2008, 19:40
GuenterS hat dir ja den Fehler bereits korrigiert... Dennoch ein paar Anmerkungen zu deiner Struktur, die, wie ich finde, nicht wirklich schön aufgestellt ist:
  • Dein SetZero Methode aus der TForm1 Klasse gehört nicht dorthin, sondern innerhalb deiner TZins Klasse.Damit bist du unabhängig, die Methode auch für andere Instanzen zu nutzen
  • Wenn du schon Set-Methode in der TZins Klasse definierst, dann würde ich auch eine Property drumrumlegen. Auch würde ich nicht innerhalb der TZins Klasse die Konvertierung von String nach Float vornehmen, sondern das nur von aussen. Deine TZins Klasse macht dann mehr, was man von ihr erwartet: Man übergibt Werte, und lässt sich was ausrechnen. Es ist nicht Aufgabe der TZins Klasse, diese String-Float Konvertierungen vorzunehmen.
  • Auch die Get-Funktionen sollten einen String zurückliefern. Im Übrigen sollten sowohl die Get und Set Methoden von aussen nicht zugänglich sein, sondern nur über die Properties angesprochen werden... Hier mal am Beispiel von Kapital:
Delphi-Quellcode:
interface

type
  TZins = class (TObject)
  private
    function GetKapital: single;
    procedure SetKapital(const Value: single);
  public
    property Kapital : single read GetKapital write SetKapital ;
  end;


implementation

{ TZins }

function TZins.GetKapital: single;
begin
    return ...
end;

procedure TZins.SetKapital(const Value: single);
begin
     FKapital := value ;
end;

end.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Problem mit Fehlermeldung

  Alt 8. Mär 2008, 19:40
Trotzdem wäre eine genauere Beschreibung im Titel sinnvoll gewesen, z.B.
Zitat:
Access violation bei Form.create
Das könntest Du auch jetzt noch mit dem Edit-Button korrigieren, auch wenn es erledigt ist.
So globale Titel wie "programm geht nich" werden ebenso wie Dein Titel von einigen Leuten nicht gerne gesehen. Und ein Anfängerforum wo das nicht so auffiele, gibt es hier nicht.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Problem mit Fehlermeldung

  Alt 8. Mär 2008, 19:48
Naja, der Fehler war ja bei der Frage eben noch nicht bekannt... Ausserdem liefert ja ein
Zins := Zins.Create ;

beim Kompilieren keinen Fehler. Und beim Ausführen kommt eben nur diese Schutzverletzung, ohne grössere Angabe, was denn da nun fehlgeschlagen ist... Gerade für Anfänger eben nicht besonders hilfreich, und man tappt erstmal ne Zeit lang im Dunkeln.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Problem mit Fehlermeldung

  Alt 8. Mär 2008, 21:22
Zitat von Jelly:
Naja, der Fehler war ja bei der Frage eben noch nicht bekannt... Ausserdem liefert ja ein
Zins := Zins.Create ;

beim Kompilieren keinen Fehler. Und beim Ausführen kommt eben nur diese Schutzverletzung, ohne grössere Angabe, was denn da nun fehlgeschlagen ist... Gerade für Anfänger eben nicht besonders hilfreich, und man tappt erstmal ne Zeit lang im Dunkeln.
Andererseits hätte mans mit dem Debugger wohl in ein paar Sekunden gehabt, dass genau hier der Fehler auftritt.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Problem mit Fehlermeldung

  Alt 8. Mär 2008, 21:58
Wenn man weiß, wie man damit umgeht, ja.
Gerade als Anfänger weiß man das, denke ich, nicht.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf