Page 1 of 1
Insert Image at position in TCustomRVData
Posted: Mon Jun 15, 2020 2:15 pm
by HansDampf
Hello Sergej,
I have a procedure with only a TCustomRVData and a matching pattern for the position and I want to replace the pattern with a Bitmap.
Code: Select all
Item.Inserting(aRVData, sr, False);
aRVData.Items.InsertObject(i, sr, Item);
Item.Inserted(aRVData, i);
adds the image but in front of the table and
Code: Select all
ItemNo := RVData.ItemCount - 1;
Offs := RVData.GetOffsAfterItem(ItemNo) - 1;
RVData.SetSelectionBounds(ItemNo, Offs, ItemNo, Offs);
leads to an error in TCustomRVFormattedData.Item2DrawItem at
Code: Select all
DrawItemOffs := ItemOffs-DrawItems[DrawItemNo].Offs+1;
Do I need to get the TRichViewCustomEdit (if yes, how?).
Thanks for your help.
Best, Hans
Re: Insert Image at position in TCustomRVData
Posted: Mon Jun 15, 2020 4:46 pm
by Sergey Tkachenko
SetSelectionBounds needs a formatted document. Adding items in aRVData.Items makes the document unformatted, so you need to call Format method when you finished making all changes.
BTW, instead of the code you use for inserting Item, use RVInsertItem from RVInsertItems unit. It does the same, and still requires calling Format after, but it hides low-level details.
If you do multiple replacements, calling multiple RVInsertItem and then Format is a good idea.
Editing methods (like InsertPicture) are better if you need a single replacement. They reformat the changed part of a document themselves.
Re: Insert Image at position in TCustomRVData
Posted: Tue Jun 16, 2020 6:22 am
by HansDampf
Thanks for you reply, but could you help me with the code? I only have the TCustomRVData and don't know, how to get or format the document.
This is my code so far to find the placeholders:
Code: Select all
begin
if not FileExists(aFileName) then Exit;
Image := TPicture.Create;
Image.LoadFromFile(aFileName);
Item := TRVGraphicItemInfo.CreateEx(aRVData, Image.Graphic, rvvaBaseline);
// iterate through tables
for i := 0 to aRVData.ItemCount - 1 do
begin
table := TRVTableItemInfo(aRVData.GetItem(i));
if Assigned(table.Rows) then
begin
for row := 0 to table.Rows.Count - 1 do
for col := 0 to table.Rows[row].Count - 1 do
while True do
begin
cellContent := table.Cells[row,col].GetRVData.GetItemText(0);
stringIndex := Pos(aText, cellContent);
// if placeholder does not exist in cell -> break loop
if stringIndex = 0 then Break;
Delete(cellContent, stringIndex, Length(aText));
table.Cells[row, col].GetRVData.SetItemText(0, cellContent);
//TODO: insert Image at stringIndex
end;
end;
end;
Image.Free;
end;
And I just cannot work out, how to insert the image at stringIndex.
Thanks!
Re: Insert Image at position in TCustomRVData
Posted: Tue Jun 16, 2020 8:37 am
by Sergey Tkachenko
You can get the it as TCustomRichView(aRVData.GetAbsoluteRootData.GetParentControl)
PS: I hope this is not a final code.
You assume that all items in aRVData are tables. If not, it will crash.
You assume that tables do not have merged cells (= nil). If not, it will crash.
You check text only inside table cells, not inside aRVData itself.
You do not check tables nested in tables.
You assume that there is exactly one place where this image will be inserted (maybe there is not field for this image, so you do not need to create it and its item? maybe there are more than one field, and you need to create several images and its items?)
I suggest to check MailMerge-Text4 demo:
https://www.trichview.com/forums/viewto ... 707#p12707
It shows how to implement fields that have values of several types, including pictures.
Re: Insert Image at position in TCustomRVData
Posted: Tue Jun 16, 2020 12:12 pm
by HansDampf
Is there a guide on how to use TRichView or at least an overview of the necessary components?
I just started using your product and don't know where to find all the informations.
Thanks
Re: Insert Image at position in TCustomRVData
Posted: Tue Jun 16, 2020 12:44 pm
by Sergey Tkachenko
1) Manual:
https://www.trichview.com/help/ (also available as CHM in TRichView\Help\, and as PDF
https://www.trichview.com/rvfiles/rv_pdf_manual.zip )
2) Tutorial demo projects (very basic): TRichView\Demos\DelphiUnicode\Tutorials.groupproj
3) Other demo projects: TRichView\Demos\DelphiUnicode\Demos.groupproj
4) Examples in the forum:
https://www.trichview.com/forums/viewforum.php?f=3