Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   [Fastreport] Benutzereinstellungen für Papier abfragen (https://www.delphipraxis.net/78447-%5Bfastreport%5D-benutzereinstellungen-fuer-papier-abfragen.html)

joachab 5. Okt 2006 08:01


[Fastreport] Benutzereinstellungen für Papier abfragen
 
Hallo,

ich habe BDS06 und FR3.24.
Ich habe ein Report designed für den Standard-Drucker.

Wenn der Benutzer das Report im Preview ansieht, kann dieser die Druckereinstellungen ändern:
Drucker / Papersize / Orientation etc.

Wie komme ich an diese geänderten Daten heran?
Mit TfrxReportPage bekomme ich nur die im Designmode vorgegebenen Daten.
Muss ich in die Untiefen von Win einsteigen?

Danke!

uwewo 5. Okt 2006 08:38

Re: [Fastreport] Benutzereinstellungen für Papier abfragen
 
Abfrage sollte über Unit Printer möglich sein.

joachab 5. Okt 2006 09:21

Re: [Fastreport] Benutzereinstellungen für Papier abfragen
 
Hallo,

die Klasse TPrinter stellt "nur" den Zugriff auf PaperWidth, PaperHeight, Orientation bereit.
Nicht aber auf PaperSize: Hier wird das eigentliche Papierformat ausgewählt.
Zur Entwicklungszeit kenne ich das Papierformat nicht, da auf dem Zielrechner ein spezieller Drucker eingesetzt wird (Brother Plakettendrucker).
Der Drucker verweigert den Druck mit Papersize=Custom und der passenden PaperWidth und PaperHeight.

RaveReports bietet überhaupt keinen Zugriff auf PaperSize.
FastReport schon, aber eben nicht auf die vom Benutzer ausgewählte PaperSize.

Danke.

uwewo 5. Okt 2006 09:28

Re: [Fastreport] Benutzereinstellungen für Papier abfragen
 
Schau mal ob das bei Dir funktioniert.

Delphi-Quellcode:
function GetPaperSizeIndex : integer;
var p         : array [0..99] of WORD;
    pDevMode  : PDeviceMode;
    DefSource : Word;
    i         : Integer;
    Res       : DWord;
begin
  Printer.GetPrinter(ADevice, ADriver, APort, hDMode);
  if (hDMode <> 0) then
  begin
    pDevMode := GlobalLock(hDMode);
    if pDevMode <> nil then
    begin
      DefSource := pDevMode^.dmPaperSize;
      Res := DeviceCapabilities(ADevice,APort,DC_PAPERS,PCHAR(@p[0]),pDevMode);
      for i := 0 to Res-1 do
      if DefSource = p[i] then break;
    end;
    GlobalUnlock(hDMode);
    result := i; //Gibt Nr in Array (p) zurück
  end;
end;

joachab 5. Okt 2006 11:28

Re: [Fastreport] Benutzereinstellungen für Papier abfragen
 
Hallo uwewo,

vielen Dank! Dein Ansatz sieht sehr vielversprechend aus.
Das Problem liegt scheinbar schon weiter vorne:

Delphi-Quellcode:
frxReport1^.ShowReport();
i:=GetPaperSizeIndex;
Schon _nach_ dem Aufruf von ShowReport hat das Objekt TPrinter nicht mehr die Printer-Einstellungen, die ich innerhalb ShowReport() eingestellt habe.
Und damit lande ich beim default-Printer mit seinen Einstellungen :?
Und mit dem funktioniert deine (geniale) Funktion GetPaperSizeIndex.

Problem klar?
Danke schonmal!


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