Invoke(Name: String; Parameters: Array): Variant;
Name. Названия метода, который необходимо выполнить для текущего объекта.
Parameters. Массив значений параметров, необходимых для выполнения указанного метода. Если выполняемый метод не имеет параметров, то данный параметр можно не указывать.
Метод Invoke осуществляет выполнение метода, наименование которого передается посредством входного параметра Name.
Наименование и параметры метода зависят от объекта, для которого они применяются.
Значения параметров, используемые для выполнения метода, могут быть указаны в виде отдельного массива или перечислены через запятую. Размер массива должен соответствовать количеству передаваемых параметров.
Для выполнения методов, имеющих в своей сигнатуре параметры, передаваемые по ссылке, необходимо использовать вариант с отдельным массивом. Значения, полученные в результате выполнения метода, будут помещены в соответствующие элементы массива. Перед выполнением элементы массива, в которые будут помещены значения, должны быть проинициализированы в соответствии с тем типом данных, который имеют параметры метода.
Важно. В метод Invoke значения параметров должны передаваться в обратном порядке относительно порядка параметров в сигнатуре выполняемого метода.
Значения необязательных параметры можно не указывать. Если требуется указать значение определенного необязательного параметра, то также необходимо указать значения всех предшествующих обязательных и необязательных параметров.
Пример: Выполняемый метод имеет следующую сигнатуру MySub(A,B,C: Variant). Вызов метода Invoke должен иметь следующий вид:
Var
//список переменных
v: Variant;
Begin
v := //Инициализация объекта
...
v.Invoke("MySub", C, B, A);
либо:
Var
//список переменных
v: Variant;
Arr: Array Of Variant;
Begin
v := //Инициализация объекта
...
Arr := New Variant[3];
Arr[0] := C;
Arr[1] := B;
Arr[2] := A;
v.Invoke("MySub", Arr);
Где: v - объект, для которого выполняется метод. A,B,C - значения параметров метода, Arr - массив, в который помещены значения параметров метода.
Пример: Выполняемый метод имеет следующую сигнатуру MySub(A,B: Double; Var C: Double). Вызов метода Invoke должен иметь следующий вид:
Var
//список переменных
v: Variant;
Arr: Array Of Variant;
Begin
v := //Инициализация объекта
...
Arr := New Variant[3];
Arr[0] := Double.MinValue;
Arr[1] := B;
Arr[2] := A;
v.Invoke("MySub", Arr);
Где: v - объект, для которого выполняется метод. A,B - значения параметров метода (значения должны иметь тип Double), Arr - массив, в который помещены значения параметров метода. После выполнения метода в элементе Arr[0] будет доступно рассчитанное значение, соответствующее параметру метода «C».
Для выполнения примера предполагается наличие формы, расположенной на ней кнопки с наименованием «Button1» и компонента OleDocumentBox с наименованием «OleDocumentBox1».
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
Excel, Sheet, OleObj, ComButton: Variant;
Arr: Array[11];
Begin
OleDocumentBox1.CreateObject("Excel.Sheet.8");
Excel := OleDocumentBox1.OleObject.GetProperty("Application");
Sheet := Excel.GetProperty("ActiveSheet");
OleObj := Sheet.GetProperty("OLEObjects");
Arr[0] := 20; //Height
Arr[1] := 100; //Width
Arr[2] := 10; //Top
Arr[3] := 10; //Left
Arr[4] := -1; //IconLabel
Arr[5] := -1; //IconIndex
Arr[6] := ""; //IconFileName
Arr[7] := False; //DisplayAsIcon
Arr[8] := False; //Link
Arr[9] := ""; //FileName
Arr[10] := "Forms.CommandButton.1"; //ClassType
ComButton := OleObj.Invoke("Add", Arr);
ComButton.GetProperty("Object").SetProperty("Caption", "Пуск");
End Sub Button1OnClick;
При нажатии на кнопку будет создан и загружен в компонент «OleDocumentBox1» новый лист Microsoft Excel. На данном листе будет создан элемент управления - Кнопка. Для создания элемента управления выполняется метод «Add» коллекции «OLEObjects», имеющий следующий синтаксис VBA:
Add(ClassType, FileName, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)
При выполнении метода Invoke значения параметров для метода «Add» передаются в обратном порядке.
Для выполнения примера предполагается наличие формы, расположенной на ней кнопки с наименованием «Button1» и компонента OleDocumentBox с наименованием «OleDocumentBox1». В компонент «OleDocumentBox1» загружен документ Microsoft Excel.
Enum XlFixedFormatType
xlTypePDF, xlTypeXPS
End Enum XlFixedFormatType;
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
Excel, Sheet: Variant;
Begin
Excel := OleDocumentBox1.OleObject;
Sheet := Excel.GetProperty("ActiveSheet");
Sheet.Invoke("ExportAsFixedFormat", "c:\Data.Pdf", XlFixedFormatType.xlTypePDF);
End Sub Button1OnClick;
При нажатии на кнопку все страницы активного листа документа будут экспортированы в формат PDF. Для экспорта используется метод «ExportAsFixedFormat», имеющий следующий синтаксис VBA:
ExportAsFixedFormat(
Type,
Filename,
Quality,
IncludeDocProperties,
IgnorePrintAreas,
From,
To,
OpenAfterPublish,
FixedFormatExtClassPtr);
Параметр «Type» является обязательным, для указания его значения используется перечисление «XlFixedFormatType». Данное перечисление это Fore-аналог VBA перечисления XlFixedFormatType. Все остальные параметры являются необязательными. Из их числа указывается только второй параметр - наименование файла, в который производится экспорт.
При выполнении метода Invoke значения параметров для метода «ExportAsFixedFormat» передаются в обратном порядке.
См. также: