Mega Code Archive

 
Categories / Delphi / VCL
 

TEdit and EConvertError

Title: TEdit and EConvertError Question: When checking for non-numeric characters in a TEdit it might be thought that the OnChange event handler would be OK. However it doesn't like '-' (minus sign) on its own and can be annoying when it tries to replace what you're typing with a pre-defined replacement. This is something that's bugged me for a while. Instead use the OnKeyPress event handler to detect Chr(13) key and run a checking subroutine that can also be run when the OnExit event occurs if the focus changes. Answer: With Edit1 and Button1 on a form use the following code. The private procedure checkedit(var key: char); is used to check the Edit1.text and replace the value (num) with the previously entered value (lastnum) if it was wrong or to set lastnum to be the new value of num. The Edit1Exit event handler is to pick up any focus change to another control, if return isn't pressed. Clearly if the focus doesn't change and isn't pressed then the edit1.text isn't checked. HTH Andy Kennaugh ------------------------------------------------------------------------ unit ECvtu; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure FormCreate(Sender: TObject); procedure Edit1Exit(Sender: TObject); private { Private declarations } procedure checkedit(var key : char); public { Public declarations } end; var Form1: TForm1; num, lastnum : real; implementation {$R *.DFM} procedure Tform1.checkedit(var key : Char); begin if (key = chr(13)) then // if return pressed begin try num := strtofloat(edit1.text); Except on EConvertError do // if it's not a number begin num := lastnum; // set number to previous value edit1.text := floattostr(num); // put it in edit box end; end; lastnum := num; // change lastnum, or keep exiting value end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin checkedit(key); // check value end; procedure TForm1.FormCreate(Sender: TObject); begin lastnum := 0.0; end; procedure TForm1.Edit1Exit(Sender: TObject); var key : char; begin key := chr(13); // 'pretend' return pressed checkedit(key); // check value end; end.