Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Papierformate mit Beschreibung. (https://www.delphipraxis.net/155836-papierformate-mit-beschreibung.html)

Garfield 9. Nov 2010 23:10

Papierformate mit Beschreibung.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich möchte in einer Combobox die Papierformate mit Beschreibung auflisten. Zum Beispiel 'A4 (210 x 297 mm)' anstelle von 'A4' oder 'C6 Umschlag(114x162 mm)' anstelle von 'C6' (siehe Bild). Mit dem Beispiel von http://www.delphipraxis.net/91547-pa...-auslesen.html funktioniert es für meinen Samsung, für FreePDF jedoch nicht. Mit
Delphi-Quellcode:
Printer.GetPrinter(@Device, @Driver, @Port, hDMode);
if hDMode <> INVALID_HANDLE_VALUE
then begin
  pDMode := GlobalLock(hDMode);
  if pDMode <> nil
  then begin
    lblPaperSizeValue.Caption  := pDMode^.dmFormName;
    lblOrientationValue.Caption := cOrientation[pDMode^.dmOrientation];
    lblQualityValue.Caption    := Format('%d dpi', [pDMode^.dmPrintQuality]);
    lblColorValue.Caption      := cColorSupport[pDMode^.dmFields and DM_Color > 0];
  end;
  GlobalUnlock(hDMode);
end;
funktioniert es für beide, wenn vorher der Samsung in einem TPrinterSetupDialog ausgewählt wurde, sonst für beide nicht.

Weiß jemand, wie man die Beschreibung immer erhält?

Assarbad 9. Nov 2010 23:26

AW: Papierformate mit Beschreibung.
 
Meines Wissens nach ist das eine Sache des Druckertreibers.

Garfield 9. Nov 2010 23:52

AW: Papierformate mit Beschreibung.
 
:? Dann müsste ich also ein Array mit den Formaten deklarieren und anstelle von dmFormName dmPaperSize verwenden ...

Assarbad 10. Nov 2010 00:07

AW: Papierformate mit Beschreibung.
 
Zitat:

Zitat von Garfield (Beitrag 1060677)
:? Dann müsste ich also ein Array mit den Formaten deklarieren und anstelle von dmFormName dmPaperSize verwenden ...

Ich befürchte ja. Aber vielleicht kennt noch jemand hier einen Kniff.

Satty67 10. Nov 2010 08:51

AW: Papierformate mit Beschreibung.
 
Einzig was man beim erstellen einer Default-Liste machen kann, ist z.B. XPS Document Printer nehmen (der alle Formate kennt), auslesen und als Array speichern. Dann spart man sich Handarbeit.

Die Formatnamen und Größen kommen wohl leider immer vom Druckertreiber (sind z.T. auch je nach gewähltem Drucker unterschiedlich):

Delphi-Quellcode:
unit UPaperSizes;

interface

type
  TPaperSize = record
    Name : String;
    Width,
    Height : Integer; // 1/100 inch
  end;

const
  PaperSizes : array[0..105] of TPaperSize =
  (
    (Name : 'Letter'; Width : 850; Height : 1100),
    (Name : 'Letter klein'; Width : 850; Height : 1100),
    (Name : 'Tabloid'; Width : 1100; Height : 1700),
    (Name : 'Ledger'; Width : 1700; Height : 1100),
    (Name : 'Legal'; Width : 850; Height : 1400),
    (Name : 'Statement'; Width : 550; Height : 850),
    (Name : 'Executive'; Width : 725; Height : 1050),
    (Name : 'A3'; Width : 1169; Height : 1654),
    (Name : 'A4'; Width : 827; Height : 1169),
    (Name : 'A4 Klein'; Width : 827; Height : 1169),
    (Name : 'A5'; Width : 583; Height : 827),
    (Name : 'B4 (JIS)'; Width : 1012; Height : 1433),
    (Name : 'B5 (JIS)'; Width : 717; Height : 1012),
    (Name : 'Folie'; Width : 850; Height : 1300),
    (Name : 'Quarto'; Width : 846; Height : 1083),
    (Name : '10x14'; Width : 1000; Height : 1400),
    (Name : '11x17'; Width : 1100; Height : 1700),
    (Name : 'Notiz'; Width : 850; Height : 1100),
    (Name : 'Umschlag 9'; Width : 387; Height : 887),
    (Name : 'Umschlag 10'; Width : 412; Height : 950),
    (Name : 'Umschlag 11'; Width : 450; Height : 1037),
    (Name : 'Umschlag 12'; Width : 475; Height : 1100),
    (Name : 'Umschlag 14'; Width : 500; Height : 1150),
    (Name : 'C Blattgröße'; Width : 1700; Height : 2200),
    (Name : 'D Blattgröße'; Width : 2200; Height : 3400),
    (Name : 'E Blattgröße'; Width : 3400; Height : 4400),
    (Name : 'Umschlag DL'; Width : 433; Height : 866),
    (Name : 'Umschlag C5'; Width : 638; Height : 902),
    (Name : 'Umschlag C3'; Width : 1276; Height : 1803),
    (Name : 'Umschlag C4'; Width : 902; Height : 1276),
    (Name : 'Umschlag C6'; Width : 449; Height : 638),
    (Name : 'Umschlag C65'; Width : 449; Height : 902),
    (Name : 'Umschlag B4'; Width : 984; Height : 1390),
    (Name : 'Umschlag B5'; Width : 693; Height : 984),
    (Name : 'Umschlag B6'; Width : 693; Height : 492),
    (Name : 'Umschlag'; Width : 433; Height : 906),
    (Name : 'Umschlag Monarch'; Width : 387; Height : 750),
    (Name : '6 3/4 Umschlag'; Width : 362; Height : 650),
    (Name : 'US Standardendlospapier'; Width : 1487; Height : 1100),
    (Name : 'German Std Endlospapier'; Width : 850; Height : 1200),
    (Name : 'German Legal Endlospapier'; Width : 850; Height : 1300),
    (Name : 'B4 (ISO)'; Width : 984; Height : 1390),
    (Name : 'Japanische Postkarte'; Width : 394; Height : 583),
    (Name : '9x11'; Width : 900; Height : 1100),
    (Name : '10x11'; Width : 1000; Height : 1100),
    (Name : '15x11'; Width : 1500; Height : 1100),
    (Name : 'Umschlag Invite'; Width : 866; Height : 866),
    (Name : 'Letter Extra'; Width : 950; Height : 1200),
    (Name : 'Legal Extra'; Width : 950; Height : 1500),
    (Name : 'A4 Extra'; Width : 927; Height : 1269),
    (Name : 'Letter Quer'; Width : 850; Height : 1100),
    (Name : 'A4 Quer'; Width : 827; Height : 1169),
    (Name : 'Letter Extra Quer'; Width : 950; Height : 1200),
    (Name : 'Super A'; Width : 894; Height : 1402),
    (Name : 'Super B'; Width : 1201; Height : 1917),
    (Name : 'Letter Plus'; Width : 850; Height : 1269),
    (Name : 'A4 Plus'; Width : 827; Height : 1299),
    (Name : 'A5 Quer'; Width : 583; Height : 827),
    (Name : 'B5 (JIS) Quer'; Width : 717; Height : 1012),
    (Name : 'A3 Extra'; Width : 1268; Height : 1752),
    (Name : 'A5 Extra'; Width : 685; Height : 925),
    (Name : 'B5 (ISO) Extra'; Width : 791; Height : 1087),
    (Name : 'A2'; Width : 1654; Height : 2339),
    (Name : 'A3 Quer'; Width : 1169; Height : 1654),
    (Name : 'A3 Extra Quer'; Width : 1268; Height : 1752),
    (Name : 'Japanische Doppelpostkarte'; Width : 787; Height : 583),
    (Name : 'A6'; Width : 413; Height : 583),
    (Name : 'Japanischer Umschlag Kaku 2'; Width : 945; Height : 1307),
    (Name : 'Japanischer Umschlag Kaku 3'; Width : 850; Height : 1091),
    (Name : 'Japanischer Umschlag Chou 3'; Width : 472; Height : 925),
    (Name : 'Japanischer Umschlag Chou 4'; Width : 354; Height : 807),
    (Name : 'Letter gedreht'; Width : 1100; Height : 850),
    (Name : 'A3 gedreht'; Width : 1654; Height : 1169),
    (Name : 'A4 gedreht'; Width : 1169; Height : 827),
    (Name : 'A5 gedreht'; Width : 827; Height : 583),
    (Name : 'B4 (JIS) gedreht'; Width : 1433; Height : 1012),
    (Name : 'B5 (JIS) gedreht'; Width : 1012; Height : 717),
    (Name : 'Japanische Postkarte gedreht'; Width : 583; Height : 394),
    (Name : 'Jap. Doppelpostkarte gedreht'; Width : 583; Height : 787),
    (Name : 'A6 gedreht'; Width : 583; Height : 413),
    (Name : 'Jap. Umschlag Kaku 2 gedreht'; Width : 1307; Height : 945),
    (Name : 'Jap. Umschlag Kaku 3 gedreht'; Width : 1091; Height : 850),
    (Name : 'Jap. Umschlag Chou 3 gedreht'; Width : 925; Height : 472),
    (Name : 'Jap. Umschlag Chou 4 gedreht'; Width : 807; Height : 354),
    (Name : 'B6 (JIS)'; Width : 504; Height : 717),
    (Name : 'B6 (JIS) gedreht'; Width : 717; Height : 504),
    (Name : '12x11'; Width : 1200; Height : 1100),
    (Name : 'Japanischer Umschlag You 4'; Width : 413; Height : 925),
    (Name : 'Jap. Umschlag You 4 gedreht'; Width : 925; Height : 413),
    (Name : 'PRC Umschlag 1'; Width : 402; Height : 650),
    (Name : 'PRC Umschlag 3'; Width : 492; Height : 693),
    (Name : 'PRC Umschlag 4'; Width : 433; Height : 819),
    (Name : 'PRC Umschlag 5'; Width : 433; Height : 866),
    (Name : 'PRC Umschlag 6'; Width : 472; Height : 906),
    (Name : 'PRC Umschlag 7'; Width : 630; Height : 906),
    (Name : 'PRC Umschlag 8'; Width : 472; Height : 1217),
    (Name : 'PRC Umschlag 9'; Width : 902; Height : 1276),
    (Name : 'PRC Umschlag 10'; Width : 1276; Height : 1803),
    (Name : 'PRC Umschlag 1 gedreht'; Width : 650; Height : 402),
    (Name : 'PRC Umschlag 3 gedreht'; Width : 693; Height : 492),
    (Name : 'PRC Umschlag 4 gedreht'; Width : 819; Height : 433),
    (Name : 'PRC Umschlag 5 gedreht'; Width : 866; Height : 433),
    (Name : 'PRC Umschlag 6 gedreht'; Width : 906; Height : 472),
    (Name : 'PRC Umschlag 7 gedreht'; Width : 906; Height : 630),
    (Name : 'PRC Umschlag 8 gedreht'; Width : 1217; Height : 472),
    (Name : 'PRC Umschlag 9 gedreht'; Width : 1276; Height : 902)
  );

implementation

end.
Wer es sich die Liste selber von einem anderen Drucker erstellen will oder etwas im Format anpassen:
Code:
void Button1Click(object sender, EventArgs e)
      {
         PrintDocument pDoc = new PrintDocument();
         PrintDialog pDlg = new PrintDialog();
         pDlg.Document = pDoc;
         
         if (pDlg.ShowDialog() == DialogResult.OK)
         {
            textBox1.AppendText(
               string.Format("PaperSizes : array[0..{0}] of TPaperSize =\r\n(\r\n",
                             pDlg.PrinterSettings.PaperSizes.Count -1));

            
            foreach (PaperSize ps in pDoc.PrinterSettings.PaperSizes)
            {
               textBox1.AppendText(
                  string.Format(" (Name : '{0}'; Width : {1}; Height : {2}),\r\n",
                                ps.PaperName, ps.Width, ps.Height));
            }
            textBox1.AppendText(");");
         }
      }

Garfield 10. Nov 2010 16:51

AW: Papierformate mit Beschreibung.
 
Wieder ist ein Tag mit Suchen vorübergegangen. Und nichts weiter gefunden. Das Array scheint im Moment das Richtige zu sein.

Wäre schön zu wissen, was beim Aufruf von TPrinterSetupDialog passiert, dass anschließend unterschiedliche Strings zur Verfügung stehen.

Satty67 10. Nov 2010 17:09

AW: Papierformate mit Beschreibung.
 
Wohl GetDeviceCaps und/oder DeviceCapabilities Abfragen, nachgeschaut hab' ich aber nicht.

€: Kurz geschaut, von Delphi dort nur GetPrinter... Rest ist dann quasi in der Hand des ComControl.

vergessen 10. Nov 2010 21:35

AW: Papierformate mit Beschreibung.
 
Danke, Satty67, für die Liste in #5!

Garfield 11. Nov 2010 07:34

AW: Papierformate mit Beschreibung.
 
GetDeviceCaps ist zwar sehr nützlich, hilft beim String leider nicht weiter. Ab .NET 2.0 gibt es eine Papersize-Class. Dort kann man den Namen auslesen und auch selbst setzen. Vielleicht ist es so wie Assarbad schrieb, dass der Druckertreiber bei der Übermittlung der unterstützten Formate auch die Strings setzt. Dann müsste man sehen, ob man die Strings in TDeviceMode selbst setzen kann. Dazu braucht man dann auch die obige Tabelle.

Anscheinend gibt es zu den B-Formaten unterschiedliche Angaben. In Satty67's Tabelle ist JIS, in VB werden DIN/ISO-Werte angegeben.

Satty67 11. Nov 2010 08:13

AW: Papierformate mit Beschreibung.
 
Ja, wie man oben sieht ist PaperSizes ein Member von PrinterSettings. Ohne Printer (also keine Zuweisung eines Druckers) bleibt PaperSizes eine leere Liste. Es gibt mit PaperKind noch eine Enumeration (Set), das aber nur die einfachen Namen bietet (also A3/A4 etc.), keine weiteren Daten.

Es macht imho auch Sinn. Nur der Drucker(Treiber) kann melden, welche Papierformate unterstützt werden. Wenn ich hier nur die Werte des Brother Etiketten-Druckers anschaue, da ist alles "Custom", keine Formate wie DIN-A4 etc. PDFCreator bietet witzigerweise auch HD-Formate an (weil PDF nicht nur auf Papier, sondern auch für Bildschirmausgaben optimiert werden kann).

Die Liste oben war auch nicht wirklich mühsam, sondern nur ein ermitteln der PaperSizes eines generischen Druckers. Ist nur eine Basis, mit der man sich etwas leicher eine eigene Custom Liste aufbauen kann. Mit umrechnen von 1/100 inch auf mm ( Round(value * 0.254) ) lässt sich dann auch eine Liste wie im Startpost gewünscht generieren. Falsch oder anders interpretierte Werte kann man natürlich vorher anpassen. Sind halt Werte, die der XPS Dokument Printer liefert (denke ab NET 2.0 wird der mit installiert)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.
Seite 1 von 2  1 2      

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