Переопределение обработчика событий
Код:
TButton *pB;
Необходимо затем внутри класса переопределить обработчик OnClick().
Пробовал описывать новую функцию в качестве метода класса, а затем явно указывать новый обработчик
Код:
Tree->OnClick = NewProc;
Но постоянно выскакивает сообщение при компиляции типа
Код:
[Linker Error] Unresolved external 'TPoisons::' referenced from D:\PROJECTS\DOZA\ECOLOGY TEST 2\MAIN.OBJ
Цитата:
Пробовал описывать новую функцию в качестве метода класса,
Приведи хотя бы заголовок функции, как ты её описывал.
Кстати, класс основан на чём-то из VCL или просто свой? Если я ничего не путаю, то обработчик может принадлежать (быть методом) только VCL-классу.
Цитата: Gole
Есть форма на которой размещен какой либо элемент управления (кнопка к примеру). Есть класс при создании объекта которого происходит инициализация поля
ссылкой на эту кнопку.
Необходимо затем внутри класса переопределить обработчик OnClick().
Пробовал описывать новую функцию в качестве метода класса, а затем явно указывать новый обработчик
Но постоянно выскакивает сообщение при компиляции типа
Код:
TButton *pB;
Необходимо затем внутри класса переопределить обработчик OnClick().
Пробовал описывать новую функцию в качестве метода класса, а затем явно указывать новый обработчик
Код:
Tree->OnClick = NewProc;
Но постоянно выскакивает сообщение при компиляции типа
Код:
[Linker Error] Unresolved external 'TPoisons::' referenced from D:\PROJECTS\DOZA\ECOLOGY TEST 2\MAIN.OBJ
Функция должна соответствовать типу обработчика, напр.
Код:
// hpp
class TEdAutoComplete
{
private:
TEdit* FEdit;
TStringList* FAutoList;
...
TKeyPressEvent OnKeyPress; // здесь будет храниться оригинальный обработчик
void __fastcall OnKeyPress2(TObject *Sender, char &Key); // это наш заменяемый
public:
void __fastcall Attach(TEdit* AEdit);
void __fastcall Detach();
...
// cpp
void __fastcall TEdAutoComplete::Attach(TEdit* AEdit)
{
//TODO: Add your source code here
if(FEdit) Detach();
if(AEdit)
{
FEdit = AEdit;
OnKeyPress = FEdit->OnKeyPress;
FEdit->OnKeyPress = OnKeyPress2;
}
}
void __fastcall TEdAutoComplete::OnKeyPress2(TObject *Sender, char &Key)
{
if(OnKeyPress)OnKeyPress(Sender, Key);// вызоем оригинальный обработчик
// далее делаем, что нужно
if(Key == VK_RETURN)
{
...
class TEdAutoComplete
{
private:
TEdit* FEdit;
TStringList* FAutoList;
...
TKeyPressEvent OnKeyPress; // здесь будет храниться оригинальный обработчик
void __fastcall OnKeyPress2(TObject *Sender, char &Key); // это наш заменяемый
public:
void __fastcall Attach(TEdit* AEdit);
void __fastcall Detach();
...
// cpp
void __fastcall TEdAutoComplete::Attach(TEdit* AEdit)
{
//TODO: Add your source code here
if(FEdit) Detach();
if(AEdit)
{
FEdit = AEdit;
OnKeyPress = FEdit->OnKeyPress;
FEdit->OnKeyPress = OnKeyPress2;
}
}
void __fastcall TEdAutoComplete::OnKeyPress2(TObject *Sender, char &Key)
{
if(OnKeyPress)OnKeyPress(Sender, Key);// вызоем оригинальный обработчик
// далее делаем, что нужно
if(Key == VK_RETURN)
{
...
для кнопки это будет
class TMyClass
{
TNotifyEvent OnClick;
void __fastcall MyClick(TObject* Sender);
...
};
Проблема была в том, что я пытался переопределить обработчик используя указатель на элемент управления который передавался в качестве параметра в метод класса. А нужно было переопределять у указателя - члена класса:)