![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ввод недопустимых символов [D7, WinXP]
Александр1 © (2005-08-09 00:25:00)Пожалуйста, подскажите в чем проблема - не могу сделать так,
чтобы во 2-ом и 3-ем Edit набирались только 'а'..'я'. В 1-ом же все Ок.
Вот исходник.
unit vrun1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
{ procedure Edit2KeyPress(Sender: TObject; var Key: Char);
{ procedure Edit3KeyPress(Sender: TObject; var Key: Char);}
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'à'..'ÿ': ;
#8 : ;
#13 : Edit2.SetFocus;
else Key :=Chr(0);
end;
end;
begin
case Key of
'а'..'я': ;
#8 : ;
#13 : Edit3.SetFocus;
else Key :=Chr(0);
end;
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'а'..'я': ;
#13 : Button1.SetFocus;
else Key :=Chr(0);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
n : string;
p : string;
s : string;
begin
n:= Edit2.Text;
p:= Edit3.Text;
s:= Edit1.Text;
label4.Caption := ' '+ Edit1.Text + ' ' + #13;
end;
end.
IceBeerg (2005-08-09 13:29:00) [1]Александр1 (09.08.05 0:25)
{ procedure Edit2KeyPress(Sender: TObject; var Key: Char);
{ procedure Edit3KeyPress(Sender: TObject; var Key: Char);}
А почему это закоментировано?
Leonid Troyanovsky (2005-08-09 09:02:00) [2]
> Александр1 (09.08.05 00:25)
type
TChars = set of Char;
EConvertException = class(Exception)
public
ErrorCharIndex : Longint;
constructor Create(CharIndex: Longint);
end;
constructor EConvertException.Create;
begin
ErrorCharIndex := CharIndex;
end;
function CheckInput(const s: String; ValidChars: TChars): Double;
var
i: Longint;
begin
for i := 1 to Length(s) do
if not (s[i] in ValidChars) then
raise EConvertException.Create(i);
end;
function CorrectText(s: String; Idx: Longint ): String;
begin
Result:= s;
Delete(Result, Idx, 1);
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
with Sender as TEdit do
try
CheckInput(Text, ['а'..'я','А'..'Я']);
except
on E: EConvertException do
begin
Text:= CorrectText(Text, E.ErrorCharIndex);
SelStart := E.ErrorCharIndex - 1;
Beep;
end;
end;
end;
--
Regards, LVT.
Eraser (2005-08-09 00:45:00) [3]Александр1 (09.08.05 00:25)
Данный способ всё равно неполноценный, т.к. ещё существует Copy/Paste.