Abfolge ??



  • Hallo

    nimm die Eingenschaft Tag der Buttons, schreib die entsprechende Zahl rein und frag die Eigenschaft in einer gemeinsamen Eventfunktion ab.
    Lies dir mal die FAQ zum Thema Control durch.

    bis bald
    akari



  • Also ist der Tag wie ein Speicher?
    habe jetzt aber noch das Problem, dass er die Zweite eingegebene Zahl DANACH addieren ... soll.

    bis jetzt habe ich das mal rausbekommen:

    float Zahl1, Zahl2, Ergebnis1, Zeichen;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      AnsiString Zeichen = "0";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      AnsiString Zeichen = "1";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
      AnsiString Zeichen = "2";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
      AnsiString Zeichen = "3";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
      AnsiString Zeichen = "4";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button6Click(TObject *Sender)
    {
      AnsiString Zeichen = "5";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
      AnsiString Zeichen = "6";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button9Click(TObject *Sender)
    {
      AnsiString Zeichen = "7";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button8Click(TObject *Sender)
    {
      AnsiString Zeichen = "8";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button10Click(TObject *Sender)
    {
      AnsiString Zeichen = "9";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button14Click(TObject *Sender)
    {
      AnsiString Zeichen = ".";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button16Click(TObject *Sender)
    {
      AnsiString Zeichen = "00";
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button12Click(TObject *Sender)
    {
      Label1 ->Caption = Zahl1;
      Button12 ->Tag = Zahl1;
      Label1 ->Caption = "";
      Label1 ->Caption = Zahl2;
      Ergebnis1 = Zahl1 + Zahl2;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button15Click(TObject *Sender)
    {
      Label1 ->Caption = Zahl1;
      Ergebnis2 = Zahl1 - Zahl2;
      Label1 ->Caption = "";
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button13Click(TObject *Sender)
    {
      Label1 ->Caption = Zahl1;
      Ergebnis3 = Zahl1 / Zahl2;
      Label1 ->Caption = "";
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button11Click(TObject *Sender)
    {
      Label1 ->Caption = Zahl1;
      Ergebnis4 = Zahl1 * Zahl2;
      Label1 ->Caption = "";
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button17Click(TObject *Sender)
    {
      Label1 ->Caption = AnsiString(Ergebnis1);
      Label1 ->Caption = "";
    }
    //---------------------------------------------------------------------------
    

    tut mir leid wegen die darstellung 🙄



  • das letzte ist das gleichzeichen, die vier davor die operatoren und dann noch die Zahlen



  • Hallo

    noch mal zum Tag (auf Deutsch : Marke, Markierung)
    einfach im OI die Zifferntasten durchnummerieren (Ziffernbutton "1" bekommt Tag 1...). Dann weist du allen diesen Buttons eine Funktion zu, denn Rest der alten Funktionen löscht du (einfach alle Befehle aus Funktion löschen und speichern)
    Dann kannst du in die neue Funktion reinschreiben :

    void __fastcall TForm1::ButtonNumberClick(TObject *Sender)
    {
      TControl *Component = dynamic_cast<TComponent *> (Sender);
      if (Component == NULL) return;
      AnsiString Zeichen = IntToStr(Component->Tag);
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    

    desweiteren rate ich dir, deinen Controls passende Namen zu geben.
    Und ein paar Kommentare zu schreiben.

    denn Sinn deiner Operationen verstehe ich nicht, vielleicht kannst du dir noch etwas klarer darstellen.



  • erst mal danke

    die operatoren sind * / + -
    im prinzip will ich den gleichen Rechner bauen, wie der von Windows.
    hab mir sicher schon 10 stunden den kopf zerbrochen und gesucht und gesucht 😞

    dieser component, was hat der für eine Funktion und muss ich TComponent
    zu den Float reinschreiben (hab den namen vergessen) 🙂



  • Hallo

    was die Operatoren machen sollen, ist mir klar, ich verstehe nur deine Umsatzung nicht. Speziell die des +, wo du auf ein Tag zugreifst.
    Zum Beispiel sehe ich nicht wie du mal eine Zahl aus einem Edit holst und in Zahl1 oder Zahl2 steckts.

    bis bald
    akari



  • langsam versteh ich das auch nicht mehr, was ich machen will, also:

    Mann soll die erste Zahl zum beispiel 12 durch die Buttons 1 und 2 klicken.
    wenn man nun auf das + zeichen klikt, soll er sich die erste zahl also 12 merken, die anzeige wo vorher 12 gestanden ist, auf nichts zurücksetzen, damit man die zweite zahl einkicken kann z.B. 16. nun soll er die vorher gespeicherte Zahl12 mir der neuen zahl 16 addieren, sich das ergebnis merken und beim klick auf das gleichheitszeichen das resultat 28 bringen.
    wahlweise dann die anderen Operatoren mit ihren verschiedenen rechenarten dasselbe

    tönt simpel oder

    aber ich bin irgendwie zu blöd!! 😞

    die hauptsache ist aber, dass das ganze nur mit einem Feld, in dem die Zahl steht, auskommt

    WIE DER WINDOWSRECHNER

    .



  • Hallo

    mal ein einfaches Beispiel für + :

    void __fastcall TForm1::Button1AddClick(TObject *Sender)
    {
      float Zahl = StrToFloat(Label1->Caption); // Zahl aus Label holen und speichern
      Ergebnis += Zahl; // Ergebnis bestimmen
      Label1->Caption = ""; // Eingabe zurücksetzen
      }
    

    Ich empfehle dir noch, die globale Variable

    float Ergebnis;
    

    in die Header-Datei des Forms, direkt unter das Symbol

    private :
    

    zu schreiben. Den Rest brauchst du nicht.

    bis bald
    akari



  • das sollte eigentlich ganz gut klappen, aber er bringt noch die fehlermeldung mit der gleitkommazahl
    irgendwie bringt er zetzt immer das doppelte de zahl als ergebnis.

    appropos gleitkommazahl, was ist das und wie bringe ich es wieder weg?



  • Hallo

    aber er bringt noch die fehlermeldung mit der gleitkommazahl

    welche Fehlermeldung genau?
    Bitte mit betreffendem Code-Auschnitt.

    appropos gleitkommazahl, was ist das und wie bringe ich es wieder weg?

    int = Festkommazahl = Ganze Zahl
    float = Gleitkommazahl = Gebrochene Zahl, z.B. 1,3
    näheres kannst du in einem passendem Buch oder Tutorial finden, siehe Menüeintrag ganz oben rechts.

    bis bald
    akari



  • 1.25 ist kein gültiger gleitkommawert

    muss ich da mit FloatToStrF arbeiten?

    und zum addieren macht er zum beispiel wenn ich 2 + 2 klicke, 4 aber wenn ich nochmals +2 klicke macht er 8 dann 16 usw

    er verdoppelt alles 😕



  • Hallo

    1.25 ist kein gültiger gleitkommawert

    im deutschen wird Komma als Dezimaltrennzeichen genommen.

    FloatToStrF

    schau in die Hilfe zu diesem Befehl, damit du weist wofür du das brauchst

    und zum addieren macht er zum beispiel wenn ich 2 + 2 klicke, 4 aber wenn ich nochmals +2 klicke macht er 8 dann 16 usw

    kann es sein, das du das Ergebnis nach der Operation noch mal ins Label für die Eingabe schreibst?

    bis bald
    akari



  • tönt für dich warscheinlich komisch aber ja

    also in einem Label wo auch die Zahlen kommen wenn man sie klickt.

    das mit dem komma ist mir jetzt klargeworden

    ist das wenn ich das so mache unmöglich oder wie kann ich das verbessern?



  • noch zu dem was

    void __fastcall TForm1::ButtonNumberClick(TObject *Sender)
    {
      TControl *Component = dynamic_cast<TComponent *> (Sender);
      if (Component == NULL) return;
      AnsiString Zeichen = IntToStr(Component->Tag);
      Label1 ->Caption = Label1 ->Caption + Zeichen;
    }
    

    bei ButtonNumberClick ist doch die Zahl einzufügen, oder? also zB Zahl10Click und das dann bei allen, oder?

    er sagt Component sei ein undefiniertes Symbol. und

    [C++ Fehler] Styl.cpp(21): E2034 Konvertierung von 'TComponent *' nach 'TControl *' nicht möglich
    

    Was muss ich dagegen tun?

    und was muss ich mit dem einen Label machen, damit er richtig rechnet?

    danke



  • Hallo

    bei ButtonNumberClick ist doch die Zahl einzufügen, oder? also zB Zahl10Click und das dann bei allen, oder?

    Nein, eben nicht. Es gibt nur eine Methode, und die heißt ButtonNumberClick.
    Auf diese verweist du mit dem Objektinspektor die OnClickEvents aller Ziffernbuttons.
    Vergiss nicht, die Tags der Buttons zu belegen und die Methode im private-Part der Klassendeklaration in der Header-Datei des Forms zu deklarieren.

    und was muss ich mit dem einen Label machen, damit er richtig rechnet?

    Ich kann keine Fehlerquelle ausmachen, poste noch mal relevaten aktuellen Code oder Debuge mal. Such mal im Forum nach *Breakpoint*, dann solltest du finden wie das geht.

    bis bald
    akari



  • Auf diese verweist du mit dem Objektinspektor die OnClickEvents aller Ziffernbuttons.

    also ein allgemeiner OnKlickEvent solls geben, aber ist das wenn ich auf der TForm1 bin auf OnKlick klicke? oder wo ist dieser NumberKlick?

    irgendwie bin ich zu dumm für das 😞



  • und meinst du mit Funktion zuweisen zum beispiel etwas, das nachher oben als constante eingegeben werde muss?
    oder was meinst du damit?

    das prinzip versteh ich schon nur die Umsetzung...



  • Hallo

    also noch mal von von :
    - lösch aus allen bestehenden Eventfunktion für Ziffernbuttons die Befehle, und speichere das Projekt. Dann sollten die Funktion komplett verschwinden.
    - Nummerier die Tags der Ziffernbuttons anhand der dargestellten Ziffer
    - Gehe zu einem Ziffernbutton, wähle im Objektinspektor die Seite Event aus und
    gib bei OnClick einfach ButtonNumberClick ein. Danach <Enter>
    - In die erscheinende Funktion ButtonNumberClick kopierst du den von mir geposteten Code mit dem cast<> rein
    - Jetzt gehst du durch alle Ziffernbuttons durch und setzt den OnClickEvent auf die ButtonNumberClick-Methode, indem du diese einfach im Dropdown auswählst

    Dann hast du eine gemeinsame Funktion für die Ziffern.

    bis bald
    akari



  • cool bis hierhin hats geklappt jetzt sagt er nur noch

    [C++ Fehler] Styl.cpp(67): E2034 Konvertierung von 'TComponent *' nach 'TControl *' nicht möglich
    

    muss ich TComponent irgendwo angeben?

    danke



  • Hallo

    sorry kleiner Fehler meinerseits :
    [cpp] TComponent *Component = dynamic_cast<TComponent *> (Sender);[/cpp]

    bis bald
    akari


Anmelden zum Antworten