Определить на каком элементе в Превью сделан Клик

отредактировано 10:50 Раздел: FastReport 3.0
Хочу сделать РанТайм редактирование отчета.
Подумал насчет того что можно сделать клик на превью и определить на каком именно элементе, например TfrxMemoview был сделать клик... И получить на него указатель. Скажите возможно ли это, сделать? И если да то в какую сторону копать?

Комментарии

  • отредактировано 10:50
    Наверно в сторону Demos\InteractiveReport
  • отредактировано 10:50
    Или для начала лучше Demos\Main->BasicReports->Interactive report
  • отредактировано May 2006
    3D Bob написал:
    Хочу сделать РанТайм редактирование отчета.
    Подумал насчет того что можно сделать клик на превью и определить на каком именно элементе, например TfrxMemoview был сделать клик... И получить на него указатель. Скажите возможно ли это, сделать? И если да то в какую сторону копать?
    Сделать это можно в событии TfrxReport::OnClickObject :

    void __fastcall TForm1::frxReport1ClickObject(TfrxView *Sender,
    TMouseButton Button, TShiftState Shift, bool &Modified)
    {
    TfrxMemoView * Memo;
    if((Memo = dynamic_cast <TfrxMemoView*> (Sender)) != NULL)//вместо этого можно сравнить имя класса Sender->ClassName() с TfrxMemoView
    {
    ShowMessage(Memo->Name);
    Memo->Text = "New Text";
    frxReport1->Preview->Refresh();
    }

    }
  • отредактировано 10:50
    Спасибо. Глянув искходники. Именно такой код я реализовал пол часа назад)
    Но все равно примного благодарен.
  • отредактировано May 2006
    Вопрос Намбер два.
    После Report->PrepareReport()
    Значения возвращаются. С чем это связано и как этого избежать?


    Думаю знаю в чем дела. Вопрос в следующем, как из превью передать отчет обратно в репорт?

    Или как добавить элемент в превью?

    Задача изменять и добавлять объекты в превью.
  • отредактировано 10:50
    написал:

    Вопрос Намбер два.
    После Report->PrepareReport()
    Значения возвращаются. С чем это связано и как этого избежать?
    Отчет строится заново и заначения будут браться либо из базы либо из XML файла отчета.
    написал:
    Думаю знаю в чем дела. Вопрос в следующем, как из превью передать отчет обратно в репорт?
    попробуйте найти объект в самом отчете через FindObject:
    void __fastcall TForm1::frxReport1ClickObject(TfrxView *Sender,
    TMouseButton Button, TShiftState Shift, bool &Modified)
    {
    TfrxMemoView * Memo;
    if((Memo = dynamic_cast <TfrxMemoView*> (Sender)) != NULL)//вместо этого можно сравнить имя класса Sender->ClassName() с TfrxMemoView
    {
    ShowMessage(Memo->Name);
    Memo->Text = "New Text";
    Memo = dynamic_cast<TfrxMemoView *> (frxReport->FindObject(Memo->Name));
    Memo->Text = "NewText"
    frxReport1->Preview->Refresh();
    }
    }

    или сохраняйте отчет в fp3 формат.
  • отредактировано 10:50
    А возможно ли добавить обект в Превью, а не в главный Report, раз уже отчет для Превью строится заново. То есть обойти Report из которого загружаются старые данные, забыть о нем?
    А то я думал что превью отображает текущее в frxReport
  • отредактировано 10:50
    3D Bob написал:
    А возможно ли добавить обект в Превью, а не в главный Report, раз уже отчет для Превью строится заново. То есть обойти Report из которого загружаются старые данные, забыть о нем?
    Да, возможно.

    void __fastcall TForm1::frxReport1ClickObject(TfrxView *Sender,
    TMouseButton Button, TShiftState Shift, bool &Modified)
    {
    TfrxMemoView * Memo;
    if(strcmp(Sender->Name.c_str(),"Memo1") == 0)
    {
    Memo = new TfrxMemoView(frxReport1->PreviewPages->Page[0]);
    Memo->SetBounds(100,100,100,50);
    Memo->Text = "MEMO TEXT";
    }
    frxReport1->Preview->Refresh();
    }
  • отредактировано 10:50
    Page[0] можно заменить на Page[frxReport1->PreviewPages->CurPage], чтобы объект создавался на текущей странице.
  • отредактировано 10:50
    Благодарю.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.