Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.04;
Скачать: CL | DM;

Вниз

Помогите с печатью метафайла   Найти похожие ветки 

 
Анонимщик ©   (2002-02-14 10:54) [0]

Пытаюсь распечатать окно (форму) с помощью метафайла. Вот код:

int originalPrinter100mmLeftMargin = 2540 * GetDeviceCaps(Printer()->Handle, PHYSICALOFFSETX)/ GetDeviceCaps(Printer()->Handle, LOGPIXELSX);
int originalPrinter100mmTopMargin = 2540 * GetDeviceCaps(Printer()->Handle, PHYSICALOFFSETY)/ GetDeviceCaps(Printer()->Handle, LOGPIXELSY);

Printer()->BeginDoc();
TMetafile* pMetafile = new TMetafile();
pMetafile->MMWidth = myForm->width100mm;
pMetafile->MMHeight = myForm->height100mm;
pMetafile->Inch = 1440;
TMetafileCanvas* pMCanvas = new TMetafileCanvas(pMetafile, 0);
myForm->PaintTo(pMCanvas->Handle, 0, 0);
pMCanvas->Free();
//pMetafile->Width *= 2.54 * 100 / Screen->PixelsPerInch;
//pMetafile->Height *= 2.54 * 100 / Screen->PixelsPerInch;
float leftMargin = GetDeviceCaps(Printer()->Handle, LOGPIXELSX)* myForm->leftMargin100mm/2540;
float topMargin = GetDeviceCaps(Printer()->Handle, LOGPIXELSY)* myForm->topMargin100mm/2540;
Printer()->Canvas->Draw(leftMargin, topMargin, pMetafile);
pMetafile->Free();
Printer()->EndDoc();

Печатается на разных принтерах с разными размерами. Те две строки, что закомментированы, на некоторых из них помогают привести размеры к обычным. Мне нужно, чтобы печатаемая форма была тех же размеров, что и на экране. Только, пожалуйста, не ссылайтесь на функцию Form.Print.
Что же не так?


 
Анонимщик ©   (2002-02-14 10:55) [1]

Да, забыл сказать,
myForm->leftMargin100mm - это свойство отступа для формы.


 
Alx2 ©   (2002-02-14 11:02) [2]

Учитывать DPI по ширине и высоте и растягивать при прорисовке метафайл через StretchDraw?


 
IronHawk ©   (2002-02-14 11:19) [3]

Позволь спросить !
Зачем такие сложности ?


 
Анонимщик ©   (2002-02-14 11:46) [4]

Alx2
StretchDraw не подходит - не все драйвера принтеров поддерхивают.

IronHawk
Дело в том, что эта процедура приблизительная. На самом деле мне нужно выводить на печать не все окно, а только некоторые лэйбы на нем, и на метафайл я бы копировал не всю форму, а только некоторые ее части. Если же печатать как Form.Print, то печатается картинка (внутри вызывается функция form.GetImage, или что-то такое) - мне это не подходит вообще, к тому же нужно еще масштабировать и вращать все это. Объяснил?


 
Alx2 ©   (2002-02-14 11:58) [5]

>Анонимщик © (14.02.02 11:46)
>StretchDraw не подходит - не все драйвера
>принтеров поддерхивают.

Hастягивать его можно на другом DC


 
Анонимщик ©   (2002-02-14 19:57) [6]

Честно говоря, вроде простое дело, но сколько соков из меня высосало. Вы напишите, а я просто скопирую, а? А то сил больше нету.



Страницы: 1 вся ветка

Текущий архив: 2002.03.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
6-9248
[TLS]Lord
2001-12-11 01:59
2002.03.04
Неужели нет ничего кроме NMSMTP?


14-9268
veZuk
2002-01-12 02:40
2002.03.04
Сколько дать за перевод?


1-9212
Stormick
2002-02-15 00:40
2002.03.04
Ну не ужели никто не знает


6-9265
Evgenii
2001-12-14 23:09
2002.03.04
Народ, помогите, как звонить через Modem.


4-9328
Evgeny
2001-12-22 12:53
2002.03.04
URL