AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit Delphi-Taschenrechner...AccessViolation
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Delphi-Taschenrechner...AccessViolation

Ein Thema von sepperl · begonnen am 18. Aug 2005 · letzter Beitrag vom 18. Aug 2005
 
sepperl

Registriert seit: 18. Aug 2005
5 Beiträge
 
#1

Problem mit Delphi-Taschenrechner...AccessViolation

  Alt 18. Aug 2005, 21:06
Hallo,
ich bin neu hier und auch noch ein Delphi-Anfänger. Ich habe einen kleinen Taschenrechner in Delphi programmiert, leider gibt es bei der Berechnung ein Problem. Ich habe schon mein Buch gewälzt, gegooglet usw. aber keine Lösung gefunden. Vielleicht kann ich euch einfach mal meinen Quelltext hier reinkopieren und ihr könnt mir ein paar Tips geben worans liegen könnte?

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ZahlButton1: TButton;
    ZahlButton2: TButton;
    ZahlButton3: TButton;
    ZahlButton4: TButton;
    ZahlButton5: TButton;
    ZahlButton6: TButton;
    ZahlButton7: TButton;
    ZahlButton8: TButton;
    ZahlButton9: TButton;
    ZahlButton10: TButton;
    ZahlButton11: TButton;
    OpButton12: TButton;
    OpButton13: TButton;
    OpButton14: TButton;
    OpButton15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    procedure ZahlButtonClick(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure OpButtonClick(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  zahl, op: Char;
  index: Integer = 1;
  zahlen, ops: array of String;
  ausgabe, strBuff: String;

implementation

{$R *.dfm}


procedure TForm1.ZahlButtonClick(Sender: TObject);
var i: Integer;
begin
        if Sender = ZahlButton1 then zahl := '1'; if Sender = ZahlButton2 then zahl := '2';
        if Sender = ZahlButton3 then zahl := '3'; if Sender = ZahlButton4 then zahl := '4';
        if Sender = ZahlButton5 then zahl := '5'; if Sender = ZahlButton6 then zahl := '6';
        if Sender = ZahlButton7 then zahl := '7'; if Sender = ZahlButton8 then zahl := '8';
        if Sender = ZahlButton9 then zahl := '9'; if Sender = ZahlButton10 then zahl := '0';
        if Sender = ZahlButton11 then zahl := '.' ;

        strBuff := strBuff + zahl;
        if index = 1 then Edit1.Text := strBuff
        else
        begin
                if index <= 2 then
                ausgabe := zahlen[0] + ops[0]
                else
                begin
                        ausgabe := zahlen[0] + ops[0];
                        for i := 2 to index-1 do
                        begin
                        ausgabe := ausgabe + zahlen[i-1] + ops[i-1];
                        end;
                end;
                Edit1.Text := Concat(ausgabe, strBuff);
        end;

end;
procedure TForm1.Button16Click(Sender: TObject);
begin
        zahlen := nil; ops := nil; index := 1; ausgabe := ''; strBuff := '';
        Edit1.Text := '';
end;

procedure TForm1.OpButtonClick(Sender: TObject);
begin
        if Sender = OpButton12 then op := '+'; if Sender = OpButton13 then op := '-';
        if Sender = OpButton14 then op := '*'; if Sender = OpButton15 then op := '/';


        Edit1.Text := Edit1.Text + op;
        SetLength(zahlen, index);
        SetLength(ops, index);
        zahlen[index-1] := strBuff;
        ops[index-1] := op;
        inc(index);
        strBuff := '';
end;

procedure TForm1.Button18Click(Sender: TObject);
begin
        Form1.Close;
end;

procedure TForm1.Button17Click(Sender: TObject);
var erg, a, b: Double;
    code, i: Integer;
    s: String;
begin
        zahlen[index-1] := strBuff;
        if index > 2 then
        begin
                Val(zahlen[0], a, code);
                erg := a;
                for i := 1 to index-1 do
                begin
                        Val(zahlen[i], b, code);
                        if ops[i-1] = '+then erg := erg + b;
                        if ops[i-1] = '-then erg := erg - b;
                        if ops[i-1] = '*then erg := erg * b;
                        if ops[i-1] = '/then erg := erg / b;

                end;
                Str(erg:10:2, s);
                Edit1.Text := s;
        end
        else
        begin
                Val(zahlen[0], a, code);
                Val(zahlen[1], b, code);
                erg := a;
                if ops[0] = '+then erg := erg + b;
                if ops[0] = '-then erg := erg - b;
                if ops[0] = '*then erg := erg * b;
                if ops[0] = '/then erg := erg / b;
                Str(erg:10:2, s);
                Edit1.Text := s;
        end;
end;

end.
Soweit funktioniert der Taschenrechner, nur wenn ich auf das = Zeichen drücke um die Berechnung durchzuführen gibt er mir eine Fehlermeldung aus und zwar eine AccessViolation, der Compiler verweist auf den untersten Bereich mit:

Edit1.Text := s;

Wobei ich nicht glaube, dass der Fehler daran liegt. Wohl eher bei irgendeinem Zugriff auf ein Array...aber wo???
Würde mich sehr freuen, wenn ihr mir weiterhelfen könntet...

Schöne Grüße
Sepperl
  Mit Zitat antworten Zitat
 


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 12:38 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