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

Ваш аккаунт

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

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

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

Принтер и Api (очень срочно)

621
20 апреля 2005 года
Бешеный кролик
151 / / 23.03.2004
Друзья! Выручайте! Скопировал из инета следующий пример:


HDC hdcPrint; // дескриптор DC принтера
char szDevString[120]; // массив для данных WIN.INI
char *szPrinter, *szDriver; // имена драйвера и принтера
char *szPort; // название порта

// Извлекаем данные о принтере, его драйвере, и
// название порта вывода из WIN.INI.

GetProfileString("windows", "device", ",,,",
szDevString, 120);

// Анализируем строку имен, устанавливаем ptrs как требуется
// Если строка содержит требуемые имена, используем их, чтобы
// создать контекст устройства.

if ((szPrinter = strtok(szDevString,
(const char *) ","))
&& (szDriver = strtok ((char *) NULL,
(const char *) ", "))
&& (szPort = strtok ((char *) NULL,
(const char *) ", ")))
{
hdcPrint = CreateDC(szDriver, szPrinter,
szPort, NULL);
}

// Печатаем пробную страницу, которая содержит строку
// "PRINTER TEST" в верхнем левом углу.

Escape(hdcPrint, STARTDOC, 8, "Test-Doc", NULL);
TextOut(hdcPrint, 50, 50, "PRINTER TEST", 12);
Escape(hdcPrint, NEWFRAME, 0, NULL, NULL);
Escape(hdcPrint, ENDDOC, 0, NULL, NULL);


// Удаляем DC принтера.

DeleteDC(hdcPrint);

Создал форму, поместил на нее кнопку и вставил его в обработчик нажатия на эту кнопку.
Ничего не работает (т.е. не печатает). Почему? Что не так?
488
20 апреля 2005 года
Mоngооsе
465 / / 01.04.2005
Печатает. Но на самом верху листа. Может твой принтер не хочет печатать. Увеличь y в TextOut(..)
621
20 апреля 2005 года
Бешеный кролик
151 / / 23.03.2004
Цитата:
Originally posted by Mоngооsе
Печатает. Но на самом верху листа. Может твой принтер не хочет печатать. Увеличь y в TextOut(..)



Не помогает :(. Может быть дело в том, что у меня Millenium? А может быть и нет... В принципе мне нужно распечатать некое окно со всеми его дочерними окнами. Я хотел найти HDC принтера, а затем послать окну WM_PRINT. Вообще ход мысли у меня правильный?

621
20 апреля 2005 года
Бешеный кролик
151 / / 23.03.2004
Вот так, например, делаю : SendMessage(this->Handle,WM_PRINT,(WPARAM)hdcPrint,0);
... и тоже тишина :( А нужно очень срочно...
488
20 апреля 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by Бешеный кролик
Вообще ход мысли у меня правильный?

Да. Это Millenium крыво работает. Уменя W2000. Посмотри значения строк szPrinter, szDriver, szPort перед первым Escape.

Я бы печатал формы через Form->Print().

SendMessage(this->Handle,WM_PRINT,(WPARAM)hdcPrint,0);???

Я код поместил так как есть в обработчик OnButton()

621
20 апреля 2005 года
Бешеный кролик
151 / / 23.03.2004
ю
621
21 апреля 2005 года
Бешеный кролик
151 / / 23.03.2004
Спасибо за помощь! Со строками все нормально.
Form->Print() мне не подходит.
Поясню задачу. У меня в программе создаются отчеты. Оформляются они примерно так же как мы делаем формы в билдере. Т.е. у меня есть форма, она разделена на две панели - верхнюю (узкую с кнопочками) и нижнюю (собственно поле отчета). Выбирая на верхней панели элемент - график, таблицу, надпись - можно бросить его на поле отчета, двигать его там, растягивать, редактировать. Как бы мне вот эту нижнюю панель со всеми элементами принтануть. Пока можно примитивно, но очень срочно.
Да, элементы, например графики являются окошками и тоже содержат дочерние окна (легенды, надписи). Необходимо, чтобы все это было на бумаге.

М.б. кто-нибудь подскажет другой путь печати?
И если дело в Millenium, то как исправить код? Где об этом прочесть? В конце-концов различные программы ведь печатают в Millenium
488
21 апреля 2005 года
Mоngооsе
465 / / 01.04.2005
На счет кривости Milleniuma я шутил. Послать форме команду WM_PRINT мало. Его нужно и обработать. Т.е. самому написат код печати.
621
21 апреля 2005 года
Бешеный кролик
151 / / 23.03.2004
Цитата:
Originally posted by Mоngооsе
На счет кривости Milleniuma я шутил. Послать форме команду WM_PRINT мало. Его нужно и обработать. Т.е. самому написат код печати.



Это ужасно :(

621
21 апреля 2005 года
Бешеный кролик
151 / / 23.03.2004
Цитата:
Originally posted by Бешеный кролик
Это ужасно :(



Сделал через StretchBlt. Намучился правда с масштабированием. Вопрос такой: В MSDN написано, что для некоторых девайсов эта функция не работает... А в реальности? Много ли типов принтеров, для которых она работать не будет? Кто-нибудь знает? И существует ли для таких принтеров какой-нибудь похожий метод? Или придется на канве рисовать?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог