Page 2 of 2
Re:
Posted: Wed Nov 15, 2023 12:52 am
by Ceprotec
Sergey Tkachenko wrote: ↑Tue May 05, 2009 1:37 pm
MainMerge-Text4
mailmerge-text4.zip
The same as
MailMerge-text3, but supports several types of field values.
Field codes: text in {}, for example {NAME}.
Field values: multiline text / picture / table / arbitrary document (RVF)
- [+] History of updates
-
2015-Mar-26: RVF field type is added
2018-Apr-30: compatibility with TRichView 17.3. Unicode text in all versions of Delphi. Tab characters are allowed in text field values.
- [+] Old versions
-
https://www.trichview.com/support/files ... -text4.zip - for TRichView 17.2 and older
How to insert the RVF in the same line as the field?
Re: Re:
Posted: Wed Nov 15, 2023 7:17 am
by Sergey Tkachenko
Ceprotec wrote: ↑Wed Nov 15, 2023 12:52 am
How to insert the RVF in the same line as the field
See MailMerge-Text4 demo:
https://www.trichview.com/forums/viewto ... 707#p12707
Re: Re:
Posted: Wed Nov 15, 2023 12:36 pm
by Ceprotec
This is the MailMerge-Text4 demo.
Re: [Demos] Mail Merge
Posted: Wed Nov 15, 2023 3:02 pm
by Sergey Tkachenko
Oh, sorry.
But I do not understand the question.
In this demo, the field content (RVF or text) is inserted in the line that contains field code.
You edited the template so that it contains a single line, so RVF field is inserted in this line.
(this demo repeats the result for each line in Persons.txt)
Re: [Demos] Mail Merge
Posted: Wed Nov 15, 2023 3:57 pm
by Ceprotec
I would like to insert the RVF at the end of the template line and not on a new line...
I can adapt this function to only remove the last blank line.
Sergey Tkachenko wrote: ↑Wed Nov 02, 2005 9:19 pm
Modification of DeleteBlankLines - removing blank lines only from the end of the document:
Code: Select all
procedure DeleteTrailingBlankLines(RVData: TCustomRVData);
var i: Integer;
begin
for i := RVData.ItemCount-1 downto 1 do
if RVData.IsParaStart(i) and (RVData.GetItemStyle(i)>=0) and
(RVData.GetItemText(i)='') then
RVData.DeleteItems(i,1)
else
break;
end;
Call:
Code: Select all
DeleteBlankLines(RichViewEdit1.RVData);
RichViewEdit1.ClearUndo;
RichViewEdit1.Format;
I don't think it's very elegant, is there any other way to do this?
Re: [Demos] Mail Merge
Posted: Wed Nov 15, 2023 7:14 pm
by Sergey Tkachenko
So, you want to add the first paragraph of each record to the last paragraph of the previous record?
Change TForm1.Button1Click. The key method is AppendRVFFromStream(..., -1).
Code: Select all
procedure TForm1.Button1Click(Sender: TObject);
var Stream: TStream;
ItemCount: Integer;
begin
Index := 0; // index of the current person
ItemCount := 0;
rvOutput.Clear;
while Index<Persons.Count do
begin
// copying rve to the end of rvOutput
Stream := TMemoryStream.Create;
rve.SaveRVFToStream(Stream, False);
Stream.Position := 0;
if Index = 0 then
rvOutput.InsertRVFFromStream(Stream, ItemCount)
else
rvOutput.AppendRVFFromStream(Stream, -1);
Stream.Free;
// processing the last added copy of template
if rvOutput.ItemCount>ItemCount then
begin
// replacing field codes
FillFields(rvOutput.RVData, ItemCount);
end;
ItemCount := rvOutput.ItemCount;
inc(Index);
end;
rvOutput.Format;
end;