Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Incompatible types: regular procedure and method pointer    Найти похожие ветки 

 
webpauk   (2005-03-14 14:32) [0]

Как внутри класса определить процедуру?

TOnClick = procedure;
TControlEx = class
private
  fOnClick: TOnClick;
  procedure SetClick;
public
  constructor Create;
  property OnClick: TOnClick read fOnClick write fOnClick;
endl;

constructor TControlEx.Create;
begin
  OnClick:=SetClick;
end;


Извне OnClick устанавливается правильно.


 
ламер ©   (2005-03-14 14:37) [1]

TOnClick = procedure of Object;


 
webpauk   (2005-03-14 14:48) [2]

Тогда извне OnClick выдает ошибку. Мне надо, чтобы  у некоторых наследников класса TcontrolEx OnClick было жестко связано с определенной процедурой, определенной внутри класса, а все остальные наследники реагировали бы на стандартный OnClick


 
Digitman ©   (2005-03-14 14:52) [3]


> Как внутри класса определить процедуру?


строго говоря - никак.
об этом тебе и долдонит компилятор, раз за разом напоминая, что регулярная процедура НЕ есть тоже самое, что и процедурный метод объекта

надо быть большим дубом, чтобы раз за разом при попытке компиляции получая эти настойчивые предупреждения не обратить на них внимание и не сделать соотв.выводы


 
_1   (2005-03-14 15:05) [4]

I>
> webpauk   (14.03.05 14:48) [2]


Перекрой метод TControl.Click, там описывай нужные действия


 
_1   (2005-03-14 15:21) [5]

Прошу прощения, не заметил что TControlEx, не является наследником TControl. В любом случае, никто не мешает завести метод Click, который вызывать при щелчке мыши, из него вызывать назначенный обработчик fOnClick, тогда в потомках можно будет этот самый Click перекрыть. Если не ошибаюсь именно так в стандартном TControl реализовано.


 
Alexander Panov ©   (2005-03-14 15:34) [6]

webpauk   (14.03.05 14:32)

Правильно делать по-другому, например, так:

TOnClick = procedure;
TControlEx = class
private
 fOnClick: TOnClick;
 procedure Click;
public
 constructor Create;
 property OnClick: TOnClick read fOnClick write fOnClick;
endl;

procedure TControlEx.Click; //Здесь желательно все-таки определять, какой объект передает нажатие кнопки.
begin
 if Assigned(FOnClick) then
 begin
   FOnClick;
   Exit;
 end;
 //Здесь обрабатываем по-умолчанию
end;



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.057 c
6-1106572893
PURGEN
2005-01-24 16:21
2005.03.27
SMS


4-1108538439
Гость
2005-02-16 10:20
2005.03.27
Кэш


1-1110960669
Rule
2005-03-16 11:11
2005.03.27
Скроллинг в Мемо


14-1109954232
Сергей Г
2005-03-04 19:37
2005.03.27
Выделенный канал


9-1104761201
Tankist
2005-01-03 17:06
2005.03.27
Как менять гамму в powerdraw???