Page 1 of 1

strange bug in TRVHeaderFooterRVData.DrawBackToBitmap

Posted: Fri Nov 25, 2022 10:20 am
by tothpaul
Hello,

I have a strange bug on some PC in a unknown but reproductible situation in TRVHeaderFooterRVData.DrawBackToBitmap

when I print a document, "pi.Background" is null,

you test for instance "(pi <> nil) and (pi.Background.Color..", I have to add "(pi <> nil) and (pi.Background <> nil) and (pi.Background.Color ..."

do you know how it can happend ? I can't reproduce that on my dev machine, only on customers PC, I've found the situation by iteration with debug messages :/

Re: strange bug in TRVHeaderFooterRVData.DrawBackToBitmap

Posted: Fri Nov 25, 2022 10:47 am
by Sergey Tkachenko
Sorry, I do not understand how it could be, an object for BackgroundProperty ofTCustomRVParaInfo is created in its constructor and destroyed in its destructor.
Something is corrupted.

Re: strange bug in TRVHeaderFooterRVData.DrawBackToBitmap

Posted: Fri Nov 25, 2022 11:18 am
by tothpaul
ok

pi is FParaStyle and pi.ClassName returns TIBCParam !!!

is see that FParaStyle is "valid only in DrawPage"...but it point to something completly out of scope (IBDAC SQL Parameter)

maybe it's one of my patches that does this...but I do not change anything in the para styles

I'll revert my changes (for PDF printing) and use the VirtualPrinter feature

is it possible that the FParaStyle point to an old instance of a ParaStyle and have never been set to nil and the same address point now to something completly different ?

Re: strange bug in TRVHeaderFooterRVData.DrawBackToBitmap

Posted: Fri Nov 25, 2022 11:40 am
by tothpaul
yep I have probably missed something in my patch (taken from an old RV version), when I use the VirtualPrinter everything is right.

Thanks

Re: strange bug in TRVHeaderFooterRVData.DrawBackToBitmap

Posted: Fri Nov 25, 2022 12:05 pm
by tothpaul
No :)

I have the same bug when saving to a PDF with this code

Code: Select all

procedure TRVPrint.SaveAsPDF(const AFileName: string);
begin
  var Doc := LLPDFDocument.TPDFDocument.Create(nil);
  Doc.PDFACompatible := True;
  Doc.FileName := UniqueFileName(AFileName);
  Doc.BeginDoc;

  VirtualPrinter.Active := True;
  VirtualPrinter.PageWidth := MulDiv(Doc.Page[0].Width, 96, 72);
  VirtualPrinter.PageHeight := MulDiv(Doc.Page[0].Height, 96, 72);
  var Pages := FormatPages(rvdoALL);
  DrawPage(1, Doc.Canvas, False);
  for var Page := 2 to Pages do
  begin
    Doc.NewPage;
    DrawPage(Page, Doc.Canvas, False);
  end;
  Doc.EndDoc;
  Doc.Free;
end;
and the call stack

Code: Select all

PtRVData.TCustomPrintableRVData.DrawBackToBitmap(77,-325,$116DEEC0,(1701016, 292417216, 12360940, 292770248, 265433312),-1,False,True,True,1)
PtRVData.TRVHeaderFooterRVData.DrawBackToBitmap(77,42,$116DEEC0,(1701016, 292417216, 1700852, 12402001, 1700796),-1,False,True,True,1)
PtRVData.TRectPtblRVData.DrawBackToBitmap(69,39,$116DEEC0,(1701016, 292417216, 12649144, 12649144, 1701036),-1,False,True,True,1)
PtRVData.DrawItemBackTotmpbmp(???)
PtRVData.TCustomPrintableRVData.DrawPage(1,1,$1165D3A8,True,False,True)
RVTable.DrawCell(0,0,361,4,4,45,40,0,1,$1165D3A8,(1701556, 291885992, 1, 0, (1701556, 291885992), (1, 0)),(1701276, 1701556, 291885992, 1, (1701276, 1701556), (291885992, 1)),True,False)
RVTable.TRVTableItemInfo.PaintTo(43,???,38,$1165D3A8,[rvidsPrint,rvidsPreviewCorrection],$1213EB20,$1165C558,False,(1701556, 0, 291882328, 303295264, (1701556, 0), (291882328, 303295264)),rvcmPrinterColor,$118199E8,nil,nil,0,0,1,False,False,0)
RVTable.TRVTableItemInfo.Print($1165D3A8,43,38,875,True,False,True,(1701812, 1, 0, 1, 875),???,rvcmPrinterColor,$118199E8,0,1,False)
PtRVData.TCustomPrintableRVData.DrawPage(1,1,$1165D3A8,True,False,True)
PtRVData.TPrintableRVData.DoPagePrepaint($1165D3A8,1,True,False,True,True)
PtRVData.TCustomPrintableRVData.DrawPage(1,1,$1165D3A8,True,False,True)
PtRVData.TCustomMainPtblRVData.DrawPage(???,???,$1165D3A8,True,False,True)
PtblRV.TCustomPrintableRV.DrawPage(1,$1165D3A8,True,False,True)
PtblRV.TRVPrint.DrawPage(1,$1165D3A8,False)
RichViewPatch.TRVPrint.SaveAsPDF(???)
Note that at this moment I use also a TRVPrintPreview, and SaveAsPDF is called when I click on a toolbar button to export the preview to a PDF file

Re: strange bug in TRVHeaderFooterRVData.DrawBackToBitmap

Posted: Fri Nov 25, 2022 12:27 pm
by tothpaul
I don"t use backgrounds...is that correct to add a "FParaStyle := nil" after "FDrawITem := nil" at the end of DrawPage ? because it fix the problem.

Re: strange bug in TRVHeaderFooterRVData.DrawBackToBitmap

Posted: Fri Nov 25, 2022 12:55 pm
by Sergey Tkachenko
Try assigning
FParaStyle := nil;
at the very end of procedure DrawParagraph (that is defined inside TCustomPrintableRVData.DrawPage).
Does it help?
If not, please send me a document where this problem happens to email richviewgmailcom.