............
TBaseEditorClass = class of TWinControl;
TEditorControl = class(TWinControl)
private
FOnExit: TNotifyEvent;
public
property OnExit: TNotifyEvent read FOnExit write FOnExit;
end;
............
procedure EditorExit(Sender:TObject);
............
procedure TPreview.DefineComponent(QuestionType:String);
var
EditorClass:TBaseEditorClass;
begin
if (QuestionType = CN_LOGIC) then EditorClass:=TCombobox;
if (QuestionType = CN_DATE) then EditorClass:=TDateTimePicker;
if (QuestionType = CN_FIXEDFORM) then EditorClass:=TMaskEdit;
if (QuestionType = CN_FREEFORM) then EditorClass:=TMemo;
if (QuestionType = CN_NUMERIC) then EditorClass:=TMaskEdit;
if (QuestionType = CN_PICKLIST) then EditorClass:=TMemo;
FEditor:=EditorClass.Create(Self);
FEditor.Parent:=DBGridEh_Answers;
TEditorControl(FEditor).OnExit:=EditorExit;
end;
Не получается, вылетает AV, причем не в строке присваивания обработчика, а видимо уже при его вызове, то есть приведенный код выполняется без ошибок.Спасибо за ответы.
Ошибочка с названием темы
![](/Forum/Images/smile.gif)
Лучше будет так:
Установка обработчиков событий объекту неизвестного класса
Наверное вот так:
............
TEditorControl = class(TWinControl)
public
property OnExit;
end;
Да, спасибо. Я наверное понял в чем была проблема.
Этим кодом:
TEditorControl = class(TWinControl)
private
FOnExit: TNotifyEvent;
public
property OnExit: TNotifyEvent read FOnExit write FOnExit;
end;
я объявил у класса TEditorControl
собственное свойство OnExit.
а вот этот код:
TEditorControl = class(TWinControl)
public
property OnExit;
end;
просто переопределяет область видимости свойства OnExit
унаследованного от родителя. Я прав?