Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.028 c
9-1104779300
Dic
2005-01-03 22:08
2005.03.27
Загрузка графики в PowerDraw3.


1-1110630898
X-Disa
2005-03-12 15:34
2005.03.27
Динамически создать форму


1-1110865498
Alex_k
2005-03-15 08:44
2005.03.27
Работа с Excel


14-1109919988
PZ
2005-03-04 10:06
2005.03.27
Задача А.Эйнштейна


14-1110352096
atr
2005-03-09 10:08
2005.03.27
Отладка программы. Help!




   Наверх