TEdit bearbeiten, wieso klappt der Code nicht?



  • ich habe ein editfeld und möchte das dort nur Zahlen eingetragen werden können, bzw. das man diese mit entf oder backspace löschen kann.

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

    DELETE klappt wunderbar, aber wieso funktioniert VK_BACK nicht? Das verwirrt mich.
    Und dann möchte ich noch überprüfen ob im Edit gar nichts steht, aber wie packe ich das in eine if Bedingung? Gibt es da etwas à la if(Edit1->Text = "") oder muss ich den Text im Editfeld erst auslesen, überprüfen ob da was drinne war und falls nicht per if(Editausgelesen == "") eine "0" reinschreiben?



    1. Bitte immer nur ein Thema pro Thread.

    2. FAQ

    3. Wie wär's mit einfach ausprobieren? if(Edit1->Text = "") ist eine zulässige Möglichkeit.



  • *ggg* Daher hab ich den Code doch, funzt doch auch, nur Zahlen und VK_DELETE können benutzt werden. Aber wieso nimmt das Programm nicht VK_BACK an, dass verstehe ich nicht.

    Beim dritten Punkt hattest du Recht, vielen dank! 🙂



  • Was soll VK_BACK sein? Woher hast du den Wert?

    -junix



  • Aus der Hilfe:

    "VK_BACK Taste Rück"

    an VK_CLEAR hab ich auch gedacht aber die ist es nicht. Welche soll es denn sonst sein.



  • Bei mir (BCB4) klappt VK_BACK wunderbar...

    -junix



  • Kannst du den Code mal bei dir ausprobieren bitte, ich hab Version 5 vom BCB

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


  • Klammern heisst das Zauber wortt... && bindet stärker als ||

    -junix



  • aha junix und woher wußtest du das jetzt? 😕



  • 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 🕶


Anmelden zum Antworten