Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Drucken mittels des PrintDlgEx-Dialogs (https://www.delphipraxis.net/124688-drucken-mittels-des-printdlgex-dialogs.html)

r29d43 23. Nov 2008 11:35


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

SirThornberry 23. Nov 2008 11:42

Re: Drucken mittels des PrintDlgEx-Dialogs
 
woran scheiterst du?
Zitat:

Warum, geht die nicht mit Delphi?
Wieso sollte die nicht mit Delphi funktionieren? Der Funktion sollte es egal sein mit welchem compiler das Programm erstellt wurde.

r29d43 23. Nov 2008 11:47

Re: Drucken mittels des PrintDlgEx-Dialogs
 
Zitat:

Zitat von SirThornberry
woran scheiterst du?

irgendwie scheint Delphi die Funktion gar nicht zu kennen (=undefinierter Bezeichner), oder in welcher Unit könnte die (und deren Konstanten) sonst erwähnt sein (außer CommDlg)?

SirThornberry 23. Nov 2008 12:22

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?

r29d43 23. Nov 2008 12:40

Re: Drucken mittels des PrintDlgEx-Dialogs
 
Zitat:

Zitat von SirThornberry
Wenn die Funktion nicht in einer Unit definiert ist könntest du sie selbst definieren.

...was aber natürlich auch sehr mühevoll wäre :-), das dann mittels dieser external-Deklarationen zu tätigen. Aber vielleicht geht es ja doch normal mittels Delphi, ...besser, ich warte da erst nochmal ein bisschen ab. :mrgreen:


Zitat:

Zitat von SirThornberry
Woher weißt du von der Funktion? Aus dem MSDN?

aus der PSDK. In der Erklärung von PrintDlg ist die da peripher noch so miterwähnt.

quendolineDD 23. Nov 2008 12:59

Re: Drucken mittels des PrintDlgEx-Dialogs
 
Übersetz dir doch die Funktion aus der MSDN und alle benötigten Structures.

r29d43 23. Nov 2008 14:26

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:

SirThornberry 23. Nov 2008 14:52

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)

Namenloser 23. Nov 2008 14:57

Re: Drucken mittels des PrintDlgEx-Dialogs
 
Vielleicht erwartet die Funktion einen Pointer

DeddyH 23. Nov 2008 15:02

Re: Drucken mittels des PrintDlgEx-Dialogs
 
Jepp, steht zumindest so im MSDN.
Zitat:

Parameters

lppd
[in, out] Pointer to a PRINTDLGEX structure that contains information used to initialize the property sheet. When PrintDlgEx returns, this structure contains information about the user's selections.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz