Объединие процедур OnKeyPress

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Объединие процедур OnKeyPress

Сообщение UFIns » 09.01.2015 00:11:26

Здравствуйте. Имеются очень много Эдитов. В процедуре OnKeyPress каждого идет такое:
Код: Выделить всё
case key  of
'0'..'9',#8,',':;
else
key:=#0;
end;

if key=','
    then
        begin
         if (Length(Wire_lenght_Edit.Text)<=0) or (Pos(',',Wire_lenght_Edit.Text)<>0)
         then Key:=#0;
        end;   


Как их объединить в одну процедуру и вызывать её при OnKeyPress в эдитах? А то этот код повторяется порядка 30-40 раз...
UFIns
незнакомец
 
Сообщения: 2
Зарегистрирован: 09.01.2015 00:06:34

Re: Объединие процедур OnKeyPress

Сообщение yeger » 09.01.2015 00:46:29

Варианты:
- В редакторе свойств можно выбрать одну и ту же процедуру обработки события из списка.
- Вызывать общую процедуру из текущего обработчика.
- Сложнее вариант,сделать класс насленик TEdit и в нем добавить обработчик.

"Как их объединить в одну процедуру и вызывать её при OnKeyPress в эдитах?"
Шаг 1: В классе форме объявляется функция, например
Код: Выделить всё
  public
    { public declarations }
    function KeyPrepare (Sender:TEdit; Key: char):char;

Шаг 2: Встаем на название функции жмем [Ctrl]+[Shift]+[с], лазарус делает нам реализацию
Код: Выделить всё
function TForm1.KeyPrepare(Sender: TEdit; Key: char): char;
begin
//пишем повторяющийся код
  case key  of
  '0'..'9',#8,',':;
  else
  key:=#0;
  end;

  if key=','
      then
          begin
           if (Length(Sender.Text)<=0) or (Pos(',',Sender.Text)<>0)
           then Key:=#0;
          end;
  Result:=Key;
end;

Шаг 3: В обработчиках каждого из "много Эдитов" пишем:
Код: Выделить всё
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  Key := KeyPrepare(TEdit(Sender),Key);
  //дальше, что нам надо
end;


Кстати, мой внутренний телепат говорит, что вам лучше использовать "TMaskEdit" c закладки Additional палитры компонентов.
Аватара пользователя
yeger
новенький
 
Сообщения: 49
Зарегистрирован: 17.03.2011 12:26:34

Re: Объединие процедур OnKeyPress

Сообщение UFIns » 09.01.2015 01:08:50

Огромнейшее спасибо!!!
UFIns
незнакомец
 
Сообщения: 2
Зарегистрирован: 09.01.2015 00:06:34

Re: Объединие процедур OnKeyPress

Сообщение Alex2013 » 12.01.2015 17:00:25

Можно проще весь повторяющийся код сразу исполнять в KeyPress формы включив KeyPreview := True;
Если что-то нужно читать из или записывать в эдиты юзаем
if TypeOf(TEdit)=TypeOf(ActiveControl) then TEdit(ActiveControl).text:=...
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 256

Рейтинг@Mail.ru
cron