Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Динамическая привязка обработчика события TStringGrid  [new]
Jaffar
Member

Откуда:
Сообщений: 604
добрый день уважаемые знатоки.

Вопрос у меня такой(по C++ Builder 6):
Есть такой класс гридов TStringGrid и у него есть событие OnDrawCell - возникает при перерисовке ячеек(типа, это общеизвестно).
Когда создаешь объект такого класса динамически - то возникает вопрос как привязать самодельный обработчик события к объекту.

Решение я нашел и оно работает - через TMethod
т.е.
есть функция обработчик
void __fastcall LexDraw(void* This, TObject* Sender, int ACol, int ARow, TRect& Rect, TGridDrawState State)
- самописный обработчик

далее создаем объект грид
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 того же грида.

Прошу прощения если написано коряво.
13 июл 10, 19:08    [9098119]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая привязка обработчика события TStringGrid  [new]
MAYAKOV_SV
Member [заблокирован]

Откуда:
Сообщений: 1913
Jaffar

1.как ЭТО(TDrawCellEvent) называется чтобы можно было про него почитать в хелпе.

У меня правда дельфи, но на борланде наверно тоже самое:
1. Выделяю в дизайнере на форме TStringGrid мышью.
2. Нажимаю F1.
3. В справке по TStringGrid выбираю Events.
4. Ищу нужное событие, в данном случае TDrawCellEvent и смотрю справку на него.

Другой способ:
1. Выделяю в дизайнере на форме TStringGrid мышью.
2. В Object Inspector по TStringGrid нажимаю закладку Events.
3. Ищу TDrawCellEvent выбираю его мышью.
4. Нажимаю F1 и смотрю справку.

Jaffar

2.какой тип аналогичный TDrawCellEvent нужно использовать чтобы можно было привязать самодельный обработчик событию OnDblClick того же грида.

Прошу прощения если написано коряво.

TNotifyEvent

Да, у меня нет борланда, но подумайте еще как можно без TMethod прицепить обработчик, если это возможно.
Может примеры какие где поискать.
13 июл 10, 22:04    [9098640]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая привязка обработчика события TStringGrid  [new]
MAYAKOV_SV
Member [заблокирован]

Откуда:
Сообщений: 1913
MAYAKOV_SV

Да, у меня нет борланда, но подумайте еще как можно без TMethod прицепить обработчик, если это возможно.
Может примеры какие где поискать.

Я сам глядел, похоже без TMethod ничего не получится.
13 июл 10, 22:11    [9098652]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая привязка обработчика события TStringGrid  [new]
deto4ka
Member

Откуда: Пушкин
Сообщений: 215
На что указывает This в параметрах LexDraw?
15 июл 10, 10:27    [9107482]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая привязка обработчика события TStringGrid  [new]
kosh the best
Member

Откуда:
Сообщений: 464
Не очень понятен смысл ваших изысканий, может так надо
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
  TButton* b = new TButton(this);
  b->Parent = this;
  b->OnClick = buttonClick;
}

void __fastcall TForm1::buttonClick(TObject *Sender)
{
  Application->MessageBox("hello", NULL, MB_OK);
}
15 июл 10, 12:17    [9108459]     Ответить | Цитировать Сообщить модератору
 Re: Динамическая привязка обработчика события TStringGrid  [new]
Jaffar
Member

Откуда:
Сообщений: 604
Всем спасибо за помощь - я уже сам разобрался что это TNotifyEvent.

указатель this в LexDraw указывает на обьет(который стоит выше по иерархии) который содержит в себе указатель на StringGrid и указатель на TMatrix(это самописный класс, для которого реалированы всяике полезные функции для работы с матрицами).
И сделано это для того чтобы можно было после изменения грида сразу актуализировать состояние соответствующей матрицы.

вот так.
27 июл 10, 20:24    [9167300]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить