C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Предпросмотр перед печатью, Как скопировать TPrinter::Canvas
TerAn
  Отправлено: 03.04.2004, 11:28


Не зарегистрирован







Подскажите, как можно организовать предпросмотр перед печатью. Проблема в том, что для TPinter::Canvas не работает метод CopyRect. Каким образом можно скопировать то, что нарисовано на канвасе принтера на другой канвас?
Admin
Отправлено: 03.04.2004, 18:14


Владимир

Группа: Администратор
Сообщений: 1190



Почему не работает?

CODE

void __fastcall TForm1::Button2Click(TObject *Sender)
{

if(OpenDialog1->Execute()){

   TPrinter* tp = new TPrinter;

    TRect   MyRect, MyOther;

    MyRect = Rect(10,10,100,100);
    MyOther = Rect(1,1,100, 201);

   
   Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
   Bitmap->LoadFromFile(OpenDialog1->FileName);

    tp->BeginDoc();
    tp->Canvas->CopyRect(MyOther, Bitmap->Canvas, MyRect);
    tp->EndDoc();

    delete Bitmap;
    }
}
//---------------------------------------------------------------------------

TerAn
Отправлено: 04.04.2004, 11:00


Не зарегистрирован







Да, не спорю так работает, но надо то наоборот, т.е. надо скопировать с канваса принтера на какой-нибудь другой. В хелпе по этому поводу написано следующее:

QUOTE
C++Builder canvases use device-dependent bitmaps to implement the Draw, StretchDraw, or CopyRect methods. Because of this, you can’t use these methods with most printers.
.
Asher
Отправлено: 04.04.2004, 12:42


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
А в чем разница куда копировать?
А еще лучше сделай метод рисования независимым, т.е. передавай ему только указатель на Canvas и его размер.
Подсунешь Image->Canvas — будет PreView, подсунешь Printer->Canvas — печать. biggrin.gif
TerAn
Отправлено: 04.04.2004, 14:22


Не зарегистрирован







Да, наверное независимый метод рисования это лучшее решение, так и сделаю, спасибо.

Вернуться в Вопросы программирования в C++Builder