发信人: wpf (Itouchthebluesky), 信区: BorlandDev
标  题: quickreport q/a 5
发信站: 哈工大紫丁香 (2001年06月09日20:09:41 星期六), 站内信件


Q.  The report title is being truncated in the Windows Print Manager.
A.  This is not a QuickReport bug, it is a VCL bug.  If you look at the sour
ce code, we define the ReportTitle as string.  It gets passed to the TQRPrin
ter.Title property, which is also defined as string.  We pass that the TPrin
ter.Title property and it gets used in TPrinter.BeginDoc where it passed to 
CTitle, which is an array of 32 bytes.  This issue was addressed in Delphi 5
.
------------------
Q.  When I set the page range the report continues processing until I press 
cancel. Only the pages selected print and that is what I want, but why does 
it continue to process?
A.  That is a limitation of the current design of QuickReport and will be ad
dressed in a future release.
------------------
Q.  We are trying to print reports in TEXT mode (in a dot matrix printer). W
hen we use the Generic/Text Only printer from Windows it works, but it only 
prints the first 80 characters of each row. What can we do to print all the 
characters from the row?
A.  That is the designed behavior of the Generic/Text Only printer driver.  
It truncates the text at to size of the paper.  If you use a wider paper siz
e (like Ledger), you may be able to get more of the text.
------------------
Q.  Is there any way to prevent QuickReport from doing a page eject (form fe
ed) at the end of a page or print job?
A.  As long as you use printing via the windows printer driver (TPrinter and
 TQRPrinter both use this) there is no way to avoid the page eject after the
 print job has finished. This behavior has been built by MS into the printer
 driver design, for a good reason. The system has to be able to deal with se
veral apps running in parallel printing all to the same printer and it assum
es that each job starts on a new page.
------------------
Q.  How do I print to a file without changing the printer's setup, or gettin
g a prompt for a file to print to?
A.  This is the title of a FAQ from the Inprise Delphi Developer support pag
e.  This question is answered at http://www.inprise.com/devsupport/delphi/qa
nda/1599.html
------------------
Q.  When you look in the queue for a print job, Quick Report print jobs have
 no name.  How can I give a Quick Report printout it a name for the queue?
A.  Did you set the ReportTitle property of the report?  This gets passed to
 the TPrinter object when you print and that value will be used as the name 
of the print job.
------------------
Q.  I have a PC with a HP692C deskjet printer as default and when I try to p
rint QuickReport raise the error : Printer index is not valid. Only with thi
s printer.
A.  This message doesn't come from QuickReport, it comes from the Delphi pri
nters unit.  You can get this message if you try to specify a printer option
 that the printer driver does not accept.  If you copy the printers unit (if
 you have the VCL source code) to your project directory and add it to the p
roject, you put break points in it to see which setting is causing your prob
lem.
------------------
Q.  I get a printer error when I print a range of pages.
A.  There is a known problem where a range of pages will cause an error when
 you have controls that cause a band to stretch.  The length of a band that 
stretches is not known until the band is actually printed.  If pages are ski
pped, the page count is off and report throws an error.  This will be addres
sed in a future release.
------------------
Q.  I am setting the control's font to Arial but it is printing as Courier (
or vice versa).
A.  Check the control's Font.Pitch property.  If you select Arial and set th
e pitch to fpFixed, Windows will substitute the closest match that supports 
that pitch.
------------------
Q.  I can't get the Bin Selection for quick reports to work. No matter what 
I try, everything goes to the same bin. How do you select output bins?
A.  You should be setting the report's PrinterSettings.Outputbin property to
 the bin that you want to use.  Only the bins listed on the manual page for 
the outputbin property (5-121) can be selected.  Device specific bins are no
t supported at this time.  If the printer's default bin is a device specific
 bin, you may have to set to another bin in order for QR2 to be able to sele
ct a bin.
------------------
Q.  I am trying to layout my report to print using the Generic/Text Only dri
ver, but I am having trouble getting the text to line up and blank lines get
 inserted into the printout.
A.  This is what I do when I am designing a report for the Generic/Text only
 driver.
