Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ввод недопустимых символов [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо