Использование Delphi для заполнения шаблона таблицы, созданного с использованием файла RTF - PullRequest
1 голос
/ 25 июля 2011

У меня есть таблица в формате файла rtf (расширенный текстовый формат).

Интересно, можно ли поместить разное содержимое в ячейки во время выполнения.

Вот скриншот.Некоторые пустые поля необходимо заполнить значением.

screenshot

Ответы [ 3 ]

4 голосов
/ 26 июля 2011

Вы написали «Некоторые пустые поля должны быть отредактированы» - если это означает, что RTF - это какой-то шаблон, где пустые поля необходимо заполнять программным способом, вот что я бы сделал:

  • используйте текстовый редактор, чтобы открыть документ RTF (например, OpenOffice или MS Word)
  • вставлять специальные пустые строки в пустые поля, такие как $ field1 $, $ field2 $ ...
  • сохранить документ
  • в приложении Delphi, загрузить RTF в строку (например, используя TStringlist)
  • использовать функции Delphi String для поиска и замены специальных строк-заполнителей фактическими значениями
2 голосов
/ 26 июля 2011

Чтобы напечатать форму на листе бумаги, просто нарисуйте на холсте принтера!

procedure TForm1.Button1Click(Sender: TObject);
var
  y, Margin, Col2: integer;
  LineHeight: integer;
begin
  with TPrintDialog.Create(nil) do
    try
      if not Execute then
        Exit;
    finally
      Free;
    end;

  Printer.BeginDoc;

  Printer.Title := 'Sample Form';
  Printer.Canvas.Font.Name := 'Arial';
  Printer.Canvas.Font.Size := 11;

  Margin := 5*Printer.Canvas.TextWidth('M');
  Col2 := 35*Printer.Canvas.TextWidth('M');
  LineHeight := 3 * Printer.Canvas.TextHeight('M') div 2;

  y := Margin;

  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(MARGIN, y, 'Name: ');
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(Col2, y, 'Andreas Rejbrand');

  inc(y, LineHeight);

  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(MARGIN, y, 'Age: ');
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(Col2, y, '23');

  inc(y, LineHeight);

  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(MARGIN, y, 'Nationality: ');
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.TextOut(Col2, y, 'Swedish');

  Printer.EndDoc;

end;

Результат: http://privat.rejbrand.se/sampledrawing.pdf

1 голос
/ 26 июля 2011

Чтобы использовать существующий RTF-контент в TRichEdit, загрузите его в свойства Text или Lines компонента:

RichEdit1.Lines.LoadFromFile(rtfFilename);

-или-

RichEdit1.Text := StringILoadedFromAnRtfFileOnDisk;

Я не уверен, что вы хотите сделать (программно создать или изменить таблицу на основе существующего неопределенного содержимого RTF, распечатать ее и т. Д.). Спрашивая о расширенном редактировании, а также о регулярном редактировании, это очень трудно понять.

Вы спросили в комментарии, как вы можете создавать таблицы в TRichEdit:

procedure TForm1.PutTableIntoRichEdit;
begin
  RichEdit1.Text := '{\rtf1\ansi\deff0'#13#10+
'\trowd'#13#10+
'\cellx1000'#13#10+
'\cellx2000'#13#10+
'\cellx3000'#13#10+
'cell 1\intbl\cell'#13#10+
'cell 2\intbl\cell'#13#10+
'cell 3\intbl\cell'#13#10+
'\row'#13#10+
'}' ;
end;

Если вы хотите использовать этот RTF-контент на скриншоте, который вы показали выше, внутри вашей программы Delphi, просто загрузите его, попробуйте что-нибудь и задайте конкретный вопрос. Показ скриншота Microsoft Word не помогает прояснить ваш вопрос.

...