Суббота, 20.04.2024, 11:48
Приветствую Вас Гость | RSS

Лекции

Меню сайта
Форма входа
Категории раздела
ТАУ (Теория автоматического управления) [31]
лекции по ТАУ
Экология [151]
учебник
Бухгалтерский учет и налогообложение в строительстве [56]
Дементьев А.Ю. - Практическое пособие
Психология [104]
Пип
информатика [80]
с# Карли Ватсон
современные стулья [0]
новинки
Поиск

Главная » 2010 » Февраль » 11 » Диалоговое окно
00:36
Диалоговое окно
Диалоговое окно
SaveFileDialog
AFobuonudte dGol inba l1 9K3n5o. wGeloldbgeal Knoweldge, Inc. is the wordls' alrgest nidependent IaT endudca htoin 1 5nite algnragtuoar,ge osf.fe rnGigolb malo Kreno thwaelndg e7s00 bel cnoduersdes IT in ed mucoaretoin th asonult oi2n0s c cooumntrbeinise vceunrdrcioural «,a udtheovilerzieredd a tnhdro upgrohpre ithtaery rgi hcotn ttemnt v *ofjtfh ni 8ten olsbviael Khannodwsel-odnge *c<alfesvserobopmed traninig amnadna gnietemraencttvi esou letoi-einasm nniigc.uld Tnihge e -cnomromlpaenynt, o aftesnse?ss mcomenptel tepro gITre sesdu tcraacotiknnipgrog raanmd nicsetrrutscfcitoarbi-fend. Tdhaess ctooommpan y(c?-el abmelnnidge]d, v ItTitua Jed ucaclsastooior)m sou l{tvoi-ntesam ^renig dlje svilee-lrpeadce vdia
e-fearning, ^пй e4earning tools or software applications.
Mission .
Gbbdl KrK>wtedge к dedicated to improving the w^y companies and individuals
earn, use, and master technology through educational solutions that empG/i?er
customers with choice, allowing them to determine wbm, where, and how they
want their IT education programs to b& designed and delveted
Классы SaveFileDialog И OpenFileDialog очень ПОХОЖИ И обладают целым
набором одинаковых свойств. В настоящем разделе мы не будем рассматривать
свойства, которые работают так же, как и для диалогового окна открытия файлов.
Вместо этого мы сосредоточим внимание на свойствах, присущих только диалого-
вому окну сохранения файлов, или на тех общих для них свойствах, использование
которых отлично.
Использование диалоговых окон 401
Свойство Title
С помощью свойства Title (заголовок) можно задавать заголовок данного диа-
логового окна, подобно тому, как это делалось для окна OpenFileDialog. Если ни-
чего не задавать, то будет выведено значение, использующееся по умолчанию,—
Save As (сохранить как).
Расширения файлов
Расширения файлов используются для привязки файлов к приложениям. Наи-
лучшая практика — обязательно добавлять расширение к имени файла, поскольку
в противном случае Windows не будет в состоянии определить, какое именно при-
ложение должно использоваться для открытия данного файла, да и вы сами, веро-
ятнее всего, это вскоре забудете.
AddExtension — это свойство логического типа, которое определяет, должно ли
расширение автоматически добавляться к имени файла, вводимого пользователем.
Если пользователь самостоятельно ввел расширение файла, то в этом случае ни-
каких дополнительных расширений добавляться не будет: если пользователь ввел
в качестве имени файла test, то файл будет сохранен под именем t e s t . t x t . Если
же пользователь ввел имя t e s t . t x t , то файл все рано будет сохранен под именем
t e s t . t x t , а не под именем t e s t . t x t . t x t .
Свойство DefauitExt определяет расширение файла, используемое в тех случа-
ях, когда пользователь не указывает расширения. Если это свойство остается пус-
тым, то вместо него будет использоваться расширение, определяемое выбранным
на данный момент значением свойства Filter. Если вы одновременно присвоите
значения и свойству DefauitExt, и свойству Filter, то здесь будет использоваться
Значение СВОЙСТВа DefauitExt, независимо ОТ Значения СВОЙСТВа Filter.
Проверка допустимости
Для автоматического выполнения проверки допустимости имени файла сущест-
вуют — как И ДЛЯ ДИалОГОВОГО ОКНа OpenFileDialog — СВОЙСТВа ValidateNames,
CheckFileExists И CheckPathExists. Отличие между окнами OpenFileDialog
и SaveFiieDialog заключается в том, что в последнем по умолчанию используется
значение свойства CheckFileExists, равное false, что означает, что существует
возможность задавать совершенно новое имя сохраняемому файлу.
Перезапись существующих файлов
Проверка ДОПУСТИМОСТИ Имен фаЙЛОВ аналогична проверке В OpenFileDialog.
Однако в окне SaveFiieDialog требуется выполнение некоторых дополнительных
проверок и задание значений некоторых дополнительных свойств. Во-первых, если
свойству CreatePrompt присвоено значение true, будет выведен запрос, должен ли
создаваться новый файл. Если свойству OverwritePrompt присвоено значение true,
то это означает, что будет выводиться запрос, действительно ли пользователь хочет
осуществить запись на место уже существующего файла. По умолчанию свойству
OverwritePrompt присваивается Значение true, а СВОЙСТВУ CreatePrompt — false.
При таких установках, если пользователь попытается со-
хранить уже существующий файл, будет выведено сооб-
щение: C:\Beginning C#\Dialogs\sample.txt already exists. Do
you want to replace it? (Файл С Именем C:\Beginning
c#\Diaiogs\sampie.txt уже существует. Вы действительно
хотите его заменить?) (см. рис. слева).
C:\Beginning С#\0*а?од5^агг.р1е.Ы already exists.
Do you v.*c4 to replace it?
402 Глава 15
Свойства SaveFileDialog
Ниже приведен рисунок, на котором сведены воедино и обозначены все свойст-
ва SaveFileDialog:
Title (Заголовок)
Initial Directory (Начальная .директория}
Filename (Имя файла)
Rterv Rlierlmfex (Фильтр и его индекс)
Save as type: [Text Document [\Ы] ShowHelp (Вывод помощи)
Практикум: добавление диалогового окна SaveFileDialog
1. Диалоговое окно SaveFileDialog можно добавить точно таким же
образом, каким в программу разработки Windows Forms добавлялось
ОКНО OpenFileDialog! выберите КОМПОНенТ SaveFileDialog В ОКНе
с инструментами и перенесите его в форму. Измените его имя
на digSaveFile, значение свойства FileName — на untitied, значение
свойства Filterindex — на 2, а в качестве значения свойства Filter
используйте приведенную ниже строку — точно так же,
Как ЭТО ДелаЛОСЬ ДЛЯ ДИаЛОГОВОГО ОКНа OpenFileDialog.
Поскольку при записи файлов посредством данного редактора
мы хотим разрешить использование только расширений .txt
и .wroxtext, то элемент *.* в этой строке будет отсутствовать:
Text Documents (*.txt) I * . t x t I Wrox Documents (*.wroxtext) I *.wroxtext.
2. Добавьте обработчик событий click вхождения меню Save As,
а также код, приведенный ниже. Этот код предназначен для вывода
Диалога SaveFileDialog С ПОМОЩЬЮ метода ShowDialog ().
Результаты работы этого диалога будут интересовать нас только
в том случае, если пользователь завершил диалог, нажав кнопку ОК.
Для сохранения файла на диске мы вызываем метод saveFiieO.
Этот метод будет реализован на следующем шаге:
private void miFileSaveAs_Click(object sender, System.EventArgs e)
{
if (digSaveFile.ShowDialog() == DialogResult.OK)
{ '. •' ,':V; . '• . '.
fileName = digSaveFile.FileName;
SaveFile();
Использование диалоговых окон 403
3. Добавьте в файл метод saveFiieO в приведенном здесь виде:
protected void SaveFile ()
t r y
Stream stream = File.OpenWrite(fileName);
using (StreamWriter writer = new StreamWriter (stream) )
{
writer.Write(textEoxEdit.Text); '
catch (IOException ex)
{
MessageBox.Show(ex.Message, "Simple Editor",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Как и в методе openFileO, для открытия файла используется
класс File, однако в данном случае мы открываем его на запись
С ПОМОЩЬЮ метода OpenWriteO, возвращающего Объект Stream,
который передается конструктору класса StreamWriter. Метод write о
класса StreamWriter записывает в файл все данные, находящиеся
В textBox. В КОНЦе блока using StreamWriter закрывается.
Объект stream, привязанный к writer также закрывается,
поэтому никаких дополнительных обращений к методу close ()
для объекта stream не требуется.
Более подробно вы сможете -
познакомиться с классами,
использующимися для осуществления
ввода/вывода, в главе 20.
4. После того как проект будет построен,
можно запустить приложение с помощью
меню Debug | Start в Visual Studio.NET.
Введите какой-либо текст в текстовое
окно и перейдите в меню File | Save As...,
как показано на рисунке слева.
Это приведет к появлению
диалога SaveFileDialog,
изображенного на рисунке справа.
Теперь можно сохранить файл,
а затем снова открыть его
для внесения каких-либо
дополнительных изменений.

Практикум: реализация обработчика событий Save
1 На настоящий момент мы можем выполнять операцию Save As,
а вот простую операцию Save мы выполнять пока не умеем.
Добавьте обработчик событий "щелчок мышью" во вхождение
меню Save и введите следующий код:
private void miFileSave_Click(object sender, System.EventArgs e)
if (fileName == "Untitled")
miFileSaveAs_Click(sender, e) ;
else
SaveFileO ;
}
Как это работает
В меню Save файл должен сохраняться без открытия каких-либо дополнитель-
ных диалогов. Из этого правила есть единственное исключение — если создается
новый документ, а пользователь не указал его имя, то обработчик Save должен
работать как обработчик Save As и выводить диалог сохранения файла.
С помощью переменной f ileName можно легко проверить, был ли данный файл
открыт или имя файла по-прежнему имеет начальное значение untitied, которое
присваивается новому документу в момент его создания. Если в результате выпол-
нения оператора if получается значение true, то мы просто вызываем обработчик
miFiieSaveAs_ciick(), который был реализован нами ранее для меню Save As.
Если же файл был открыт, а пользователь выбирает
меню Save, управление передается на блок else.
В этом случае есть возможность использовать
метод SaveFileO, разработанный ранее.
Практикум: задание заголовка формы
В Notepad, Word и других приложениях Windows имя файла, который редакти-
руется в настоящий момент, выводится в качестве заголовка данного приложения.
Нам тоже следует реализовать такую возможность.
Создайте новый элемент— функцию setFormTitleO и введите следующую ре-
ализацию:
protected void SetForroTitle()
{ '• •• - • ': ••:• -
Fiieinfo fiieinfo = new Fiieinfo(fileName); ;
this.Text = fiieinfo.Name + * - Simple Editor";
Класс Fiieinfo позволяет получить имя файла без предшествующего ему пути,
КОТОрыЙ Хранится В переменной fileName. Классы Fiieinfo И StreamWriter будут
рассматриваться в главе 20.
В обработчики miFileNew_Click(), miFileOpen_Click() И miFileSaveAs_Click()
добавьте обращение к этому методу сразу после присваивания значения перемен-
ной fileName, как показано во фрагментах кода, приведенных ниже:
Использование диалоговых окоп 405
private void miFileNew_Click(object sender, System.EventArgs e)
fileName = "Untitled";
SetFormTitle();
textBoxEdit.Clear();
private void miFileOpen__Click (object sender, System. Event Args e)
if (dlgOpenFile.ShowDialogO == DialogResult.OK)
fileName = dlgOpenFile.FileName;
SetFormTitle();
OpenFileO ;
private void miFileSaveAs_Click(object sender, System.EventArgs e)
if (dlgSaveFile.ShowDialogO == DialogResult.OK)
fileName = dlgSaveFile.FileName;
SetFormTitle();
SaveFileO ;
Как это работает
Каждый раз, когда происходит изменение имени
файла, свойство Text используемой в этот момент
формы будет изменяться на новое имя этого файла,
к которому добавлено название приложения.
Запустив приложение, вы сможет увидеть на
экран, подобный изображенному на рисунке слева.
Поскольку в данном случае автор редактирует файл
с именем sampie.txt, то именно эта информация
и выводится в качестве заголовка формы.
На этом создание простого редактора заверше-
но: теперь он позволяет открывать, создавать и со-
хранять файлы. Можно ли этим ограничиться?
Конечно, нет. Поскольку делопроизводство без использования бумаги пока еще не
может существовать, нам потребуется реализовать некоторые возможности рабо-
ты с принтером.
Вывод на печать
Когда дело доходит до печати, приходится думать о выборе принтера, установ-
ках вывода страницы и о том, как напечатать несколько страниц. Использование
Классов .NET, наХОДЯЩИХСЯ В пространстве Имен System.Drawing. Painting, ПОЗВО-
ляет существенно облегчить нашу задачу.
Перед тем как перейти к рассмотрению класса PrintDiaiog, который позволяет
выбирать принтер, необходимо кратко ознакомиться с тем, каким образом .NET
управляет процессом вывода на печать. В основе вывода на печать лежит исполь-
зование класса Print Document, обладающего методом Print о , который осуществ-
ляет целую последовательность вызовов, завершающуюся обращением к методу
OnPrintPage () — методу, ответственному за передачу выгодного потока принтеру.
406 Глава 15
Перед тем как перейти к более подробному рассмотрению того, каким образом
устроен код, отвечающий за вывод на печать, следует посвятить еще некоторое
время более детальному знакомству с классами .NET, связанными с выводом на
печать.
Архитектура вывода на печать
Основные составные части архитектуры вывода на печать изображены на сле-
дующем рисунке в виде диаграммы, на которой показаны взаимоотношения между
классами и некоторыми свойствами и методами:
PageSetUpDialog
+ShowDialog()
+Reset()
PageLSeAntigs. ++PPaappeerSrSozieurce -•-Margins
PrintDialog
++SRheoswet()Daiolg()
PrintPageEventArgs
++HPaagsMeBooeruPndasges +MarginBounds
-• PrinterSettings
+lnstalledPrinters
PrintDocument
+Print()
#OnBeginPrint()
#OnEndPrint()
#OnPrintPage()
Graphics
+DrawString()
+DrawLine()
+DrawPath()
PrintController
OnStartPrintO
OnStartPagej)
OnEndPage()
OnEndPrintQ
Print()
PrintLoopO
Вот функциональные возможности этих классов:
• Наиболее важный класс — PrintDialog. На приведенной диаграмме
видно, что почти все классы связаны с ним. Для того чтобы вывести на
Печать КаКОЙ-ЛИбо Документ, необходим Экземпляр КЛаССа PrintDocument.
На следующей диаграмме мы увидим последовательность действий
при выводе на печать, инициируемую данным классом.
• Класс PrintController осуществляет управление потоком задания
вывода на печать. Контроллер вывода на печать запускает задачу
вывода на печать, он обладает событиями для начала вывода на печать,
для каждой страницы и для завершения вывода на печать.
Это абстрактный класс, поскольку его реализации отличаются
от реализации обычного вывода на печать и предварительного просмотра
печатаемой информации.
• С помощью класса PrinterSettings имеется возможность определять
и задавать значения свойств, определяющих конфигурацию принтера,
например дуплексная печать, горизонтальное или вертикальное
расположение листа, число копий и т. д.
• В задачу класса PrintDialog входит определение принтера,
на который должна отправляться выводимая на печать информация,
Использование диалоговых окон 407
и каким образом должны быть сконфигурированы установки
в PrinterSettings. Этот класс является производным от класса
CommonDialog — как и все остальные классы диалогов, с которыми
мы уже успели познакомиться, поэтому у вас уже есть самое первое
представление о том, каким образом он будет использоваться.
• Класс PrinterSettings определяет размеры и границы выводимых
на печать страниц, а также то, какая требуется печать — цветная
или черно-белая. Конфигурация этого класса может быть задана
с помощью класса PageSetupDialog, который также является
ПРОИЗВОДНЫМ ОТ CommonDialog.
Последовательность действий при выводе на печать
Теперь нужно рассмотреть основную последовательность действий при выводе
на печать. На приведенной ниже диаграмме изображены основные элементы —
Приложение, КОТОрое нам предСТОИТ СОЗДатЬ, Экземпляр класса PrintDocument
и Printcontroiier во временной последовательности:
OnStartPage()
OnStartPage()
PrintLoop() -
OnEndPage()
OnEndPrntQ
PrintLoopO v
повторяет все действия
для каждой страницы
Приложению необходимо обратиться К методу Print класса PrintDocument.
В результате запускается выполнение последовательности действий для вывода на
печать. Поскольку сам по себе экземпляр класса PrintDocument не является ответ-
ственным за процесс вывода на печать, эта работа возлагается на Printcontroiier
посредством вызова метода Print () данного класса.
Теперь в дело вступает контроллер печати — он передает экземпляру класса
PrintDocument Информацию О начале печати, обращаясь К методу OnBeginPrint ().
Если приложению необходимо выполнить какие-либо действия в момент начала
печати, ТО Следует Зарегистрировать Обработчик событий В PrintDocument — ЭТО
позволит приложению узнать о начале печати. На представленной диаграмме
408 Глава 15
предполагается, что обработчик onBeginPrint () зарегистрирован, поэтому он мо-
жет быть ВЫЗВан ИЗ класса PrintDocument.
После завершения Начального этапа PrintController обращается К PrintLoopO,
в котором вызывается метод onPrintPage () класса PrintDocument для каждой
страницы, предназначенной для вывода на печать. Метод OnPrintPage о вызывает
все обработчики событий PrintPage. Такой обработчик необходимо реализовывать
всегда, поскольку в противном случае на печать не будет выведено никакой ин-
формации. Обработчик с именем OnPrintPage () показан на диаграмме.
После завершения печати последней страницы Printcontroiler вызывает ме-
тод onEndPrint () класса PrintDocument. Существует дополнительная возможность
реализовать обработчик, вызываемый в данный момент.
Наиболее важную информацию можно сформулировать следующим образом:
Можно реализовать код, ответственный за вывод на печать,
В обработчике Событий PrintDocument.PrintPage.
Он будет вызываться для каждой страницы, подлежащей
выводу на печать. Если необходимо использовать код,
который будет вызываться только один раз,
то для этого требуется реализовать
обработчики Событий BeginPrlnt И EndPrint.
Событие PrintPage
Необходимо реализовать обработчик событий для события PrintPage, аргумен-
ты КОТОрОГО ОПИСЫВаютСЯ делегатом PrintPageEventHandler:
public delegate void PrintPageEventHandler(object sender,
PrintPageEventArgs e) ;
Мы получаем объект типа PrintPageEventArgs. На диаграмме классов можно
увидеть основные свойства этого класса, у которого имеются отношения с класса-
ми PageSettings и Graphics; причем первый из них позволяет задавать размеры
листа бумаги, поля и получать информацию об используемом принтере. Класс
Graphics предоставляет возможность непосредственного доступа к устройству, он
позволяет посылать принтеру строки, а также прямые и кривые линии.
GDI расшифровывается как Graphics Device Interface
(интерфейс графического устройства) и предоставляет
определенные возможности для вывода графической
информации на такие устройства, как экран или принтер.
GDH это следующее поколение GDI, в котором
реализованы такие возможности, как плавно изменяющие
свой градиент кисти и эффекты, связанные с затемнением.
Более подробную информацию о выводе графической
информации С ПОМОЩЬЮ GDI+ U Класса Graphics
можно почерпнуть из главы 16.
Поработав со следующим примером вы сможете убедиться, что включение
в приложение возможностей, связанных с выводом на печать,— очень простая
задача.
Использование диалоговых окон 409
Практикум: добавление в меню вхождения Print
Название пункта меню Текст
miFilePrint
miFilePrintPreview
miFilePageSetup
miFileExit
&Print...
Print Pre&view..
Page Set&up...
E&xit
Перед Тем, как добавлять Диалог PrintDialog,
нам необходимо включить в меню некоторые вхож-
дения, предназначенные для вывода на печать. До-
бавьте два разделителя и следующие пункты меню:
Print, Print Preview, Page Setup и Exit.
В таблице перечислены свойства Name и Text
новых пунктов меню.
На рисунке справа показано, как такое меню
должно выглядеть.
j Qpe-n...
Print...
: PtanJ. Preview...
H Type He\e
i
1
Практикум.- добавление компонента PrintDoctimentH обработчика
I . Перенесите компонент PrintDocument из окна с инструментами
и поместите его в форму. -Замените имя на printDocument
И добавьте обработчик Событий OnPrintPageO В событие PrintPage,
выбрав кнопку Events в окне Properties. Теперь введите код
следующей реализации обработчика событий:
private void OnPrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
char [.] • p a r a m =•• {'\n'}•;
string[] lines = textBoxEdit.Text.Split(param);
int i = 0;
char[] trimParam = { '\r'};
foreach (string s in lines)
{
lines[i++] = s.TrimEnd(trimParam); :
int x = 20;
int у = 20;
foreach (string.line in lines)
e.Graphics.Drawstring(line, new Font("Arial*, 10),
Brushes.Black, x, y) ;
у += 15;
2. Добавьте обработчик событий в событие click меню Print,
КОТОРЫЙ будет вызывать метод Print () класса PrintDocument:
private void miFilePrint_Click(object sender,
System.EventArgs e)
printDocument:.Print () ;
410 Глава 15
3. Теперь можно построить и запустить приложение, которое позволит
отпечатать какой-либо документ. Для того чтобы это приложение
могло работать, необходимо наличие какого-либо инсталлированного
принтера.
Как это работает
Метод Print () Объекта printDocument вызывает наступление события PrintPage
С ПОМОЩЬЮ Класса PrintController:
printDocument.Print();
В обработчике onPrintPage() мы последовательно разбиваем текст, находя-
щийся в текстовом окне, на отдельные строки посредством метода string. Split о
и символа новой строки \п. Получающиеся в результате этого строки заносятся
в переменную lines:
private void OnPrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
.,.,.„,„... {
char[] param = {'\n'};
string[] lines = textBoxEdit.Text.Split(param);
В зависимости от того, каким образом создавался текстовый файл, строки могут
отделяться одна от другой не только символом \п, но и символом \г. С помощью
метода TrimEndo символ \г удаляется из каждой строки:
int i = 0;
char[] trimParam = {'\r'};
foreach (string line in lines)
> : : ' .:. / • ' • • • - • - ; : ' , ' - : : . ' .' (
: . lines[i++] = s.TrimEnd(trimParam);
}
Во втором операторе foreach в коде, приведенном ниже, можно увидеть, что
мы проходим по всем строкам и отправляем каждую из них на принтер, обращаясь
К методу е. Graphics. Drawstring () . е — ЭТО переменная типа Print PageEventArgs,
у которой свойство Graphics привязано к контексту принтера. Контекст принтера
позволяет выводить рисунки на печатающем устройстве, а класс Graphics облада-
ет определенными методами, позволяющими рисовать с помощью этого контекста.
Рисование и методы, используемые в классе Graphics,
более подробно освещаются в следующей главе.
Поскольку на настоящий момент мы еще не умеем выбирать'принтер, то в дан-
ном случае будет использоваться принтер по умолчанию, информация о котором
храниться в реестре Windows.
С помощью метода Drawstring о мы задаем использование при выводе на прин-
тер шрифта Arial размером 10 пунктов и кисть черного цвета. Координаты вывода
определяются переменными х и у. Для позиции по горизонтали зафиксировано
значение 20 пикселей, а позиция по вертикали увеличивается для каждой следую-
щей строки:
int х = 20;
int у = 20;
foreach (string line in lines)
{
e. Graphics. DrawS tr ing (line, new Font (• Arial", 10),
••••.:•••••.••• : •••.••.,•: ;•:••, ::•:•/:•• \ - . • • • • . , • • •. .••. :: . - : . : : : ; ••:•;•,•: ..-.•••, ' .•. ' • : \ BrUSheS . B l a c k , X, У)', '• ' ' ' '
У += 1 5 ;
Использование диалоговых окоп 411
Реализованная на данном этапе процедура вывода на печать не лишена опреде-
ленных недостатков:
• Выходной поток печати направляется на принтер по умолчанию,
который задается пользователем с помощью Control Panel.
В приложении должен быть способ, позволяющий пользователю
выбирать принтер. Для решения этой проблемы мы воспользуемся
классом PrintDialog.
• Используемый шрифт зафиксирован. Чтобы предоставить пользователю
возможность самому выбирать используемый шрифт, прибегнем
к помощи класса FontDialog, который более подробно
рассматривается ниже в настоящей главе.
• Для определения границ выводимых на печать страниц используются
жестко заданные в программе значения. Есть возможность
позволить пользователю выбирать другие границы страниц,
ДЛЯ ЧеГО НуЖНО ИСПОЛЬЗОВаТЬ КЛаСС PageSetupDialog.
• Не предусмотрен вывод на печать нескольких страниц.
Если выводящийся на печать документ состоит из нескольких страниц,
то будет напечатана только первая из них. Нужно также предусмотреть
возможность вывода на печать некоторого заголовка (например
имени файла) и некоторой сноски (например номера страницы).
Продолжим работу над процедурой вывода на печать, с тем чтобы решить озна-
ченные проблемы.






Категория: информатика | Просмотров: 1294 | Добавил: basic | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Календарь
«  Февраль 2010  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

krutoto.ucoz.ru
Бесплатный конструктор сайтов - uCoz