Board index » cppbuilder » TEdit with negative floats (Ref: TEdit right align and numbers)

TEdit with negative floats (Ref: TEdit right align and numbers)

"Hawk" asked about limiting a TEdit to just numbers, and I have had
a similar need.  The CSpinEdits don't allow decimal points, so my
previous applications have been real kluges.

So based on the thread "TEdit right align and numbers" I solved a
long-standing need and figured I would share it.  Sorry, but I haven't
addressed the right-justify part of the question yet.

This allows a TEdit to accept only numbers, but allows editing
using the backspace key along with the arrow keys and cursor.  
Also, it allows only a single decimal point and a minus sign at the
front.

Hopefully, this is an idiot-proof way to provide input of numbers
only, including negatives and decimals, so that a FloatToStr call
won't return an error.

If someone wants to validate this and let me know, I would
appreciate it.

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
  bool minus_OK,period_OK=true;
  if(Edit1->Text.Length()>0){
    for(int i=1;i<(Edit1->Text.Length()+1);i++){
      if(Edit1->Text.SubString(i,1)=="."){
        period_OK=false;
        break;
      }
    }
  }
  if((Edit1->SelStart==0)&&(Edit1->Text.SubString(1,1)!="-")){
    minus_OK=true;
  }else{
    minus_OK=false;
  }
  if(!((isdigit(Key))||((Key==45)&&minus_OK)||((Key==46)&&period_OK)||(Key==8))){Key=0;} // 45 is a minus, 46 is a period, 8 is a backspace

Quote
}

 

Re:TEdit with negative floats (Ref: TEdit right align and numbers)


After posting, I realized that I left in an unnecessary line:

if(Edit1->Text.Length()>0){

I was doing some other things when testing the procedure which
made that check a necessity and then just forgot to remove it.

Other Threads