Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c