Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
Анонимщик   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
1-9204
Loxly
2002-02-14 20:24
2002.03.04
Непонятки с обработчиком события OnKeyDown


3-9081
bsa
2002-02-05 15:56
2002.03.04
Как быть с циклическими ссылками в таблицах??


1-9175
Dimedrol
2002-02-12 13:10
2002.03.04
Stay on top v.s. MessageDlg ?!


7-9320
AlexKniga
2001-11-27 18:10
2002.03.04
Не в тему. Про аудио системы.


14-9274
jk
2002-01-16 18:40
2002.03.04
Гребаный ActiveX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский