The following example shows how to hide the print button in a custom preview window. The article below explains the plugin archetecture of the previewer and how to create your own custom previewers.
----------------------------------------- Article: Creating a Preview Plugin -----------------------------------------
Q: I've followed the tutorials and registered a Preview Form replacement but that did not affect the TppDesigner's Preview workspace.
A: Do not use the form replacement, but rather, there is a different architecture built into the preview form that is registered by default.
You will need to register a TppPreview descendent. The class you register is used to create the preview controls inside the standard print preview form and the designer preview workspace.
Here is an example of creating a simple custom preview that access the viewer its been assigned in order to change the page color. You can also do more advanced operations such as adding and removing buttons and change the behavior of the preview form. Access the inherited controls via. protected properties and override the virtual methods in order to customize behavior.
Open ppPreview.pas and view the TppPreview class as a guide to create a custom preview descendent.
unit MyPreviewPlugin;
interface
uses ppPreview;
type TMyPreviewPlugin = class(TppPreview) public procedure BeforePreview; override;
end;
implementation
uses Graphics;
procedure TMyPreviewPlugin.BeforePreview; begin inherited BeforePreview;
The PrintButton property is a public property of the TppPreview class. Adding ppPreview to your uses clause should make this property available for a descendent of the TppPreview class. Which version of ReportBuilder are you using? Be sure your library path is correct. Does the example I sent compile correctly?
Sorry, I did not relize you were using an older version of ReportBuilder. The preview plugin archetecture was not in place yet for RB 6. You will need to either upgrade your version of ReportBuilder or create a replacement form for the current preview form. Take a look at the tutorial located in the \RBuilder\Tutorials\Complete\II. Applications\04. End-User with Custom Explorer\... directory for an example of replacing a form in ReportBuilder.
------------------------------------------------------------ Tech Tip: Replacing Built-in Dialogs/Forms in ReportBuilder ------------------------------------------------------------
ReportBuilder has an open architecture for replacing any of the built-in dialogs. You can replace any of the built-in dialogs by creating a new form that inherits from an abstract ancestor and then registering it as the new built-in dialog.
For example to replace ReportBuilder's print dialog you could
1. Create a new Print dialog by renaming ReportBuilder's default print dialog, then doing a SaveAs to save it under another unit name.
The default dialog resides in RBuilder\Source\ppPDlg.pas and the form is called ppPrintDialog. You should assign your form a unique name, for example, myPrintDlg, and save the unit to another name. Also save the unit to the directory where your other forms are stored (not RBuilder\Source).
2. Make desired changes.
You will notice that the print dialog inherits from an ancestor TppCustomPrintDialog - this ancestor resides in ppForms.pas (where all the abstract ancestor forms for ReportBuilder are defined).
3. Register the new form.
Declare an initializtion section at the bottom of the unit:
Now your preview dialog should be automatically created and destroyed by ReportBuilder. The two page preview dialog in the RBuilder\Demos\Reports\Demo.dpro was created this same way. The only difference is the ppRegisterForm call is in then OnClick event of the button.
Comments
The following example shows how to hide the print button in a custom preview
window. The article below explains the plugin archetecture of the previewer
and how to create your own custom previewers.
http://www.digital-metaphors.com/tips/PreviewerHidePrintButton.zip
-----------------------------------------
Article: Creating a Preview Plugin
-----------------------------------------
Q: I've followed the tutorials and registered a Preview Form replacement but
that did not affect the TppDesigner's Preview workspace.
A: Do not use the form replacement, but rather, there is a different
architecture built into the preview form that is registered by default.
You will need to register a TppPreview descendent. The class you register
is used to create the preview controls inside the standard print preview
form and the designer preview workspace.
Here is an example of creating a simple custom preview that access the
viewer its been assigned in order to change the page color. You can also do
more advanced operations such as adding and removing buttons and change the
behavior of the preview form. Access the inherited controls via. protected
properties and override the virtual methods in order to customize behavior.
Open ppPreview.pas and view the TppPreview class as a guide to create a
custom preview descendent.
unit MyPreviewPlugin;
interface
uses
ppPreview;
type
TMyPreviewPlugin = class(TppPreview)
public
procedure BeforePreview; override;
end;
implementation
uses
Graphics;
procedure TMyPreviewPlugin.BeforePreview;
begin
inherited BeforePreview;
Viewer.PageColor := clRed;
end;
initialization
TppPreviewPlugIn.Register(TMyPreviewPlugin);
finalization
TppPreviewPlugIn.UnRegister(TMyPreviewPlugin);
end.
--
Regards,
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
I have adapted code from yours.
The delphi compiler tells me that Undeclared identifier: 'PrintButton'
interface
uses
Classes, Controls, ppPreview;
type
TMyPreviewPlugin = class(TppPreview)
public
constructor Create(aParent: TWinControl); override;
end;
implementation
uses
Graphics;
constructor TMyPreviewPlugin.Create(aParent: TWinControl);
begin
inherited;
PrintButton.Visible := False;
end;
initialization
TppPreviewPlugIn.Register(TMyPreviewPlugin);
finalization
TppPreviewPlugIn.UnRegister(TMyPreviewPlugin);
end.
The PrintButton property is a public property of the TppPreview class.
Adding ppPreview to your uses clause should make this property available for
a descendent of the TppPreview class. Which version of ReportBuilder are
you using? Be sure your library path is correct. Does the example I sent
compile correctly?
--
Regards,
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
Sorry, I did not relize you were using an older version of ReportBuilder.
The preview plugin archetecture was not in place yet for RB 6. You will
need to either upgrade your version of ReportBuilder or create a replacement
form for the current preview form. Take a look at the tutorial located in
the \RBuilder\Tutorials\Complete\II. Applications\04. End-User with Custom
Explorer\... directory for an example of replacing a form in ReportBuilder.
------------------------------------------------------------
Tech Tip: Replacing Built-in Dialogs/Forms in ReportBuilder
------------------------------------------------------------
ReportBuilder has an open architecture for replacing any of the built-in
dialogs. You can replace any of the built-in dialogs by creating a new form
that inherits from an abstract ancestor and then registering it as the new
built-in dialog.
For example to replace ReportBuilder's print dialog you could
1. Create a new Print dialog by renaming ReportBuilder's default print
dialog, then doing a SaveAs to save it under another unit name.
The default dialog resides in RBuilder\Source\ppPDlg.pas and the form is
called ppPrintDialog. You should assign your form a unique name, for
example, myPrintDlg, and save the unit to another name. Also save the unit
to the directory where your other forms are stored (not RBuilder\Source).
2. Make desired changes.
You will notice that the print dialog inherits from an ancestor
TppCustomPrintDialog - this ancestor resides in ppForms.pas (where all the
abstract ancestor forms for ReportBuilder are defined).
3. Register the new form.
Declare an initializtion section at the bottom of the unit:
initialization
ppRegisterForm(TppCustomPrintDialog, TMyPrintDialog);
4. Add the new unit to your project and compile.
Now your preview dialog should be automatically created and destroyed by
ReportBuilder. The two page preview dialog in the
RBuilder\Demos\Reports\Demo.dpro was created this same way. The only
difference is the ppRegisterForm call is in then OnClick event of the
button.
--
Regards,
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com