Drukuje się zawartość Canvas, klasa Printer obsługuje klasę TCanvas, więc cokolwiek chcesz wydrukować musisz to odrysować na płótnie Canvas. Dotyczy to zawartości TImage jak i TShape. Cokolwiek chcesz drukować rysujesz na TCanvas klasy Printer.
Możesz drukować zawartość TImage o ile zawiera ono obiekt w formacie BMP, jeżeli zawiera grafikę w innym formacie, to musisz najpierw dokonać konwersji na Bitmapę a potem to wydrukować.
Przykład 1: drukowania zawartości obiektu
Image zawierajÄ…cego
bitmapÄ™:
- Kod: Zaznacz cały
#include <Printers.hpp>
Graphics::TBitmap *Bmp = Image1->Picture->Bitmap;
Printer()->Orientation = poLandscape;
Printer()->BeginDoc();
int x = Printer()->PageWidth; // długość strony.
int y = Printer()->PageHeight; // wysokość strony.
int width;
int height;
if((x / Bmp->Width) < (y / Bmp->Height))
{
width = Bmp->Width * ((x / Bmp->Width) + 0.5);
height = Bmp->Height * ((x / Bmp->Width) + 0.5);
}
else
{
height = Bmp->Height * ((y / Bmp->Height) + 0.5);
width = Bmp->Width * ((y / Bmp->Height) + 0.5);
}
Printer()->Canvas->CopyRect(Rect(10, 10, width, height), Bmp->Canvas, Rect(0, 0, Bmp->Width, Bmp->Height));
Printer()->EndDoc();
Przykład 2: drukowania zawartości obiektu
Image zawierajÄ…cego grafikÄ™ w formacie
JPEG:
- Kod: Zaznacz cały
Graphics::TBitmap *Bmp = new Graphics::TBitmap;
Bmp->Width = Image1->Picture->Graphic->Width;
Bmp->Height = Image1->Picture->Graphic->Height;
Bmp->Canvas->Draw( 0, 0, Image1->Picture->Graphic);
Printer()->Orientation = poLandscape;
Printer()->BeginDoc();
int x = Printer()->PageWidth; // długość strony.
int y = Printer()->PageHeight; // wysokość strony.
int width;
int height;
if((x / Bmp->Width) < (y / Bmp->Height))
{
width = Bmp->Width * ((x / Bmp->Width) + 0.5);
height = Bmp->Height * ((x / Bmp->Width) + 0.5);
}
else
{
height = Bmp->Height * ((y / Bmp->Height) + 0.5);
width = Bmp->Width * ((y / Bmp->Height) + 0.5);
}
Printer()->Canvas->CopyRect(Rect(10, 10, width, height), Bmp->Canvas, Rect(0, 0, Bmp->Width, Bmp->Height));
Printer()->EndDoc();
Przykład 2 może być wykorzystany do drukowania dowolnej zawartości
TImage, czyli zarówno
JPEG, PNG, GIF,
(nowsze wersje środowiska) jak też do
bitmap, więc jest bardziej uniwersalny.
Musisz jednak pamiętać o jednym nie drukujesz w ten sposób obiektu
Image lecz zawartości obiektu
Image, a różnica jest istotna, gdyż to co wczytasz do
Image może być w nim różnie wizualizowane, czyli może być zniekształcone, obcięte itp., ale to bez znaczenia, gdyż podany wyżej kod drukuje to co zostało do niego wczytanie a nie to co jest wyświetlane.
By drukować obiekt Image trzeba by się oprzeć na jego klasie TCanvas
(Image->Canvas), a nie Graphics, ale klasa TCanvas obsługuje tylko grafikę w formacie BMP, więc w przypadku grafiki innej niż bitmapa, należałoby przed pobraniem zawartości Canvas przekształcić tą grafikę na bitmapę.
Przykład 3: drukowanie obiektu
Image - nie zawartości obiektu
Image, lecz obiektu
Image zawierajÄ…cego
bitmapÄ™:
- Kod: Zaznacz cały
Printer()->Orientation = poLandscape;
Printer()->BeginDoc();
int x = Printer()->PageWidth; // długość strony.
int y = Printer()->PageHeight; // wysokość strony.
int width;
int height;
if((x / Image1->Width) < (y / Image1->Height))
{
width = Image1->Width * ((x / Image1->Width) + 0.5);
height = Image1->Height * ((x / Image1->Width) + 0.5);
}
else
{
height = Image1->Height * ((y / Image1->Height) + 0.5);
width = Image1->Width * ((y / Image1->Height) + 0.5);
}
Printer()->Canvas->CopyRect(Rect(10, 10, width, height), Image1->Canvas, Rect(0, 0, Image1->Width, Image1->Height));
Printer()->EndDoc();