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

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

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

Ответить
UFIns
незнакомец
Сообщения: 2
Зарегистрирован: 08.01.2015 23:06:34

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

Сообщение UFIns »

Здравствуйте. Имеются очень много Эдитов. В процедуре 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 раз...
Аватара пользователя
yeger
новенький
Сообщения: 49
Зарегистрирован: 17.03.2011 11:26:34

Сообщение yeger »

Варианты:
- В редакторе свойств можно выбрать одну и ту же процедуру обработки события из списка.
- Вызывать общую процедуру из текущего обработчика.
- Сложнее вариант,сделать класс насленик 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 палитры компонентов.
UFIns
незнакомец
Сообщения: 2
Зарегистрирован: 08.01.2015 23:06:34

Сообщение UFIns »

Огромнейшее спасибо!!!
Alex2013
долгожитель
Сообщения: 3236
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

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