请问如何调用windowsapi中的一个函数printdlg 想调用printdly打印对话框,却又不知如何调用,请大家告诉我吧,谢谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 更详细用法可以看看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; 是这样的,我只需要按一下按钮,就弹出一个打印机设置的对话框窗口,用来实现自定义设置纸张大小。printdlg应该就是windows设置打印机的对话框吧,我想调用它来行进设置,而不是用它进行打印,打印的话我用的是TPrinter类。sdzeng(大头鸟),好象理解错我的意思了,我只想把这个对话框调用出来,谢谢。 楼主好像没有试过吧把上面的代码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; Fast Report一个报表设计 外面的公司都用那些控件? 刚好过半年再升一星,再散散分874一下.---[散分贴] 切换用户后delphi的组件面板上的所有组件都没有了 一个简单的关于插入数据到数据库的问题 DCOM和COM+有什么区别啊? 关于ActionManager和ActionMainMenuBar的问题 难度极大:如何用DELPHI调用CAD图纸 真是急死人呀 MDI的标题栏 有个问题就高手指教,有关setLength函数 ScriptControl delphi代码通不过
里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;
改成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;