TEdit bearbeiten, wieso klappt der Code nicht?



  • C/C++-Grundlagen...

    Siehs mal so:
    Programmieren ist wie Komponieren. Streng logisch, und doch leicht verspielt, offen für alle Variantionen, freizügig und streng.
    Die Programmiersprache ist das Instrument auf dem man das Spielen lernen muss. Mit dem man üben muss. Erst mit der Liebe zum Instrument kann es erblühn und sein wahres Volumen offenbaren. *

    -junix

    *) Sollte ein Wink mit dem Zaunpfahl sein, ich hoffe er kommt an (-;

    [ Dieser Beitrag wurde am 18.12.2002 um 23:59 Uhr von junix editiert. ]



  • Supi vielen dank.

    Ich hab mich nur gewundert weil

    void __fastcall TRechner::Edit1KeyPress(TObject *Sender, char &Key)
    {
    if(Key<'0' || Key>'9' && Key != VK_DELETE)
        Key=0;
    }
    

    hat problemlos geklappt, hab ich nun DELETE durch BACK ersetzt ging es nicht mehr das hat mich verwundert bzw verwundert mich. Warum geht das nicht?

    void __fastcall TRechner::Edit1KeyPress(TObject *Sender, char &Key)
    {
    if(Key<'0' || Key>'9' && Key != VK_BACK)
        Key=0;
    }
    


  • Schau dir mit dem Debugger mal den Wert für VK_DELETE und VK_BACK gelten und dann rechne deine Verknüpfung mal von Hand durch. (mit den richtigen Bindungen!)

    -junix



  • Original erstellt von <LESMONA>:
    Daher hab ich den Code doch

    Ich wollte eigentlich auf den meiner Meinung nach viel effizienteren Vorschlag mit SetWindowLong hinweisen.



  • Hi!

    Nochmal zu dem dritten Punkt. Wär da nicht

    if(Edit1->Text.IsEmpty())
    

    wesentlich schneller (Weniger Schritte)?

    Außerdem muss man beim Vergleichen immer == verwenden und nicht nur =.
    Ts,ts,ts! Junix, wo soll das nur enden? 😃 😃

    Phips



  • Original erstellt von Jansen:
    Ich wollte eigentlich auf den meiner Meinung nach viel effizienteren Vorschlag mit SetWindowLong hinweisen.

    Dann möchte ich aber nochmal auf die IMHO bessere Variante per Überschreiben von CreateParams() hinweisen.



  • Original erstellt von Phips:
    Ts,ts,ts! Junix, wo soll das nur enden? 😃 😃

    Hööö? was denn?

    -junix



  • Er meinte mich. 🙂

    Von wegen "IsEmpty()", ich habe nicht umsonst geschrieben "ist eine zulässige Möglichkeit". Denn zB. if (Edit1-Text) dürfte noch kürzer/schneller sein.



  • Original erstellt von Jansen:
    **Er meinte mich. 🙂

    Von wegen "IsEmpty()", ich habe nicht umsonst geschrieben "ist eine zulässige Möglichkeit". Denn zB. if (Edit1-Text) dürfte noch kürzer/schneller sein.**

    "if(Edit1->Text)" geht garned, und wir haben schonmal mit Peter diskutiert, und herausgefunden, dass "if(Edit1->Text.IsEmpty())" schneller ist als "if(Edit1->Text=="")". Soviel zur Erbsenzählerei. 😉



  • Nochmal was zur Erbsenzählerei:
    Abfrage ob Edit Feld leer ist. Das ist der Thread mit der "Diskussion" mit Peter.



  • Krass was hier so abgeht 😃
    Bin wieder weg, ist ja OT 😉
    Wünsche aber trotzdem schon mal schöne Weihnachten 🕶



  • Wenn man vom Teufel spricht... 😉
    Dir auch alles Gute, Peter. 🙂



  • Ups, da hab ich euch velwechsert.
    'tschuldigung



  • Du scheinst öfter mal was zu verwechseln. 😉



  • Mir fällt gerade auf das bei diesem Code der "." aber nicht gesperrt wird, wie bekomme ich das auch noch hin?

    bei

    void __fastcall TRechner::Edit1KeyPress(TObject *Sender, char &Key)
    {
    if(Key<'0' || Key>'9' && Key != VK_DELETE && Key != VK_BACK)
        Key=0;
    }
    

    Klappt VK_BACK nicht bei

    void __fastcall TRechner::Edit1KeyPress(TObject *Sender, char &Key)
    {
    if((Key<'0' || Key>'9') && Key != VK_DELETE && Key != VK_BACK)
        Key=0;
    }
    

    Geht der Punkt wieder 😕 😮 😞



  • Immernoch das Selbe Klammernproblem...
    Dein Obiger code entspricht folgendem:

    if( Key<'0' || (Key>'9' && Key != VK_DELETE && Key != VK_BACK))
    

    Deshalb wird bei obigem Code alle Bucstaben mit einem ASCII-Code kleiner als der ASCII Code von '0'.

    Ich hoffe ich konnte etwas Licht in die Sache bringen (:

    -junix



  • Erbarmst du dich und verrätst mir wie das geht? Von AscII hab ich nicht wirklich Ahnung, und ich verstehe auch nicht wieso der . auch geht wenn man
    && != '.' noch in die Klammer packt 😕

    Ich kann klammern wie ich will 😃 entweder geht nur das eine oder das andere



  • http://www.google.com/search?sourceid=navclient&ie=UTF-8&oe=UTF-8&q=Operator+Priorit%C3%A4ten+C 😉

    Des weiteren würd ich dir empfehlen dringend C/C++ Grundlagen zu Pauken! **)

    -junix

    *) Wink mit dem Zaunpfahl
    **) Deutlicher, gut aber ernst gemeinter Rat



  • Original erstellt von <LESMONA>:
    Ich kann klammern wie ich will 😃 entweder geht nur das eine oder das andere

    Nein. Ganz sicher gehst du, wenn du um jeden Fall Klammern setzt. Die Fälle sind

    Key<'0' || Key>'9' 
    Key != VK_DELETE 
    Key != VK_BACK
    

    Und alle sind mit && verknüpft. Heißt: Wenn Key (kleiner als '0' oder größer als '9') und (nicht VK_DELETE) und (nicht VK_BACK), dann setze Key auf 0.

    BTW: Die CreateParams()- bzw. SetWindowLong()-Methode halte ich hier einfach für schlauer. Aber wie du willst.

    [ Dieser Beitrag wurde am 19.12.2002 um 22:12 Uhr von WebFritzi editiert. ]


Anmelden zum Antworten