Вызов своего обработчика из цикла по ComponentCount

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

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

Вызов своего обработчика из цикла по ComponentCount

Сообщение Владимир » 23.04.2011 10:41:39

Господа-граждане, всем доброго (и с праздником Пасхи)!
Не могу разобраться - прошу помощи. Проект был портирован из Kylih с опцией {$mode Delphi} (Laz 0.9.24), недавно перешел на 0.9.30, был приятно удивлен - все красиво и работает. Заменил опцию компилятора на {$mode objfpc} во всех модулях проекта, кое-что подпилил - все работает, кроме куска кода в главном модуле - подкрашивание TEdit при получении им фокуса и возврата цвета при потере.
Код: Выделить всё
procedure TMainFrm.FormCreate(Sender: TObject);
var
...... 
for i:=0 to ComponentCount-1 do
  if Components[i] is TEdit then begin
   if((Components[i] as TEdit).Name<>'EdPsw')and
     ((Components[i] as TEdit).Name<>'EdInpBarCod')and
     .............................................
     ((Components[i] as TEdit).Name<>'EdNewPsw2')
    then (Components[i] as TEdit).OnEnter:=TEditEnter
   
    if (Components[i] as TEdit).Name<>'EdInpBarCod' then
    (Components[i] as TEdit).OnExit:=TEditExit;
    end;//if TEdit
  end;//FormCreate

procedure TMainFrm.TEditEnter(Sender: TObject);
begin//подкрашиваем
TEdit(Sender).Color:=$0093FCF9;
end;
procedure TMainFrm.TEditExit(Sender: TObject);
begin//возвращаем цвет
TEdit(Sender).Color:=clWhite;
end;

Компилятор ругается на неверный вызов процедур TEditEnter и TEditExit.
(Wrong number of parameters specified for call to "TEditEnter").
От отчаянья попробовал вызов TEditEnter(nil) - получаю "Несоответствие типов и т.д."
Повторюсь, что с опцией {$Mode Delphi} все работает.
Спасибо.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Вызов своего обработчика из цикла по ComponentCount

Сообщение devels » 23.04.2011 10:53:05

Напиши:

Код: Выделить всё
(Components[i] as TEdit).OnExit := @TEditEnter
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Re: Вызов своего обработчика из цикла по ComponentCount

Сообщение Владимир » 23.04.2011 12:10:31

devels писал(а):Напиши:

Код: Выделить всё
(Components[i] as TEdit).OnExit := @TEditEnter


Заработало, спасиб! А как быть с вызовом штатных обработчиков?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru