Назначение события TScrollBox во время выполнения — несовместимые типы

Использование RAD Studio 10.4.2:

я создаю TScrollBoxво время выполнения:

      TScrollBox* sb = new TScrollBox(this);
sb->Parent = this;
sb->Align = alClient;
sb->AlignWithMargins = true;
sb->Margins->SetBounds(3,3,3,3);
sb->BorderStyle = bsNone;
sb->VertScrollBar->Smooth = true;
sb->VertScrollBar->Tracking = true;
sb->ParentBackground = true;
sb->OnMouseWheel = ScrollBox1MouseWheel; // Error here

И я хочу назначить его OnMouseWheelмероприятие:

      void __fastcall TForm1::ScrollBox1MouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta,
TPoint &MousePos, bool &Handled)
{
// Some code here
}

Событие колесика мыши — это то, что я получил, когда поместил его в форму и дважды щелкнул, чтобы сгенерировать приведенный выше код события.

Однако ошибка:

[bcc32c Error] assigning to 'Vcl::Controls::TMouseWheelEvent' (aka 'void ((__closure *))(System::TObject *, System::Classes::TShiftState, int, const System::Types::TPoint &, bool &) __attribute__((fastcall))') from incompatible type 'void (__closure *)(System::TObject *, System::Classes::TShiftState, int, System::Types::TPoint &, bool &) __attribute__((fastcall))'

Как мне тогда назначить событие, мне нужно как-то его разыграть?

1 ответ

Решил сам сразу после публикации, поэтому делюсь решением:

Я изменил определение функции на:

      void __fastcall TForm1::ScrollBox1MouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta,
const TPoint &MousePos, bool &Handled) // -> added const here
{
// Some code here
}

По какой-то причине графический интерфейс 10.4.2 генерирует функцию без в TPoint, когда вы дважды щелкаете в инспекторе объектов, но ожидает ее, когда она назначается во время выполнения, поэтому, когда добавляется, он компилируется просто отлично.

Другие вопросы по тегам