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的时候却没有这样的问题?
//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的时候却没有这样的问题?
不过我的情况是在自己的程序里调用word打印预览
就可以看不到word,而所有的功能不影响.
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';