線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1134
推到 Plurk!
推到 Facebook!

Excel列印的問題!

尚未結案
sanhang
一般會員


發表:12
回覆:25
積分:17
註冊:2002-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-12 09:03:26 IP:202.39.xxx.xxx 未訂閱
各位先進,我在執行下面一段程式中 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;
系統時間:2024-05-01 16:30:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!