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

 
вывод на печать, как организовать печать отчетов
гость
Отправлено: 01.08.2006, 14:22


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







Эдравствуйте.

В статьях на этом сайте нашел примеры как сделать отчеты, как сделать текстовый редактор. Можно с помощью стандартных диалогов открывать, сохранять текстовые файлы, но не описана печать.
Подскажите где можно почитать такой же подробный пример использования стандартного диалога вывода на печать(если не лень может и сам кто-нибудь напишет).

Зарание спасибо.
гость
Отправлено: 01.08.2006, 16:45


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







подскажите please хорошую книгу по builder 6 C++
с примерами
AVC
Отправлено: 01.08.2006, 16:52


Ветеран

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



Смотря что надо печатать. Просто файл, картинку или построенный отчет по БД или ...
Evil_Smile
Отправлено: 01.08.2006, 19:53


Дежурный стрелочник

Группа: Участник
Сообщений: 57



книга архангельского 17 метров
в формате djvu
http://www.dago.506.com1.ru/books/Arhangel...elckiy_BCB6.zip

а вот ридер
http://li.ru/go?www.3dnews.ru/files/pub/of...jView-0.4.1.exe
Guest
Отправлено: 02.08.2006, 10:47


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







QUOTE (AVC @ 01/08/2006, 16:52)
Смотря что надо печатать. Просто файл, картинку или построенный отчет по БД или ...

нужно печатать, то что находится в Memo, исползую следующий код:

if (PrintDialog1->Execute())
{
Printer()->BeginDoc();
for (int i=0; iMemo1->Lines->Count; i++)
{
Printer()->Canvas->TextOut(20, 20*i, Form2->Memo1->Lines->Strings[i]);
}
Printer()->EndDoc();
}

Все печатает, только очень криво.подбираю числа (здесь 20).
и если текст не влезает на один лист, а при нормальном виде он не влезает, то второго листа принтер не требует:(
Guest
Отправлено: 02.08.2006, 10:58


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







спасибо за книгу
Guest
Отправлено: 02.08.2006, 12:54


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







Простая печать строк (режим эмуляции дос печати, так печатает FAR по Alt F5)
CODE

bool __fastcall TF_DosPrint::Print (void)
{
AnsiString prnname = системное_имя_принтера;
AnsiString docname = название_документа (для красоты);

if (prnname.IsEmpty()) return false;

AnsiString text = печатаемый_текст
if (text.IsEmpty())  return false;

DOC_INFO_1 doc_info_1;
doc_info_1.pDocName = docname.c_str();
doc_info_1.pOutputFile = NULL;
doc_info_1.pDatatype = NULL;

HANDLE phandle = 0;
DWORD tcou = text.Length();
DWORD pcou = 0;

bool ret = true;

try {
if (!OpenPrinter(prnname.c_str(), &phandle, NULL))
   throw Exception("OpenPrinter");

if (!StartDocPrinter(phandle, 1, (LPBYTE)(&doc_info_1)))
   throw Exception("StartDocPrinter");

if (!WritePrinter (phandle, text.c_str(), tcou, &pcou))
   throw Exception("WritePrinter");

if (!EndDocPrinter(phandle))
   throw Exception("EndDocPrinter");

} // try

catch (Exception &xcp)
{ text = AnsiString("Ошибка при вызове функции ") + xcp.Message;
   ShowMessage(text);
   ret = false;
}

if (phandle)  ClosePrinter(phandle);
return ret;
}
Guest
Отправлено: 04.08.2006, 12:13


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







а стандартныи диалог вывода на печать (PrintDialog1) не позволяет производить распечатку некольких страниц?
AVC
Отправлено: 04.08.2006, 13:17


Ветеран

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



Позволяет, если вы это организуете.
Посмотрите справку по PrintDialog->Execute().
Guest
Отправлено: 04.08.2006, 23:58


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







все так, с англииским туго. может кто знает, где скачать русскии help?

спасибо за информацию, книга отличная.

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