![]() |
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 |
AW: Automatisches Rechnen
Zitat:
Falls das IF nur so reingerutscht ist, raus damit. |
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 |
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 :( |
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
|
AW: Automatisches Rechnen
Delphi-Quellcode:
procedure Edit1Change(Sender: TObject);
Zitat:
Zitat:
|
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. |
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:
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.
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.') |
AW: Automatisches Rechnen
Zitat:
![]() 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. |
AW: Automatisches Rechnen
Zitat:
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. |
AW: Automatisches Rechnen
danke und klar das ist dann natürlich sinnvoll
aber irgendwie funst das immer noch nicht mit dem automatischen Rechnen :D ich hab den Code was ich habe mit ein bei Google verglichen gehabt was auch für eine automatische Rechnung is und ich weiß immer noch nicht warum :D Wenn ich das alles über ein Button rechnen lasse funktioniert das einwandfrei aber das will ich ja nicht. Er soll gleich berechnen sobald man in Edit1 oder Edit 2 usw was eingibt. Das sind 8 Edit Felder und mit 8 Buttons is das etwas schlecht Könnte auch ein für alles machen was aber der letzte Ausweg is. Die exe funktioniert so jetzt erst einmal auch die Zahleneingabe klappt sehr gut und jaa ^^ es stürtzt ab sobald man ein Buchstaben eingibt was ich gleich ändern werde ;) nur erscheint das Ergebnis nicht im Label 9 usw Mach ich das über ein Button mit der selben Funktion und dem selben Code halt nur mit Click geht alles. Mächtig verwirrend EDIT: ich hab leider von damals gar nix mehr. Die Email Adresse war meine alte GMX die ich gelöscht habe wegen Werbung und alles andere hab ich auch nicht mehr da ich das immer auf die CD rauf schreibe |
AW: Automatisches Rechnen
Das ist eine ähnliche Aufgabe wie im 1. Kapitel von "Programmieren macht Spass!":
![]() Zwar nicht mit Lazarus aber auch mir Free Pascal. Die verwendete Komponentenbibliothek hat spezielle Komponenten für Zahleneingabe und Zahlenanzeige. StrToFloat() ist dort nicht notwendig. |
AW: Automatisches Rechnen
Aktion ausführen bei Klicken des Knopfes -> OnClick des Buttons
Aktion ausführen bei Änderung des Textes -> OnChange des Edits Aber gerade hier mußt du die Eingabewerte prüfen, denn während der Eingabe können/werden schnell mal ungültige Inhalte entstehen (z.B. leere Edit-Texte) und dann wäre es echt nervig, wenn nach jedem einzelnen Tastendruck eine Exception mit nachfolgender Fehlermeldung auftreten könnte. |
AW: Automatisches Rechnen
na ich glaube ich lösche nochmal alles und fange zum 3. mal von vorn an ^^ aus Fehler lernt man ja :)
Weil es zwar immer noch nicht rechnet aber es stürzt auch ab sobald man auf ein Label klickt. Vielleicht lasse ich mir doch noch was einfallen und gebe das alles doch in ein Edit aus. Mal was überlegen ^^ Edit: danke für die Rar Datei ^^ die lese ich mir jetzt erst mal durch vielleicht finde ich den Fehler ja auch selbst ohne Hilfe sonst wird man ja Faul und grübelt gar nicht mehr |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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