[bcb] jednoczesne drukowanie obrazu i tekstu

0

Witam
Oki a wracając do tematu.

Mam obiekt typu TImage na którym wyświetlam obraz. Na nim jeszcze dodatkowo mam chyba z 6 TLabel-ów . Oczywiście używam do drukowania printer , i drukuje printer->canvas .....
, ale udaje mi sie tylko wydrukować zawartość TImage.

I teraz moje pytanie, czy da się jakoś zrobic abym mógł wydrukować zawartość Timage i te label-e ?
Jestem skłonny nawet zapisać sobie wcześniej widok tego zestawienia (zawartość image i labelów, ) jako plik bmp , który po wydrukowaniu zostanie usuniety.
pozdro

0

Wydaje mi się, że nie musisz tego koniecznie robić. Możesz drukować Canvas całej Panelu, na którym umieścisz odpowiednio swój obrazek, labele, i co tam chcesz:

MojPanelDoDruku->PaintTo(printer->Canvas, 0,0);
0

Faktycznie jest to bardzo dobry sposób :)

Wielkie dzięki :)

Mam jeszcze do Ciebie jedno pytanie.

W jaki sposób mogę powiększyć obraz , ponieważ jest ona bardzo mały.
Pozdrawiam

0

No obawiam się, że musimy skalować...

    // domyślna drukarka
    TPrinter* output = Printer();

    // marginesy
    int MarginH = 200;
    int MarginW = 200;

    // wymiary prostokątów: rysowanego, oraz strony
    TRect rSource = Panel1->ClientRect;
    TRect rTarget = TRect(MarginW, MarginH, output->PageWidth-MarginW, output->PageHeight-MarginH);

    // rysujemy na bitmapę na boku
    Graphics::TBitmap* temp = new Graphics::TBitmap();
    temp->Width = Panel1->Width;
    temp->Height = Panel1->Height;
    Panel1->PaintTo(temp->Canvas, 0, 0);

    // drukujemy skalując
    output->BeginDoc();
    output->Canvas->CopyRect(rTarget, temp->Canvas, rSource);
    output->EndDoc();

    // wywalamy bitmapę z obku
    delete temp;

Co się dzieje, to wszyscy wiemy. Skalowanie ma to do siebie, że nie jest wektorowe - w końcu skalujemy obrazek, a nie tekst. No i napisy są po prostu brzydkie, jeśli Panel zrobimy mały, a rozciągniemy go na całą stronę (j.w.)

Coby tego uniknąć, to nie ma rady. Rysujemy po Canvasie drukarki ręcznie. Za pmocą CopyRect wstawiamy obrazek. Za pomocą TextOut piszemy tekst odpowiednią czcionką (Canvas->Font). Ale to już nie takie wygodne, chociaż w rzadkich wypadkach ładniejsze (w końcu obrazek i tak straszy pikselami, jeśli jest mały, a rozciągnięcie było dużo).

0

Postanowiłem skalować grafike, a tekst pisać(rysować) metodą textout.

Tylko czy da się jakoś zrobić aby w textout ustawić przeźroczystość ?

Chodzi mi oczywiście o to aby pod tekstem nie zostawało białe tło. Nie wygląda to zbyt sympatycznie na grafice

1 użytkowników online, w tym zalogowanych: 0, gości: 1