Доработка дизайнера FR3

отредактировано 16:37 Раздел: FastReport 3.0
Как доработать функционал дизайнера? Хочу кнопку добавить или пункт меню, ну чтобы сохранять отчёт в поле БД, а не могу!!!
В 2.51 сделал наследника от дизайнера, навернул в нём всё что нужно, присвоил fr_Class.frDesignerClass имя наследника и всё! А тут даже просто пустого наследника не сделаешь, делаю тоже самое, а при вызове метода DesignReport вылетают три ошибки и всё .

Как добавить кнопки на панели или пункты в меню?? Кто-нибудь знает?
Заранее спасибо!

Комментарии

  • отредактировано 16:37
    В событии TfrxDesigner.OnShow. Например, добавить пункт в меню File:

    with TfrxDesignerForm(Sender) do
    begin
    FileMenu.Items.Add(...)
    end;
  • отредактировано 16:37
    Спасибо, попробую. Хотя скажу прямо, это не есть лучший способ! А если этих элементов не один и не два? Почему не проходит с наследником класса? Это был бы оптимальный вариант.
  • отредактировано 16:37
    Не знаю, почему не проходит с наследником. Механизм тот же, что и в FR2.x:
    frxDesignerClass := TfrxDesignerForm;
  • отредактировано 16:37
    При попытки использования наследника возникает ошибка в строке

    Lines := Report.ScriptText; (Report = nil)

    метода TfrxDesignerForm.CreateWorkspace;
  • отредактировано 16:37
    Пошёл путём программной доработки дизайнера, наследника так сделать и не удалось . Нужно было несколько пунктов в меню "Файл" добавить(не в конец меню). Добавил, всё шло хорошо, до тех пор пока не пришлось пару раз шаблон из файла загрузить. Оказалось, что при загрузке файла исчезает верхний разделитель блока ранее открытых файлов (SepMI11). Он попросту удаляется. Соответственно возникает ошибка.
  • отредактировано 16:37
    См. процедуру
    procedure TfrxDesignerForm.UpdateRecentFiles(NewFile: String);
    она производит манипуляции со списком открытых файлов и пунктами меню.
  • отредактировано 16:37
    Посмотрел, в этом методе есть такая строчка:

    while FileMenu.Items[FRecentMenuIndex] <> SepMI4 do
    FileMenu.Items[FRecentMenuIndex].Free;

    Дело в том, что переменная FRecentMenuIndex определяется как

    FRecentMenuIndex := FileMenu.IndexOf(SepMI4);

    в методе Init, который вызывается (в FormCreate) раньше, чем происходит обработка события дизайнера OnShow. Поэтому, при добавлении пунктов в меню File (в событии OnShow) выше чем разделитель SepMI4, переменная FRecentMenuIndex хранит уже не тот индекс.

    Надо бы ещё раз добвать строчку FRecentMenuIndex := FileMenu.IndexOf(SepMI4); после обработки OnShow в методе FormCreate
  • отредактировано 16:37
    Здравствуйте.
    Маленький вопрос, по поводу дизайнера
    Если он запускается в модальном режиме, то зачем ,простите, кнопка "свернуть".
    В MDI-приложениях это не очень удобно.
    Да и вообще зачем эта модальность?

    Заранее благодарен за ответ

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

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