На этом шаге мы рассмотрим коллекцию диалогов и ее применение.
Рассмотрим еще один тип элементов управления приложения Excel - элементы коллекции Dialogs. Коллекция Dialogs имеет небольшой список свойств, два из которых это количество элементов коллекции (свойство Count) и ссылка на элементы коллекции (свойство ltem(i:Integer), где i - индекс диалога в коллекции). Чтобы ознакомиться со всем списком и значениями индексов и аргументов диалогов, достаточно открыть справочную систему MS Excel на нужной странице. Здесь мы рассмотрим только общие принципы вызова диалогов из приложений, разработанных в среде Delphi, и несколько примеров их использования.
Каждый элемент диалога имеет метод и свойства. Свойства элементов коллекции диалогов можно не рассматривать. Для каждого диалога мы располагаем одним методом - Show. Его можно вызывать с аргументами, которые определяются типом самого диалога. Метод Show возвращает значение True, если диалог завершен выбором (например, нажатием кнопки ОК), или False, если пользователь отменил выбор и диалог закрыт. Следующая процедура позволяет получить количество различных диалогов, используемых в Excel.
procedure TForm1.Button4Click(Sender: TObject); //Определение количества диалогов в Excel var X:Integer; begin X:=E.Dialogs.Count; MessageBox(handle,PChar(IntToStr(X)), 'Количество элементов коллекции диалогов',0); end;
На рисунке 1 представлен результат выполнения данной процедуры.
Рис.1. Количество диалогов в Excel составляет несколько сотен
Рассмотрим вызов метода Show элемента коллекции диалогов. Этот метод можно вызывать как без аргументов, так и с аргументами. Если для конкретного диалога при вызове заданы аргументы, то обычно они служат для настройки некоторых его полей и свойств.
При вызове метода обычно не используются реальные имена аргументов, указанные в справочной системе. Наименование аргумента представляет собой сочетание символьной строки arg и номера аргумента, например:
arg1:=2;
В таблице 1 представлены списки аргументов для двух диалогов. Этот список является частью списка справочной системы.
Константа для вызова диалога | Ее значение | Список аргументов |
---|---|---|
xlDialogOpen | 1 | file_text, update_links, read_only, format, prot_pwd, write_res_pwd, ignore_rorec, file_origin, custom_delimit, add_logical, editable, file_access, notify_logical, converter |
xlDialogSaveAs | 5 | document_text, type_num, prot_pwd, backup, write_res_pwd, read_only_rec |
Воспользуемся этой информацией, чтобы при вызове диалога открытия документа подставить в поле Имя файла нужное нам значение procedure TForm1.Button2Click(Sender: TObject);
//Задание имени файла в диалоге открытия документа begin E.Dialogs.Item[xlDialogOpen].Show(arg1:='Моя рабочая книга'); end;
Результат выполнения данного диалога представлен на рисунке 2.
Рис.2. Подставляем имя файла в диалог открытия документа
Далее вызовем диалог сохранения документа в файле, при этом зададим имя файла непосредственно во время вызова диалога.
procedure TForm1.Button3Click(Sender: TObject); //Задание имени файла в диалоге сохранения рабочей книги begin E.Dialogs.Item[xlDialogSaveAs].Show(arg1:= 'Подставляем собственное имя файла'); end;
Вид диалога показан на рисунке 3.
Рис.3. Подставляем имя файла в диалог сохранения документа
В заключение приведем полный текст приложения.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, CheckLst, Spin; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button4: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation const xlDialogOpen=1; xlDialogSaveAs=5; var E: Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание объекта Excel и его визуализация begin E:=CreateOleObject('Excel.Application'); E.Visible:=True; //Создание рабочей книги E.WorkBooks.Add; end; procedure TForm1.Button4Click(Sender: TObject); //Определение количества диалогов в Excel var X:Integer; begin X:=E.Dialogs.Count; MessageBox(handle,PChar(IntToStr(X)), 'Количество элементов коллекции диалогов',0); end; procedure TForm1.Button2Click(Sender: TObject); //Задание имени файла в диалоге открытия документа begin E.Dialogs.Item[xlDialogOpen].Show(arg1:='Моя рабочая книга'); end; procedure TForm1.Button3Click(Sender: TObject); //Задание имени файла в диалоге сохранения рабочей книги begin E.Dialogs.Item[xlDialogSaveAs].Show(arg1:= 'Подставляем собственное имя файла'); end; end.
На следующем шаге мы рассмотрим пример программирования панели.