Написание компоненты

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем brink, 4 мар 2010.

  1. brink

    brink Гость

    Добрый день.

    Пишу компоненту, смысл таков: заполнение PickList'a компоненты RxDBGrid для указанного поля, списком значений отфильтрованной таблицы.

    PickList заполняется если сработало событие OnShowEditor.

    В компоненте есть свойство RxDBGrid, при его заполнении происходит привязка обработчика событий описанного в компоненте к обработчику в RxDBGrid:

    <!--shcode--><pre><code class='CPP'>void __fastcall TPickListMaker::SetDBGrid(TRxDBGrid* dbGrid)
    {
    DBGrid = dbGrid;
    if (dbGrid) DBGrid->OnShowEditor = __OnShowEditor;
    }[/CODE]

    Но при таком подходе, если в основном коде было определено событие OnShowEditor для грида со своим кодом, то при использовании компоненты оно накроется событием описанным в компоненте.

    Как избежать данную ситуацию?

    Спасибо!
     
  2. brink

    brink Гость

    Это не решение. Мне всё-равно нужно построить пиклист в определённом поле грида...
     
  3. brink

    brink Гость

    В поле которое указанно в свойствах компоненты.

    ПикЛист - это свойство любой колонки в гриде. И представляет собой выпадающий список значений при попытке редактировать ячейку колонки в которой определён ПикЛист.


    Решение я нашёл, нужно сохранить старый обработчик и вызвать из своего.

    Нужно объявить переменную типа события (посмотрел в хидере компоненнта RxDBGrid):
    <!--shcode--><pre><code class='CPP'>TDBEditShowEvent FSavedOnShowEditor;[/CODE]

    И просто в эту переменную сохранить старый обработчик:
    <!--shcode--><pre><code class='CPP'>void __fastcall TPickListMaker::SetDBGrid(TRxDBGrid* dbGrid)
    {
    DBGrid = dbGrid;
    if (dbGrid) {
    //сначала сохраняем событие определённое в DBGrid->OnShowEditor
    if (DBGrid->OnShowEditor) FSavedOnShowEditor = DBGrid->OnShowEditor;
    //накрываем своим
    DBGrid->OnShowEditor = __OnShowEditor;
    }
    }[/CODE]

    А в обработчике, который описан в компоненте, я сделал так :

    <!--shcode--><pre><code class='CPP'>void __fastcall TPickListMaker::__OnShowEditor(TObject *Sender, TField *Field, bool &AllowEdit)
    {
    if (FSavedOnShowEditor) FSavedOnShowEditor(Sender,Field,AllowEdit);

    ....
    }[/CODE]

    И вуаля всё счастливы, все довольны :)
     
  4. brink

    brink Гость

    Да.
     
Загрузка...
Похожие Темы - Написание компоненты
  1. wellsun
    Ответов:
    0
    Просмотров:
    129
  2. vladis222
    Ответов:
    1
    Просмотров:
    627
  3. smailvolf
    Ответов:
    1
    Просмотров:
    1.037
  4. faissullin
    Ответов:
    0
    Просмотров:
    1.090
  5. IseLL
    Ответов:
    1
    Просмотров:
    998

Поделиться этой страницей