
- •Часть II
- •Главные составные части среды программирования
- •Формы, модули
- •Интеллектуальный редактор
- •Палитра Компонент
- •Дополнительные элементы
- •Структура проекта
- •Структура модуля
- •Проект Delphi
- •Стандартные компоненты
- •Свойства формы
- •События формы
- •Создание форм разного вида
- •Конструирование меню
- •Компоненты
- •Общие принципы создания меню
- •Пункты меню
- •TMainMenu - компонент
- •Основные свойства tMainMenu
- •Основные методы tMainMenu
- •События tMainMenu
- •TMenuItem - класс
- •Основные свойства tMenuItem
- •Основные методы tMenuItem
- •События tMenuItem
- •Рисование и закраска Графические компоненты
- •Свойство объектов Canvas
- •Полный список методов tCanvas
- •Основные события tCanvas
- •Объект tPaintBox
- •TImage - компонент
- •TShape - компонент
- •Файлы и устройства ввода/вывода
- •Использование файловых переменных. Типы файлов
- •Операции ввода/вывода
- •Процедуры и функции для работы с файлом
- •Контроль ошибок ввода/вывода
- •Атрибуты файла. Поиск файла
- •Базовые классы tStream и tHandleStream
- •Свойства и методы класса Tstream
- •Класс tFileStream
- •Класс tMemoryStream
- •Класс tStringStream
- •Оповещение об изменениях в файловой системе
- •Компоненты, используемые для создания баз данных
- •Открытие и закрытие DataSet
- •Работа с Данными
- •Использование SetKey для поиска в таблице
- •Использование фильтров для ограничения числа записей в DataSet
- •Теория ole
- •Ole Контейнер Основные свойства и методы компонента OleContainer.
- •Работа с ms Office в Delphi.
- •Объекты ms Word
- •Свойства и методы объекта Selection
- •Коллекция объектов Shapes
- •Объекты ms Excel
- •Создание объекта ExceLApplication, запуск и визуализация окна приложения
- •Работа с листами рабочей книги
- •Программирование диаграмм Excel в Delphi
- •Коллекция Charts, размещение диаграммы и исходных данных
- •Тип диаграммы
Использование фильтров для ограничения числа записей в DataSet
Процедура ApplyRange позволяет Вам установить фильтр, который ограничивает диапазон просматриваемых записей. Например, в БД Customers, поле CustNo имеет диапазон от 1,000 до 10,000. Если Вы хотите видеть только те записи, которые имеют номер заказчика между 2000 и 3000, то Вы должны использовать метод ApplyRange, и еще два связанных с ним метода. Данные методы работают только с индексированным полем.
Вот процедуры, которые Вы будете чаще всего использовать при установке фильтров:
procedure SetRangeStart;
procedure SetRangeEnd;
procedure ApplyRange;
procedure CancelRange;
Кроме того, у TTable есть дополнительные методы для управления фильтрами:
procedure EditRangeStart;
procedure EditRangeEnd;
procedure SetRange;
Для использования этих процедур необходимо:
Сначала вызвать SetRangeStart и использовать свойство Fields для определения начала диапазона.
Затем вызвать SetRangeEnd и вновь использовать свойство Fields для определения конца диапазона.
Первые два шага подготавливают фильтр, и теперь все что Вам необходимо, это вызвать ApplyRange, и новый фильтр вступит в силу.
Когда нужно прекратить действие фильтра - вызовите CancelRange.
Table1.SetRangeStart;
if RangeStart.Text <> '' then
Table1. Fields[0].AsString := RangeStart.Text;
Table1.SetRangeEnd;
if RangeEnd.Text <> '' then
Table1.Fields[0].AsString := RangeEnd.Text;
Table1.ApplyRange;
end;
Сначала вызывается процедура SetRangeStart, которая переводит таблицу в режим диапазона (range mode). Затем Вы должны определить начало и конец диапазона. Обратите внимание, что Вы используете свойство Fields для определения диапазона:
Table1.Fields[0].AsString := RangeStart.Text;
Такое использование свойства Fields - это специальный случай, так как синтаксис, показанный здесь, обычно используется для установки значения поля. Этот специальный случай имеет место только после того, как Вы перевели таблицу в режим диапазона, вызвав SetRangeStart.
Заключительный шаг в процедуре показанной выше - вызов ApplyRange. Этот вызов фактически приводит ваш запрос в действие. После вызова ApplyRange, TTable больше не в находится в режиме диапазона, и свойства Fields функционирует как обычно.
Обработчик события нажатия кнопки ‘CancelRange’:
procedure TForm1.CancelRangeBtnClick(Sender: TObject);
begin
Table1.CancelRange;
end;
Обновление (Refresh)
Функция Refresh связана с функцией Open, в том смысле что она считывает данные, или некоторую часть данных, связанных с данной таблицей. Например, когда Вы открываете таблицу, Delphi считывает данные непосредственно из файла БД. Аналогично, когда Вы Регенерируете таблицу, Delphi считывает данные напрямую из таблицы. Поэтому Вы можете использовать эту функцию, чтобы перепрочитать таблицу, если Вы думаете что она могла измениться. Быстрее и эффективнее, вызывать Refresh, чем вызывать Close и затем Open.
Теория ole
Работа ОС Windows предусматривает передачу и обработку сообщений как между ОС и приложением, так и между приложениями, а также использование динамических библиотек. Этот механизм был использован еще в первых версиях Windows и отразился на методах разработки приложений для этой ОС. Основой программирования в первых версиях Windows стало программирование объектов, потому что любая программа этой ОС представляла собой объект. С развитием операционной системы развивались и механизмы взаимодействия программ. Развитие шло от обмена сообщениями, использования DLL (Dynamic Link Library, динамически подключаемые библиотеки процедур и функций) и механизма DDE (Dynamic Data Exchange, динамический обмен данными) к современным технологиям, основанным на OLE (Object Linking and Embedding, связывание и внедрение объектов), COM (Component Object Model, компонентная модель объектов), DCOM (Distributed Component Object Model, распределенная компонентная модель объектов). Этот переход был обоснован тем, что стало недостаточным использование только функций и процедур, предоставляемых внешними программами и библиотеками. На первый план вышла необходимость управления целыми объектами, которые представляют собой приложения или документы и расположены как в одном адресном пространстве управляющей программы, так и вне этого пространства или даже на другом компьютере локальной сети. Такая постановка задачи повлекла за собой революционные изменения как в структуре ОС Windows, так и в программах, предназначенных для разработки приложений. Приложения MS Office представляют собой объекты-серверы, которые могут управляться внешними программами, и здесь не последнюю роль играют механизмы СОМ и OLE.
Модель СОМ предоставляет возможность создания многократно используемых объектов в различных приложениях, поддерживающих этот интерфейс. Объектами СОМ являются приложения-серверы, специальным образом оформленные и зарегистрированные в системе. Они могут быть представлены в формате ЕХЕ- или DLL-модулей. Эти серверы могут загружаться и выполняться как в адресном пространстве вызывающего приложения, так и в виде самостоятельного процесса, или на другом компьютере сети (распределенная модель СОМ — DCOM). Они должны быть написаны на любом языке, поддерживающем интерфейс СОМ.
Развитие технологии СОМ продолжает ее подмножество — технология OLE Automation (автоматизация OLE). Ее отличие в том, что она позволяет использовать возможности СОМ не только языкам-компиляторам, но и интерпретаторам, и обеспечивает связь с вызываемыми методами на стадии выполнения приложения. Такой способ вызова называется поздним связыванием. Методы при таком способе вызова выполняются медленнее, причем заранее нельзя проверить правильность написания объектов и их методов. Преимуществом такого метода является независимость выбора среды разработки от объекта, который нужно программировать.
Среда Delphi поддерживает вызовы методов серверов автоматизации. Сервер автоматизации представляет собой программу, которая может управляться внешней программой — контроллером автоматизации. Сервером в данном случае является Word или Excel, а контроллер разрабатывается программистом.
Для этого используются переменные типа Variant, которые содержат ссылки на объекты автоматизации. На этапе выполнения программы серверу автоматизации передается команда в виде строки, предварительно записанной в переменную типа Variant. Рассмотрим в качестве примера следующий фрагмент программы:
Uses ComObj;
Var IE:variant;
procedure TMainForm.ButtonlClick(Sender: TObject);
begin
IE:=CreateOleObject('InternetExplorer.Application');
IE.Visible:=true; // Нужно выбрать один из операторов
IE.Visible:=false; // и проверить, как это работает
end;
Переменная IE типа Variant не имеет никаких свойств и методов, но, тем не менее, программа откомпилируется и будет выполняться. Если мы вместо свойства Visible напишем любое другое свойство, которое не поддерживает IE, то компилятор ошибки не выдаст, а на стадии выполнения произойдет ошибка. Это особенности позднего связывания — свойства и методы проверяются в самом приложении-сервере на стадии выполнения.
Технология OLE (Object Link and Embedding) – является стандартом Windows и обеспечивает связывание и встраивание объектов на основе технологии COM (Component Object Model).
COM – это спецификация, созданная для описания структуры COM-объектов. COM-объекты могут использоваться в любых языках программирования, вне зависимости от того, на каком языке они написаны. Помимо компиляторов, с COM объектами могут работать очень много крупных программных пакетов, например всё те же Word и Excel.
Объекты OLE могут запускаться как в отдельном окне, так и внутри окна вашего приложения. Таким образом, вы можете получать доступ к чужим приложениям и использовать их в своих целях.
Когда OLE объект запускается внутри вашего окна, то часть ваших меню и панелей заменяется на те, что используются в программе, которую мы загружаем.
Написанная программа с использованием и внедрением объектов называется Контейнер OLE, а программа, которую мы привязываем называется Объект OLE.
При работе с OLE выделяются два способа связи:
1. Связывание объекта OLE с контейнером. В этом случае результирующий файл сохраняется отдельно и должен быть создан до того, как контейнер обратиться к нему. Контейнер только ссылается на файл, но не хранит в себе никаких данных. Главное преимущество такого способа – к одному документу может ссылаться множество контейнеров и при изменении документа, все контейнеры получают эти изменения.
2. Встраивание объектов. В этом случае созданный документ храниться в контейнере и другие приложения не могут получить к нему доступ. В этом случае данные хранятся как часть приложения.