Parentless TRichView control

General TRichView support forum. Please post your questions here
Post Reply
dmitrys
Posts: 10
Joined: Fri Aug 09, 2013 6:31 am

Parentless TRichView control

Post by dmitrys »

I have an invisible TRichView control with no parent that I use to convert HTMLto RTF.
When RTF is saved, TRVWinGraphicInterface.GetDeviceCaps is called and accesses the Canvas property. The control has no parent, so the handle cannot be created and the calls fails with the following call stack.
Shouldn't the control be using the screen canvas in this case?

Thanks you!

Vcl.Controls.TWinControl.CreateWnd
RVScroll.TRVScroller.CreateWnd
Vcl.Controls.TWinControl.CreateHandle
Vcl.Controls.TWinControl.HandleNeeded
Vcl.Controls.TControlCanvas.CreateHandle
Vcl.Graphics.TCanvas.RequiredState([csHandleValid,csFontValid,csPenValid,csBrushValid])
Vcl.Graphics.TCanvas.GetHandle
RVWinGrIn.TRVWinGraphicInterface.GetDeviceCaps($17DB8660,88)
RVFuncs.RV_InfoAboutSaD($13E498,$17DB8660,$17E01210)
CRVFData.TCustomRVFormattedData.GetSADForFormatting($17DB8660,$13E498)
CRVFData.TCustomRVFormattedData.Format_(False,True,False,0,$17DB8660,False,False,False,False,False)
CRVFData.TCustomRVFormattedData.Format(False,False)
RVTable.TRVTableItemInfo.UpdateCellXCoords($17E0A0B0,False,False,False)
RVTable.TRVTableItemInfo.InternalOnDocWidthChange(600,$17E0A0B0,nil,False,False,False,$17E01210)
RVTable.TRVTableItemInfo.OnDocWidthChange(600,nil,False,nil,$188A8DB0,nil,0,0,False,False,False)
RVTable.TRVTableItemInfo.SaveRTF($17DF4A20,'',$188A8DB0,26,0,$17DFB1E8,$17DFADF8,$17DFB098,$17DFB518,False)
CRVData.TCustomRVData.SaveRTFToStream($17DF4A20,'',False,0,536870911,$17DFABD0,$17DFB1E8,$17DFADF8,$17DFB098,$17DFB518,True,False,nil,nil,nil,nil,nil,nil)
RichView.TCustomRichView.SaveRTFToStream($17DF4A20,False)
Sergey Tkachenko
Site Admin
Posts: 17310
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Post by Sergey Tkachenko »

Unfortunately, some operations cannot be made in parentless TRichView.
I suggest to use TRVReportHelper component instead, RVReportHelper.RichView can work without a parent.

Important note: if document contains tables, it must be formatted before saving to RTF (in your case, the component tries to format a table itself, and fails; RVReportHelper must be formatted too, but it is formatted by calling RVReportHelper.Init)
dmitrys
Posts: 10
Joined: Fri Aug 09, 2013 6:31 am

Post by dmitrys »

It is the same problem - but now it is an access violation since Canvas being passed in is nil:


Vcl.Graphics.TCanvas.GetHandle
RVWinGrIn.TRVWinGraphicInterface.GetDeviceCaps(nil,88)
RVFuncs.RV_InfoAboutSaD($13E498,nil,$162D1220)
CRVFData.TCustomRVFormattedData.GetSADForFormatting(nil,$13E498)
CRVFData.TCustomRVFormattedData.Format_(False,True,False,0,nil,False,False,False,False,False)
CRVFData.TCustomRVFormattedData.Format(False,False)
RVTable.TRVTableItemInfo.UpdateCellXCoords($162DA0D8,False,False,False)
RVTable.TRVTableItemInfo.InternalOnDocWidthChange(600,$162DA0D8,nil,False,False,False,$162D1220)
RVTable.TRVTableItemInfo.OnDocWidthChange(600,nil,False,nil,$19CF8DB0,nil,0,0,False,False,False)
RVTable.TRVTableItemInfo.SaveRTF($162C49C0,'',$19CF8DB0,26,0,$162CB230,$162CAE40,$162CB0E0,$162CB560,False)
CRVData.TCustomRVData.SaveRTFToStream($162C49C0,'',False,0,536870911,$162CAC60,$162CB230,$162CAE40,$162CB0E0,$162CB560,True,False,nil,nil,nil,nil,nil,nil)
RichView.TCustomRichView.SaveRTFToStream($162C49C0,False)



Sergey Tkachenko wrote:Unfortunately, some operations cannot be made in parentless TRichView.
I suggest to use TRVReportHelper component instead, RVReportHelper.RichView can work without a parent.

Important note: if document contains tables, it must be formatted before saving to RTF (in your case, the component tries to format a table itself, and fails; RVReportHelper must be formatted too, but it is formatted by calling RVReportHelper.Init)
Sergey Tkachenko
Site Admin
Posts: 17310
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Post by Sergey Tkachenko »

Call RVReportHelper.Init before saving.
Post Reply