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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ ТЕХНІЧНИЙ КОЛЕДЖ НАЦІОНАЛЬНОГО УНІВЕРСИТЕТУ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» КАФЕДРА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ ТА КОМП’ЮТЕРНОЇ ТЕХНІКИ Лабораторна робота №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:02-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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