На этом шаге мы рассмотрим небольшой пример использования панелей, элементов управления и макросов.
Рассмотрим пример с использованием программирования панелей, элементов управления и макросов. В этом примере мы из приложения Delphi создадим временные элементы управления и процедуру на Visual Basic, выполним ее и удалим созданные компоненты.
Вот текст приложения.
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; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var E: Variant; CM: Variant; CB:variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание объекта Excel и его визуализация begin E:=CreateOleObject('Excel.Application'); E.Visible:=True; end; procedure TForm1.Button4Click(Sender: TObject); //Создание рабочей книги begin E.WorkBooks.Add; end; procedure TForm1.Button2Click(Sender: TObject); //Создать и выполнить макрос const vbext_ct_StdModule=1; msoBarFloating=4; msoControlButton=1; var MSB:Variant; S:string; begin CM:=E.VBE.VBProjects.Item(1).VBComponents. Add(vbext_ct_StdModule).CodeModule; S:='Sub Макрос1()'+Chr(10)+Chr(13)+ 'MsgBox '+Chr(34)+'Выполняется процедура нажатия кнопки'+ Chr(34)+Chr(10)+Chr(13)+ 'set document=Application.WorkBooks.Add '+Chr(10)+Chr(13)+ 'Dim pts(1 To 7, 1 To 2) As Single '+Chr(10)+Chr(13)+ 'pts(1, 1) = 0 '+Chr(10)+Chr(13)+ 'pts(1, 2) = 0 '+Chr(10)+Chr(13)+ 'pts(2, 1) = 72 '+Chr(10)+Chr(13)+ 'pts(2, 2) = 72 '+Chr(10)+Chr(13)+ 'pts(3, 1) = 100 '+Chr(10)+Chr(13)+ 'pts(3, 2) = 40 '+Chr(10)+Chr(13)+ 'pts(4, 1) = 20 '+Chr(10)+Chr(13)+ 'pts(4, 2) = 50 '+Chr(10)+Chr(13)+ 'pts(5, 1) = 90 '+Chr(10)+Chr(13)+ 'pts(5, 2) = 120 '+Chr(10)+Chr(13)+ 'pts(6, 1) = 60 '+Chr(10)+Chr(13)+ 'pts(6, 2) = 30 '+Chr(10)+Chr(13)+ 'pts(7, 1) = 150 '+Chr(10)+Chr(13)+ 'pts(7, 2) = 90 '+Chr(10)+Chr(13)+ 'ActiveSheet.Shapes.AddPolyline (pts) '+Chr(10)+Chr(13)+ 'End Sub'; CM.AddFromString(S); S:=CM.Name; MessageBox(handle,PChar('Макрос "Макрос1" создан в модуле "'+S+'"'),'',0); CB:=E.CommandBars.Add(Name:='Временная панель', Position:=msoBarFloating); CB.Enabled:=True; CB.Visible:=True; MessageBox(handle,PChar('Создана временная панель'),'',0); MSB:=E.CommandBars.Item['Временная панель']. Controls.Add(Type:=msoControlButton, ID:=1); MSB.Caption:='Временная кнопка'; MSB.OnAction:=CM.Name+'.Макрос1'; MessageBox(handle,PChar('Создана временная кнопка'),'',0); MSB.Execute; MSB.Delete; MessageBox(handle,PChar('Удалена временная кнопка'),'',0); CB.Delete; MessageBox(handle,PChar('Удалена временная панель'),'',0); E.Application.VBE.VBProjects.Item(1). VBComponents.Remove(CM.parent); MessageBox(handle,PChar('Модуль "'+S+'" и "Макрос1" удалены'),'',0); end; end.
Основной процедурой является Button2Click(). В первом операторе этой процедуре мы создаем программный модуль и получаем доступ к нему, чтобы записать текст создаваемого макроса. Далее в строковую переменную записываем текст создаваемого макроса, учитывая стиль написания операторов Visual Basic. Оператор
CodeModule.AddFromString(S);
Результат выполнения этой процедуры изображен на рисунке 1.
Рис.1. Результат выполнения процедуры
На следующем шаге мы рассмотрим коллекцию диалогов.