Objektinstanz vom Drucker nach printDialog->ShowDialog().

OP #7461912
Lesenswert?
• ▲
▼

In alten guten Zeiten war so etwas möglich:

1
HORZ_SIZE = GetDeviceCaps(Printer()->Handle, HORZSIZE);
2
         VERT_SIZE = GetDeviceCaps(Printer()->Handle, VERTSIZE);
3
         HORZ_RES = GetDeviceCaps(Printer()->Handle, HORZRES);
4
         VERT_RES = GetDeviceCaps(Printer()->Handle, VERTRES);
5
         LOG_PIXELSX = GetDeviceCaps(Printer()->Handle, LOGPIXELSX);
6
         LOG_PIXELSY = GetDeviceCaps(Printer()->Handle, LOGPIXELSY);
#7461928
Lesenswert?
• ▲
▼

Zumindest das Windows.Forms PrintDialog hat ein PrinterSettings-Property das durch den Dialog beim Öffnen für die Defaultwerte im Dialog verwendet wird und nach Schließen des Dialogs die im Dialog gewählten Drucker-Settings enthält. In PrinterSettings wiederrum steckt auch PrinterResolutions. https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.printdialog.printersettings?view=windowsdesktop-7.0

Man kann auch direkt ein PrinterSettings-Objekt instanziieren, das enthält dann meine ich direkt die Angaben zum Standarddrucker. Via PrinterSettings.InstalledPrinters kann man sich die Namen der verfügbaren Drucker holen. Setzt man bei einem PrinterSettings-Objekt das PrinterName-Property auf einen der verfügbaren Druckernamen wird in das PrinterSettings-Objekt der Kram zum jeweiligen Drucker rein geladen. https://learn.microsoft.com/en-us/dotnet/api/system.drawing.printing.printersettings?view=windowsdesktop-7.0

OP #7462137
Lesenswert?
• ▲
▼

So muss das gehen(intuitive Vermutung...):

1
if (printDialog1->ShowDialog() != System::Windows::Forms::DialogResult::OK)    // Wenn File ausgewählt dann return true
2
  {
3
    Meldung2->Text = "Keinen Drucker wurde ausgewählt";
4
    goto Fehler;
5
  }
6
String^ DruckerName;
7
  System::Drawing::Printing::PrinterSettings^ PrinterSettings;
8
  PrinterSettings = printDialog1->PrinterSettings;
9
  DruckerName = PrinterSettings->PrinterName;
10
  //oder direkt:
11
  DruckerName = printDialog1->PrinterSettings->PrinterName;
OP #7462743
Lesenswert?
• ▲
▼

Die Sache klemmt noch.

1
array<System::Drawing::Printing::PrinterResolution^>^ printerResolution;
2
 printDialog1->PrinterSettings->PrinterResolutions->
3
                                            CopyTo(printerResolution,0);
4
//Das wird z.B. akzeptiert:
5
 printerResolution[0];

Wie komme ich an die Zahlen von PrinterResolution? array..?

OP #7463366
Lesenswert?
• ▲
▼
1
if (printDialog1->ShowDialog() != System::Windows::Forms::DialogResult::OK)// Wenn Drucker nicht ausgewählt                               //dann Ende
2
  {  Meldung2->Text = "Keinen Drucker wurde ausgewählt";
3
    goto Fehler;}
4
long Xi, X0, X1, X2, X3, Yi;
5
array<System::Drawing::Printing::PrinterResolution^>^ printerResolution = gcnew array<System::Drawing::Printing::PrinterResolution^>( 100);
6
printDialog1->PrinterSettings->PrinterResolutions->CopyTo(printerResolution,0);
7
  X0 = printerResolution[0]->X;
8
  X1 = printerResolution[1]->X;
9
  X2 = printerResolution[2]->X;
10
  X3 = printerResolution[3]->X;

Das Ergebnis auf dem Screenshot. Einzige Information die ich nach dem Rücker vom printDialog1→ShowDialog() auslesen kann ist der Drucker Name. Ich wollte dann den tradionellen Weg gehen:

1
LPHANDLE hPr; wchar_t* wchs=L"DruckerName";
2
  OpenPrinterW(wchs, hPr, 0);

Bei der Erstellung vom Programm kommen aber Fehler. Hat jemand einen Rat...?

