




Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Community
Ask the community for help and clear up your study doubts
Discover the best universities in your country according to Docsity users
Free resources
Download our free guides on studying techniques, anxiety management strategies, and thesis advice from Docsity tutors
приобретение практических навыков его использования для ввода и вывода информации. 2. Задание на работу 1. Изучить теоретические положения по данной лабораторной работе. 2. Установить в системе эмулятор виртуальных COM-портов (Virtual Serial Port Driver). 3. Создать два виртуальных COM-порта и эмулировать связь между ними. 4. Разработать программное обеспечение для передачи данных через последовательный интерфейс. Вариантами заданий могут быть следующие: – реализовать чат, функционирующий через COM-порт
Typology: Exercises
1 / 8
This page cannot be seen from the preview
Don't miss anything!
Изучение методов печати текстовой, табличной и графической информации в операционной системе MS Windows , получение навыков подготовки произвольных документов к выводу на принтеры различного типа.
Для взаимодействия приложений с графическими устройствами, такими как экран дисплея, принтер или плоттер, в Windows используется интерфейс графических устройств ( GDI ). И когда приложению требуется выполнить операцию вывода графического изображения, оно осуществляет это посредством GDI и работает не с реальным (физическим), а с логическим устройством. Выполняя запрос приложения, GDI обращается к драйверу соответствующего устройства вывода, который уже непосредственно работает с физическим устройством. Такой подход позволяет приложениям Windows единообразно работать на любом оборудовании, лишь бы был установлен соответствующий драйвер. Само приложение обращается к устройству вывода посредством контекста устройства, который представляет собой структуру данных, содержащую информацию о том, как нужно выполнять операции вывода на данном устройстве. Эта структура при ее создании ассоциируется с драйвером конкретного физического устройства, преобразующего все направляемые ему вызовы в такие, которые им поддерживаются. Все сказанное в полной мере относится и к выводу на принтер: сначала необходимо создать контекст отображения, связанный с принтером, куда затем и направлять весь графический вывод (как и при выводе на экран). Однако отличия все-таки есть. И связаны они, прежде всего, с тем, что при печати графический вывод осуществляется постранично, а листы бумаги могут иметь различные размеры и/или ориентацию (книжную или альбомную). За отслеживание этих параметров целиком отвечает программист. Есть и некоторые другие отличия. Следует совершенно четко представлять, что вывод на принтер осуществляется исключительно через буфер, который, однако, служит не только для временного хранения данных. Все несколько сложнее. Дело в том, что при вызове функций рисования для контекста принтера эти команды GDI выполняются не сразу, а накапливаются в специальном метафайле. И только после того, как приложение завершит рисование одной страницы документа, созданный метафайл "проигрывается" в контексте принтера. Печать происходит именно в этот момент. Сам механизм скрыт от приложения, и единственное, что требуется, — это сообщить GDI о начале и завершении процесса печати листа. Вторым важным моментом является то, что печать в системе Windows организована через специальную очередь, которая формируется приложением Print Manager (Диспетчер печати). Для печати документа приложения помещают в эту очередь свои данные (задания на печать), выводимые на принтер в фоновом режиме, в порядке поступления. Для печати документов Win32 API предоставляет следующие функции:
— готовит метафайл; необходимо вызвать эту функцию перед выводом в контекст
устройства;
формирование метафайла, после чего он выводится непосредственно на принтер;
принудительного завершения процесса печати;
листов документа.
Как видите, функций немного. А это значит, что всю основную работу необходимо выполнить самостоятельно. Сам же процесс графического вывода на принтер достаточно прост:
BeginDoc(). Для завершения вывода информации на принтер вызывается функция EndDoc().
TextOutA(int, int, AnsiString).
одним из аргументов которой является указатель на графический объект TBitmap. Если
необходимо напечатать не растровое изображение, а графический объект, то его предварительно надо перевести в растровое изображение.
прочие) имеют свои функции для вывода их через объект Canvas.
Пример печати: TPrinter* Prntr; Prntr = Printer(); Prntr->BeginDoc(); Prntr->Canvas->TextOutA(100, 100, “Произвольный текст”); Prntr->Canvas->Draw(200,100,pBitmap); // pBitmap – указатель на объект TBitmap, содержащий некоторую картинку Prntr->Canvas->MoveTo(0,0);
int NumPages; //Переменная, определяющая номер текущей страницы: int PageNumber; Максимальное количество страниц в диапазоне — 9999; очевидно, что его вполне хватит для распечатки любого документа. Основным событием, в обработчике которого практически и будет осуществляться вся печать, будет событие PrintPage элемента printDocument. Класс Graphics , принадлежащий пространству имен System.Drawing , — один из важнейших классов, отвечающих за рисование графики и вывода текста на форме. При создании новой формы пространство имен System.Drawing по умолчанию включается в шаблон. Для формирования страницы печати создаем экземпляр этого класса: System.Drawing.Printing.PrintPageEventArgs e; Graphics graph = e.Graphics; //Создаем объект font, которому устанавливаем // шрифт элемента rtbText Font font = rtbText.Font; //Получаем значение межстрочного интервала — высоту шрифта float HeightFont = font.GetHeight(graph); //Создаем экземпляр strfmt класса StringFormat для определения //дополнительных параметров форматирования текста. StringFormat stringformat = new StringFormat(); Страница представляет собой прямоугольный объект, параметры которого следует определить. Для этого используется класс RectangleF (литера F указывает на использование типа данных с плавающей точкой float ): //Создаем экземляры rectanglefFull и rectfText класса RectangleF для //определения областей печати и текста. RectangleF rectanglefFull, rectfText; //Создаем переменные для подсчета числа символов и строк. int NumberSymbols, NumberLines; Страница, формируемая для печати, состоит из трех областей
Первая область — полный размер страницы, обычно имеющий названия, например, формат A4 или A3. Информацию об этой области предоставляет свойство PageBounds класса PrintPageEventArgs. Его значением является объект Rectangle , свойства X и Y которого равны 0 , а свойства Width и Height предоставляют размеры бумаги по умолчанию, выраженные в сотых долях дюйма. Вторая область связана с конструктивными особенностями принтеров — большинство из них используют для печати площадь, меньшую размеров бумаги. Область печати определяется значением свойства VisibleClipBounds класса Graphics , представляемая объектом RectangleF. Свойства Х и Y этого объекта имеют значения 0 , а ее свойства Width и Height равны горизонтальному и вертикальному размерам области печати страницы. В третьей области помещается текст, она обычно определяется пользователем. В Microsoft Word , например, мы устанавливаем заданные значения полей. По умолчанию, эта область рассчитывается с отступом в один дюйм по периметру страницы. Ее размер возвращается объектом Rectangle свойства MarginBounds. В любом случае, области формируются объектами Rectangle или RectangleF , конструкторы которых могут иметь следующий вид: Rectangle (int x, int y, int width, int height); RectangleF(float x, float y, float width, float height); Эти конструкторы отличаются только типом данных, формирующих структуру. Координатные оси области, представляющей собой прямоугольник, направлены следующим образом:
В качестве области печати устанавливаем объект rectanglefFull : if (graph.VisibleClipBounds.X<0) rectanglefFull = e.MarginBounds; else //Определяем объект rectanglefFull rectanglefFull = new RectangleF( //Устанавливаем координату X e.MarginBounds.Left — (e.PageBounds.Width — graph.VisibleClipBounds.Width)/2, //Устанавливаем координату Y .MarginBounds.Top — (e.PageBounds.Height — graph.VisibleClipBounds.Height)/2, //Устанавливаем ширину области e.MarginBounds.Width, //Устанавливаем высоту области e.MarginBounds.Height);
imageLength = printableWidth * 90/100; Yposition += imageLength; } else { imageLength = printableHeight * 90/100; Xposition += imageLength + spaceWidth; } Выводим изображение в области rectImage : Rectangle rectImage= new Rectangle((int)leftMargin + 1, (int)topMargin + 1, (int)imageLength,(int)imageLength); graph.DrawImage(pictureBox1.Image,(int)leftMargin + 1, (int)topMargin + 1, (int)imageLength,(int)imageLength); Определяем область rectText и выводим в нее строку с указанием размера файла (используется метод PrintTextString ): RectangleF rectText = new RectangleF(Xposition, Yposition, rightMargin -
- Xposition, bottomMargin - Yposition); PrintText (graph, font,"Размер изображения: ", Convert.ToString (pictureBox1.Image.Size), ref rectText); Более подробно о механизме печати документов в операционной системе MS Windows вы можете прочитать в файле Spooler.doc , который находится в подкаталоге Print каталога с данной лабораторной работой. Проекты, созданные в средах Borland C++ Builder и MS Visual Studio 2005 и демонстрирующие печать информации, находятся в подкаталогах Builder и C# подкаталога Print каталога с методическими указаниями к данной лабораторной работе.
Персональный компьютер с установленной операционной системой MS Windows 2000 SP4 , XP SP2, Vista или 7 и средами разработки ПО Borland C++ Builder или MS Visual Studio 2005/2008/.
Отчет должен содержать:
6.1. Каким образом выполняется печать документов в операционной системе MS Windows? 6.2. Какие функции Win32 API используются при печати? Какова последовательность вызова этих функций? 6.3. Какие средства предлагает среда Borland C++ Builder для печати информации? 6.4. Перечислите достоинства и недостатки использования класса TPrinter при печати.
6.5. Каким образом осуществляется вывод на принтер текстовой и графической информации при использовании класса TPrinter? 6.6. Для чего служат объекты PrintDocument, PageSetupDialog, PrintPreviewDialog, PrintDialog? Перечислите известные вам свойства и методы этих объектов. 6.7. Каким образом осуществляется печать текстовой информации в приложениях, созданных для платформы .NET? 6.8. Каким образом осуществляется печать графической информации в приложениях, созданных для платформы .NET? 6.9. Какие области выделяют в страницах, формируемых для печати? Как можно определить границы этих областей? 6.10. Дайте характеристику известным вам методам печати документов в операционной системе MS Windows.