Проектування програм з використанням діалогових вікон принтера

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2014
Тип роботи:
Лабораторна робота
Предмет:
Людино-машинні інтерфейси

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ ТЕХНІЧНИЙ КОЛЕДЖ НАЦІОНАЛЬНОГО УНІВЕРСИТЕТУ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» КАФЕДРА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ ТА КОМП’ЮТЕРНОЇ ТЕХНІКИ Лабораторна робота №4 з Людино-машинний інтерфейс на тему: “ Проектування програм з використанням діалогових вікон принтера” м. Львів – 2011 Мета: Засвоїти методику та виробити практичні навички у проектуванні та створенні програм з використанням ділових вікон принтера Visual C# 2010. Теоретичні відомості. Windows надає кілька основних діалогових вікон, що дозволяють забезпечити однаковість інтерфейсу користувача в додатках Windows. Класи PageSetupDialog, PrintPreviewDialog і PrintDialog відображають діалогові вікна, що дозволяють користувачеві керувати параметрами друку документів. При друці формується одна або кілька сторінок, за які відповідає об'єкт PrintDocument. Елементи управління PageSetupDialog, PrintPreviewDialog і PrintDialog є діалогові вікна параметрів сторінок, перегляду та друку.  Властивості Document елементів управління PageSetupDialog і PrintPreviewDialog встановлюємо  об’єкт/елемент PrintDocument .Тим самим ми пов'язуємо об'єкт printDocument  за формування сторінок діалоговими вікнами.  pageSetupDialog1.Document = printDocument1; printPreviewDialog1.Document = printDocument1; printDialog1.Document = printDocument1; Для роботи з друком в бібліотеці. NET Framework застосовується классD ystem.Drawing. Printing, тому його потрібно підключити на самому початку роботи: using System.Drawing.Printing; У класі форми потрібно оголосити допоміжні змінні змінні: / / Змінна для зберігання тексту для друку. string stringPrintText; / / Змінна, яка визначає номер сторінки, з якої потрібно почати друк int StartPage; / / Змінна, яка визначає кількість сторінок для друку: int NumPages; / / Змінна, яка визначає номер поточної сторінки: int PageNumber; Елемент PageSetupDialog Дозволяє користувачам змінювати параметри друку для сторінки, включаючи поля та тип паперу. Головна властивість Document. Отримує або задає значення, що вказує об'єкт PrintDocument, з якого виходять параметри сторінки. Метод ShowDialog() – показує діалог. //Показываем диалог pageSetupDialog1.ShowDialog(); Елемент PrintPreviewDialog Являє собою форму ділового вікна для попереднього перегляду. Головна властивість Document. Отримує або задає значення, що вказує об'єкт PrintDocument, з якого виходять параметри сторінки. Метод ShowDialog() – показує діалог. //ініціалізуємо змінні printDocument1.DocumentName = Text; stringPrintText =”Текст”; StartPage = 1; NumPages = printDialog1.PrinterSettings.MaximumPage; PageNumber = 1; //Показываем діалог printPreviewDialog1.ShowDialog(); Елемент PrintDialog Являє собою стандартний діалогове вікно друку документу. Головні властивості: AllowSelection - Дозвіл на друк виділеного фрагмента документа. AllowSomePages - Дозвіл на друк кількох сторінок. PrintDocument - Зв'язування з об'єктом типу PrintDocument. Код для друку за допомогою PrintDialog printDialog1.AllowSelection = rtbText.SelectionLength >0; if(printDialog1.ShowDialog()==DialogResult.OK) { printDocument1.DocumentName =Text; //Визначаємо діапазон сторінок switch(printDialog1.PrinterSettings.PrintRange) { //Вибираємо всі сторінки case PrintRange.AllPages: stringPrintText = rtbText.Text; StartPage = 1; NumPages = printDialog1.PrinterSettings.MaximumPage; break; //вибираємо виділену область case PrintRange.Selection: stringPrintText = rtbText.SelectedText; StartPage = 1; NumPages = printDialog1.PrinterSettings.MaximumPage; break; //вибираємо ряд сторінок case PrintRange.SomePages: stringPrintText = rtbText.Text; StartPage = printDialog1.PrinterSettings.FromPage; NumPages = printDialog1.PrinterSettings.ToPage - StartPage+1; break; } PageNumber = 1; //Викликаємо встроєний метод для початку друку printDocument1.Print(); Елемент PrintDocument Описує спосіб друку документу. Основною подією, в  якому практично і буде здійснюватися весь друк, буде подія PrintPage елемента printDocument: private void printDocument1_PrintPage (object sender,System.Drawing.Printing.PrintPageEventArgs e) {  } Далі всі описувані фрагменти коду будуть стосуватися до цього обробника. Клас Graphics, що належить простору імен System.Drawing, - один з найважливіших класів, що відповідають за малювання графіки та виведення тексту на формі. При створенні нової форми простір імен System.Drawing за замовчуванням включається в шаблон. Для формування сторінки друку створюємо екземпляр цього класу: Graphics graph = e.Graphics; / / Створюємо об'єкт font, якому встановлюємо шрифт //Font font = rtbText.Font; Font font = new Font(this.Font, FontStyle.Bold); / / Отримуємо значення міжрядкового інтервалу - висоту шрифту float HeightFont = font.GetHeight (graph); / / Створюємо екземпляр strfmt класу StringFormat для визначення / / Додаткових параметрів форматування тексту. StringFormat stringformat = new StringFormat (); Сторінка представляє собою прямокутний об'єкт, параметри якого слід визначити. Для цього використовується клас RectangleF (літера F вказує на використання типу даних з плаваючою точкою float): / / Створюємо екземлярів rectanglefFull і rectfText класу RectangleF для / / Визначення областей друку і тексту. RectangleF rectanglefFull, rectfText; / / Створюємо змінні для підрахунку числа символів і рядків. int NumberSymbols, NumberLines; Розбитий на рядки текст може вийти за межі призначеної для нього області rectanglefText. Щоб цього не сталося, ми створили примірник stringformat класу StringFormat, для якого тепер встановлюємо значення Trimming: if(rtbText.WordWrap){stringformat.Trimming=StringTrimming.Word;}else{ stringformat.Trimming = StringTrimming.EllipsisCharacter; stringformat.FormatFlags | = StringFormatFlags.NoWrap;} / / При друку вибраних сторінок переходимо до першої стартовій сторінці while((PageNumber<StartPage)&&(stringPrintText.Length>0)){if (rtbText.WordWrap) / / Вимірюємо текстові змінні, / / Формують друк, і повертаємо число символів NumberSymbols/ / І число рядків NumberLines graph.MeasureString (stringPrintText, font, rectanglefText.Size, stringformat, out NumberSymbols, outNumberLines);else NumberSymbols = SymbolsInLines (stringPrintText, NumDisplayLines); stringPrintText = stringPrintText.Substring (NumberSymbols);/ / Збільшуємо кількість сторінок PageNumber + +; / / Якщо довжина рядка stringPrintText дорівнює нулю (немає тексту для друку), / / Зупиняємо друк if(stringPrintText.Length==0){e.Cancel = true;return;} / / Виводимо (малюємо) текст для друку - stringPrintText, використовуємо для цього шрифт font, / / Кисть чорного кольору - Brushes.Black, район друку - rectanglefText, / / Передаємо рядок додаткового форматування stringformat graph.DrawString (stringPrintText, font, Brushes.Black, rectanglefText, stringformat); / / Отримуємо текст для наступної сторінки if (rtbText.WordWrap) graph.MeasureString (stringPrintText, font, rectanglefText.Size, stringformat, out NumberSymbols, outNumberLines);else NumberSymbols = SymbolsInLines (stringPrintText, NumDisplayLines); stringPrintText = stringPrintText.Substring (NumberSymbols); / / Очищаємо об'єкт stringformat, використаний для формування полів. stringformat = new StringFormat (); / / Додаємо висновок на кожну сторінку її номера stringformat.Alignment = StringAlignment.Far; graph.DrawString ("Сторінка" + PageNumber, font, Brushes.Black, rectanglefFull, stringformat); PageNumber + +; / / перевіряємо, чи є текст для друку і номер сторінки, заданої для друку e.HasMorePages = (stringPrintText.Length> 0) & & (PageNumber <StartPage + NumPages); / / Для друку з вікна попереднього перегляду знову инициализируем змінні if(!e.HasMorePages){StartPage = 1; NumPages = printDialog1.PrinterSettings.MaximumPage; PageNumber = 1}; Хід роботи Завдання. Спроектувати та розробити програму на основі MDI інтерфейсів з використанням діалогових вікон та елементів керування для роботи з принтерами та друком даних з БД згідно варіанту. Програма має включати пошук по вибірці, друк отриманих даних з вибірки та впорядкування вікон. Варіант 5 5 Музичний альбом Id, виконавець, назва альбому, жанр, кількість пісень, тривалість   Код програми: Клас Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace laba2{ public partial class Form1 : Form { //Стрічка підєднання до БД Access string conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=album.accdb;Persist Security Info=False;"; public Form1() { InitializeComponent(); } //Процедура викликається при запуску програми private void вихідToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } private void пошукПоIdToolStripMenuItem_Click(object sender, EventArgs e) { SearchbyID sbID = new SearchbyID(); sbID.MdiParent = this; sbID.Show(); } private void пошукПоВиробникуToolStripMenuItem_Click(object sender, EventArgs e) { Searchbyartist sbbr = new Searchbyartist(); sbbr.MdiParent = this; sbbr.Show(); } private void пошукЗаПлКондиціонуванняToolStripMenuItem_Click(object sender, EventArgs e) { Searchbyname sbsq = new Searchbyname(); sbsq.MdiParent = this; sbsq.Show(); } private void пошукЗаПлОбігрівуToolStripMenuItem_Click(object sender, EventArgs e) { Searchbytitle sbgr = new Searchbytitle(); sbgr.MdiParent = this; sbgr.Show(); } private void пошукЗаПлОхолодженняToolStripMenuItem_Click(object sender, EventArgs e) { Searchbykilk sbhd = new Searchbykilk(); sbhd.MdiParent = this; sbhd.Show(); } private void пошукЗаКольоромToolStripMenuItem_Click(object sender, EventArgs e) { Searchbydur sbco = new Searchbydur(); sbco.MdiParent = this; sbco.Show(); } private void відобразитиToolStripMenuItem_Click(object sender, EventArgs e) { Viewmusa vCond = new Viewmusa(); vCond.MdiParent = this; //використовуємо Ado.net клас для того що б взнати кількість записів useDB uDB = new useDB(conString); uDB.OpenCon(); //Підєднання до БД //Міняємо назву дочірньої MDI-форми яка відображає всі записи в БД vCond.Text = "В БД " + uDB.Cout().ToString() + " записів!"; vCond.Show(); uDB.CloseCon(); // Відєднання від БД } private void додатиToolStripMenuItem_Click(object sender, EventArgs e) { Insertmusa iCond = new Insertmusa(); iCond.MdiParent = this; iCond.Show(); } private void знищитиToolStripMenuItem_Click(object sender, EventArgs e) { Deletemusa dCond = new Deletemusa(); dCond.MdiParent = this; dCond.Show(); } private void Form1_Load(object sender, EventArgs e) { IsMdiContainer = true; //задає довжину і ширину батьківської MDI-форми this.Width = 800; this.Height = 600; // StartPosition = CenterToScreen; } }} Клас viewmusa.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Printing; namespace laba2{ public partial class Viewmusa : Form { //Стрічка підєднання до БД Access string conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=album.accdb;Persist Security Info=False;"; string stringPrintText = ""; internal PrintPreviewControl PrintPreviewDialog1; PrintDialog printDlg = new PrintDialog(); PrintDocument printDoc = new PrintDocument(); //Змінна ,яка визначає номер сторінки,з якої потрібно почати друк int startPage; //Змінна,яка визначає кількість сторінок в документі int numPages; //Змінна ,яка визначає номер поточної сторінки int Pagenumber; public Viewmusa() { InitializeComponent(); } private void ViewCond_Load(object sender, EventArgs e) { // String str = ""; DataTable table = new DataTable(); DataTable tableGenre = new DataTable(); // this.textBox1.Clear(); useDB uDB = new useDB(conString); uDB.OpenCon(); table = uDB.Allmus(); dataGridView1.DataSource = table; stringPrintText = "Перелік всіх альбомів \n\n"; foreach (DataRow dataRow in table.Rows) { stringPrintText = stringPrintText + dataRow[0].ToString() + "\n" + dataRow[1] + "\n" + dataRow[2] + "\n" + dataRow[3] + "\n" + "\n" + dataRow[4] + "\n" + dataRow[5] + "\n\n"; } tableGenre = uDB.GetGenre(); treeView1.BeginUpdate(); treeView1.Nodes.Add("Музичний альбом"); for (int i = 0; i < tableGenre.Rows.Count; i++) { DataRow row = tableGenre.Rows[i]; treeView1.Nodes[0].Nodes.Add(row["title"].ToString()); } treeView1.EndUpdate(); dataGridView1.Columns[0].HeaderText = "№"; dataGridView1.Columns[1].HeaderText = "Виконавець"; dataGridView1.Columns[2].HeaderText = "Назва альбому"; dataGridView1.Columns[3].HeaderText = "Жанр"; dataGridView1.Columns[4].HeaderText = "К-сть пісень"; dataGridView1.Columns[5].HeaderText = "Тривалість"; uDB.CloseCon(); pageSetupDialog1.Document = printDocument1; printPreviewDialog1.Document = printDocument1; printDialog1.Document = printDocument1; printDialog1.AllowSomePages = true; printDialog1.AllowSelection = true; } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { DataTable table = new DataTable(); useDB uDB = new useDB(conString); if (e.Action == TreeViewAction.ByMouse) { uDB.OpenCon(); if (e.Node.Text == "Музичний альбом") { table = uDB.Allmus(); dataGridView1.DataSource = table; } else { table = uDB.Searchbytitle(e.Node.Text); dataGridView1.DataSource = table; } } uDB.CloseCon(); } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { int id; DataTable table = new DataTable(); useDB uDB = new useDB(conString); uDB.OpenCon(); MessageBox.Show("Column:" + e.ColumnIndex + " Row:" + e.RowIndex); id = Convert.ToInt16(dataGridView1[0, e.RowIndex].Value); table = uDB.SearchbyID(id); MessageBox.Show(table.Rows[0]["id"].ToString() + table.Rows[0]["artist"].ToString()); } private void переглядСторінкиToolStripMenuItem_Click(object sender, EventArgs e) { //Ініціалізація змінної printDocument1.DocumentName = Text; startPage = 1; numPages = printDialog1.PrinterSettings.MaximumPage; Pagenumber = 1; //Показуємо діалог printPreviewDialog1.ShowDialog(); } private void друкToolStripMenuItem1_Click(object sender, EventArgs e) { if (printDialog1.ShowDialog() == DialogResult.OK) { printDocument1.DocumentName = Text; startPage = 1; numPages = printDialog1.PrinterSettings.MaximumPage; Pagenumber = 1; //Викликаємо вбудований метод початку друку printDocument1.Print(); } } private void параметриСторінкиToolStripMenuItem_Click(object sender, EventArgs e) { pageSetupDialog1.ShowDialog(); } private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) { // Створюємо екземпляр graph класу Graphics Graphics graph = e.Graphics; // Створюємо об'єкт font, якому встановлюємо // Шрифт елемента rtbText Font font = new Font (this.Font, FontStyle.Bold); // Отримуємо значення міжрядкового інтервалу - висоту шрифту Т1, 134 float HeightFont = font.GetHeight (graph); // Створюємо екземпляр stringformat класу StringFormat для визначення // Додаткових параметрів форматування тексту. StringFormat stringformat = new StringFormat (); // Створюємо екземлярів rectanglefFull і rectanglefText класу RectangleF для // Определния областей друку і тексту. Т1, 104 RectangleF rectanglefFull, rectanglefText; // Створюємо змінні для підрахунку числа символів і рядків. int NumberSymbols, NumberLines; // В якості області друку встановлюємо об'єкт 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 e.MarginBounds.Top - (e.PageBounds.Height - graph.VisibleClipBounds.Height) / 2, // Встановлюємо ширину області e.MarginBounds.Width, // Встановлюємо висоту області e.MarginBounds.Height); rectanglefText = RectangleF.Inflate (rectanglefFull, 0, -2 * HeightFont); // Визначаємо кількість рядків int NumDisplayLines = (int) Math.Floor (rectanglefText.Height / HeightFont); // Встановлюємо висоту області rectanglefText.Height = NumDisplayLines * HeightFont; stringformat.Trimming = StringTrimming.EllipsisCharacter; // stringformat.FormatFlags l =StringFormatFlags.NoWrap; // При друку вибраних сторінок переходимо до першої стартовій сторінці while ((Pagenumber <startPage) && (stringPrintText.Length> 0)) { NumberSymbols = SymbolsInLines (stringPrintText, NumDisplayLines); stringPrintText = stringPrintText.Substring (NumberSymbols); // Збільшуємо кількість сторінок Pagenumber ++; } // Якщо довжина рядка stringPrintText дорівнює нулю (немає тексту для друку), // Зупиняємо друк if (stringPrintText.Length == 0) { e.Cancel = true; return; } // Виводимо (малюємо) текст для друку - stringPrintText, використовуємо для цього шрифт font, // Кисть чорного кольору - Brushes.Black, район друку - rectanglefText, // Передаємо рядок додаткового форматування stringformat graph.DrawString (stringPrintText, font, Brushes.Black, rectanglefText, stringformat); // Отримуємо текст для наступної сторінки // If (rtbText.WordWrap) // Graph.MeasureString (stringPrintText, font, rectanglefText.Size, stringformat, out NumberSymbols, out NumberLines); // Else NumberSymbols = SymbolsInLines (stringPrintText, NumDisplayLines); stringPrintText = stringPrintText.Substring (NumberSymbols); // Очищаємо об'єкт stringformat, використаний для формування полів. stringformat = new StringFormat (); // Додаємо висновок на кожну сторінку її номер stringformat.Alignment = StringAlignment.Far; graph.DrawString ("Сторінка" + Pagenumber, font, Brushes.Black, rectanglefFull, stringformat); Pagenumber ++; // Cнова перевіряємо, чи є текст для друку і номер сторінки, заданої для друку e.HasMorePages = (stringPrintText.Length> 0) && (Pagenumber <startPage + numPages); // Для друку з вікна попереднього перегляду знову инициализируем змінні if (! e.HasMorePages) { startPage = 1; numPages = printDialog1.PrinterSettings.MaximumPage; Pagenumber = 1; } } int SymbolsInLines (string stringPrintText, int NumLines) { int index = 0; for (int i = 0; i <NumLines; i ++) { index = 1 + stringPrintText.IndexOf ('\n', index); if (index == 0) return stringPrintText.Length; } return index; } } } Клас Insertmusa.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace laba2{ public partial class Insertmusa : Form { public Insertmusa() { InitializeComponent(); } //Викликається коли користувач нажме на кнопку очистити //Стрічка підєднання до БД Access string conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=album.accdb;Persist Security Info=False;"; private void button2_Click(object sender, EventArgs e) { textBox1.Clear(); textBox2.Clear(); textBox3.Clear(); textBox4.Clear(); textBox5.Clear(); } private void button1_Click(object sender, EventArgs e) { useDB uDB = new useDB(conString); musa myCond = new musa(); int row; myCond.artist = textBox1.Text; myCond.name = textBox2.Text; myCond.title = textBox3.Text; myCond.kilk = Convert.ToInt16(textBox4.Text); myCond.dur = Convert.ToInt16(textBox5.Text); uDB.OpenCon(); row = uDB.Insertmusa(myCond); if (row != 0) MessageBox.Show("Запит було добавлено!"); else MessageBox.Show("Запит не було добавлено!"); uDB.CloseCon(); } }} Клас Deletemusa.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace laba2{ public partial class Deletemusa : Form { //Стрічка підєднання до БД Access string conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=album.accdb;Persist Security Info=False;"; public Deletemusa() { InitializeComponent(); } //Викликається коли користувач нажме на кнопку очистити private void button1_Click(object sender, EventArgs e) { useDB uDB = new useDB(conString); int id; uDB.OpenCon(); id = Convert.ToInt16(textBox1.Text); uDB.Deletemusa(id); } private void button2_Click(object sender, EventArgs e) { textBox1.Clear(); } private void textBox1_MouseClick(object sender, MouseEventArgs e) { textBox1.Clear(); }} Клас SearchbyID.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Printing; namespace laba2{ public partial class SearchbyID : Form { public SearchbyID() { InitializeComponent(); } //Стрічка підєднання до БД Access string conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=album.accdb;Persist Security Info=False;"; string stringPrintText = ""; internal PrintPreviewControl PrintPreviewDialog1; PrintDialog printDlg = new PrintDialog(); PrintDocument printDoc = new PrintDocument(); //Змінна ,яка визначає номер сторінки,з якої потрібно почати друк int startPage; //Змінна,яка визначає кількість сторінок в документі int numPages; //Змінна ,яка визначає номер поточної сторінки int Pagenumber; private void button1_Click(object sender, EventArgs e) { useDB uDB = new useDB(conString); string str = ""; int id = Convert.ToInt16(textBox1.Text); uDB.OpenCon(); DataTable table = uDB.SearchbyID(id); dataGridView1.DataSource = table; uDB.CloseCon(); stringPrintText = "Перегляд за id" + "\n \n"; foreach (DataRow dataRow in table.Rows) { stringPrintText = stringPrintText + dataRow[0].ToString() + "\n" + dataRow[1] + "\n" + dataRow[2] + "\n" + dataRow[3] + "\n" + "\n" + dataRow[4] + "\n" + dataRow[5] + "\n\n"; } } private void перегялдСторінкиToolStripMenuItem_Click(object sender, EventArgs e) { printDocument1.DocumentName = Text; startPage = 1; numPages = printDialog1.PrinterSettings.MaximumPage; Pagenumber = 1; //Показуємо діалог printPreviewDialog1.ShowDialog(); } private void друкToolStripMenuItem1_Click(object sender, EventArgs e) { if (printDialog1.ShowDialog() == DialogResult.OK) { printDocument1.DocumentName = Text; startPage = 1; numPages = printDialog1.PrinterSettings.MaximumPage; Pagenumber = 1; //Викликаємо вбудований метод початку друку printDocument1.Print(); }} private void параметриСторінкиToolStripMenuItem_Click(object sender, EventArgs e) { pageSetupDialog1.ShowDialog(); } private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) { // Створюємо екземпляр graph класу Graphics Graphics graph = e.Graphics; // Створюємо об'єкт font, якому встановлюємо // Шрифт елемента rtbText Font font = new Font(this.Font, FontStyle.Bold); // Отримуємо значення міжрядкового інтервалу - висоту шрифту Т1, 134 float HeightFont = font.GetHeight(graph); // Створюємо екземпляр stringformat класу StringFormat для визначення // Додаткових параметрів форматування тексту. StringFormat stringformat = new StringFormat(); // Створюємо екземлярів rectanglefFull і rectanglefText класу RectangleF для // Определния областей друку і тексту. Т1, 104 RectangleF rectanglefFull, rectanglefText; // Створюємо змінні для підрахунку числа символів і рядків. int NumberSymbols, NumberLines; // В якості області друку встановлюємо об'єкт 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 e.MarginBounds.Top - (e.PageBounds.Height - graph.VisibleClipBounds.Height) / 2, // Встановлюємо ширину області e.MarginBounds.Width, // Встановлюємо висоту області e.MarginBounds.Height); rectanglefText = RectangleF.Inflate(rectanglefFull, 0, -2 * HeightFont); // Визначаємо кількість рядків int NumDisplayLines = (int)Math.Floor(rectanglefText.Height / HeightFont); // Встановлюємо висоту області rectanglefText.Height = NumDisplayLines * HeightFont; stringformat.Trimming = StringTrimming.EllipsisCharacter; // stringformat.FormatFlags l =StringFormatFlags.NoWrap; // При друку вибраних сторінок переходимо до першої стартовій сторінці while ((Pagenumber < startPage) && (stringPrintText.Length > 0)) { NumberSymbols = SymbolsInLines(stringPrintText, NumDisplayLines); stringPrintText = stringPrintText.Substring(NumberSymbols); // Збільшуємо кількість сторінок Pagenumber++; } // Якщо довжина рядка stringPrintText дорівнює нулю (немає тексту для друку), // Зупиняємо друк if (stringPrintText.Length == 0) { e.Cancel = true; return; } // Виводимо (малюємо) текст для друку - stringPrintText, використовуємо для цього шрифт font, // Кисть чорного кольору - Brushes.Black, район друку - rectanglefText, // Передаємо рядок додаткового форматування stringformat graph.DrawString(stringPrintText, font, Brushes.Black, rectanglefText, stringformat); // Отримуємо текст для наступної сторінки // If (rtbText.WordWrap) // Graph.MeasureString (stringPrintText, font, rectanglefText.Size, stringformat, out NumberSymbols, out NumberLines); // Else NumberSymbols = SymbolsInLines(stringPrintText, NumDisplayLines); stringPrintText = stringPrintText.Substring(NumberSymbols); // Очищаємо об'єкт stringformat, використаний для формування полів. stringformat = new StringFormat(); // Додаємо висновок на кожну сторінку її номер stringformat.Alignment = StringAlignment.Far; graph.DrawString("Сторінка" + Pagenumber, font, Brushes.Black, rectanglefFull, stringformat); Pagenumber++; // Cнова перевіряємо, чи є текст для друку і номер сторінки, заданої для друку e.HasMorePages = (stringPrintText.Length > 0) && (Pagenumber < startPage + numPages); // Для друку з вікна попереднього перегляду знову инициализируем змінні if (!e.HasMorePages) { startPage = 1; numPages = printDialog1.PrinterSettings.MaximumPage; Pagenumber = 1; } } int SymbolsInLines(string stringPrintText, int NumLines) { int index = 0; for (int i = 0; i < NumLines; i++) { index = 1 + stringPrintText.IndexOf('\n', index); if (index == 0) return stringPrintText.Length; } return index; } }} Клас Searchbyartist.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Printing; namespace laba2{ public partial class Searchbyartist : Form { public Searchbyartist() { InitializeComponent(); } //Стрічка підєднання до БД Access //Стрічка підєднання до БД Access string conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=album.accdb;Persist Security Info=False;"; string stringPrintText = ""; internal PrintPreviewControl PrintPreviewDialog1; PrintDialog printDlg = new PrintDialog(); PrintDocument printDoc = new PrintDocument(); //Змінна ,яка визначає номер сторінки,з якої потрібно почати друк int startPage; //Змінна,яка визначає кількість сторінок в документі int numPages; //Змінна ,яка визначає номер поточної сторінки int Pagenumber; private void button1_Click(object sender, EventArgs e) { useDB uDB = new useDB(conString); string str = ""; string artist = textBox1.Text; uDB.OpenCon(); DataTable table = uDB.Searchbyartist(artist); dataGridView1.DataSource = table; uDB.CloseCon(); stringPrintText = "Перегляд за Виконавець" + "\n \n"; foreach (DataRow dataRow in table.Rows) { stringPrintText = stringPrintText + dataRow[0].ToString() + "\n" + dataRow[1] + "\n" + dataRow[2] + "\n" + dataRow[3] + "\n" + "\n" + dataRow[4] + "\n" + dataRow[5] + "\n\n"; } } private void переглядСторінкиToolStripMenuItem_Click(object sender, EventArgs e) { printDocument1.DocumentName = Text; startPage = 1; numPages = printDialog1.PrinterSettings.MaximumPage; Pagenumber = 1; //Показуємо діалог printPreviewDialog1.ShowDialog(); } private void параметриСторінкиToolStripMenuItem_Click(object sender, EventArgs e) { pageSetupDialog1.ShowDialog(); } private void друкToolStripMenuItem1_Click(object sender, EventArgs e) { if (printDialog1.ShowDialog() == DialogResult.OK) { printDocument1.DocumentName = Text; startPage = 1; numPages = printDialog1.PrinterSettings.MaximumPage; Pagenumber = 1; //Викликаємо вбудований метод початку друку printDocument1.Print(); } } private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) { // Створюємо екземпляр graph класу Graphics Graphics graph = e.Graphics; // Створюємо об'єкт font, якому встановлюємо // Шрифт елемента rtbText Font font = new Font(this.Font, FontStyle.Bold); // Отримуємо значення міжрядкового інтервалу - висоту шрифту Т1, 134 float HeightFont = font.GetHeight(graph); // Створюємо екземпляр stringformat класу StringFormat для визначення // Додаткових параметрів форматування тексту. StringFormat stringformat = new StringFormat(); // Створюємо екземлярів rectanglefFull і rectanglefText класу RectangleF для // Определния областей друку і тексту. Т1, 104 RectangleF rectanglefFull
Антиботан аватар за замовчуванням

06.02.2014 19:55

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!