- Im Beispiel wird das aktuelle Formular zusammen mit einer Überschrift auf dem Drucker um 90° gedreht ausgegeben (Querformat)
void __fastcall From1::PrintDiagram() { // Printdialog initialisieren TPrintDialog* pPrintDialog = new TPrintDialog(this); pPrintDialog->FromPage = 1; // Parameter setzen (hier soll nur eine Seite gedruckt werden) pPrintDialog->MinPage = 1; pPrintDialog->ToPage = 1; pPrintDialog->MaxPage = 1; // Druckdialog öffnen if (pPrintDialog->Execute()) { // Druckerobjekt erzeugen TPrinter* pPrinter = Printer(); // Seitengröße Rect(RandL,RandO,RandR,RandU); int RandL=350; int RandO=350; int RandR = pPrinter->PageWidth-200; int RandU = pPrinter->PageHeight-200; // für die Zeitangabe auf der Seite TDateTime dtNow = Now(); // Bestimmte Anzahl von Kopien drucken int iCopies; if (pPrintDialog->Copies == 0) pPrintDialog->Copies = 1; iCopies = pPrintDialog->Copies; while (iCopies) { iCopies--; pPrinter->BeginDoc(); // Bild für die Kopfzeile erzeugen Graphics::TBitmap* bmpHeadLine = new Graphics::TBitmap(); bmpHeadLine->Height = 20; bmpHeadLine->Width = 1024; // Kopfzeilentext zusammenbauen AnsiString strHeadline = "Ausdruck vom " + FormatDateTime("dd'.'mm'.'yyyy hh':'nn':'ss", dtNow); // Schriftart setzen und Schreiben bmpHeadLine->Canvas->Font->Assign(Font); bmpHeadLine->Canvas->Font->Style = TFontStyles() << fsBold; bmpHeadLine->Canvas->Font->Size = 10; bmpHeadLine->Canvas->TextOut(0, 0, strHeadline); // Überschrift Schreiben // Text drehen um 90° (für Querformat) Graphics::TBitmap* bmpHeadLineRotate = new Graphics::TBitmap(); bmpHeadLineRotate->Height= bmpHeadLine->Width; bmpHeadLineRotate->Width= bmpHeadLine->Height; for (int x=0; x<bmpHeadLine->Width; x++) { int iHw = bmpHeadLine->Width-1-x; for (int y=0; y<bmpHeadLine->Height; y++) bmpHeadLineRotate->Canvas->Pixels[y][iHw]= bmpHeadLine->Canvas->Pixels[x][y]; } // Text stretchen int iRx = (RandR-RandL) * 0.03; // legt fest, wie groß die Schrift auf dem Blatt gestretcht wird TRect rectHeadlineInsert = Rect(RandL,RandO,RandL+iRx,RandU); pPrinter->Canvas->StretchDraw(rectHeadlineInsert, bmpHeadLineRotate); // Bild // ScreenShot des akt. Canvas machen Graphics::TBitmap* bmpPanel = new Graphics::TBitmap(); bmpPanel->Height = Height; bmpPanel->Width = Width; TRect rectPanel = Bounds(0, 0, Width, Height); bmpPanel->Canvas->CopyRect(rectPanel, this->Canvas, rectPanel); //-- Bild um 90° drehen (für Querformat) Graphics::TBitmap* bmpPanelRotate = new Graphics::TBitmap(); bmpPanelRotate->Height = bmpPanel->Width; bmpPanelRotate->Width = bmpPanel->Height; for (int x=0; x<Width; x++) { int iHw=Width-1-x; for (int y=0; y<Height; y++) bmpPanelRotate->Canvas->Pixels[y][iHw]= bmpPanel->Canvas->Pixels[x][y]; } // Bild wieder stretchen TRect rectPanelInsert = Rect(RandL+iRx, RandO, RandR, RandU); pPrinter->Canvas->StretchDraw(rectPanelInsert, bmpPanelRotate); // Bild Drucken pPrinter->EndDoc(); // aufräumen if (bmpHeadLine) delete bmpHeadLine; if (bmpHeadLineRotate) delete bmpHeadLineRotate; if (bmpPanel) delete bmpPanel; if (bmpPanelRotate) delete bmpPanelRotate; } } if (pPrintDialog) delete pPrintDialog; }