Page 1 of 1

Search and Replace in RVheader of Scalerichview

Posted: Thu Jul 06, 2023 7:45 am
by pgkammath
Hi,
I am attaching a RTF file , which contains Tags in : <PatientName> this format, which using the following code to replace the PatientName with the actual name in

with ScaleRichView.RichViewEdit do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<PatientName>', [rvseoDown,rvseoWholeWord]) do InsertText(cPatientName);
Format;
end;
Now I have put the tags into the header as in the Attached RTF file. What change needs to be done for the above code to work in the rvheader ?

this change gives error,
with ScaleRichView.RVHeader do begin

Please help.
I Am making changes to the code after a very long time

Re: Search and Replace in RVheader of Scalerichview

Posted: Thu Jul 06, 2023 9:51 am
by Sergey Tkachenko
SRV.RVHeader contains header text only when a header is active (i.e., the caret is inside the header).
If the caret is inside the main document, or if the editor is unformatted yet, header text is inside SRV.SubDocuments[].

So you have two options to modify header:

1. Make sure that the header is not active. It may be immediately after calling SRV.Clear or loading a file. If the document is already displayed, call SRV.StartEditing(srvrveMain).
Now you can modify SRV.SubDocuments[]. Items in this property have methods of TRichView, but do not have editing methods.

2. The editor must be formatted. Activate header editing SRV.StartEditing(srvrveHeader). But please note that a document may have several headers (for the first page, for even pages, for other pages).
Now you can edit header using SRV.RVHeader methods. In this mode, it is assumed that you use editing (undoable) methods. If you still want using non-editing methods, when finished, call

Code: Select all

SRV.RVHeader.ClearUndo;
SRV.RVHeader.Change;
SRV.Format;

Re: Search and Replace in RVheader of Scalerichview

Posted: Thu Jul 06, 2023 10:22 am
by Sergey Tkachenko
Your code modifies document using InsertText method. It is an editing method.
So just activate header editing:

Code: Select all

ScaleRichView.StartEditing(srvrveHeader).
with ScaleRichView.ActiveEditor do 
begin
  SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
  while SearchText('<PatientName>', [rvseoDown,rvseoWholeWord]) do 
    InsertText(cPatientName);
end;
Format is not needed after InsertText.
You can change ActiveEditor to RVHeader in this code.

Re: Search and Replace in RVheader of Scalerichview

Posted: Thu Jul 06, 2023 11:53 am
by pgkammath
Thanks sergey, for the fast response. Will implement and get back

Re: Search and Replace in RVheader of Scalerichview

Posted: Tue Jul 11, 2023 7:34 am
by pgkammath
Hello Sergey,

I have coded as advised. Still the tags are not getting replaced. I am not sure what i am doing wrong. The following is code which gets executed

can you please point out what is missing here.

Regards,

Thanks in advance


TransitDataNew.RichViewEdit.Clear;
TransitDataNew.RichViewEdit.LoadRTF(cFileName);
TransitDataNew.Format;

TransitDataNew.StartEditing(srvrveHeader);

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<LabNumber>', [rvseoDown,rvseoWholeWord]) do
InsertText(clabNumber);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<UHID>', [rvseoDown,rvseoWholeWord]) do InsertText(cUHID);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<AdmissionNo>', [rvseoDown,rvseoWholeWord]) do InsertText(cIpCode);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<WardNo>', [rvseoDown,rvseoWholeWord]) do InsertText(cWardNo);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<PatientType>', [rvseoDown,rvseoWholeWord]) do InsertText(cPatientType);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<TypeData>', [rvseoDown,rvseoWholeWord]) do InsertText(cTypeData);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<RoomNo>', [rvseoDown,rvseoWholeWord]) do InsertText(cRoomNo);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<PatientName>', [rvseoDown,rvseoWholeWord]) do InsertText(cPatName);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<GenderAge>', [rvseoDown,rvseoWholeWord]) do InsertText(cGenderAge);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
if lPreFix then
while SearchText('<ReferringDoctor>', [rvseoDown,rvseoWholeWord]) do InsertText('Dr.'+ProperCase(cDocname))
else
while SearchText('<ReferringDoctor>', [rvseoDown,rvseoWholeWord]) do InsertText(''+ProperCase(cDocname));
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<RequestDate>', [rvseoDown,rvseoWholeWord]) do InsertText(cRequestDate);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<CollectionDate>', [rvseoDown,rvseoWholeWord]) do InsertText(cSampleDate);
end;

with TransitDataNew.RVHeader do begin
SetSelectionBounds(0, GetOffsBeforeItem(0), 0, GetOffsBeforeItem(0));
while SearchText('<Today>', [rvseoDown,rvseoWholeWord]) do
InsertText(FormatdateTime('dd/mm/yyyy hh:mm am/pm',now)); // and Changed to date and time
end;

//TransitDataNew.RVHeader.ClearUndo;
//TransitDataNew.RVHeader.Change;
//TransitDataNew.Format;

//TransitDataNew.AddNL(' Prepared by :'+cFullName,rvsHeading);

TransitDataNew.RichViewEdit.AddNL(' ***** END OF REPORT ****',0);
TransitDataNew.RichViewEdit.AddNL(' Prepared by :'+LowerCase(cFullName),0,0);
//TransitDataNew.AddNL(' ',rvsNormal,0);

TransitDataNew.Format;

Re: Search and Replace in RVheader of Scalerichview

Posted: Tue Jul 11, 2023 10:53 am
by Sergey Tkachenko
Try including "multiitem" option in SearchText parameter. Maybe field codes belong to several text items.

Re: Search and Replace in RVheader of Scalerichview

Posted: Wed Jul 12, 2023 4:47 am
by pgkammath
I got the issue. I should have added SRichViewEdit1.StartEditing(srvrveMain) after the header has been modified and before starting the body editing. Now I can see the changes in the tags which are replaced.


Thanks