Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PrintDialog.Execute wird nicht ausgeführt (https://www.delphipraxis.net/195217-printdialog-execute-wird-nicht-ausgefuehrt.html)

dataspider 12. Feb 2018 19:51

PrintDialog.Execute wird nicht ausgeführt
 
Ich habe eine Funktion zum Aufruf von TPrintDialog

Delphi-Quellcode:
function PrintDialog(var AFromPage, AToPage: Integer): Boolean;
Var
  APrintDialog: TPrintDialog;
begin
  APrintDialog := TPrintDialog.Create(Application);
  try
    APrintDialog.Options := [poPageNums];
    APrintDialog.PrintRange := prPageNums;
    APrintDialog.FromPage := AFromPage;
    APrintDialog.MaxPage := AToPage;
    APrintDialog.ToPage := AToPage;
    Result := APrintDialog.Execute;
    AFromPage := APrintDialog.FromPage;
    AToPage := APrintDialog.ToPage;
  finally
    APrintDialog.Free;
  end;
end;
Die rufe ich hier auf:

Delphi-Quellcode:
procedure TImageViewer.Print(AShowDialog: Boolean = True);
var
  RR: TRect;
  ABitMap: TBitmap;
  AFileName: string;
  AFromPage: Integer;
  AToPage: Integer;
  APrintPage: Integer;
  AFileStream: TMemoryStream;
begin
  AFromPage := 1;
  AToPage := PageCount;
  if not PrintDialog(AFromPage, AToPage) then
    Exit;
  ABitMap := TBitmap.Create;
  AFileStream := TMemoryStream.Create;
  try
    Printer.BeginDoc;
    try
      for APrintPage := AFromPage to AToPage do
      begin
        AFileStream.Clear;
        if Provider.DocProviderMode = dpmFile then
        begin
          AFileName := FileNames[APrintPage -1];
          AFileStream.LoadFromFile(AFileName)
        end
        else
          Provider.AssignFileFromDataSet(AFileStream);
        AssignImage(ABitMap, AFileStream, IsTiff(Provider.FileExtension));
        RR := Rect(0, 0, ABitMap.Width, ABitMap.Height);
        PrintBitmapEx(ABitMap);
        if APrintPage < AToPage then
          Printer.NewPage;
      end;
    finally
      Printer.EndDoc;
    end;
  finally
    ABitMap.Free;
    AFileStream.Free;
  end;
end;
Nur hier passiert einfach nichts. Der Dialog wird nicht angezeigt.
Wenn ich die Funktion an anderer Stelle aufrufe, ist alles schick.
Ich verzweifle langsam. Im Debugger springt er auch in die Routine in Vcl.Dialogs.

Was kann man falsch machen oder wo könnte man bei der Ursachensuche ansetzen?

Frank

Der schöne Günther 12. Feb 2018 19:56

AW: PrintDialog.Execute wird nicht ausgeführt
 
Also ich wette wenn du im Debugger nachschaust wird der Parameter
Delphi-Quellcode:
AToPage
kleiner sein als
Delphi-Quellcode:
AFromPage
.

dataspider 12. Feb 2018 20:47

AW: PrintDialog.Execute wird nicht ausgeführt
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1393682)
Also ich wette wenn du im Debugger nachschaust wird der Parameter
Delphi-Quellcode:
AToPage
kleiner sein als
Delphi-Quellcode:
AFromPage
.

Ja, damit kann ich leben, wenn er mir erst mal diesen Dialog anzeigen würde...

Aber - mit der Wette..
In der Regel ist PageCount immer 1.

Frank

Der schöne Günther 12. Feb 2018 21:04

AW: PrintDialog.Execute wird nicht ausgeführt
 
Also ich sehe nur dass ich genau dein beschriebenes Verhalten (Dialog wird nicht angezeigt) bekomme wenn "bis Seite y" kleiner ist als "ab Seite x".

Dein PageCount kommt irgendwo von außen und wird der Methode nicht übergeben. Es ist so ziemlich das einzige was sich mit dem Aufruf von "anderswo" unterscheiden kann.

himitsu 12. Feb 2018 21:59

AW: PrintDialog.Execute wird nicht ausgeführt
 
Einige Dialog-Klassen verwenden den Owner als Ausrichtungs-Parent für das Dialog-Fenster.
Andere verwenden den HWND-Parameter, den man dem Execute übergeben kann.
Und wieder Andere ignorieren alle Parameter und bauen irgendwelchen Scheiß ein.

Nja, was TPrintDialog macht, weiß ich jetzt nicht, aber was wäre wohl, wenn sie den Owner verwenden und der hier aber unsichtbar ist?
Oder der geht auf ActiveForm ... k.A. wie das an den jeweiligen Aufrufstellen aussieht.

dataspider 13. Feb 2018 06:13

AW: PrintDialog.Execute wird nicht ausgeführt
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1393688)
Also ich sehe nur dass ich genau dein beschriebenes Verhalten (Dialog wird nicht angezeigt) bekomme wenn "bis Seite y" kleiner ist als "ab Seite x".

Dein PageCount kommt irgendwo von außen und wird der Methode nicht übergeben. Es ist so ziemlich das einzige was sich mit dem Aufruf von "anderswo" unterscheiden kann.

:oops:

Danke, PageCount gehört zur Klasse und ist hier tatsächlich 0.
Das Verhalten hätte ich nicht erwartet...

Du hast was gut!

Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 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