Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Automatisches Rechnen (https://www.delphipraxis.net/181630-automatisches-rechnen.html)

TheBeer 30. Aug 2014 16:01

Automatisches Rechnen
 
Hallo erst mal an alle, ich hab nach sehr langer Zeit ( ca 4 Jahre) mal wieder angefangen in Delphi bzw jetzt in Lazarus ( hab Delphi leider nicht mehr :( und das XE6 is zu teuer) etwas zu schreiben.


Nun habe ich ein Problem und komme seit einer Stunde nicht mehr weiter vielleicht geht der Weg hier ja schneller :)

Und zwar möchte ich im Edit1 Feld eine Zahl eingeben und er soll automatisch berechnen und sie im Label 9 wieder Ausgeben. Label zur Ausgabe darum weil der Wert nicht verändert werden soll. Es ist für ein Spiel, man könnte auch ein Edit als ausgabe nehmen aber ein Label sieht ein bischen besser aus finde ich.

Hier mal der Quellcode:


procedure TForm1.Label9Click(Sender: TObject);
var
a,ergebnis: real;

begin
a:=StrToFloat(Edit1.Text);
ergebnis:=StrToFloat(Label9.Caption);
Edit1.Text:='';

ergebnis:=a*1200;
DefaultFormatSettings.ThousandSeparator:='.';



if Edit1.Text = '' then
begin
a:=ergebnis/1200;
end
else
if

Label9.Caption:=FloatToStr(ergebnis);


end;





So nun gibt der mir immer folgenden Fehler an:
unit1.pas(96,39) Fatal: Syntax error, "THEN" expected but ";" found



ich weiß nicht mehr was er von mir da will, hab die Zeile mal fett makiert damit ihr das besser erkennen könnt.


danke schon mal im vorraus


mfg Andreas

Popov 30. Aug 2014 16:07

AW: Automatisches Rechnen
 
Zitat:

Zitat von TheBeer (Beitrag 1270305)
Delphi-Quellcode:
procedure TForm1.Label9Click(Sender: TObject);
var
  a,ergebnis: real;

begin
a:=StrToFloat(Edit1.Text);
ergebnis:=StrToFloat(Label9.Caption);
  Edit1.Text:='';

   ergebnis:=a*1200;
     DefaultFormatSettings.ThousandSeparator:='.';



  if Edit1.Text = '' then
     begin
       a:=ergebnis/1200;
     end
  else
  if // <<<<<<<<<<<<<<<<<<<< bei einem IF gibt es auch immer ein THEN

  Label9.Caption:=FloatToStr(ergebnis);


end;

Du hast IF Abfrage gestellt, aber weder Vergleich, noch THEN angegeben.

Falls das IF nur so reingerutscht ist, raus damit.

mkinzler 30. Aug 2014 16:12

AW: Automatisches Rechnen
 
Zudem würde ich die Eingabe nicht ungeprüft in einen Float wandeln, da man ja in den edit alles mögliche eingeben kann.
Statt StrToFloat() besser TryStrToFloat() oder StrToFloatDef() verwenden

TheBeer 30. Aug 2014 16:14

AW: Automatisches Rechnen
 
ah danke dir, warum mir das nicht aufgefallen ist :D


aber nun zeigt der ein neuen fehler an:

procedure Edit1Change(Sender: TObject);


Fehlercode: unit1.pas(33,15) Error: Forward declaration not solved "TForm1.Edit1Change(TObject);"



man kann doch anscheinend ganz schön viel verlernen :(

TheBeer 30. Aug 2014 16:18

AW: Automatisches Rechnen
 
@markus: das vielleicht gar nicht so eine verkehrte Idee aber die beiden Begriffe sagen mir jetzt mal gar nichts und da Lazarus auch keine Vorschläge macht würde ich nicht mal wissen wie ich das später dann wieder ausgegeben bekomme also wieder zurück in das Label

himitsu 30. Aug 2014 16:33

AW: Automatisches Rechnen
 
Delphi-Quellcode:
procedure Edit1Change(Sender: TObject);
Zitat:

unit1.pas(33,15) Error: Forward declaration not solved "TForm1.Edit1Change(TObject);"
Es wird, wie es in der Fehlermeldung auch drin steht, nach der Methode TForm1.Edit1Change gesucht, welche aber nicht vorhanden ist, da du nur eine Prozedur TForm1.Edit1Change deklariert hast.


Zitat:

hab Delphi leider nicht mehr
Was war's denn für ein Delphi und wieso nicht mehr?

TheBeer 30. Aug 2014 16:37

AW: Automatisches Rechnen
 
danke für die information :)

es war mal Delphi 6 und ich hab die CD beim Umzug oder sonst was verbummelt. Habe mir dann zwar Delphi 7 geladen gestern aber das wird von Windoof 7 nicht unterstützt und selbst wenn ich alles umstelle stürtzt das immer ab beim compilieren.

Hatte mich nach langen gelese bei onkel google für Lazarus entschieden gestern abend und muss jetzt nach 5h sagen warum nicht ist nicht viel schlechter außer das man die Vorschläge nicht mehr hat und ein paar andere kleinigkeiten weg sind.

Popov 30. Aug 2014 16:40

AW: Automatisches Rechnen
 
Was mkinzler sagen will ist, dass es riskant ist anzunehmen, dass in einem Edit-Feld immer eine Zahl steht. Was passiert wenn dort mal keine Zahl steht? Dann gibt es eine Fehlermeldung und u. U. Programmabbruch.

Falls dir TryStrToFloat nichts sagt, mit StrToFloatDef kann man auch eine Prüfung auf korrekte Zahl machen:

Delphi-Quellcode:
  if StrToFloatDef(Edit1.Text, 0) = StrToFloatDef(Edit1.Text, -1) then
    ShowMessage('Alles klar, in Edit1 steht eine Zahl.')
  else
    ShowMessage('Halt, in Edit1 steht ein Text oder eine fehlerhafte Zahl.')
Wenn in Edit-Feld eine Zahl steht, ist die IF Abfrage TRUE. Steht keine Zahl drinn, gibt das linke StrToFloatDef als Ersatz eine 0, das rechte -1. Das Ergebnis ist FALSE.

Popov 30. Aug 2014 16:48

AW: Automatisches Rechnen
 
Zitat:

Zitat von TheBeer (Beitrag 1270312)
es war mal Delphi 6 und ich hab die CD beim Umzug oder sonst was verbummelt. Habe mir dann zwar Delphi 7 geladen gestern aber das wird von Windoof 7 nicht unterstützt und selbst wenn ich alles umstelle stürtzt das immer ab beim compilieren.

Hier eine Anleitung wie man Delphi 7 auf Windows 7 zum laufen kriegt: http://www.dailymotion.com/video/x1k...minuten_school

Der Kollege jaenicke hat auch eine Anleitung geschrieben wie es geht. Ob das Tutorial auch hier veröffentlicht wurde weiß ich nicht, aber in der entwickler-ecke.de steht es auf jeden Fall drin. Es hat noch paar Tipps mehr als das Video.

himitsu 30. Aug 2014 16:50

AW: Automatisches Rechnen
 
Zitat:

Delphi-Quellcode:
DefaultFormatSettings.ThousandSeparator:='.';

Es ist nicht sonderlich gut, wenn man an globalen Einstellungen rumspielt, es sei denn das soll wirklich für das komplette Programm dauerhaft umgestellt werden. Dann aber einmal beim Programmstart und nicht immer wieder.

Am Besten du verwendest eine eigene TFormatSettings-Variable, welche dann als Parameter z.B. an deine StrToFloat und FloatToStr übergeben wird.
Und es ist natürlich auch unglücklich, daß dein FormatSettings zwischen deinen beiden StrToFloat und FloatToStr steht, denn beim ersten Aufruf wäre ja das FormatSettings vom StrToFloat eventuell noch falsch.



Bei Delphi 6 ist das jetzt ein kleines Problem.
Wenn du es damals bei Borland registriert hattest, womit deine Lizenz also bekannt wäre, dann könnte man bestimmt noch was über die Community machen.
Embarcadero selber kann keine Setups vor Delphi 7 bereitstellen und verweist dann meistens auf uns, wo es noch jemandenden gibt, der ein Setup besitzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz