Problem mit PaintTo und TBitmap
-
Ich versuche, ein PageControl seitenweise auszudrucken. Dafür benutze ich PaintTo, um die Seite in ein Bitmap zu zeichnen und male danach das Bitmap mit StretchDraw auf das Canvas des Druckers. Eigenartigerweise funktioniert das ganze, wenn ich das Bitmap in eine Datei speichere, wieder aus der Datei lade und dann drucke. Wenn ich aber das Bitmap direkt verwende, wird nur eine weiße Seite gedruckt. Was muß ich tun, damit das Bitmap auch ohne die "Speichern-Laden-Krücke" gedruckt wird?
Hier der relevante Code:
if (PrintDialog1->Execute()) { Graphics::TBitmap* TestBMP = new Graphics::TBitmap(); TestBMP->Width=PageControl1->ActivePage->Width; TestBMP->Height=PageControl1->ActivePage->Height; PageControl1->ActivePage->PaintTo(TestBMP->Canvas->Handle,0,0); TestBMP->SaveToFile("C:\\Test_01.bmp"); TestBMP->LoadFromFile("C:\\Test_01.bmp"); double Scale = (double)Printer()->PageWidth/(double)TestBMP->Width; if ((double)Printer()->PageHeight/(double)TestBMP->Height < Scale) Scale=(double)Printer()->PageHeight/(double)TestBMP->Height; TRect DrawRect = Rect(0,0,TestBMP->Width*Scale,TestBMP->Height*Scale); Printer()->BeginDoc(); Printer()->Canvas->StretchDraw(DrawRect,TestBMP); Printer()->EndDoc(); delete TestBMP; }Danke

-
Kann ich nicht nachvollziehen, das druckt hier auch ohne Zwischenspeichern korrekt aus.
-
hmm, auf nem realen Drucker funktionierts wirklich ohne Zwischenspeichern, nur als Pdf gehts so nicht, zumindest nicht mit dem "Pdf Creator"
-
Ist ja lustig. Ich hatte es nämlich nur als PDF-Ausgabe getestet (Acrobat 6), nicht mit 'nem echten Drucker.

-
selbst mit dem Acrobat PDF Writer gehts bei mir nicht, egal ob mit oder ohne Zwischenspeichern

ich versuch mal zu erklären was ich als PDF drucken will:
ich hab ein PageControl mit 15 Tabsheets,
auf jedem Tabsheet liegt ein Image (alClient) und
es sind 1 oder 4 TCharts und mehrere Labels und Shapes daraufdas ganze soll als ein PDF-Dokument rauskommen
wenn ich einfach nur das Tabsheet mit PaintTo zum Drucker schicke druckt er alles außer den Diagrammen, wenn ich es so wie in meinem ersten Posting versuche, druckt er nur leere Seiten und wenn ich versuche vorher ein Bitmap zu speichern und zu laden bricht er nach der ersten Seite ab und meckert über zu wenig Speicher...
hat jemand ne Idee wie ich das lösen kann? und wenn ja welche?
-
Mach mal TBitmap::HandleType = bmDIB
Ich hatte irgendwann mal ähnliche Probleme und meine es damit in den Griff bekommen zu haben. Einfach mal probieren.