Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-06-2006
Avatar de Elenita
Elenita Elenita is offline
Miembro
 
Registrado: jun 2005
Ubicación: Madrid
Posts: 56
Poder: 19
Elenita Va por buen camino
Access Violation al hacer SetPrinter

Hola a todos:
Haré un resumen (intentaré que sea breve) de lo que estoy haciendo a ver si podéis echarme una mano, porque estoy un poco perdida.
Al imprimir un documento Word dentro de un OleContainer, la impresora predeterminada se cambia por la elegida en el diálogo de impresión. Para evitar que se cambie la impresora por defecto, al hacer show del formulario, guardo en variables el valor de la impresora predeterminada:

Código Delphi [-]
Impresora, Driver1, Puerto: array[0..255] of Char;  
Modo: THandle;

Código Delphi [-]
procedure TFEditaWordReadOnly.FormShow(Sender: TObject);
begin
  Printer.GetPrinter(Impresora, Driver1, Puerto, Modo);
  ShowMessage('Predeterminada : ' + Impresora);
  Showmessage('Driver: ' + Driver1);
  Showmessage('Puerto: ' + Puerto);
end;

Del mismo modo, al salir del formulario, (es un formulario modal y se sale de él con un botón) asigno a la impresora estos valores para poder dejar todo como estaba:

Código Delphi [-]
procedure TFEditaWordReadOnly.ToolButtonSalirClick(Sender: TObject);
var
  Save_Cursor: TCursor;
begin
  Save_Cursor := Screen.Cursor;
  Screen.Cursor := crHourglass;
  try
    modalResult := mrOk;
  finally
    Printer.SetPrinter(Impresora, Driver1, Puerto, Modo);
    Screen.Cursor := Save_Cursor;
  end;
end;

Pues bien, el problema es el siguiente:
Si la impresora predeterminada es una impresora "real" todo funciona perfectamente, pero si la impresora predeterminada es una impresora "virtual", del tipo Acrobar Writer, FinePrint, etc al hacer SetPrinter da un "access violation". Supongo que el problema está en que Modo es null, porque si en lugar de modo pongo un 0 no sale el "access violation"

Código Delphi [-]
Printer.SetPrinter(Impresora, Driver1, Puerto, Modo);

(Esto lo vi en un hilo https://www.clubdelphi.com/foros/showthread.php?t=11875)

Pero si pongo un 0 entonces no vuelve a poner bien la impresora predeterminada.

Tampoco entiendo muy bien las variables del tipo THandle, por lo que no tengo ni idea de lo que estoy haciendo cuando pongo un 0.

¿Alguna idea de como eliminar el Access Violation?

Gracias a todos.

Última edición por dec fecha: 12-06-2006 a las 21:08:24.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Access Violation Carliviris Varios 5 12-05-2006 19:21:45
Access violation at .... Perio Varios 5 07-02-2006 15:50:36
access violation chilenauta Impresión 15 15-12-2004 19:45:51
Access Violation ..... MADV01 Varios 2 24-03-2004 16:01:33
Access violation Giasl Varios 6 07-05-2003 12:35:51


La franja horaria es GMT +2. Ahora son las 09:56:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi