Backspace-Taste wird nicht erkannt!



  • Hallo, ich möchte in ein DBEdit nur Zahlen von 0 bis 100 eingeben können. Natürlich muss die Backspace-Taste ja auch funktionieren. Nur Zahlen hat ja schon super geklappt. Aber nun funktioniert die Backspace-Taste nicht mehr ...
    Vielleicht sieht einer einen Flüchtigkeitsfehler??

    void __fastcall TReguliererStammForm::DBEdit44KeyPress(TObject *Sender, wchar_t &Key)
    {
    	TDBEdit* pEdit = dynamic_cast<TDBEdit*>(Sender);
    	if (!isdigit(Key) && Key != '\b') {
    		MessageBeep(0);
    		Key = 0;
    	}
    	else if (pEdit->Text.Length() >= 2) {
    		MessageBeep(0);
    		Key = 0;
    	}
    	else if ((pEdit->Text == "10") && (pEdit->SelStart >= 1) && (Key != '0') ) {
    		MessageBeep(0);
    		Key = 0;
    	}
    }
    


  • hast du schon mal die virtual key codes verwendet, Backspace hat dabei die Bezeichnung VK_BACK

    Key!=char(VK_BACK)
    

    eventuell Hilft auch dieser Thread weiter



  • Der Fehler ist gefunden 🙂

    TDBEdit* pEdit = dynamic_cast<TDBEdit*>(Sender);
    	if (!isdigit(Key) && Key != char(VK_BACK)) {
    		MessageBeep(0);
    		Key = 0;
    	}
    	else if ((pEdit->Text.Length() >= 2) && (Key != char(VK_BACK))) {
    		MessageBeep(0);
    		Key = 0;
    
    	else if ((...) && (Key != char(VK_BACK)))
    }
    

    Man muss in jedes if (Key != char(VK_BACK)) konjunktiv mit einfügen!!



  • Hallo,
    wieso so kompliziert?

    void __fastcall TReguliererStammForm::DBEdit44KeyPress(TObject *Sender, wchar_t &Key)
    {
        if ( Key != VK_BACK ) {
            MessageBeep(0);
            Key = 0;
        } 
    }
    


  • Tja, das hatte ich auch beschrieben! dass nur Zahlen zwischen 0 und 100 möglich sein sollen 😉

    Ich habe da jetzt eher n anderes Problem. Und zwar wollte ich den Part in eine Schleife auslagern, aber habe ein Problem mit der Deklaration:

    ich habe in der .h-datei:

    public:		// Benutzer Deklarationen
    	wchar_t nur_ganze_Zahlen(TObject *Sender, wchar_t &Key);
    
    //-----------------------------------------------------------------------------
    // Die eigentliche Funktion
    wchar_t nur_ganze_Zahlen(TObject *Sender, wchar_t &Key) {
    	TDBEdit* pEdit = dynamic_cast<TDBEdit*>(Sender);
    	if (!isdigit(Key) && Key != char(VK_BACK)) {
    		MessageBeep(0);
    		return 0;
    	}
    	else if ((pEdit->Text.Length() >= 2) && (Key != char(VK_BACK))) {
    		MessageBeep(0);
    		return 0;
    	}
    	return Key;
    }
    

    Hier die Einbindung:

    void __fastcall TReguliererStammForm::DBEdit44KeyPress(TObject *Sender, wchar_t &Key)
    {
    	Key = nur_ganze_Zahlen(Sender, Key);
    
    }
    

    Und hier der Fehler:

    [ILINK32 Fehler] Error: Nicht auflösbares externes 'TReguliererStammForm::nur_ganze_Zahlen(System::TObject *, wchar_t&)' referenziert von E:\MICHEL\QUELLCODEDB\DEBUG_BUILD\REGULIERERSTAMMFRM.OBJ





  • du hast in Zeile 6 die Klassenbezeichnung vor dem Funktionsnamen vergessen

    wchar_t TReguliererStammForm::nur_ganze_Zahlen(TObject *Sender, wchar_t &Key) {
    

    [Edit] @rudiM: den Beitrag hatte ich auch schon gepostet 😉



  • Ja den Beitrag hatte ich schon vorher gelesen gehabt 😉

    aber Linnea, genau das wars 🙂



  • Hallo Linnea

    du hast in Zeile 6 die Klassenbezeichnung vor dem Funktionsnamen vergessen

    Müssen wir bei jedem scheiß Editfehler helfen, weil einer nicht suchen will? Ganz logisch: es wars!
    gruß Rudi

    Hallo MichelM
    du solltest dich schon mal entscheiden, ob du mit char oder wchar_t arbeiten willst.



  • Linnea hat mir den Fehler gezeigt. Was musst du denn jetzt noch hier so rummeckern??

    Tut mir ja leid, wenn du den ganzen Thread nicht durchliest ... und wat is mit char oder wchar_t entscheiden??


Anmelden zum Antworten