Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit OnChange (https://www.delphipraxis.net/106901-problem-mit-onchange.html)

widowmaker2k7 18. Jan 2008 12:39


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:

sirius 18. Jan 2008 12:42

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.

himitsu 18. Jan 2008 12:50

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:
// 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;
aber es gibt ja noch andere Fehler ... z.B.:
- Leerzeichen, nicht ganz leer nicht (das ließe sich mit Delphi-Referenz durchsuchenTrim umgehen)
- 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.

Delphi-Referenz durchsuchenVal, Delphi-Referenz durchsuchenTryStrToInt und Delphi-Referenz durchsuchenStrToIntDef dagegen behandeln solche Fehler oder weisen darauf hin.


ach ja: Herzlich Willkommen :hi:


[edit]
ups "ist kein gültiger Gleitkommawert" ...
Delphi-Referenz durchsuchenVal, Delphi-Referenz durchsuchenTryStrToFloat und Delphi-Referenz durchsuchenStrToFloatDef :angel:

widowmaker2k7 18. Jan 2008 12:59

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 ^^

Tyrael Y. 18. Jan 2008 13:06

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.

himitsu 18. Jan 2008 13:15

Re: Problem mit OnChange
 
Zitat:

da kam auch immer beim compilieren [Fehler] Unit1.pas(80): Es gibt keine überladene Version von 'TryStrToFloat', die man mit diesen Argumenten aufrufen kann
am Besten du zeigst mal deinen Codabschnitt her
also wie du es gemacht hast, denn so könnten wir sehn was eventuell alsch ist.

Zitat:

Zitat von OH
Delphi-Syntax:

function StrToFloatDef(const S: string; const Default: Extended): Extended;
function StrToFloatDef(const S: string; const Default: Extended; const FormatSettings: TFormatSettings): Extended;


function TryStrToFloat(const S: string; out Value: Extended): Boolean;
function TryStrToFloat(const S: string; out Value: Double): Boolean;
function TryStrToFloat(const S: string; out Value: Single): Boolean;
function TryStrToFloat(const S: string; out Value: Extended; const FormatSettings: TFormatSettings): Boolean;
function TryStrToFloat(const S: string; out Value: Double; const FormatSettings: TFormatSettings): Boolean;
function TryStrToFloat(const S: string; out Value: Single; const FormatSettings: TFormatSettings): Boolean;



Zitat:

Zitat von widowmaker2k7
edit: zur hilfe im programm selbst----> Warum kann ich keine Hilfe von diesem Programm erhalten?

welche Delphi-Version nutzt du denn? (idealer Weise gleich im Profil angeben)

und Notfalls gesondert in der Rubrik "Die Delphi-IDE" nachfragen.

widowmaker2k7 18. Jan 2008 13:21

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:
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;
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"

boah bin ich hoffnungslos

vielen dank an euch aber über weitere tipps würd ich mich freuen, will soviel lernen wies geht

mfg

DeddyH 18. Jan 2008 13:26

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;

himitsu 18. Jan 2008 13:31

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:
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;
also Möglichkeiten gibt es viele, wobei für dich wohl für den Anfang die letzen Beiden (ohne Exit) wohl besser sind.

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 03:51 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