На этом шаге мы рассмотрим организацию печати документа.
После настройки и просмотра документа можно перейти к его печати. Печать документа осуществляется методом PrintOut. Синтаксис вызова этого метода:
PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate);
Аргументы метода, их тип и назначение представлены в таблице 1.
Аргумент | Тип | Назначение |
---|---|---|
From | Integer | Номер страницы, с которой начинается печать |
То | Integer | Номер страницы, на которой заканчивается печать |
Copies | Integer | Количество копий печати |
Preview | Boolean | True - предварительный просмотр перед печатью |
ActivePrinter | String | Имя принтера для печати |
PrintToFile | Boolean | True - печатать в файл |
Collate | Boolean | True - разобрать по копиям |
При использовании метода PrintOut без аргументов печать будет выполнена в режиме "по умолчанию". Этот метод можно использовать с любым набором аргументов. Если в системе установлен не один, а несколько принтеров, то, чтобы использовать один из них, нужно при вызове метода PrintOut задать в аргументе ActivePrinter его имя. Чтобы получить список установленных в системе принтеров, используем стандартный объект Delphi TPrinter (см. следующую процедуру).
procedure TForm1.Button13Click(Sender: TObject); //Получение списка принтеров, установленных в системе var i: Integer; pr: TPrinter; begin ListBox2.Items.Clear; pr:=TPrinter.Create; for i:=0 to pr.Printers.Count-1 do ListBox2.Items.Add(pr.Printers[i]); pr.Free; end;
На рисунке 1 представлен компонент TListBox (список) с загруженным перечнем установленных в системе принтеров.
Рис.1. Список установленных в системе принтеров
Чтобы для печати документа использовать один из принтеров, имя которого находится в списке TListBox, достаточно выполнить следующую процедуру.
procedure TForm1.Button14Click(Sender: TObject); //Печать begin E.ActivePrinter:=ListBox2.Items.Strings[ListBox2.ItemIndex]; E.ActiveWorkBook.PrintOut(ActivePrinter:= ListBox2.Items.Strings[ListBox2.ItemIndex]); end;
"HP DeskJet 850C on LPT1:",
"HP DeskJet 850C (LPT1:)".
Вот полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ExtCtrls, ComCtrls, QPrinters; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Label1: TLabel; ComboBox1: TComboBox; OpenDialog1: TOpenDialog; Button4: TButton; PageControl1: TPageControl; TabSheet1: TTabSheet; Label2: TLabel; ListBox1: TListBox; Button5: TButton; TabSheet2: TTabSheet; Label3: TLabel; Edit1: TEdit; Button6: TButton; TabSheet3: TTabSheet; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; TabSheet4: TTabSheet; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Edit8: TEdit; Edit9: TEdit; Edit10: TEdit; Edit11: TEdit; Edit12: TEdit; Edit13: TEdit; Button7: TButton; Button8: TButton; TabSheet5: TTabSheet; RadioGroup1: TRadioGroup; Label18: TLabel; ComboBox2: TComboBox; TabSheet6: TTabSheet; CheckBox1: TCheckBox; Label19: TLabel; Edit14: TEdit; Button9: TButton; TabSheet7: TTabSheet; Label20: TLabel; SpinEdit1: TSpinEdit; Label21: TLabel; Button10: TButton; Label22: TLabel; Label23: TLabel; Label24: TLabel; SpinEdit2: TSpinEdit; SpinEdit3: TSpinEdit; Button11: TButton; TabSheet8: TTabSheet; CheckBox2: TCheckBox; CheckBox3: TCheckBox; TabSheet9: TTabSheet; Button12: TButton; TabSheet10: TTabSheet; ListBox2: TListBox; Label25: TLabel; Button13: TButton; Button14: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Edit4Change(Sender: TObject); procedure Edit5Change(Sender: TObject); procedure Edit6Change(Sender: TObject); procedure Edit7Change(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure RadioGroup1Click(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure CheckBox2Click(Sender: TObject); procedure CheckBox3Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button14Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E:variant; ST:variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание объекта Excel и отображение окна begin E:=CreateOleObject('Excel.Application'); E.Visible:=True; end; procedure TForm1.Button2Click(Sender: TObject); //Создание рабочей книги begin E.WorkBooks.Add; end; procedure TForm1.Button3Click(Sender: TObject); //Открытие рабочей книги begin if OpenDialog1.Execute then E.WorkBooks.Open(OpenDialog1.FileName); end; procedure TForm1.ComboBox1Change(Sender: TObject); //Переключение вида документа begin case ComboBox1.ItemIndex of 0:E.ActiveWindow.View:=1; //xlNormalView; 1:E.ActiveWindow.View:=2; //xlPageBreakPreview; end; end; procedure TForm1.Button4Click(Sender: TObject); //Добавление разрывов страницы var i:integer; begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Добавление разрывов страницы ST.VPageBreaks.Add (Before:=E.ActiveSheet.Cells[10,2]); ST.HPageBreaks.Add (Before:=E.ActiveSheet.Cells[10,2]); ListBox1.Items.Clear; ListBox1.Items.Add('Горизонтальные разрывы'); for i:=1 to ST.HPageBreaks.Count do ListBox1.Items.Add(IntToStr(i)); ListBox1.Items.Add('Вертикальные разрывы'); for i:=1 to ST.VPageBreaks.Count do ListBox1.Items.Add(IntToStr(i)); ListBox1.ItemIndex:=0; end; procedure TForm1.Button5Click(Sender: TObject); //Перенос линий разрывов страниц begin ST.HPageBreaks.Item[1].Location:=ST.Range['A5:A5']; ST.VPageBreaks.Item[1].Location:=ST.Range['C4:C4']; end; procedure TForm1.Button6Click(Sender: TObject); //Переопределение области печати begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Переопределение области печати ST.PageSetup.PrintArea:=Edit1.Text; end; procedure TForm1.Edit2Change(Sender: TObject); //Задание размеров левого поля begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Задание размеров левого поля ST.PageSetup.LeftMargin:=StrToInt(Edit2.Text); end; procedure TForm1.Edit3Change(Sender: TObject); //Задание размеров правого поля begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Задание размеров правого поля ST.PageSetup.RightMargin:=StrToInt(Edit3.Text); end; procedure TForm1.Edit4Change(Sender: TObject); //Задание размеров верхнего поля begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Задание размеров верхнего поля ST.PageSetup.TopMargin:=StrToInt(Edit4.Text); end; procedure TForm1.Edit5Change(Sender: TObject); //Задание размеров нижнего поля begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Задание размеров нижнего поля ST.PageSetup.BottomMargin:=StrToInt(Edit5.Text); end; procedure TForm1.Edit6Change(Sender: TObject); //Задание размеров поля верхнего колонтитула begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Задание размеров поля верхнего колонтитула ST.PageSetup.HeaderMargin:=StrToInt(Edit6.Text); end; procedure TForm1.Edit7Change(Sender: TObject); //Задание размеров поля нижнего колонтитула begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Задание размеров поля нижнего колонтитула ST.PageSetup.FooterMargin:=StrToInt(Edit7.Text); end; procedure TForm1.Button7Click(Sender: TObject); //Установить колонтитулы begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Установить колонтитулы ST.PageSetup.CenterHeader:=Edit8.Text; ST.PageSetup.RightHeader:=Edit9.Text; ST.PageSetup.LeftHeader:=Edit10.Text; ST.PageSetup.CenterFooter:=Edit11.Text; ST.PageSetup.RightFooter:=Edit12.Text; ST.PageSetup.LeftFooter:=Edit13.Text; end; procedure TForm1.Button8Click(Sender: TObject); //Изменение шрифта верхнего центрального колонтитула begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; //Изменение шрифта верхнего центрального колонтитула ST.PageSetup.CenterHeader:='&28'+Edit8.Text; end; procedure TForm1.RadioGroup1Click(Sender: TObject); //Ориентация begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; case RadioGroup1.ItemIndex of 0: ST.PageSetup.Orientation:=1; //xlPortrait 1: ST.PageSetup.Orientation:=2; //xlLandscape end; end; procedure TForm1.ComboBox2Change(Sender: TObject); //Размер бумаги begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; ST.PageSetup.PaperSize:=ComboBox2.ItemIndex+1; end; procedure TForm1.Button9Click(Sender: TObject); //Задание номера первой страницы begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; if CheckBox1.Checked then ST.PageSetup.FirstPageNumber:=-4105//xlAutomatic else ST.PageSetup.FirstPageNumber:=StrToInt(Edit14.Text); end; procedure TForm1.Button10Click(Sender: TObject); //Установка масштаба (первый способ) begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; ST.PageSetup.Zoom:=StrToInt(SpinEdit1.Text); end; procedure TForm1.Button11Click(Sender: TObject); //Установка масштаба (второй способ) begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; ST.PageSetup.Zoom:=False; ST.PageSetup.FitToPagesWide:=StrToInt(SpinEdit2.Text); ST.PageSetup.FitToPagesTall:=StrToInt(SpinEdit3.Text); end; procedure TForm1.CheckBox2Click(Sender: TObject); //Печать заголовков строк и столбцов begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; ST.PageSetup.PrintHeadings:=CheckBox2.Checked; end; procedure TForm1.CheckBox3Click(Sender: TObject); //Печать линий сетки begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; ST.PageSetup.PrintGridlines:=CheckBox3.Checked; end; procedure TForm1.Button12Click(Sender: TObject); //Переключение первой страницы в режим предварительного просмотра begin //Получение ссылки на 1-й лист рабочей книги ST:=E.Sheets.Item[1]; ST.PrintPreview; end; procedure TForm1.Button13Click(Sender: TObject); //Получение списка принтеров, установленных в системе var i: Integer; pr: TPrinter; begin ListBox2.Items.Clear; pr:=TPrinter.Create; for i:=0 to pr.Printers.Count-1 do ListBox2.Items.Add(pr.Printers[i]); pr.Free; end; procedure TForm1.Button14Click(Sender: TObject); //Печать begin E.ActivePrinter:=ListBox2.Items.Strings[ListBox2.ItemIndex]; E.ActiveWorkBook.PrintOut(ActivePrinter:= ListBox2.Items.Strings[ListBox2.ItemIndex]); end; end.
Со следующего шага мы начнем изучать программирование свойств MS Excel.