想调用printdly打印对话框,却又不知如何调用,请大家告诉我吧,谢谢了。

解决方案 »

  1.   

    更详细用法可以看看Dialogs.pas
    里TPrintDialog.Execute的实现转贴:
    用API直接打印 
    uses CommDlg; {$IFNDEF WIN32} 
    const MAX_PATH = 144; 
    {$ENDIF} procedure TForm1.Button1Click(Sender: TObject); 
    var 
    Pd : TPrintDlg; 
    DocInfo: TDocInfo; 
    begin 
    FillChar(Pd, sizeof(Pd), #0); 
    Pd.lStructSize := sizeof(Pd); 
    Pd.hWndOwner := Form1.Handle; 
    Pd.Flags := PD_RETURNDC; 
    if PrintDlg(pd) then begin 
    FillChar(DocInfo, sizeof(DocInfo), #0); 
    DocInfo.cbSize := SizeOf(DocInfo); 
    GetMem(DocInfo.lpszDocName, 32); 
    GetMem(DocInfo.lpszOutput, MAX_PATH); 
    lStrCpy(DocInfo.lpszDocName, 'My Document'); 
    {Add this line to print to a file } 
    lStrCpy(DocInfo.lpszOutput, 'C:\Download\Test.doc'); 
    StartDoc(Pd.hDc, DocInfo); 
    StartPage(Pd.hDc); 
    TextOut(Pd.hDc, 100, 100, 'Page 1', 6); 
    EndPage(Pd.hDc); 
    StartPage(Pd.hDc); 
    TextOut(Pd.hDc, 100, 100, 'Page 2', 6); 
    EndPage(Pd.hDc); 
    EndDoc(Pd.hDc); 
    FreeMem(DocInfo.lpszDocName, 32); 
    FreeMem(DocInfo.lpszOutput, MAX_PATH); 
    end; 
    end;
      

  2.   

    是这样的,我只需要按一下按钮,就弹出一个打印机设置的对话框窗口,用来实现自定义设置纸张大小。printdlg应该就是windows设置打印机的对话框吧,我想调用它来行进设置,而不是用它进行打印,打印的话我用的是TPrinter类。sdzeng(大头鸟),好象理解错我的意思了,我只想把这个对话框调用出来,谢谢。
      

  3.   

    楼主好像没有试过吧把上面的代码Pd.Flags := PD_RETURNDC;
    改成Pd.Flags := PD_PRINTSETUP 就可以看到设置打印机页面
    具体Flags的含义去看看帮助----------------------------------------------
    uses CommDlg; {$IFNDEF WIN32} 
    const MAX_PATH = 144; 
    {$ENDIF} procedure TForm1.Button1Click(Sender: TObject); 
    var 
      Pd : TPrintDlg; 
      DocInfo: TDocInfo; 
    begin 
      FillChar(Pd, sizeof(Pd), #0); 
      Pd.lStructSize := sizeof(Pd); 
      Pd.hWndOwner := Form1.Handle; 
      Pd.Flags := PD_RETURNDC;//返回打印机设口 
      //Pd.Flags := PD_ALLPAGES; //显示所有页面
      //Pd.Flags := PD_PRINTSETUP;//显示设置打印机页面  if PrintDlg(pd) then //显示对话框
      begin
           
      end; 
    end;