drucken eines formulars



  • Hallo!

    möchte meine WinForm ausdrucken!
    das funktioniert auch schon!
    siehe code:

    System::Void Form::toolStripMenuItemDrucken_Click(System::Object^  sender, System::EventArgs^  e)
    {
    	String^ strDruckername;
    	printDialog->Document = printDocument;
    	if (printDialog->ShowDialog() == System::Windows::Forms::DialogResult::OK)
    	{
    		printDocument->Print();
    	}
    }
    
    System::Void Form::printDocument_PrintPage(System::Object ^sender, System::Drawing::Printing::PrintPageEventArgs ^e)
    {
    	Bitmap^ bmp = gcnew Bitmap(tabControl->SelectedTab->Width, tabControl->SelectedTab->Height);
    
    	tabControl->SelectedTab->DrawToBitmap(bmp, e->PageBounds);
    
    	e->Graphics->DrawImage(bmp, System::Drawing::Point(0, 0));
    }
    

    Hier drucke ich alles was ich in das aktive Tab in meinem TabControl gezeichnet habe (diverse rectangles usw.)

    Nun stehe ich vor dem Problem, dass nicht alles auf einer seite platz hat!
    -> es gibt einen virtuellen bereich den ich mittels scrolling im Formular anzeigen kann!
    wie kann ich nun sagen wann der seitenumbruch stattfinden soll?

    Danke LG



  • habe mittlerweile methoden geschrieben die errechnen wann ich einen seitenumbruch brauche!
    nun weiß ich aber nicht wie ich den umbruch machen bzw wie ich sage: drucke auf ein neues blatt papier?

    vergleichbares bsp!
    ich will 40 linien mit konstantem abstand zeichnen!
    aus der papiergröße und dem abstand weiß ich ich kann nur 30 zeichnen und die restlichen auf eine neue seite!

    in meiner schleife mache ich nach 30 zeilen ein break und rufe die printpage funktion für mein printdocument neu auf.
    er zeichnet mir die restlichen linien aber weiter auf das selbe blatt papier?

    benötige ich ein neues printdocument oder was muss ich machen?

    Danke LG



  • Und wenn Du Dein Bitmap in papiergroße Stücke zerschneidest?



  • ich drucke kein bitmap

    ich zeichne meine "zeichnung" genauso wie ich sie ins formularzeichne auf das printdocument
    printpageeventargs hat ja auch drawrectangle usw.

    sieht so aus:

    print page ruft eine funktion zeichne zeichnung auf
    darin werden nun soviele linien gezeichnet wie sie auf die seite passen
    ist die errechnete anzahl erreicht rufe ich eine methode auf die ein neues printdocument erzeugt!
    eventhandler für dieses document gebe ich die selbe eventmethode wie sie schon für das erste printdocument war!
    siehe hier

    System::Void Kalender::PrintMorePages(System::Drawing::Printing::PrintPageEventArgs^ e)
    {
    	System::Drawing::Printing::PrintDocument^ pdNeueSeite = gcnew System::Drawing::Printing::PrintDocument();
    
    	pdNeueSeite->PrintPage += gcnew System::Drawing::Printing::PrintPageEventHandler(this, &Kalender::printDocumentKalender_PrintPage);
    
    	pdNeueSeite->Print();
    }
    

    aber er zeichnet wieder auf die selbe seite!



  • System::Drawing::Printing::PrintPageEventArgs^ e
    
    e->HasMorePages = true;
    

    aus der zauber 😉


Anmelden zum Antworten