Excel列印的問題! |
尚未結案
|
sanhang
一般會員 發表:12 回覆:25 積分:17 註冊:2002-08-31 發送簡訊給我 |
各位先進,我在執行下面一段程式中
Btn1為呼叫檔案並執行列印,Btn2為暫停列印,Btn3為取消暫停列印
執行的時候按下Btn1,接下來CreateOLEObject與列印時主程式畫面就會出不來
所以我想將MsExcel.ActiveWindow.SelectedSheets.PrintOut放在執行緒中處理
問題是這行程式應該會放在Synchronize中,那不就跟沒用執行緒一樣?
遇到這樣的情況,該如何處理呢?
procedure TForm1.Button1Click(Sender: TObject); begin try MsExcel := CreateOleObject('Excel.Application'); MsExcelWorkBook := MsExcel.WorkBooks.open(ExtractFilePath(Application.EXEName) 'sample.xls'); except MessageDlg('Can''t Open Excel!!', mtWarning, [mbOK], 0); Exit; end; MsExcel.Worksheets['sheet1'].PageSetup.LeftMargin := MsExcel.InchesToPoints(0); MsExcel.Worksheets['sheet1'].PageSetup.RightMargin := MsExcel.InchesToPoints(0); MsExcel.Worksheets['sheet1'].PageSetup.TopMargin := MsExcel.InchesToPoints(0.984251968503937); MsExcel.Worksheets['sheet1'].PageSetup.BottomMargin := MsExcel.InchesToPoints(0.984251968503937); MsExcel.Worksheets['sheet1'].PageSetup.HeaderMargin := MsExcel.InchesToPoints(0.511811023622047); MsExcel.Worksheets['sheet1'].PageSetup.FooterMargin := MsExcel.InchesToPoints(0.511811023622047); MsExcel.Worksheets['sheet1'].PageSetup.PrintHeadings := False; MsExcel.Worksheets['sheet1'].PageSetup.PrintGridlines := False; MsExcel.Worksheets['sheet1'].PageSetup.PrintComments := -4142; // xlPrintNoComments MsExcel.Worksheets['sheet1'].PageSetup.Orientation := 1; // xlPortrait MsExcel.Worksheets['sheet1'].PageSetup.PaperSize := 1; // xlPaperLetter MsExcel.Worksheets['sheet1'].PageSetup.FirstPageNumber := -4105; // xlAutomatic MsExcel.ActiveWindow.SelectedSheets.PrintOut(EmptyParam,EmptyParam,1,EmptyParam,MyPrinterName,EmptyParam,True,EmptyParam); MsExcel.Quit; MsExcel := Null; end; procedure TForm1.Button2Click(Sender: TObject); begin PausePrinter(MyPrinterName); // 暫停列印 end; procedure TForm1.Button3Click(Sender: TObject); begin ResumePrinter(MyPrinterName); // 取消暫停列印 end; // 將指定的印表機暫停列印 function TForm1.PausePrinter(PrinterName:string):Boolean; var p: Cardinal; begin result:=False; if OpenPrinter(pchar(PrinterName),p,nil) then begin If not SetPrinter(p,0,NIL,PRINTER_CONTROL_PAUSE) then begin showmessage(SysErrorMessage(GetLastError)); end else Result:=true; ClosePrinter(p); end; end; // 將指定的印表機取消暫停列印 function TForm1.ResumePrinter(PrinterName:string):Boolean; var p: Cardinal; begin result:=False; if OpenPrinter(pchar(PrinterName),p,nil) then begin If not SetPrinter(p,0,NIL,PRINTER_CONTROL_RESUME) then begin showmessage(SysErrorMessage(GetLastError)); end else Result:=true; ClosePrinter(p); end; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |