Club Delphi  
    Paypal   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
  #2  
Antiguo 19-06-2006
Avatar de Elenita
Elenita Elenita is offline
Miembro
 
Registrado: jun 2005
Ubicación: Madrid
Posts: 56
Poder: 22
Elenita Va por buen camino
Solución al problema

Os cuento cómo he solucionado mi problemilla, por si puede ser de utilidad a alguien en el foro.
El problema surge al intantar imprimir un documento word dentro de un OLE Container y seleccionar la impresora. El contenedor está en un formulario modal del que se sale con un botón.
El código que utilizo para imprimir es el siguiente:
Código Delphi [-]
procedure TFEditaWordReadOnly.tbImprimirClick(Sender: TObject);
var a: string;
    Device, Driver, Port: array[0..255] of Char;
    hDeviceMode: THandle;
begin
  Printer.PrinterIndex := -1;
  Device := '';
  Printer.GetPrinter(Impresora, Driver1, Puerto, Modo); //Guarda la impresora predeterminada
  a := OleContainer.OleObject.Application.ActiveDocument.FullName;
  if PrintDialog1.Execute then
    begin
      Printer.GetPrinter(Device, Driver, Port, hDeviceMode);//Guarda la impresora elegida en el dialog
      if Device <> Impresora then CambiaImpresora := true;
      OleContainer.OleObject.Application.Documents.Item(a).Activate;
      a := Device;
      OleContainer.OleObject.Application.ActivePrinter := a;
      OleContainer.OleObject.Application.ActiveDocument.PrintOut;
    end;
end;
(Impresora, Driver1, Puerto, Modo son variables globales)
Al salir del formulario, volvemos a dejar la impresora como estaba. Al intentar hacerlo con SetPrinter aparecía el Access Violation así que si asignamos la impresora al objeto Word del contenedor solucionaremos el problema.
Código Delphi [-]
procedure TFEditaWordReadOnly.ToolButtonSalirClick(Sender: TObject);
var
  Save_Cursor:TCursor;
  a: string;
begin
  Save_Cursor := Screen.Cursor;
  Screen.Cursor := crHourglass;
  try
    modalResult := mrOk;
    if CambiaImpresora then
      try
        a := Impresora;
        OleContainer.OleObject.Application.ActivePrinter := a;
      except
        on E: Exception do ShowMessage('Revise la impresora predeterminada.');
      end;
  finally
    Screen.Cursor := Save_Cursor;
  end;
end;
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 04:13:23.


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