Set the report units to Characters.
Set the report font to 'Courier New' and the size to 10.
Set the height of the band to slightly less than the height of the text cont
rols.  The default height of the QRDBText control is 17 when I use these set
tings.  I set the detailband height to 16.  This should eliminate any extra 
blank lines from the output.
------------------
Q.  I don't see the progress window during the print when I use:
myreport.quickrep1.Prepare;
myreport.quickrep1.QRPrinter.Print;
myreport.quickrep1.QRPrinter.Free;
myreport.quickrep1.QRPrinter := nil;
How do I enable the progress window using the above code?
A.  The progress windows is not applicable to that method as the report is n
ot being generated at print time.  The report was rendered to a metafile wit
h the prepare method and the print method is just copying the metafile to th
e printer.
------------------
Q.  I'm getting a 'Printer is not currently printing' error when I try to pr
int a report, I have not been able to find a reason for this, it only happen
s with certain reports. (Others print without problems)
A.  Check the report.printersettings.FirstPage and the report.printersetting
s.LastPage properties.  If they are set to values outside of the number of a
ctual pages in the report, you will get this error at runtime.
------------------
Q.  The printout doesn't match the preview exactly.
A.  We use Windows API calls to get the font height and width information ba
ck and some fonts do not return the correct information.
------------------
Q.  I have a report that prints fine on a HPIII printer but not on the HP4. 
 Either the text is missing, or the bands print black.
A.  There have been many reports of problems with the HP4 (and HP5) printers
.  You should make sure that you are using the current driver from HP's web 
site (http://www.hp.com/cposupport/jsnav/prhome.html).  You may also need to
 check the page protect option in the printer driver and/or set the DPI to 3
00.
------------------
Q.  The output from preview is correct, but printing from the preview does n
ot print all of the data or the data has values from the last run of the rep
ort.
A.  If the problem is only when you print from a preview, then you will need
 to reset your data (datasets and/or variables) in the BeforePrint event of 
the QuickReport.  This event gets called whenever the report needs to be gen
erated.
When the report is regenerated, sometimes you will have to reset your datase
t.  One example is if the dataset has a memo and you are connected to a SQL 
database server like Oracle.  The problem seems to be in the BDE's BLOB cach
ing.
Another situation would be if you are using OnNeedData and that event is con
trolled by a variable that needs to be initialized at the start of the repor
t.
------------------
Q.  How can I tell how the user exits the report's PrinterSetup method?  It 
does not pass back the status.
A.  You can test the value of report's tag property (with version 2.J or new
er) after calling PrinterSetup and if it's 1, then they selected OK.
Many users have asked for the ability to print automatically if the user sel
ects OK from PrinterSetup.  You would code that like this:
  with frmReport.quickrep1 do
  begin
    PrinterSetup;
    if tag = 0 then
      print;
  end;
To do this in the preview will require using a custom preview and passing in
 a reference to the calling report to the preview.  That will allow you to c
all PrinterSetup and be able to check the tag value.  We have a sample previ
ew that does this and it is available upon request.
------------------
Q.  How can I check to see if the user cancelled the printing of a report?
A.  You can use the AfterPrint of the report to set a flag as it will only g
et called if the report prints to completion.
A.  (QR3) The report has a Cancelled property that gets set to True if the u
ser cancels a report (preview only, not the printout).
------------------
Q.  How do I determine the paper size of the printer at runtime?
A.  If you use the following code before you call your report, you can speci
fy the default size:
with TQRPrinter.Create do
begin
  Printerindex := -1;
  QuickRep1.Page.PaperSize := PaperSize;
  Free;
end;
This assumes that you are using the default printer and your report is named
 QuickRep1.
------------------
Q.  After calling QuickRep.PrinterSetup to pick a specific printer, what's t
he best way to get the name of the printer that was just chosen?
A.  The printerindex is stored in the report's printersettings.printerindex 
property.  The following example will set the form's caption to the current 
printer for the selected report:
  with TfrmReport.Create(Application) do
  begin
    QuickRep1.PrinterSetup;
    self.caption := printer.printers[QuickRep1.printersettings.printerindex]
;
    QuickRep1.Preview;
    Free;
  end;
------------------
Q.  I can not get the PrintBackground to work. In the preview sample I added
 a menu with the code:
procedure TMain.PrintBackground1Click(Sender: TObject);
var
  aForm : TReport1Form;
begin
  Application.CreateForm(TReport1Form, aForm);
  aForm.QuickRep1.PrintBackground;
  aForm.Free;
end;
When the PrintBackground method is called an exception is raised.
A.  You are freeing the report while it is printing in the background.  You 
can't free the report until it has finished printing.  The following example
 creates a report, calls PrintBackground, and then waits until it has finish
ed before freeing the report:
Application.CreateForm(TfrmGroupTest, frmGroupTest);
with frmGroupTest do
begin
  QuickRep1.PrintBackground;
  while QuickRep1.QRPrinter.Status <> mpBusy do
    Application.HandleMessage;
  while QuickRep1.Available = False do
    Application.HandleMessage;
  Free;
