Чтение и запись текста мемо-блоков

отредактировано July 2006 Раздел: FastReport 3.0
Добрый день!

Пишу программу автоматизированного заполнения бланков.
Принцип работы следующий: в базе данных хранится набор бланков; при выборе бланка он загружается и формируется в окне frxPreview; по клику мыши на memo-блоке (событие TfrxReport.OnClickObject) пользователю открывается интерфейс, через который он может менять текстовое содержимое этого блока.
procedure TfrMain.frxReportClickObject(Sender: TfrxView;
  Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
var
  CurrentFrxMemo: TfrxMemoView;
begin  
  CurrentFrxMemo:=TfrxMemoView(Sender);
  CurrentFrxMemo.Text:='Пользовательский текст';
  // Принудительная перерисовка окна предварительного просмотра
  frxPreview.Invalidate
end;

Проблема заключается в том, чтобы сделать загрузку и сохранение изменяемых данных в бланке. Хранить их предполагается в таблице с полями (..., NameMemo, TextMemo, ...)

Вопросы:
Как можно заполнить мемо-блок зная его имя? (Метод TfrxReport.FindObject() не подходит потому, что он находит указатель на мемо-блок в шаблоне, а не в сформированном отчете)
Как можно прочитать текстовые значение из готового отчета?

Комментарии

  • отредактировано 14:23
    Вообще конечно генератор отчетов предназначен для того, чтобы вываливать из базы данные со всякими там группировками и т.п. Для ввода данных как правило используется программные модули, реализованные на каком либо из языков программирования. IMHO fast report для ввода ДАННЫХ в БАЗУ не предназначен изначально. Прямее будет накатать модуль на дельфях либо на чем нибудь еще. И генерировать элементы управления опираясь на данные из базы намного легче.
  • отредактировано July 2006
    написал:
    Вообще конечно генератор отчетов предназначен для того, чтобы вываливать из базы данные со всякими там группировками и т.п.
    Это понятно, но, во-первых, с помощью FastReport-а заполнение бланка выглядит нагляднее чем если бы это была обычная форма с набором контролов (полей ввода) а, во-вторых, пользователь не привязан к какому-то конкретному бланку (и, соответственно, набору контролов) и может создавать с помощь дизайнера свои собственные. Ole-контейнеры с MSWord или Excel тоже не подходят, так как это привязка к наличию Офиса на компьютере...

    И все-таки:
    написал:
    Как можно заполнить мемо-блок сформированного отчета зная его имя?
    Как можно прочитать текстовые значение мемо-блока из готового отчета?
    То, что это реально сомнений не вызывает, так как обработчик события TfrxReport.OnClickObject возвращает указатель (Sender) на копмонент уже сформированного отчета и интересует как можно получить такой указатель вне обработчика зная имя компонента.
  • отредактировано 14:23
    Посмотри пример в демке - Interactive report
  • отредактировано 14:23
    либо все не так просто как я предполагаю ;)
  • отредактировано 14:23
    IMHO менее геморройно предоставить пользователю доступ к дизайнеру пояснив как шлепнуть мемку, как ее растянуть, изменить текст и т.п. Дизайнер - он собственно для этого и придуман
  • отредактировано 14:23
    Опять же, в этой демке задействован обработчик TfrxReport.OnClickObject в котором известен View: TfrxView, а мне нужно получить указатель зная имя memo-блока вне обработчика.
  • отредактировано 14:23
    Эмуляция дизайнера на основе Preview окна это конечно круто ;)
  • отредактировано 14:23
    Даже если предположить что получится изменять текст мемки и запихивать это все в базу ... КАК пользователь сможет изменить размер мемки либо перетащить ее куда нибудь?
    Для чего опять же (повторюсь) предназначен дизайнер
  • отредактировано July 2006
    Дизайнер и так задействован в программе. С помощью него пользователь создает бланки отчета. А в окне превьюва по событию TfrxReport.OnClickObject пользователю предлагается удобный интерфейс ввода текста (допустим, с возможностью выбора ранее вводимых значений)...
  • отредактировано July 2006
    написал:
    Даже если предположить что получится изменять текст мемки и запихивать это все в базу ... КАК пользователь сможет изменить размер мемки либо перетащить ее куда нибудь?
    А это делать как раз и не нужно. Бланк - на то он и бланк чтобы размеры, расположения, шрифты и т.п. были бы неизменяемы, а менять можно только текстовое содержимое определенных блоков.
  • отредактировано 14:23
    Как вариант - сохранить куда нибудь отчет с заполненными полями мемосами и ковырнуть XML текст отчета. Выдрать оттуда значение мемоса. Больше чего то ничего не придумывается - ну типа того ищешь тег TfrxMemoView с атрибутом Name = "нужный нам нэйм мемоса" ну и для этого тега выдираем значение атрибута Text
  • отредактировано 14:23
    per rectum ad astra конечно, но больше ничего в голову не приходит ;)
  • отредактировано 14:23
    написал:
    Как вариант - сохранить куда нибудь отчет с заполненными полями мемосами и ковырнуть XML текст отчета. Выдрать оттуда значение мемоса.
    Это конечно реально, но какой-то практологический метод. Должно быть что-то проще...
  • LexLex
    отредактировано 14:23
    Для заполнения пользуйся полями набора данных прописанных в самой мемке,
    а сохранение делай update-ом сдесь:
    KiTE написал:
    procedure TfrMain.frxReportClickObject(Sender: TfrxView;
    Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
    var
    CurrentFrxMemo: TfrxMemoView;
    begin 
    CurrentFrxMemo:=TfrxMemoView(Sender);
    CurrentFrxMemo.Text:='Пользовательский текст';
    // Принудительная перерисовка окна предварительного просмотра
    frxPreview.Invalidate
    end;
  • отредактировано 14:23
    Я рассматривал этот вариант, но очень неудобно получается. Хочется сделать возможность в любой момент времени сохранить результат под другим именем.
    Возможно есть какой-то метод аналог FindObject для уже расчитанных компонентов отчета?

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

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