![]() |
Rechner für durch rechnen
Hi,
ich haben einen tschenrechner der nur durch rechnen soll ,das geht auch nur wenn in den editfeldern keine zahl steht stürzt das programm ab oder es kommt die fehlermeldung *ist kein gültiger Gleitkommawert.
Code:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) GroupBox1: TGroupBox; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Edit10: TEdit; Edit11: TEdit; Edit12: TEdit; Edit13: TEdit; Edit14: TEdit; Edit15: TEdit; Edit16: TEdit; Edit17: TEdit; Edit18: TEdit; Edit19: TEdit; Edit20: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; GroupBox2: TGroupBox; Edit21: TEdit; Edit22: TEdit; Edit23: TEdit; Edit24: TEdit; Edit25: TEdit; Edit26: TEdit; Edit27: TEdit; Edit28: TEdit; Edit29: TEdit; Edit30: TEdit; Edit31: TEdit; Edit32: TEdit; Edit33: TEdit; Edit34: TEdit; Edit35: TEdit; Edit36: TEdit; Edit37: TEdit; Edit38: TEdit; Edit39: TEdit; Edit40: TEdit; Button1: TButton; GroupBox4: TGroupBox; Edit41: TEdit; Edit42: TEdit; Edit43: TEdit; Edit44: TEdit; Edit45: TEdit; Edit46: TEdit; Edit47: TEdit; Edit48: TEdit; Edit49: TEdit; Edit50: TEdit; Edit51: TEdit; Edit52: TEdit; Edit53: TEdit; Edit54: TEdit; Edit55: TEdit; Edit56: TEdit; Edit57: TEdit; Edit58: TEdit; Edit59: TEdit; Edit60: TEdit; StatusBar1: TStatusBar; GroupBox5: TGroupBox; GroupBox3: TGroupBox; GroupBox6: TGroupBox; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; Label25: TLabel; Label26: TLabel; Label27: TLabel; Label28: TLabel; Label29: TLabel; Label30: TLabel; Label31: TLabel; Label32: TLabel; Label33: TLabel; Label34: TLabel; Label35: TLabel; Label36: TLabel; Label37: TLabel; Label38: TLabel; Label39: TLabel; Label40: TLabel; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } u, o, Index: real; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin u := StrToFloat(Edit1.text); o := StrToFloat(Edit21.text); u := StrToFloat(Edit2.text); o := StrToFloat(Edit22.text); u := StrToFloat(Edit3.text); o := StrToFloat(Edit23.text); u := StrToFloat(Edit4.text); o := StrToFloat(Edit24.text); u := StrToFloat(Edit5.text); o := StrToFloat(Edit25.text); u := StrToFloat(Edit6.text); o := StrToFloat(Edit26.text); u := StrToFloat(Edit7.text); o := StrToFloat(Edit27.text); u := StrToFloat(Edit8.text); o := StrToFloat(Edit28.text); u := StrToFloat(Edit9.text); o := StrToFloat(Edit29.text); u := StrToFloat(Edit10.text); o := StrToFloat(Edit30.text); u := StrToFloat(Edit11.text); o := StrToFloat(Edit31.text); u := StrToFloat(Edit12.text); o := StrToFloat(Edit32.text); u := StrToFloat(Edit13.text); o := StrToFloat(Edit33.text); u := StrToFloat(Edit14.text); o := StrToFloat(Edit34.text); u := StrToFloat(Edit15.text); o := StrToFloat(Edit35.text); u := StrToFloat(Edit16.text); o := StrToFloat(Edit36.text); u := StrToFloat(Edit17.text); o := StrToFloat(Edit37.text); u := StrToFloat(Edit18.text); o := StrToFloat(Edit38.text); u := StrToFloat(Edit19.text); o := StrToFloat(Edit39.text); u := StrToFloat(Edit20.text); o := StrToFloat(Edit40.text); Index := u / o Label21.Caption := FloatToStr(Index); Label22.Caption := FloatToStr(Index); Label23.Caption := FloatToStr(Index); Label24.Caption := FloatToStr(Index); Label25.Caption := FloatToStr(Index); Label26.Caption := FloatToStr(Index); Label27.Caption := FloatToStr(Index); Label28.Caption := FloatToStr(Index); Label29.Caption := FloatToStr(Index); Label30.Caption := FloatToStr(Index); Label31.Caption := FloatToStr(Index); Label32.Caption := FloatToStr(Index); Label33.Caption := FloatToStr(Index); Label34.Caption := FloatToStr(Index); Label35.Caption := FloatToStr(Index); Label36.Caption := FloatToStr(Index); Label37.Caption := FloatToStr(Index); Label38.Caption := FloatToStr(Index); Label39.Caption := FloatToStr(Index); Label40.Caption := FloatToStr(Index); end; end. |
Re: Rechner für durch rechnen
Nimm Val zum Umwandeln und überprüf den Code-Parameter. Erklärung und Beispiel in der Delphi-Hilfe.
|
Re: Rechner für durch rechnen
Hallo black_,
ersetze Deine Zuweisung StrToFloat(txt) durch eine Funktion:
Code:
Nicht getestet, sollte aber in etwa so funktionieren.
function Str2Float(wert : string) : double;
begin try Result := StrToFloat(wert); except Result := 0; end; end; //Nutzung .... u := Str2Float(Edit20.text); o := Str2Float(Edit40.text); mfg eddy |
Re: Rechner für durch rechnen
Noch ein Tipp von mir: Ich würde den ganzen Edits und Labeln mal vernünftige Namen geben, denn in großen Projekten erspart man sich so viel Zeit und man behält den Überblick.
|
Re: Rechner für durch rechnen
Argh. Warum ein unnötiger try-except-Block? Der produziert unnötig viel zusätzlichen Code Overhead, den der Compiler generieren muss und die CPU abarbeiten muss. val macht genau das selbe nur ohne try-except. :roll:
Und mein Tipp wäre sie dynamisch zu erstellen und ihnen einheitliche Namen zugeben, dann kann man sie mit FindComponent ansprechen. Macht den Code wesentlich übersichtlicher. |
Re: Rechner für durch rechnen
Hat jemand ein Beispiel wie das dynamisch mit Fehlermeldung ausehen kann.
Danke im Voraus. mfg Black |
Re: Rechner für durch rechnen
:gruebel: Ich versteh den Sinn der vielen Edits und Labels inklusive Zuweisungen nicht, wo doch sowieso nur Edit20 und Edit40 verarbeitet werden.
|
Re: Rechner für durch rechnen
Verarbeitet werden Edit1 bis Edit40, die vielen Edit und Label sind für diese Programm notwendig.
Um das einfach zu machen soll es dynamisch gehen, nur weiß ich nicht wie das geht mfg Black |
Re: Rechner für durch rechnen
Hi Lucki,
ich hab' beide Varianten mal in ein Programm eingebunden. Ich muß zugeben der erstaunliche "Code Overhead" hat meinen AMD2700+ fast in die Knie gezwungen und meine Eingaben kaum entgegengenommen, aber nachdem ich eine zweite Festplatte eingebaut und ISDNWatch, FritzFax, FritzFon, FritzWeb, InternetSecurity, Antivirus, Delphi und noch ein paar weniger wichtige Programme beendet habe, konnte ich sogar wieder die Maus bedienen. Übrigens hatte ich nicht mit dieser außerordenlichen Differenz zwischen beiden EXE-Dateien gerechnet, sie betrug exact 0 Byte. Optimieren ist eine feine Sache, aber doch bitte da wo es Sinn macht. Und seit wann hat objektorientierte Programmierung etwas mit Optimierung der Größe der EXE-Datei zu tun? Der Zeitaufwand für das Programmieren wird damit erreicht, ansonsten könnte man ja wieder zurück zu Assembler und Forth, Pascal, Cobol oder wie sie alle heißen. Dann würde auch wieder ein Computer mit 8 MHz Prozessor, 16 kB RAM und 2 Disketten-LW (oder Lochstreifen) ausreichen. Außerdem, viele Weg führen nach Rom. @black_: Hier noch der Code für die Version von Lucki:
Code:
mfg
procedure TForm1.SpeedButton1Click(Sender: TObject);
var u, o : real; code : integer; begin val(Edit20.text, u, code); val(Edit40.text, o, code); end; eddy |
Re: Rechner für durch rechnen
Danke für deine Hilfe Eddy ,mein Pc hat bis jetzt keine Probleme gemacht ,PIII 1000 MHZ.
Aber was macht jetzt den Code übersichtlicher ,wenn ich eh die ganzen Edit und noch zu deinen Code einfügen muß, aber die Labels fehlen ja um das Ergebnis aus zu geben. mfg Black |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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