![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Incompatible types: 'regular procedure and method pointer' [D6, WinXP]
webpauk © (2005-03-14 14:32:00)Как внутри класса определить процедуру?
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 устанавливается правильно.
Alexander Panov (2005-03-14 15:34:00) [1]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-14 15:21:00) [2]Прошу прощения, не заметил что TControlEx, не является наследником TControl. В любом случае, никто не мешает завести метод Click, который вызывать при щелчке мыши, из него вызывать назначенный обработчик fOnClick, тогда в потомках можно будет этот самый Click перекрыть. Если не ошибаюсь именно так в стандартном TControl реализовано.
_1 (2005-03-14 15:05:00) [3]I>
> webpauk (14.03.05 14:48) [2]
Перекрой метод TControl.Click, там описывай нужные действия
Digitman (2005-03-14 14:52:00) [4]
> Как внутри класса определить процедуру?
строго говоря - никак.
об этом тебе и долдонит компилятор, раз за разом напоминая, что регулярная процедураНЕ есть тоже самое, что и процедурный метод объекта
надо быть большим дубом, чтобы раз за разом при попытке компиляции получая эти настойчивые предупреждения не обратить на них внимание и не сделать соотв.выводы
webpauk (2005-03-14 14:48:00) [5]Тогда извне OnClick выдает ошибку. Мне надо, чтобы у некоторых наследников класса TcontrolEx OnClick было жестко связано с определенной процедурой, определенной внутри класса, а все остальные наследники реагировали бы на стандартный OnClick
ламер (2005-03-14 14:37:00) [6]TOnClick = procedure of Object;