Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не могу разобраться с функциями

621
23 апреля 2005 года
Бешеный кролик
151 / / 23.03.2004
У меня есть класс TablePanel (наследник моего же класса IdealPanel, который реализует панельку, которую можно таскать по экрану и растягивать/сжимать). В конструкторе TablePanel на панельке создется объект SG - экземпляр класса TStringGrid. Затем я делаю так:

Фрагмент хедера :

void __fastcall MD(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall MM(TObject *Sender,TShiftState Shift, int X, int Y);
void __fastcall MU(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y);


Фрагмент cpp-шника:

SG->onMouseDown=MD;
SG->onMouseMove=MM;
SG->onMouseUp=MU;

Реализую функции MD, MM и MU и все прекрасно работает.

А затем я в хэдер добавил след строчку:
void __fastcall DC(TObject *Sender, int ACol,int ARow, TRect &Rect, TGridDrawState State);

а в cpp-шник: SG->onDrawCell=DC;

И компилятор выдает ошибку!!! :

[C++ Error] IPanel.cpp(743): E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,int,int,TRect &,TGridDrawState))(TObject *,int,int,TRect &,TGridDrawState)' to 'void (_fastcall * (_closure )(TObject *,int,int,const TRect &,TGridDrawState))(TObject *,int,int,const TRect &,TGridDrawState)'

Помогите, плиз...
621
23 апреля 2005 года
Бешеный кролик
151 / / 23.03.2004
Я заменил сигнатуру, написал:

void __fastcall DC(TObject *Sender, int ACol,int ARow, const TRect &Rect, TGridDrawState State);

и все заработало. Однако я все равно не понимаю, почему если кинуть на форму StringGrid и задать событие
OnDrawCell, то в сигнатуре const не будет и все будет работать. Объясните популярно, пожалуйста.
10
23 апреля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Бешеный кролик
Однако я все равно не понимаю, почему если кинуть на форму StringGrid и задать событие
OnDrawCell, то в сигнатуре const не будет и все будет работать.


Такого быть не должно. Билдер строит прототип функции по RTTI пакета, где расположен компонент. Если прототип ошибочный - глюк в Билдере, или исходники, из которых собирается приложение, различаются с теми, из которых собран пакет дизайна. Эффект может проявиться только, если приложение собирается с полной перекомпиляцией VCL и без пакетов.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог