Ver Mensaje Individual
  #13  
Antiguo 16-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Desde ese código no podemos saber si las consultas o Tablas asociadas al QuickReport están abiertas o no.

Suponer que el usuario ha dado un clic en el ListBox antes de pulsar el boton 1, no está bien, sugiero que añadas:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var xinforme: TQuickRep;
begin
if listbox1.itemindex <>-1 then
begin
  xinforme:=TQuickRep(listbox1.Items.Objects[listbox1.ItemIndex]);
  xinforme.print
end
else
  ShowMessage('seleccione un listado');
end;

Ya que estoy con sugerencias , la próxima vez que pongas un código, utiliza
[ delphi ] y [ /delphi] en lugar de "code", como ves, sale más bonito

El error que te está dando (216) es un error de protección general. El problema es que el .dpr (Project --> View Source) será más o menos como este:
Código Delphi [-]
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
Y usas la Creación automatica de ventanas.

En Application.Initalize, es donde se encarga de inicializar (zona de initialization) las unidades que forman el proyecto, pero todavía no se han creado ni Form1 ni Form2; como tienes:
Código Delphi [-]
initialization
 form1.ListBox1.Items.AddObject('QuickRep1', form2.QuickRep1);
y Form1 todavía no se ha creado, obtienes el error.

Obviamente la forma de trabajar de roman no coincide con la tuya. Esa linea la puedes poner en el evento OnCreate del Form2 y ahora si funciona correctamente, (quitandola de la zona initialization).

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita