> > Works like an old rag! > Is it good or bad ? Sorry! A bit of "Australian" crept in there. It means good.
Now, here is a couple of new problems (and hopefully an answer). We have an audit requirement to create a "hard copy" of a thing when its' data is first entered into the system. Since there will be hundreds, if not thousands, of these things I have convinced the auditors to let us create a read-only pdf file rather than chewing up so much paper. Fine, so the requirement now becomes a technical requirement: When a thing is first inserted into the database, automatically print-to-file a gb.report of the data and set its' attribs to -r--r--r-- The first and last bits are not a problem, it's that middle bit "automatically print-to-file a gb.report of the data". Why it is a problem is a bit hard to explain, but here goes. We want no user interaction. So instead of showing the preview form, it has just got to print. In fact we don't even want to see the printer selection form (but I'll get to that later). Tracing through the call stack, I get to CPrint.PrintReport: 7 Public Sub PrintReport(hReport As Report) 8 9 Dim hSizeParse As TSizeParse 10 11 $hPrint = hReport.Clone() 12 hPrinter.Paper = $hPrint.Paper 13 hPrinter.Orientation = $hPrint.Orientation 14 If $hPrint.Paper = Printer.Custom Then 15 hSizeParse = New TSizeParse($hPrint.Width) 16 hPrinter.PaperWidth = hSizeParse.ToCm() / 10 17 hSizeParse = New TSizeParse($hPrint.Height) 18 hPrinter.PaperHeight = hSizeParse.ToCm() / 10 19 Endif 20 If Not hPrinter.Configure() Then 21 hPrinter.Print 22 Endif 23 24 End The first issue is at line 11, I can't understand why you create a clone of the report object and it creates a problem as follows: Report.Clone invokes the _new() method in the actual report class. However, our _new method requires a parameter, the database record id for the "thing" we want to print. So we get a "not enough parameters" error. (I tried getting around this by using a "Run(id)" method, but of course this never gets invoked in the cloned object and thus we get a blank report.) I have changed line 11 to 11 $hPrint = hReport '.Clone() locally and everything still works. But I am a bit scared that there is something I don't know about that requires that cloning to occur. Is there? Now we get to line 20. This is a bit unconditional! We need a way to skip running the preview. Anyway, after a bit of mucking about I decided that Report needed two new properties (DefaultPrinter and ShowPreview) and CPrint needed some changes. I have attached a gzip of these classes. See what you think about adding these changes to the base. (Note: it does have that line 11 change.) Basically, ShowPreview defaults to True and since DefaultPrinter will be null, there should be no side effects on existing reports. ShowPreview is set to appear in the IDE Report designer, so it is a simple matter to turn it off or on. DefaultPrinter doesn't appear in the IDE, it is a "code-only" property. What turned out to be "cool" is that just by creating a DefaultPrinter, it automatically selects the users actual default printer (or the system default if the user hasn't got one). So that makes it possible to bypass the Printer.Configure() call and the report will go to the default printer automagically. What I found to be even "cooler" is how to set it to print-to-file. Me.DefaultPrinter = New Printer With Me.DefaultPrinter .Name = "" .OutputFile = "~/print1.pdf" End With in the myreport.class and bingo! i.e. just set the printer name to null and the OutputFile property to wherever you want the report to go. Setting the filename extension magically produces a pdf file, setting it to anything else magically produces a postscript file. regards Bruce
changes.tar.gz
Description: application/compressed-tar
------------------------------------------------------------------------------ CenturyLink Cloud: The Leader in Enterprise Cloud Services. Learn Why More Businesses Are Choosing CenturyLink Cloud For Critical Workloads, Development Environments & Everything In Between. Get a Quote or Start a Free Trial Today. http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user