Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 16
На сайте нет зарегистрированных пользователей

Пользователей: 13,368
новичок: Goosprin
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Двунаправленный динамический список на Delphi + Блок схемы
Информационная система - продуктовый магазин на Turbo Pascal (База данны...
База данных электронного документооборота на Delphi + бд Intebase

Использование Visual Basic Editor



До этого мы рассматривали доступ к элементам рабочей книги и элементам
управления из внешних приложений Delphi. Для полного представления о
возможностях управления приложением Excel из внешних программ этого
недостаточно. Объектная модель Excel позволяет управлять не только эле-
ментами создаваемых документов, но и элементами программ на встроен-
ном языке. Для доступа к элементам программ используется объект VBE.
Родительским объектом для VBE является Application (Application.VBE), a
свойства и методы самого объекта VBE позволяют полностью управлять
приложениями Visual Basic из внешних программ. На рис. 16.18 представле-
на часть общей объектной модели VBE, позволяющая понять, каким обра-
зом можно получить доступ непосредственно к текстам встроенных макро-
сов.
Объект VBE включает в себя коллекции проектов, областей программ, эле-
ментов управления и коллекцию окон редактора. Очевидно, что, используя
перечисленные ссылки, можно получить доступ к элементам этих коллек-
ций и к их свойствам. Кроме этих коллекций объект VBE включает ссылки
на активные элементы этих коллекций и собственные свойства. Собствен-
ным свойством является строка, содержащая номер версии редактора. В ко-
нечном итоге нам в целях разработки эффективных приложений достаточно
будет получить доступ к текстам макросов. Для того чтобы создать новые
или изменить уже существующие программные модули VB, используем
свойства VBE, представленные в табл. 16.5.
Таблица 16.5. Свойства объекта VBE


Когда по условиям логики работы вашего приложения требуется знать вер-
сию Visual Basic Editor, можно воспользоваться свойством Version объекта
VBE и получить номер версии редактора.
Получение номера версии VBE
procedure TForm1.Button17Click(Sender: TObject);
var Version:string;
begin
Version:=E.VBE.Version;
messagebox(handle,pchar(Version),'Номер версии Visual Basic',0);
end;



Для программирования приложений знать только номер версии часто быва-
ет недостаточно, поэтому обратим внимание на коллекции VBProjects и CodePanes.
Первая представляет собой список, как правило, совпадающий со
списком открытых рабочих книг. Каждая рабочая книга может содержать
программные модули, модули классов, формы и модули документов. Сово-
купность всех или части перечисленных элементов представляет собой про-
ект. Далее мы будем рассматривать только программные модули, которые
являются элементами коллекции VBComponents и могут быть добавлены
или удалены с помощью методов этой коллекции. Коллекция CodePanes
позволяет только обеспечить доступ к текстам программных модулей. На-
пример, доступ к программному модулю первого элемента CodePanes осу-
ществляется с помощью следующего оператора:
CodeModule :=E.VBE.CodePanes.Item(1).CodeModule




Рис. 16.18. Фрагмент объектной модели VBE
Программный модуль непосредственно содержит тексты макросов. Методы
и свойства этого объекта (CodeModule) мы рассмотрим позже. Сейчас вер-
немся к рассмотрению свойств элемента коллекции VBProjects, доступ
к которому обеспечивает метод Item(i:Integer). Его свойства перечислены
в табл. 16.6.
Таблица 16.6. Свойства элемента коллекции VBProjects


В табл. 16.6 перечислены свойства любого проекта, созданного в среде ра-
бочей книги Excel. Используем только коллекцию VBComponents, которая
представляет собой набор элементов, входящих в проект (табл. 16.7).
Таблица 16.7. Свойства и методы коллекции VBComponents

Исследуем некоторые свойства и методы этой коллекции. Свойство Count
представляет собой количество элементов коллекции, точнее, суммарное
количество модулей классов, форм, стандартных модулей и модулей доку-
мента. Чтобы добавить новый элемент коллекции VBComponents, использу-
ем метод Add. Единственным аргументом этого метода является числовая
константа, определяющая тип создаваемого элемента. Например, создадим
форму Microsoft, для этого в качестве аргумента метода Add используем
константу vbext_ct_MSForm=3.
Создание формы Microsoft
procedure TForm1.Button22Click(Sender: TObject);
begin
E.VBE.VBProjects.Item(l).VBComponents.Add (vbext_ct_MSForm)
end;




Рис. 16.19. В приложении VB создана новая форма Microsoft
На рис. 16.19 представлен результат выполнения данной процедуры.
Для добавления других типов модулей используем метод Add с другой кон-
стантой в качестве аргумента. На практике в приложениях Delphi часто тре-
буется создавать стандартные модули, содержащие тексты макросов. С чем
это связано? В предыдущих главах для работы с книгами Excel мы исполь-
зовали методы, аргументы которых имеют совместимые типы данных для
Excel и Delphi. При этом не возникало проблем при экспорте и импорте
информации между приложением Delphi и рабочей книгой Excel. Совмес-
тимыми типами данных являются целые числа и числа с плавающей точ-
кой, строка и дата. Данные, представляющие собой, например, массив то-
чек, не могут передаваться из Delphi в Excel. В таких случаях мы использу-
ем возможность создания макроса средствами Delphi и передачи ему
команды на выполнение. При этом макросы могут храниться в виде тексто-
вых файлов и загружаться в проект VBE непосредственно перед выполнени-
ем и удаляться после окончания выполнения. Рассмотрим процедуру, кото-
рая демонстрирует эту возможность.
Загрузка текста модуля из текстового файла
procedure TForml.Button23Click(Sender: TObject);
begin
i f not 0penDialog2.Execute then exit;
E.VBE.VBProjects.Item(l).VBComponents.Import(0penDialog2.FileName);
end;



Как быть, если текст макроса, который требуется загрузить в проект и вы-
полнить, создается в приложении? Для этого мы должны создать новый
стандартный модуль. Используем метод Add(vbext_ct_StdModule), который
возвращает ссылку на созданный объект CodeModule. Объект CodeModule
содержит тексты макросов и методы работы с этими текстами. Используя
метод AddFromString объекта CodeModule, загружаем текст макроса.
Загрузка текста макроса из строки
procedure TForml.Button24Click(Sender: TObject);
var text_macro:String;
begin
CodeModule:=E.VBE.VBProj ects.Item(1).VBComponents.
Add(vbext_ct_StdModule).CodeModule;
textjnacro:='Sub Новый_макрос()'+Chr(10)+Chr(13)+
'MsgBox "Новый макрос1" +Chr(10)+Chr(13) + 'End Sub ';
CodeModule.AddFromString(text_macro);
E.Run('Новый_макрос()');
end;



В результате выполнения данной процедуры будет создан, а затем и выпол-
нен новый макрос. В представленном примере мы рассмотрели и использо-
вали только одно свойство элемента коллекции VBComponents — объект
CodeModule. Сам объект CodeModule содержит тексты макросов и набор
методов и свойств, позволяющих манипулировать ими (табл. 16.8).
Таблица 16.8. Некоторые свойства и методы объекта CodeModule


Используя свойство Lines, получим текст модуля проекта на языке Visual
Basic. Для этого воспользуемся следующей процедурой.
Получение текста модуля
var CodeModule:variant;
procedure TForml.Button21Click(Sender: TObject);
var Text_modula:string;
begin
CodeModule:=E.VBE.VBProj ects.Item(1) .VBComponents.Item(1).CodeModule;
Text_modula:=CodeModule.Lines[1, CodeModule.CountOfLines];
messagebox(handle,pchar(Text_modula) , '',0) ;
end;



Перед тем как воспользоваться представленной процедурой, необходимо
открыть рабочую книгу, которая должна содержать макросы. При этом ре-
зультат выполнения процедуры будет выглядеть так, как показано на
рис. 16.20.
В заключение рассмотрим пример с использованием программирования па-
нелей, элементов управления и макросов. В этом примере мы из приложе-
ния Delphi создадим временные элементы управления и процедуру на http://www.vb2010.ru, выполним ее и удалим созданные компоненты.
Создание и использование макроса из приложений Delphi


Рис. 16.20. Отображаем содержимое программного модуля


В первом операторе данного примера мы создаем программный модуль и
получаем доступ к нему, чтобы записать текст создаваемого макроса. Далее
в строковую переменную записываем текст создаваемого макроса, учитывая
стиль написания операторов Visual Basic. Оператор
CodeModule.AddFromString(eee_);



где еее_ — строка, содержащая текст макроса, записывает текст макроса в
модуль. Далее создаем меню и кнопку, в свойство OnAction которой запи-
сываем строку — имя модуля и макроса, разделенные точкой. Метод
Execute кнопки запускает созданный макрос на выполнение. Далее удаляем
кнопку, панель и компонент, содержащий программный модуль.
Если эту процедуру выполнять по шагам, то сможем наблюдать следующее.
На первом этапе мы видим в окне редактора Visual Basic, как создается про-
граммный модуль и в него записывается текст макроса (рис. 16.21).

Рис. 16.21. Создан модуль и записан текст макроса

Рис. 16.22. Макрос запущен на выполнение
Далее выполняются метод Execute кнопки, с которой связан макрос, и про-
грамма на Visual Basic, записанная в программном модуле (рис. 16.22).
После выполнения удаляются созданные элементы управления и программ-
ный модуль с текстом подпрограммы на Visual Basic (рис. 16.23).

Рис. 16.23. Макрос выполнен, элементы управления и программный модуль удалены
Опубликовал Kest October 05 2009 08:43:37 · 0 Комментариев · 10029 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Род Стивенс. Delp...
Billenium Effects...
Мониторинг сервер...
Время загрузки ...
Converter AMR<->W...
CoolDev TipsSyste...
Правила программи...
ZipForge
Карта сайта
Пишем программы и...
Indy in Depth Глу...
Библия хакера 2. ...
Cтатьи Королевств...
API (Применение A...
Алгоритм DES шифр...
PDJ Scrollers
«Философия» прогр...
Создание оригинал...
Язык программиров...
Обучение Borland ...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97833
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10291
Turbo Pascal fo... 7373
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Изучая сложные объ...
Развлечения на сай...
Откуда взялось пон...
Как стать издателем
ASSIGN (ПРИСВОИТЬ)
Установление подли...
Два всадника на од...
Просмотр состояния...
Предикат 'допустим...
Популярные игры в ...
последний месяц, п...
Ответы см
Использование комп...
6.10. Обработка ф...
В случае атаки сис...
Презентации Prezi
Реализации Drag&Dr...
Батуты в СПб попры...
Риски безопасности...
Хранение документ...
Этапы подбора ключ...
Сигареты оптом: ка...
Возможность обыгра...
Программы для созд...
Задача на геометри...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?