Variant.Invoke

Синтаксис

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».

Пример 1

Для выполнения примера предполагается наличие формы, расположенной на ней кнопки с наименованием «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» передаются в обратном порядке.

Пример 2

Для выполнения примера предполагается наличие формы, расположенной на ней кнопки с наименованием «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» передаются в обратном порядке.

См. также:

Variant