На этом шаге мы рассмотрим задание полей страницы.
Используя свойства объекта PageSetup, мы можем задать величину полей печатной страницы, а также положение верхнего и нижнего колонтитулов. Это достигается записью значений этих полей в свойства LeftMargin, RightMargin, TopMargin, BottomMargin, HeaderMargin, FooterMargin. Следующие процедуры позволяют приложению Delphi задать значения этих параметров.
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;
Результат выполнения этих процедур представлен на рисунке 1 (лист рабочей книги представлен в режиме предварительного просмотра).
Рис.1. Задание полей страницы
Приведем полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin, ExtDlgs, ExtCtrls, ComCtrls; 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; 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); 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; end.
В нашем примере величина полей задается в произвольных единицах, т.е. в пикселях. Чтобы привязать все размеры к реальным единицам измерения, нужно выполнить преобразование. Например, в среде Visual Basic такие преобразования выполняют функции InchesToPoints и CentimetersToPoints, преобразующие величину, выраженную в дюймах и сантиметрах, в количество точек. Если эти функции недоступны из приложений Delphi, то используем следующие соотношения - в одной точке 0,035 см или 1/72 дюйма.
На следующем шаге мы рассмотрим колонтитулы.