end;
------------------
Q.  We have an application, that prints a form developed in QR 2.0i. During 
development we used a LEXMARK printer an everything worked fine. But our cus
tomer have another printer a Kyocera, on that printer the print doesn't work
.
A.  One thing to look at is how complicated your form is and how much memory
 is in each printer.  QuickReport renders each page to the printer canvas su
pplied by the printer driver.  If the printer resolution is set too high and
 it doesn't have enough ram to render the entire page, you will get garbled 
or missing output, depending on the printer and/or driver.  One way to verif
y that this is the problem would be to lower the printer's resolution throug
h it's driver and then try to print the report.
------------------
Q.  I'm trying to write a report that gets printed to the windows generic te
xt-only printer driver.  Some lines move around when it is actually printed.
  Do you have any ideas?
A.  Try setting the report's font to "Courier New" at size 10.  Then set the
 height of the band to 16 and if that cleans up the output.  To save paper w
hile testing this, set the printer driver's destination to "FILE:"
------------------
Q.  How can I send control chars to the printer with Quickreport?
A.  QuickReport uses the Windows printer driver GDI calls to output data, it
 does not support sending escape codes directly to the printer.  You could u
se the ASCII text export filter to save the report as text.  You would then 
insert your printer escape sequences into that file and then copy that file 
to printer port.
------------------
Q.  I can't set the printer at runtime, I get an exception if I use the foll
owing syntax:
Quickrep1.Printersettings.printerindex := Quickrep1.printer.printers.Indexof
('HP LaserJet 4 on LPT1:');
A.  QuickReport does not create it's printer until it needs it, you'll need 
to use a regular printer object that Delphi will initialize for you. the fol
lowing code will work:
Quickrep1.Printersettings.printerindex :=printer.printers.Indexof('HP LaserJ
et 4 on LPT1:');
------------------
Q.  How can let the users select the printer before running the report?
A.  If you call the Report's PrinterSetup method, this will set the printer 
settings for the report before you run it.  You could do it like:
  with frmReport do
  begin
    QuickRep1.PrinterSetup;
    QuickRep1.Preview;
  end;
------------------
Q.  I retrieve the values of the Delphi PrinterSetupDialog and when I use th
e printerindex returned by it, I get the error: PRINTER INDEX OUT OF RANGE
A.  There is a bug in the Delphi printer setup dialog that causes it to crea
te new instances of printers in the printer list. QuickReport 2.0i (and late
r) includes a fixed printer dialog in the qrprnsu unit. Please use that inst
ead of Delphi's dialog.
------------------
Q.  When I change the printerindex, I can't select the right paper size.
A.  There is a problem in the printers unit where when the printerindex inde
x is changed, the new printer "inherits" the properties of the previous prin
ter.  With the 2.0j release, we now reset the printer driver when the printe
rindex is changed.
------------------
Q.  When I use Printer Settings from within QuickReport, it suggests me to w
rite out all 10000 pages, even though my report contain only 10-15 or so...
A.  This is a cosmetic bug (the report will never print out anything past th
e last page) and this will be fixed in a future release.
------------------
Q.  I can't select a tray for HP printers
A.  The printer dialog QuickReport uses is a standard print setup dialog. Qu
ickReport defaults to the Default tray defined in Windows. I believe the pro
blem with some printer drivers (LJ5/6) is that they try to redefine the tray
 order. We will look for a solution to this for a later version.
One work around is to use the LaserJet III driver when printing with QuickRe
port.
------------------
Q.  How do I the printer properties if I use my own printersetup dialog box?

A.  Please see the TQuickRep.PrinterSetup method in quickrpt.pas for code sh
owing how to set the printer to what was selected in the setup dialog.
------------------
Q.  I get an extra blank page when I print a range of pages.
A.  The extra blank page is a known issue and was addressed in the 2.0k rele
ase.
------------------
Q.  Why do the Properties QRPrinter.Canvas.TextHeight and TextWidth return a
lways zero value when running in 16 bits?
A   The QRprinter.Canvas is a standard metafile in Delphi 1 and a standard m
etafile doesn't support these functions. Enhanced metafiles in Delphi 2/3 do
es.
------------------
Q.    The report prints under Win95 but not under Win 3.1
A.  This is probably a printer driver problem even though they use the lates
t driver. A possible solution might be to try to blank the QRPrinter.OnGener
ateToPrinter event to see if that helps.
A workaround is to clear the QuickRep.QRPrinter.OnGenerateToPrinter event, s
etting it to NIL when the preview is brought up. This will force QR to print
 the generated metafiles instead of generating the report all over directly 
to the printer. The down side is that you might experience a slight scaling 
of the report page and that images might have a lower resolution.
------------------

--
据说呆娃儿不笨

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.245.166]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:205.451毫秒