Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Подскажите как вывести на печать содержимое формы с нормальным разрешением???

26K
10 мая 2007 года
respown
3 / / 11.04.2007
Hi All!!! Помогите решить проблему. необходимо вывести содержимое формы на печать, до етого с печатью не работал, поетому пока в етом деле noob(надеюсь что временно), а тута пришлось блин, почитал хелп нашел уже готовый пример:

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)

{
  PrintDialog1->Options.Clear();
  PrintDialog1->Options << poPageNums << poSelection;
  PrintDialog1->FromPage = 1;
  PrintDialog1->MinPage = 1;
  PrintDialog1->ToPage = PageControl1->PageCount;
  PrintDialog1->MaxPage = PageControl1->PageCount;
  if (PrintDialog1->Execute())
  {
    int Start, Stop;
    // determine the range the user wants to print
    switch (PrintDialog1->PrintRange)
    {
      case prSelection:

        Start = PageControl1->ActivePage->PageIndex;
        Stop = Start;
        break;
      case prPageNums:
        Start = PrintDialog1->FromPage - 1;
        Stop =  PrintDialog1->ToPage - 1;
        break;
      default:  // prAllPages
        Start = PrintDialog1->MinPage - 1;
        Stop = PrintDialog1->MaxPage - 1;
        break;
    }
    // now, print the pages
    Printer()->BeginDoc();
    for (int i = Start; i <= Stop; i++)

    {
      PageControl1->Pages->PaintTo(Printer()->Handle, 10, 10);
      if (i != Stop)
        Printer()->NewPage();
    }
    Printer()->EndDoc();
  }
}

Просмотрев понял что ето именно то что мне нужно, так как у меня тоже используется PageControl. После тестирования, оказалось, что картинка очень маленькая(меньше чем на мониторе в несколько раз). Порылся в литературе, нашел вывод изображения с масштабированием(правда на Delphi):
Код:
...
Printer.Canvas.Refresh;
//Получаю информацию о разрешении принтера
PointsX:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX)/70;
PointsY:=GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSY)/70;
//Расчитываю размеры изображения
X1:=round((Printer.PageWidth - Image1.Picture.Bitmap.Width*PointsX)/2);
Y1:=round((Printer.PageHeight - Image1.Picture.Bitmap.Height*PointsY)/2);
X2:=round(X1+Image1.Picture.Bitmap.Width*PointsX);
Y2:=round(Y1+Image1.Picture.Bitmap.Height*PointsY);
//Вывод изображения на печать
Printer.Canvas.CopyRect(Rect(X1,Y1,X2,Y2),Image1.Picture.Bitmap.Canvas,
Rect(0,0,Image1.Picture.Bitmap.Width,Image1.Picture.Bitmap.Height));
...

Переписал все ето дело под С++, вместо Image вставил PageControl, вроде все ОК, все работает, печатает, ошибок нету, однако картинку не печатает, то есть печать идет, все нормально, но из принтера почемуто вылазит пустой чистый лист. Незнаю че еще делать, в литературе копаться времени уже нету, методом научного тыка тестить прогу тоже времени нету, помогите пожалуста решить енту проблему.
Заранее благодарен!!!
263
10 мая 2007 года
koltaviy
816 / / 16.12.2004
Гы-гы-гы.. :D
Знакомая ситуация. Сам сталкивался:
http://forum.codenet.ru/showthread.php?t=26906&highlight=landscape

Решил переходом на печать из-под MS Office ( MS Word/ MS Excel ). Формируешь файл средствами OLE. Потом выводишь на печать!!
То что ты делаешь - гемор полный!! Столкнешься еще с кучей проблем, ИМХО!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог