Навигация
Главная
Поиск
Форум
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
Подключение Mic... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Организация зап... 64647
Создание потоко... 62133
Модуль Forms 61246
Создание отчето... 61202
ТЕХНОЛОГИИ ДОСТ... 57661
Пример работы с... 55173
Имитационное мо... 53052
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

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

База данных склада на Delphi + Схема БД
Моделирование работы участка термической обработки шестерен на GPSS + По...
Обратное размещение элементов ЭВС на Delphi + Пояснительная записка

Реклама



Подписывайся на 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 Комментариев · 8209 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Программирование ...
Исправление проц...
RAS
XPmenu
Панель "ссылки"
AddPage [Исходник...
NotePad Pro [Исхо...
isoCanvas (Редакт...
PHP 5 в подлинник...
Применение фильтр...
CwstatusBar
Редактор текста (...
Text3D
Midi
mp3tag
API (Применение A...
C++ Builder: Книг...
C# 2005 и платфор...
DemoEdit [Исходни...
Простой текстовый...

Топ загрузок
Приложение Клие... 100384
Delphi 7 Enterp... 83560
Converter AMR<-... 20051
GPSS World Stud... 11314
Borland C++Buil... 11245
Borland Delphi ... 8183
Turbo Pascal fo... 6987
Visual Studio 2... 4970
Калькулятор [Ис... 4419
FreeSMS v1.3.1 3516
Случайные статьи
Проверка состоятел...
Функции
Выбор наилучших су...
Выберем любимое бл...
Метод экспертного ...
Блоки работы с при...
Формат потока ввод...
Проблемы внедрения
Копирование и удал...
Новые возможности FFS
Алфавит языка Obje...
Игровые автоматы и...
Типы и разновиднос...
Проектирование усл...
7.3. Ханойские башни
Если столбец sever...
HTPC на базе Linux
Группа блоков созд...
Виртуальные слоты
2.6.2. Рассмотре...
Генерирование и об...
7.7. Сортировка
Ограничение ущерба
Развертывание гото...
Система оптимизаци...
Статистика



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


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