![]() |
PrintDialog.Execute wird nicht ausgeführt
Ich habe eine Funktion zum Aufruf von TPrintDialog
Delphi-Quellcode:
Die rufe ich hier auf:
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;
Delphi-Quellcode:
Nur hier passiert einfach nichts. Der Dialog wird nicht angezeigt.
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; 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 |
AW: PrintDialog.Execute wird nicht ausgeführt
Also ich wette wenn du im Debugger nachschaust wird der Parameter
Delphi-Quellcode:
kleiner sein als
AToPage
Delphi-Quellcode:
.
AFromPage
|
AW: PrintDialog.Execute wird nicht ausgeführt
Zitat:
Aber - mit der Wette.. In der Regel ist PageCount immer 1. Frank |
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. |
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. |
AW: PrintDialog.Execute wird nicht ausgeführt
Zitat:
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 15:53 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