(Anfänger)Problem mit Fensterprogrammierung



  • Hallo und danke an alle die sich die Zeit nehmen dies durchzulesen.
    Also hab seiht einigen Tagen per Schulbuch mit Windowsprogrammierung angefangen,woran ich auch einigen Spass habe,dummerweise hab nun ein Problem und komm nicht weiter und haben erst in 1mon wieder das Unterricht so das ich einen Lherer Fragen könnte.

    Ich post jetzt einfach mal den quelltext,achso der sinn des Programms soll sein das man im Fenster mit Radiobuttons eine rechnung auswählen (kapital,Zinsen usw)
    Ich hab mir alles größtenteils zusammengereimt da das Buch in dem Bereich ziemlich unausführlich ist.
    Also so ungefähr sieht das Fenster ungefähr aus:


    [] Zinssatz (Radiobutton2) [Editfeld] (EditZinssatz)
    []Anlagedauer (Radiobutton3) [Editfeld] (EditTage)
    []Zinsen (Radiobutton4) [Editfeld] (EditZinsen)

    BerechnenButton(Berechnen)

    Das ist Optisch bei mir in Ordnung auch das nicht Enable und so klappt wunderbar das einzigste Problem ist wenn ich Berechnen drücke und es dan ausgerechnet werden soll kommt folgende Fehlermeldung:"Im Projekt Zinsen.exe ist eine Exception der Klasse EConvertError aufgetreten.Meldung:0,00€ist kein gültiger Gleitkommawert:Prozeß wurde angehalten."...

    Jetzt einfach mal der Quellcode des Berechnen Buttons da dort ja das Problem sitzt:

    #include <vcl.h>
    #pragma hdrstop

    #include "Zinsfenster.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    THauptfenster Hauptfenster;
    //---------------------------------------------------------------------------
    __fastcall THauptfenster::THauptfenster(TComponent
    Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall THauptfenster::BerechnenClick(TObject *Sender)
    {
    double Kapital,Zinssatz,Zinsen;
    double Tage;

    if (RadioButton1->Checked == true)
    Kapital =Zinsen*360*100/Tage/Zinssatz;
    EditKapital->Enabled==true;
    EditKapital->Text=FloatToStrF(Kapital, ffCurrency,10,2);

    if (RadioButton2->Checked ==true)
    Zinssatz=Zinsen*100*360/Kapital/Tage;
    EditZinssatz->Enabled==true;
    EditZinssatz->Text=FloatToStrF(Zinssatz, ffCurrency,10,2 );

    if (RadioButton3->Checked ==true)
    Tage=Zinsen*100*360/Kapital/Zinssatz;
    EditTage->Enabled==true;
    EditTage->Text=FloatToStrF(Zinssatz, ffCurrency,10,2 );

    if (RadioButton4->Checked ==true){
    Zinsen=Kapital*Zinssatz*Tage/100/360;
    EditZinsen->Enabled==true;
    EditZinsen->Text=FloatToStrF(Zinssatz, ffCurrency,10,2 );}

    Zinssatz= EditZinssatz->Text.ToDouble();
    Tage= EditTage->Text.ToDouble();
    Zinsen= EditZinsen->Text.ToDouble();
    Kapital= EditKapital->Text.ToDouble();

    }

    Ich bedanke mich schonmal im vorraus, wenn möglich eine kleine Erklärung angeben,muss aber nicht sein,reim mir das dan schon iwie zusammen.
    *Wer Rechtschreibfehler findet,darf sie behalten!*



  • Hallo.

    1. Was steht denn genau in diesen Editfeldern.
    2. Der Fehler tritt auf, weil du ("0,00€") in ein Double umwandeln wills.
    2a. -> Das € Zeichen kann nicht umgewandelt werden.



  • In den Editierfeldern steht beim Start des Programms 0 aber diese ändere ich ja durch eingabe von Zahlen die er ausrechnen soll und kannst du mir sagen wie ich das € wegkrieg? danke



  • Ich hätte nochmals ne kleine Frage.

    1. Ist dass die TEdit komponente?
    2. Wenn du in das Editierfeld etwas eingibst, zeigt es dann ein € Zeichen an?

    Zudem würde ich mal durchdebuggen und nachschauen, wo der Fehler auftritt.
    Und allenfalls auch mal mit ShowMessage(EditKapital->Text),... ermitteln, was er Umzuwandeln versucht. 🙂

    😃 Der Debugger dein Freund und Helfer 😃



  • Hallo

    kannst du mir sagen wie ich das € wegkrieg?

    Schreib es gar nicht erst in das TEdit rein. In das TEdit darf nur eine gültige Zahl geschrieben werden, wenn nötig muß es vom Programm überwacht werden.

    bis bald
    akari



  • Ist mit EditT der Teil Text= gemeint? und könnt ihr mir vl posten wie ein Teil dan richtig aussehen würde? merk grade das mein wissen aus dem Buch noch sehr lückenhaft ist 😞



  • Oder nimm eine Edit Komponente, die damit klarkommt.
    Bei den LMD Tools (kostenlos) ist die TLMDMaskEdit Komponente dabei.
    Da kann man das so machen:

    double betrag = LMDMaskEdit1->AsCurrency();
    


  • Hallo,

    mit TEdit ist die Komponente gemeint in welche du deine Beträge eingibst.

    Mir ist noch aufgefallen dass du einige if-Anweisungen ohne (geschweifte) Klammern schreibst. Das geht solange gut wie die if-Anweisungen nur eine Anweisung enthalten:

    if (RadioButton1->Checked == true) // Hier haben sie gefehlt
    {
       Kapital =Zinsen*360*100/Tage/Zinssatz; 
       EditKapital->Enabled==true; 
       EditKapital->Text=FloatToStrF(Kapital, ffCurrency,10,2); 
    }
    
    // ...
    
    if (RadioButton4->Checked == true){ // Hier hast du sie gesetzt
    Zinsen=Kapital*Zinssatz*Tage/100/360; 
    EditZinsen->Enabled==true; 
    EditZinsen->Text=FloatToStrF(Zinssatz, ffCurrency,10,2 );}
    

    Dann wäre noch die Frage an welcher Stelle "Tage" und "Zinssatz" definiert werden. Die Deklaration ist ja vorhanden aber die Wertzuweisung fehlt.

    Ansonsten würd ich vorgehen wie es Akari bereits geschrieben hat! Das "€" einfach weglassen bei der Eingabe. Anstelle dessen könntest du zum Beispiel ein Label mit "€" als Caption hinter dein Textfeld setzen um dem Nutzer zu verdeutlichen dass dort ein Geldbetrag rein muss.

    Alternativ zu deinem TEdit (um Formatierungsfehler bei der Eingabe zu vermeiden) könntest du ein TMaskEdit verwenden. Die Komponente verfügt über Formatierungen für z.B. Datum, Uhrzeit und auch Geldbeträge (_,__).

    mfg, Micha


Anmelden zum Antworten