Ver Mensaje Individual
  #2  
Antiguo 23-11-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Reputación: 22
Héctor Randolph Va por buen camino
Hola Jesús.

Bueno, me ha confundido bastante tu mensaje, de hecho no entiendo tu pregunta, lo que es más no veo ninguna pregunta.

Así que ahora pregunto yo, ¿Lo que realmente quieres es utilizar un formulario personalizado para mostrar la vista previa de un reporte?

Porque, según el título tu pregunta es referente a QRCreateList


Bueno responderé a la cuestión del formulario personalizado:

Tienes que crear una interfaz para mostrar el formulario, esto lo consigues derivando de la clase TQRPreviewInterface y creando los métodos Show y ShowModal

Paso 1:
Código Delphi [-]
TQRCustomPreviewInterface = class(TQRPreviewInterface)
  public
    function Show(AQRPrinter : TQRPrinter) : TWinControl; override;
    function ShowModal(AQRPrinter : TQRPrinter): TWinControl; override;
  end;

no olvides incluir a QRPrntr en uses.

Después implementas los métodos Show y ShowModal
Paso 2

Código Delphi [-]
function TQRCustomPreviewInterface.Show(AQRPrinter: TQRPrinter): TWinControl;
var
  frm : TCustPreview;
begin
  frm := TCustPreview.Create(Application, AQRPrinter);
  frm.Show; 
  Result := frm;
end;

function TQRCustomPreviewInterface.ShowModal(AQRPrinter: TQRPrinter): TWinControl;
var
  frm : TCustPreview;
begin
  frm := TCustPreview.Create(Application, AQRPrinter);
  frm.ShowModal; 
  Result := frm;
end;

En el código anterior donde aparece TCustPreview coloca el nombre de tu formulario personalizado.

Esto lo puedes guardar un una unit por separado.

Después tienes que registrar la interface con la función RegisterPreviewClass que se encuentra en la unidad QRPrntr no olvides incluirla en uses.

Paso 3:

Código Delphi [-]
RegisterPreviewClass(TQRCustomPreviewInterface);

Este código lo pones al iniciar tu aplicación, con esto lográs que cada vez que invoques al método Preview o PreviewModal se hace una llamada a tu formulario.

Una cosa más, debes redefinir el constructor de tu formulario personalizado para que responda correctamente, esto lo lográs con el siguiente código.

Código Delphi [-]
{$WARNINGS OFF}
  TCustPreview = class(TForm)
    QRPreview1: TQRPreview;
    procedure CustPreviewClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    fQRPrinter : TQRPrinter;
  public
    { Public declarations }
    constructor Create(AOwner : TComponent; AQRPrinter : TQRPrinter); virtual;
  end;
{$WARNINGS ON}


constructor TCustPreview.Create(AOwner: TComponent;AQRPrinter: TQRPrinter);
begin
  inherited Create(AOwner);
  fQRPrinter := AQRPrinter;
  QRPreview1.QRPrinter := AQRPrinter;
end;

procedure TCustPreview.CustPreviewClose(Sender: TObject;var Action: TCloseAction);
begin
  fQRPrinter.ClosePreview(Self);
  Action := caFree;
end;

Espero que sea útil, un saludo
Responder Con Cita