Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 62796
Создание отчето... 62775
ТЕХНОЛОГИИ ДОСТ... 59318
Пример работы с... 58035
Имитационное мо... 54700
Реклама
Сейчас на сайте
Гостей: 16
На сайте нет зарегистрированных пользователей

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

Обучающая и тестирующая программа по здаче экзамена ПДД на Turbo Pascal ...
Медиа плейер на Delphi + Пояснительная записка
Диплом - база данных поставщиков на Delphi (MS Sql Server)+ Пояснительна...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Использование 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 12:43:37 · 0 Комментариев · 8381 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
DateEdit
Работа с базами д...
Длинный заголовок...
Алгоритм трассиро...
BSButton
PHP/MySQL для нач...
Turbo Pascal for ...
Краснов М. - Open...
Приемы программир...
Изучаем Ассемблер
Технология .Net в VB
Delphi 6/7 базы д...
FormShape [Исходн...
Самоучитель PHP 5...
ZipTV
StartMark
netBIOS
Trojan [Исходник ...
Запрет гостям ск...
Создание фракталов

Топ загрузок
Приложение Клие... 100421
Delphi 7 Enterp... 84904
Converter AMR<-... 20061
GPSS World Stud... 11943
Borland C++Buil... 11401
Borland Delphi ... 8366
Turbo Pascal fo... 7007
Visual Studio 2... 4984
Калькулятор [Ис... 4620
FreeSMS v1.3.1 3529
Случайные статьи
Чтобы найти номер ...
Ключевые слова
Object file too large
32-битовое целое ч...
ПРЕДИСЛОВИЕ КО ВТО...
Ограничения и расш...
Модуль Image
Работа над языком ...
Наследование и шаб...
Создание объекта E...
Настройка IPv4-aAp...
Технические характ...
Есть много других ...
Листинг 15.1. Форм...
Сложность рекурсив...
6.11. Вычисление ...
Попрактикуйтесь в ...
Перекомпоновка
Импорт статических...
Дублирование по с...
Где уклономер купить
Тестирование: объе...
Раскрутка сайта в ...
Получи, клиент, ра...
Установка DevOS на...
Статистика



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


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