Дежурный стрелочник
Группа: Участник
Сообщений: 38
|
добрый день уважаемые знатоки.
Вопрос у меня такой(по C++ Builder 6):
Есть такой класс гридов TStringGrid и у него есть событие OnDrawCell — возникает при перерисовке ячеек(типа, это общеизвестно).
Когда создаешь объект такого класса динамически — то возникает вопрос как привязать самодельный обработчик события к объекту.
создать нужно динамически в момент выполнения несколько штук, т.е. на этапе компиляции не известно кол-во обьектов.\
Поэтому сделать их элементами класса формы не получиться и использовать способ типа
CODE | StringGrid1->OnDblClick = MyFunc(); |
тоже не получиться т.к. MyFunc() не член класса формы.
Решение я нашел и оно работает — через TMethod
т.е.
есть функция обработчик
CODE | void __fastcall LexDraw(void* This, TObject* Sender, int ACol, int ARow, TRect& Rect, TGridDrawState State) | — самописный обработчик
далее создаем объект грид
CODE |
TStringGrid* GG = new TStringGrid(...)
//--- далее привязываем
TMethod Method_OnDrawCell; //-- создаем объект тметод
Method_OnDrawCell.Data = GG; // привязываем к нему наш GG
Method_OnDrawCell.Code= LexDraw; // привязываем к нему функцию обработчик
GG->OnDrawCell = *(TDrawCellEvent*)&Method_OnDrawCell;
|
в последней строчке видно что объект тметод преобразуется в некоторый тип TDrawCellEvent.
Собственно вопросы:
1.как ЭТО(TDrawCellEvent) называется чтобы можно было про него почитать в хелпе.
2.какой тип аналогичный TDrawCellEvent нужно использовать чтобы можно было привязать самодельный обработчик событию OnDblClick того же грида.
Прошу прощения если написано коряво.
Отредактировано VilgelmKaizer — 13.07.2010, 20:03 |