Главная страница
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.054 c
3-1109250939
Sam Stone
2005-02-24 16:15
2005.03.27
Старый глюк с DOA


3-1109755842
Slaga
2005-03-02 12:30
2005.03.27
Выполнение двух запросов одновременно ?


14-1110220844
SergSerSh
2005-03-07 21:40
2005.03.27
Клиент для форума


9-1104275504
Робототехникъ
2004-12-29 02:11
2005.03.27
Несколько вопросов касательно GLScene и 3ds.


1-1110791740
-=SS=-
2005-03-14 12:15
2005.03.27
TCart -- значение функции