![]() |
Problem mit OnChange
guten Tag!
finde das forum toll, nur die suchfunktion bringt mich zum verzweifeln... hab seit 2 stunden delphi in der schule und bin noch nicht so begabt darin ^^ ich wollte ne einfache rechnung mit dem programm machen und bei einem labelededit textfeld ein onchange machen, also wenn sich die zahl im feld ändert spuckt er direkt die neue lösung raus... dürftet ihr ja kennen... nur wenn ich die ganze zahl lösche kommt halt das problem mit Im Projekt "blablabla" ist eine Exception der Klasse EConvertError aufgetreten. Meldung: '''ist kein gültiger Gleitkommawert'. Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen. ok is klar, aber wie kann ich machen dass der dann nix rechnet wenn im feld nix mehr steht? mit "if" und son zeugs? nur habsch keine ahnung wie ich das reinbringen soll, bin doch noch ein noob vielen dank schon mal für eure geopferte zeit :dp: |
Re: Problem mit OnChange
genau mit if und so nem Zeug.
if labelededit1.text='' then //mache nix else //mach etwas oder du nimmst statt strtofloat trystrtofloat. Schau mal in der Hilfe oder hier in der Suche wie das verwendet wird. |
Re: Problem mit OnChange
also per IF ließe sich dieses eine Problem schon lösen,
du brauchts nur zu prüfen ob das Property .Text deines Edits einem Leerstring entspricht und dann entsprechend reagieren...
Delphi-Quellcode:
aber es gibt ja noch andere Fehler ... z.B.:
// z.B. am Anfang der Ereignisprozedur diese wieder beenden
if LabelEdit1.Text = '' then exit; // oder den entsprechenden Codeteil nur ausführen, wenn nich leer ist if LabelEdit1.Text <> '' then begin ... end; - Leerzeichen, nicht ganz leer nicht (das ließe sich mit ![]() - Buchstaben und andere Zeichen im String Wie wandelst du denn den String (Editinhalt) in eine Zahl um? StrToInt/StrToFloat wirf bei ungültigen Werten mit einer Exception (Fehlermeldung und Prozedurabbruch) um sich. ![]() ![]() ![]() ach ja: Herzlich Willkommen :hi: [edit] ups "ist kein gültiger Gleitkommawert" ... ![]() ![]() ![]() |
Re: Problem mit OnChange
irre schnelles feedback ^^ ihr seid die besten :)
wie gesagt mit der suchfunktion kann ich mich nicht so anfreunden, die wirft alles mögliche wo nur das wort einmal vorkommt raus und da is meistens nicht das drin was ich brauche hab jetzt die ganze zeit gesucht wie das mit trystrtofloat geht oder strtofloatdef und habs nit rausbekommen :( da kam auch immer beim compilieren [Fehler] Unit1.pas(80): Es gibt keine überladene Version von 'TryStrToFloat', die man mit diesen Argumenten aufrufen kann muss ich wenn ich den befehl benutze sonst noch was beachten? uses math oder sowas spezielles? soll ich vllt mal meinen code hier eintragen? mfg edit: zur hilfe im programm selbst----> Warum kann ich keine Hilfe von diesem Programm erhalten? Die Hilfe für dieses Programm wurde in einem Windows-Hilfeformat erstellt, das in früheren Versionen von Windows verwendet wurde. Es wird in Windows Vista nicht unterstützt. BLÖD ^^ |
Re: Problem mit OnChange
TryStrToFloat ist in SysUtils definiert und besitzt mehrere Überladungen
Delphi-Quellcode:
function TryStrToFloat(const S: string; out Value: Extended): Boolean;
function TryStrToFloat(const S: string; out Value: Extended;const FormatSettings: TFormatSettings): Boolean; function TryStrToFloat(const S: string; out Value: Double): Boolean; function TryStrToFloat(const S: string; out Value: Double; const FormatSettings: TFormatSettings): Boolean; function TryStrToFloat(const S: string; out Value: Single): Boolean; function TryStrToFloat(const S: string; out Value: Single; const FormatSettings: TFormatSettings): Boolean; ...du kannst es mit diesen Parametern benutzen, musst halt schauen, welches für dich am meisten geeignet ist. |
Re: Problem mit OnChange
Zitat:
also wie du es gemacht hast, denn so könnten wir sehn was eventuell alsch ist. Zitat:
Zitat:
und Notfalls gesondert in der Rubrik "Die Delphi-IDE" nachfragen. |
Re: Problem mit OnChange
also ich benutze delphi 7 das wir alle in der schule nutzen müssen...
mein OS is windows vista home premium 32 bit wenn ihr mein codeabschnitt seht fallt ihr tot um, da is alles durcheinander ich bin ja nur am testen ^^
Delphi-Quellcode:
hab so lange rumexperimentiert wo ich eure ganzen befehle hinballern soll, dass ich manche einfach stehen gelassen hab ^^ aber es funktioniert jetzt durch das if labelededit1.text <> '' then"
procedure TForm1.Button1Click(Sender: TObject);
var ek, mwst, endbetrag, prozent1, prozent2, prozent3, prozent4,proend1, proend2, proend3, proend4: real; begin if labelededit1.text <> '' then ek := strtofloat (labelededit1.text); if labelededit1.Text = '' then exit; mwst := ek * 1.19; endbetrag := (ek * 1.20) * 1.19; labelededit2.text := floattostr (mwst); labelededit3.text := floattostr (endbetrag); proend1 := (ek * 1.10) * 1.19; labelededit8.text := floattostr (proend1); proend2 := (ek * 1.30) * 1.19; labelededit9.Text := floattostr (proend2); proend3 := (ek * 1.40) * 1.19; labelededit10.Text := floattostr (proend3); end; boah bin ich hoffnungslos vielen dank an euch aber über weitere tipps würd ich mich freuen, will soviel lernen wies geht mfg |
Re: Problem mit OnChange
Ungetestet:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var ek, mwst, endbetrag, prozent1, prozent2, prozent3, prozent4,proend1, proend2, proend3, proend4: real; begin if TryStrToFloat(labelededit1.text,ek) then begin mwst := ek * 1.19; endbetrag := (ek * 1.20) * 1.19; labelededit2.text := floattostr (mwst); labelededit3.text := floattostr (endbetrag); proend1 := (ek * 1.10) * 1.19; labelededit8.text := floattostr (proend1); proend2 := (ek * 1.30) * 1.19; labelededit9.Text := floattostr (proend2); proend3 := (ek * 1.40) * 1.19; labelededit10.Text := floattostr (proend3); end; end; |
Re: Problem mit OnChange
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var ek, mwst, endbetrag, prozent1, prozent2, prozent3, prozent4,proend1, proend2, proend3, proend4: real; begin if labelededit1.Text = '' then exit; ek := strtofloat (labelededit1.text); ... end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var ek, mwst, endbetrag, prozent1, prozent2, prozent3, prozent4,proend1, proend2, proend3, proend4: real; begin if labelededit1.Text <> '' then begin ek := strtofloat (labelededit1.text); ... end; end;
Delphi-Quellcode:
also Möglichkeiten gibt es viele, wobei für dich wohl für den Anfang die letzen Beiden (ohne Exit) wohl besser sind.
procedure TForm1.Button1Click(Sender: TObject);
var ek, mwst, endbetrag, prozent1, prozent2, prozent3, prozent4,proend1, proend2, proend3, proend4: real; begin if labelededit1.Text <> '' then begin ek := strtofloat (labelededit1.text); ... end else begin //... hier eine Fehlermeldung end; end; aber da nicht nur der Leerstring eine fehlerhafte Zahl darstellen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var ek, mwst, endbetrag, prozent1, prozent2, prozent3, prozent4,proend1, proend2, proend3, proend4: real; begin if TryStrToFloat(labelededit1.Text, ek) then begin mwst := ek * 1.19; endbetrag := (ek * 1.20) * 1.19; proend1 := (ek * 1.10) * 1.19; proend2 := (ek * 1.30) * 1.19; proend3 := (ek * 1.40) * 1.19; labelededit2.text := floattostr (mwst); labelededit3.text := floattostr (endbetrag); labelededit8.text := floattostr (proend1); labelededit9.Text := floattostr (proend2); labelededit10.Text := floattostr (proend3); //end //else //begin // ... hier eine Fehlermeldung end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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