WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));
        //WordApplication1.Options.CheckSpellingAsYouType := False;
        //WordApplication1.Options.CheckGrammarAsYouType := False;
        WordDocument1.PrintOut;
        finally
        WordDocument1.Close;
        SaveChanges := WdDoNotSaveChanges;
        WordApplication1.Quit(SaveChanges);
        WordApplication1.Disconnect;
谁写过类似的代码?WordApplication1.Disconnect的时候,如果打印还没有完成的话,会提示是否取消打印。我的东西里word是始终在后台,完全看不到的。我不想看到这样的对话框。虽然可以sleep来解决,但有没有好一点的办法呢?在ExcelApplication1.Disconnect的时候却没有这样的问题?

解决方案 »

  1.   

    你何必让Word打印,你让它预览下,让用户决定是否打印嘛!
    不过我的情况是在自己的程序里调用word打印预览
      

  2.   

    wordapplication1.visible:=false;
    就可以看不到word,而所有的功能不影响.
      

  3.   

    //有网友问起怎么解决的,这是我后来改的整个function,现在看看垃圾得很。仅供参考。//因为要指定虚拟打印机打印,打印成文件到某个地方,所以,看代码的请注意。看不懂别骂娘。function tForm1.convertToTiffOle(const fname, VPrinter, VPrintPath: string): string;
    var
        tname: string;        //临时文件名
        //fsTemp:SHFILEOPSTRUCT;
        xName: string;       // 扩展名
        //OLE 变量
        ConfirmConversions, ReadOnly, AddToRecentFiles,
        PasswordDocument, PasswordTemplate, Revert,
        WritePasswordDocument, WritePasswordTemplate, Format, Encoding,Visible: OleVariant;    MsWord{, MsDoc} : Variant;  //应用程序对象
        filename: OleVariant;
        ItemIndex :OleVariant;    tpath: string;                //临时路径
        eii, ejj, jll, ill, iji: integer;
        ej : boolean;
        OLEInt: OleVariant;    Device: array[0..255] of Char;        //打印机设备
        Driver: array[0..255] of char;
        Port: array[0..255] of char;
        s : array[0..255] of Char;
        s1: array[0..255] of Char;
        PrChanged: boolean;                    //更改默认打印机标识
        PrIndex: integer;
        hDeviceMode: THandle;    jjjj: integer;
        {tempName,} ttttt, sstate: string;
        //tempfile: file;begin
        begin        sstate:='';
            xName:=ExtractFileExt(fname);           //取扩展名
            if  sametext(XName,'.htm') or sametext(xname, '.html') or sametext(XName,'.dot') or sametext(xname, '.rtf') or sametext(XName,'.doc') or sametext(xname, '.txt')  or sametext(XName,'.wri')  or  (sametext(xName,'.xls')) or (sametext(xName,'.xlt')) or  SameText(xName, '.ppt') or SameTExt(xName, '.pps')  or SameTExt(xName, '.pot')  or SameTExt(xName, '.pre')  then
            begin   // 是支持的文件格式
                try
                  PrChanged:= false;
                  fileName:= fname;
                  PrIndex:= 0;
                  //result:='';
                  while fileInUse(fname) do
                  begin
                        if MessageBox(handle, '该文件已被打开,请先关闭。','无法打开',MB_ReTRYCancel) = IDCancel then
                        begin
                            result:='NoWord';
                            exit;
                            break;
                        end
                        else
                            result:='';
                  end;
                  {for i := 0 to pred(Printer.Printers.Count) do
                  begin
                    showmessage(Printer.Printers.Strings[i]);
                  end;}
                  if Printer.Printers.IndexOf(VPrinter) < 0   //找不到参数指定的虚拟打印机。
                  then
                  begin
                      MessageBox(0, '请安装虚拟打印机。', pchar(Vprinter), MB_IconWarning);
                      result:= '';
                      exit;
                  end;
                  if Printer.PrinterIndex < 0      //当前系统没有指定默认打印机
                  then  Printer.PrinterIndex := Printer.Printers.IndexOf(VPrinter)   //直接指定虚拟打印机为系统默认打印机,不做标记
                  else    //系统指定了默认打印机
                  if Printer.PrinterIndex <> Printer.Printers.IndexOf(VPrinter)    //默认打印机不是参数指定的虚拟打印机
                  then
                  begin
                      Printer.GetPrinter (Device, Driver, Port, hDeviceMode);      //取当前默认打印机信息,用于打印完毕后恢复此值。
                      StrCopy (s1, Device);
                      StrCat (s1, ',');
                      StrCat (s1, Driver);
                      StrCat (s1, ',');
                      StrCat (s1, Port);
                      PrIndex:= Printer.PrinterIndex;
                      Printer.PrinterIndex := Printer.Printers.IndexOf(VPrinter);    //更改默认打印机为参数指定的虚拟打印机                  Printer.GetPrinter (Device, Driver, Port, hDeviceMode);    //取新的默认打印机信息用于发消息通知系统。
                      StrCopy (s, Device);
                      StrCat (s, ',');
                      StrCat (s, Driver);
                      StrCat (s, ',');
                      StrCat (s, Port);
                      WriteProfileString ('windows', 'device', s);
                      StrCopy (s, 'windows');
                      SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@s));    //发消息通知系统,“默认打印机”已更改。
                      PrChanged:=true;                 //设标记为真。
                  end;
                  Xname:=ExtractFileExt(fname);        //求取改扩展为.tif后的文件名。循环以避免原文件中带有'.'号的情况。
            tName := Extractfilename(fName);
            ttttt := 'jimttttt';
            while tName <> ttttt do
            begin
              if ttttt<> 'jimttttt' then tName := ttttt ;
              ttttt := changeFileExt(tname, '');
            end;        tName:=tname + '.tif';