AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Drucken mittels des PrintDlgEx-Dialogs
Thema durchsuchen
Ansicht
Themen-Optionen

Drucken mittels des PrintDlgEx-Dialogs

Ein Thema von r29d43 · begonnen am 23. Nov 2008 · letzter Beitrag vom 23. Nov 2008
Antwort Antwort
Seite 1 von 2  1 2      
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#1

Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 12:35
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 12:42
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 12:47
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)?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 13:22
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 13:40
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.


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.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 13:59
Übersetz dir doch die Funktion aus der MSDN und alle benötigten Structures.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 15:26
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 15:52
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 15:57
Vielleicht erwartet die Funktion einen Pointer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

Re: Drucken mittels des PrintDlgEx-Dialogs

  Alt 23. Nov 2008, 16:02
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.
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