Angehängte Dateien:
OP #7465591
Lesenswert?
• ▲
▼
1
                        //PaperSize
2
array < System::Drawing::Printing::PaperSize^>^ PaperSize = gcnew array < System::Drawing::Printing::PaperSize^>(100);
3
System::Drawing::Printing::PrinterSettings::PaperSizeCollection^ PapierSizeCollection;
4
PapierSizeCollection = printDialog1->PrinterSettings->PaperSizes;
5
PapierSizeCollection->CopyTo(PaperSize, 0);
6
                //PrinterResolution
7
array < System::Drawing::Printing::PrinterResolution ^>^ PrinterReslolution = 
8
gcnew array < System::Drawing::Printing::PrinterResolution^>(100);
9
System::Drawing::Printing::PrinterSettings::PrinterResolutionCollection^ PrinterResolutionCollection;
10
PrinterResolutionCollection = printDialog1->PrinterSettings->PrinterResolutions;
11
PrinterResolutionCollection->CopyTo(PrinterReslolution, 0);
12
Xi = PrinterReslolution[0]->X;  Yi = PrinterReslolution[0]->Y;
13
PapierHeight = PaperSize[0]->Height;PapierWidth =PaperSize[0]->Width;
14
Meldung1->Text = Xi + " " + Yi;
15
Meldung2->Text = PapierHeight + " " + PapierWidth;

Mit 1100 und 850 als PaperSize kann ich leben. Aber mit -4 und -1 als Auflösung X, Y bin ich nicht einverstanden… Hat jemand einen Rat?

Angehängte Dateien:
OP #7466052
Lesenswert?
• ▲
▼

Roger S. schrieb:

Findest du alles in der Dokumentation von Microsoft.

Dokumentation ist sehr wichtig. Wenn du über Dokumentation schreibst,schreibst du über das, was im Visual Studio integriert ist, oder hast du noch eine andere Quelle? Bei Problemen, Suche über google führt immer zu C#. C++/CLI scheint ein nicht geliebtes Stiefkind zu sein. Die Situation ist ähnlich wie beschreibt das einen Zitat von Jeffrey Richter Buch „Windows Programmierung für Experten“ von 90. Jahren. Zitat: „Das die Beispielprogramme dennoch C reinsten Wasser sind, liegt daran, dass die meistens Windows-Programmiere nach wie vor nicht auf C++ umgestiegen sind.."

#7466106
Lesenswert?
• ▲
▼

B. P. schrieb:

Bei Problemen, Suche über google führt immer zu C#. C++/CLI scheint ein nicht geliebtes Stiefkind zu sein.

Schau dir die MS-Seiten nochmal genau an. Da gibt's ein unscheinbares Dropdown, mit dem du zwischen C# und C++/CLI (dort frecherweise nur als C++ bezeichnet) umschalten kannst.

Auf der Seite mit den Druckauflösungen macht das Umschalten genau den Unterschied zwischen "public enum PrinterResolutionKind" und "public enum class PrinterResolutionKind" ... natürlich klar, dass die Information auf der Seite für C++/CLI komplett unverständlich ist, wenn man den Umschalt-Knopf nicht gefunden hat, und da C# Syntax angezeigt wird.

Angehängte Dateien:
#7466167
Lesenswert?
• ▲
▼

B. P. schrieb:

Dokumentation ist sehr wichtig. Wenn du über Dokumentation schreibst,schreibst du über das, was im Visual Studio integriert ist, oder hast du noch eine andere Quelle?

Die online Dokumentation, der Einstiegspunkt für mich ist Google (suche nach der Struktur oder Funktionsnamen).

Bei Problemen, Suche über google führt immer zu C#.

Das ist eigentlich egal, du nutzt ja .NET komponenten, da musst du halt bloss die Syntax auf Dein C++/CLI umdenken.

C++/CLI scheint ein nicht geliebtes Stiefkind zu sein.

In der Tat.

Die Situation ist ähnlich wie beschreibt das einen Zitat von Jeffrey Richter Buch „Windows Programmierung für Experten“ von 90. Jahren. Zitat: „Das die Beispielprogramme dennoch C reinsten Wasser sind, liegt daran, dass die meistens Windows-Programmiere nach wie vor nicht auf C++ umgestiegen sind.."

In den 90er war MFC der heisse Scheiss.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.