Elenita
12-06-2006, 13:44:25
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:
Impresora, Driver1, Puerto: array[0..255] of Char;
Modo: THandle;
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:
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"
Printer.SetPrinter(Impresora, Driver1, Puerto, Modo);
(Esto lo vi en un hilo 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.
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:
Impresora, Driver1, Puerto: array[0..255] of Char;
Modo: THandle;
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:
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"
Printer.SetPrinter(Impresora, Driver1, Puerto, Modo);
(Esto lo vi en un hilo 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.