На этом шаге мы рассмотрим пример программирования панели.
В качестве примера возьмем формирование налоговой декларации, рассмотренное на 149 шаге. В данном примере дополнительно отключаем все стандартные панели Excel, блокируем доступ пользователя к изменению содержания документа и создаем пользовательскую панель, на которую поместим кнопки печати и сохранения документа.
Вот полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Spin; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; Edit1: TEdit; Label2: TLabel; Edit2: TEdit; Label3: TLabel; Edit3: TEdit; Label4: TLabel; Edit4: TEdit; Label5: TLabel; Edit5: TEdit; Label6: TLabel; Edit6: TEdit; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E:Variant; CB: Variant; MSB: 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(ExtractFileDir(application.ExeName)+ '\Декларация НДС.xlt'); MessageBox(handle,'Шаблон создан! Переходите к заполнению.', 'Внимание!',0); end; function FindAndReplace(f,r:string):boolean; var range:variant; begin FindAndReplace:=False; if f<>'' then begin try range:=E.Range['A1:EL230']. Replace(What:=f,Replacement:=r); FindAndReplace:=True; except FindAndReplace:=False; end; end; end; procedure TForm1.Button3Click(Sender: TObject); //Заполнение шаблона const msoBarTop=1; msoControlButton=1; msoBarNoMove=4; var i:integer; begin for i:=1 to E.CommandBars.Count do E.CommandBars.Item[i].Enabled:=False; // Подставляем текст FindAndReplace('#ИНСПЕКЦИЯ&',Edit1.Text); FindAndReplace('#ОРГАНИЗАЦИЯ&',Edit2.Text); for i:=1 to 12 do FindAndReplace('И'+inttostr(i) + '&',Edit4.Text[i]); for i:=1 to 9 do FindAndReplace('К'+inttostr(i) + '&', Edit5.Text[i]); for i:=1 to 15 do FindAndReplace('C'+inttostr(i)+ '&', (Edit3.Text+' ')[i]); for i:=1 to 2 do FindAndReplace('Д'+inttostr(i)+'&',Edit6.Text[i]); for i:=1 to 2 do FindAndReplace('М'+inttostr(i)+'&',Edit6.Text[i+3]); for i:=1 to 4 do FindAndReplace('Г'+inttostr(i)+'&',Edit6.Text[i+6]); E.ActiveSheet.Protect(DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=''); CB:=E.CommandBars.Add('Печать документа',msoBarTop, False,True); CB.Enabled:=True; CB.Visible:=True; CB.Protection:=msoBarNoMove; for i:=3 to 4 do begin try MSB:=CB.Controls.Add (Type:=msoControlButton, ID:=IntToStr(i)); MSB.Caption:='ID='+IntToStr(i); except end; end; MessageBox(handle,'Возвращаем панели в исходное состояние!', 'Внимание!',0); for i:=1 to E.CommandBars.Count do E.CommandBars.Item[i].Enabled:=True; end; end.
Результат формирования декларации приведен на рисунках 1 - 3.
Рис.1. Сообщение после формирования шаблона
Рис.2. Задание значений (панели отключены)
Рис.3. Формирование закончено (панели включены)
Со следующего шага мы начнем рассматривать создание пользовательских библиотек DLL.