Редактирование отчета в Preview

отредактировано 15:38 Раздел: FastReport 4.0
Привет!
После отображения отчета пользователю функцией ShowReport, нужно ему дать возможность редактирования полей MemoView.

Следующий код работает:
procedure mmCommentOnPreviewClick(Sender: TfrxView; Button: TMouseButton; Shift: Integer; var Modified: Boolean);
var
  Comment: string;                                                     
begin
  with TfrxMemoView(Sender) do
  begin              
    Comment := Trim(Text);                                       
    Text := InputBox('Редактирование', 'Комментарий:', Comment);                                                                  
  end;                  
  Modified := True;          
end;
Но в этом случае отображается только окно с однострочным полем.

Пробовал использовать такой код (как здесь):
procedure TForm1.frxReportClickObject(Sender: TfrxView;
  Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
var
  MemoObj: TfrxMemoView;
  MemoEditorForm: TfrxMemoEditorForm;
  s: string;
begin
  if Sender is TfrxMemoView then
  begin
    MemoObj := TfrxMemoView(Sender);
    if MemoObj.Name = 'mmComment' then
    begin
      MemoEditorForm := TfrxMemoEditorForm.Create(Self);
      try
        MemoEditorForm.MemoView := TfrxMemoView.Create(MemoEditorForm);
        MemoEditorForm.ShowModal;
      finally
        MemoEditorForm.Free;
      end;
    end;
  end;
end;
Но при открытии и закрытии окна редактирования появляется ошибка "Unable to write to".
Может я передаю конструктору TfrxMemoEditorForm.Create(Self) неправильный параметр? Подскажите пожалуйста :) !

Комментарии

  • отредактировано 15:38
    Сделал свою форму:
    procedure TForm1.frxReportClickObject(Sender: TfrxView;
      Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
    var
      MemoObj: TfrxMemoView;
      EditorForm: TMemoEditor;
      s: string;
    begin
      if Sender is TfrxMemoView then
      begin
        MemoObj := TfrxMemoView(Sender);
        if MemoObj.Name = 'mmComment' then
        begin
          EditorForm := TMemoEditor.Create(nil);
          try
            EditorForm.Memo.Text := MemoObj.Text;
            if EditorForm.ShowModal = mrOk then
            begin
              MemoObj.Text := EditorForm.Memo.Text;
              Modified := True;
              frxReport.Preview.Repaint;
            end;
          finally
            EditorForm.Free;
          end;
        end;
      end; 
    end;
    

    Текст меняется. Но автоматически не изменяется высота MemoView, если пользователь набрал несколько строк текста. Попробую разобраться с этим.
  • Lizard~Lizard~ Тольятти
    отредактировано 15:38
    написал: »
    Текст меняется. Но автоматически не изменяется высота MemoView, если пользователь набрал несколько строк текста. Попробую разобраться с этим.
    И не будет высота меняться. Отчет уже построен и изменить нельзя размеры.
    Если сначала предоставить пользователю форму для редактирования данных, которые попадут в отчёт, а потом его формировать, меньше будет проблем такого рода.
  • отредактировано 15:38
    При проектировании отчета есть у полей свойство Stretch, оно регулирует ширину поля в зависимости от контента
  • отредактировано 15:38
    Спасибо за ответы :) !
    LizarD написал: »
    И не будет высота меняться. Отчет уже построен и изменить нельзя размеры.
    Если сначала предоставить пользователю форму для редактирования данных, которые попадут в отчёт, а потом его формировать, меньше будет проблем такого рода.
    Для ввода комментария к отчету форма предоставляется. Получается, что пользователь, после формирования отчета, может производить только "косметические" изменения текста.
    LizarD написал: »
    При проектировании отчета есть у полей свойство Stretch, оно регулирует ширину поля в зависимости от контента
    Свойство есть, но оно работает только при формировании отчета, когда данные для отображения уже предоставлены. После уже не работает :)
  • отредактировано 15:38
    У меня возникла несколько похожая проблема http://www.fast-report.com/en/forum/?p=/discussion/8361

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

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