![]() |
Drucken mittels des PrintDlgEx-Dialogs
Hallo,
"PrintDlgEx" hat ja einige Vorteile gegenüber der nur PrintDlg-Funktion, aber leider findet man hier im Forum so gut wie nichts darüber. Irgendwie scheint auch diese Funktion in der CommDlg-Unit nicht berücksichtigt zu sein. Warum, geht die nicht mit Delphi? Bzw.: Ist es schonmal jemandem gelungen die zu nutzen? Wenn ja, wie? Thx im Voraus, rXdY |
Re: Drucken mittels des PrintDlgEx-Dialogs
woran scheiterst du?
Zitat:
|
Re: Drucken mittels des PrintDlgEx-Dialogs
Zitat:
|
Re: Drucken mittels des PrintDlgEx-Dialogs
Wenn die Funktion nicht in einer Unit definiert ist könntest du sie selbst definieren. Woher weißt du von der Funktion? Aus dem MSDN?
|
Re: Drucken mittels des PrintDlgEx-Dialogs
Zitat:
Zitat:
|
Re: Drucken mittels des PrintDlgEx-Dialogs
Übersetz dir doch die Funktion aus der
![]() |
Re: Drucken mittels des PrintDlgEx-Dialogs
Also, habe es jetzt doch mal versucht, die Funktion selbst zu definieren. Leider aber gibt's bei der Zeile des eigentlichen Funktionsaufrufes dann eine Exception. Hier erstmal der bis dahin nötige Code:
Delphi-Quellcode:
const
PD_ALLPAGES = $00000000; PD_SELECTION = $00000001; PD_PAGENUMS = $00000002; PD_NOSELECTION = $00000004; PD_NOPAGENUMS = $00000008; PD_COLLATE = $00000010; PD_PRINTTOFILE = $00000020; PD_PRINTSETUP = $00000040; PD_NOWARNING = $00000080; PD_RETURNDC = $00000100; PD_RETURNIC = $00000200; PD_RETURNDEFAULT = $00000400; PD_SHOWHELP = $00000800; PD_ENABLEPRINTHOOK = $00001000; PD_ENABLESETUPHOOK = $00002000; PD_ENABLEPRINTTEMPLATE = $00004000; PD_ENABLESETUPTEMPLATE = $00008000; PD_ENABLEPRINTTEMPLATEHANDLE = $00010000; PD_ENABLESETUPTEMPLATEHANDLE = $00020000; PD_USEDEVMODECOPIES = $00040000; PD_USEDEVMODECOPIESANDCOLLATE = $00040000; PD_DISABLEPRINTTOFILE = $00080000; PD_HIDEPRINTTOFILE = $00100000; PD_NONETWORKBUTTON = $00200000; PD_CURRENTPAGE = $00400000; PD_NOCURRENTPAGE = $00800000; PD_EXCLUSIONFLAGS = $01000000; PD_USELARGETEMPLATE = $10000000; type TPrintDlgEx = record lStructSize : Cardinal; hWndOwner : HWnd; hDevMode : Cardinal; hDevNames : Cardinal; hDC : HDC; Flags : Cardinal; Flags2 : Cardinal; ExclusionFlags : Cardinal; nPageRanges : Word; nMaxPageRanges : Word; lpPageRanges : Pointer; nMinPage : Word; nMaxPage : Word; nCopies : Word; hInstance : Cardinal; lpPrintTemplateName : PAnsiChar; lpCallback : Pointer; nPropertyPages : Cardinal; lphPropertyPages : Cardinal; nStartPage : Cardinal; dwResultAction : Cardinal; end; type TPrintDlgExFunc = function (Pdex : TPrintDlgEx): DWord; stdcall; procedure TForm1.Button1Click(Sender: TObject); var hComDlg32 : THandle; PrintDlgEx : TPrintDlgExFunc; pdex : TPrintDlgEx; begin hComDlg32 := LoadLibrary('comdlg32.dll'); if hComDlg32 <> 0 then begin @PrintDlgEx := GetProcAddress(hComDlg32,'PrintDlgExA'); if Assigned(PrintDlgEx) then begin ZeroMemory(@pdex, sizeof(TPrintDlgEx)); pdex.lStructSize := sizeof(TPrintDlgEx); pdex.hWndOwner := Handle; pdex.Flags := PD_ALLPAGES or PD_NOPAGENUMS ; pdex.nCopies := 1; PrintDlgEx (pdex); // <--- Exception hier!!! end; FreeLibrary(hComDlg32); end; end; Event. sieht ja irgendjemand, wo da ein Fehler sein könnte :roteyes: |
Re: Drucken mittels des PrintDlgEx-Dialogs
verrätst du uns auch noch die Exception? Ich würde darauf tippen das der record packed sein sollte (also anstele von "record" einen "packed record" nehmen)
|
Re: Drucken mittels des PrintDlgEx-Dialogs
Vielleicht erwartet die Funktion einen Pointer
|
Re: Drucken mittels des PrintDlgEx-Dialogs
Jepp, steht zumindest so im MSDN.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz