AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein PrintDialog.Execute wird nicht ausgeführt
Thema durchsuchen
Ansicht
Themen-Optionen

PrintDialog.Execute wird nicht ausgeführt

Ein Thema von dataspider · begonnen am 12. Feb 2018 · letzter Beitrag vom 13. Feb 2018
Antwort Antwort
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#1

PrintDialog.Execute wird nicht ausgeführt

  Alt 12. Feb 2018, 20:51
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
Frank Reim
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: PrintDialog.Execute wird nicht ausgeführt

  Alt 12. Feb 2018, 20:56
Also ich wette wenn du im Debugger nachschaust wird der Parameter AToPage kleiner sein als AFromPage .
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: PrintDialog.Execute wird nicht ausgeführt

  Alt 12. Feb 2018, 21:47
Also ich wette wenn du im Debugger nachschaust wird der Parameter AToPage kleiner sein als 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
Frank Reim

Geändert von dataspider (12. Feb 2018 um 21:50 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: PrintDialog.Execute wird nicht ausgeführt

  Alt 12. Feb 2018, 22:04
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.066 Beiträge
 
Delphi 12 Athens
 
#5

AW: PrintDialog.Execute wird nicht ausgeführt

  Alt 12. Feb 2018, 22:59
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: PrintDialog.Execute wird nicht ausgeführt

  Alt 13. Feb 2018, 07:13
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.


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

Du hast was gut!

Frank
Frank Reim
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:28 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