Foxpro начинает взаимодействовать с браузерами www


Foxpro начинает взаимодействовать с браузерами www

Содержит имя приложения просмотра классов.

Параметры:
cProgramName
Задает приложение просмотра. Если приложение просмотра классов установлено, переменная памяти _BROWSER содержит имя BROWSER.APP. Приложение BROWSER.APP включается в профессиональном выпуске Visual FoxPro.
Если приложение просмотра классов находится в каталоге, отличном от текущего каталога Visual FoxPro, принятого по умолчанию, укажите вместе с именем приложения путь к нему.
Приложение просмотра классов можно также задать в файле конфигурации Visual FoxPro, включив в него строку со следующим синтаксисом:

Чтобы задать другое приложение просмотра классов, сохраните новое имя приложения в переменной памяти _BROWSER из окна команд или в программе.

Комментарии:
Программа просмотра классов с именем BROWSER.APP включается в комплект профессионального выпуска Visual FoxPro. Приложение BROWSER.APP отображает отношения между классами, принадлежащими библиотеке визуальных классов (.VCX), и по умолчанию размещается в каталоге с Visual FoxPro.
Программу просмотра классов можно запустить с помощью следующей команды:

При выдаче этой команды в меню Tools добавляется элемент просмотра классов и приложение запускается. После этого его можно будет запустить вновь, выбрав в меню элемент просмотра классов.
Чтобы добавить элемент просмотра классов в меню Tools, не запуская саму программу просмотра классов, выдайте следующую команду:

Вы также можете запустить приложение просмотра классов для конкретной библиотеки визуальных классов или для ссылки на объект; по желанию можно задать имя класса, которое будет первоначально изображено выделенным. Например, следующая команда запускает программу просмотра классов, открывает библиотеку классов Buttons и выбирает класс VCR:

Подробнее о программе просмотра классов см. тему Файлы примеров.

Программа для получения информации с сайта в интернете

Есть следующий код:

WAIT WINDOW «Соединение с сервером центробанка . » NoWait

ie = CreateObject(«internetexplorer.application»)
ie.Navigate(«http://www.cbr.ru»)

starTime = DateTime()
nextTime = 1
Do While ie.ReadyState<>4
IF nextTime <> DateTime() — starTime + 1
WAIT WINDOW «Соединение с сервером центробанка . » + PADR(«», nextTime, «.») NoWait
nextTime = DateTime() — starTime + 1
EndIf
Enddo

kurs = ie.Document.GetElementById(«Panel1»).GetElementsByTagName («TD»).Item[13].innerText

WAIT Clear
RELEASE ie

MESSAGEBOX(«Курс доллара на сегодня: » + kurs, 64, «Центробанк»)

Вопрос: как не извращаться с паузой в цикле While а повесить нормальную функцию на событие объекта internetexplorer.application DocumentComplete ?

15.08.2013, 12:58

Программа для получения информации из сайта и присвоения информации переменным
Доброго времени суток, уважаемые пользователи форума! Надеюсь, у Вас сегодня хорошее настроение.

API функция для получения информации о файле в интернете
Скажите, пожалуйста, с помощью какой API-функции можно узнать имя файла в интернете? Например, я.

Шаблон получения информации с другого сайта
Такой вопрос, не получается найти шаблон, который применяется в случае, если нужно в мое.

Распарсить страницу в Интернете для получения IP, региона и т.д
Добрый день. Начал учиться составлять регулярные выражения. Не буду писать тут все сразу, только по.

Тема для получения полезной информации
Здравствуйте! Предлогаю закрепить эту тему. Дабы не плодить темы с вопросами где находится это, как.

Visual Foxpro 7 Электронный учебник Курс лекций

ГЛАВА 24
Публикация данных на Web-сервере

Все больше в нашу жизнь входит Интернет. В связи с этим во многие программные продукты добавляются средства создания Web-страниц. Не является исключением и FoxPro. В Visual FoxPro имеется мастер Web Publishing (Web-публикация), позволяющий формировать Web-страницы на основе баз данных. При этом пользователь может выбирать стили оформления страницы, предлагаемые мастером, а также использовать внешние таблицы стилей, созданные в других программных продуктах. Данные, размещаемые на странице, могут находиться в таблицах, локальных или удаленных представлениях базы данных. Рассмотрим работу мастера, а также предлагаемые им элементы оформления Web-страницы.

Мастер Web Publishing

Чтобы создать Web-страницу с помощью мастера, выполните следующие действия:

  1. Откройте базу данных проекта, содержащую таблицу, локальное или удаленное представление, информацию из которых хотите разместить на Web-странице.
  2. В меню Tools (Сервис) выберите команду Wizards (Мастера), а затем опцию — Web Publishing (Web-публикация).
  3. Запускается мастер и появляется его первое диалоговое окно, в котором необходимо указать используемую таблицу или представление, и выбрать поля этой таблицы, размещаемые на Web-странице. В области Databases and tables (Базы данных и таблицы) окна мастера расположены два списка. Верхний список содержит название открытой базы данных, нижний — список ее таблиц и представлений. Выберите из нижнего списка требуемую таблицу. При этом в списке Available fields (Доступные поля) будут отображены все поля текущей таблицы (рис. 24.1).
  4. Перенесите из списка Available fields (Доступные поля) в Selected fields (Выбранные поля) поля, которые хотите расположить на Web-странице. Для перехода к следующему шагу в работе мастера нажмите кнопку Next (Далее).

Рис. 24.1. Первое окно мастера

  1. На втором шаге задается критерий сортировки данных (рис. 24.2). Поля, по которым будет осуществляться упорядочение, необходимо разместить в списке Selected fields (Выбранные поля). Для переноса полей из списка Available fields or index tag (Имеющиеся поля и индексы) в список Selected fields (Выбранные поля) можно использовать кнопку Add (Добавить) или мышь. Опции Ascending (По возрастанию) и Descending (По убыванию) определяют, по возрастанию или по убыванию будут упорядочиваться данные в указанном поле.

Задав сортировку данных, нажмите кнопку Next (Далее).

Рис. 24.2. Указание сортировки данных

  1. На третьем шаге задается макет Web-страницы и стиль отображения объектов (рис. 24.3). Диалоговое окно мастера содержит два списка. С помощью списка Data layouts (Расположение данных), содержащего пять значений, определяется расположение данных на странице, т. е. макет данных. Получаемый вид страницы в зависимости от выбранного макета данных можно просмотреть в области просмотра, расположенной в правом верхнем углу окна мастера. Список Visual styles (Визуальные стили) содержит флажки, позволяющие настроить стиль оформления Webстраницы установкой требуемых флажков.

Рис. 24.3. Задание стиля оформления

Диалоговое окно мастера содержит кнопки следующего назначения:

  • Options (Параметры) — открывает диалоговое окно для настройки параметров отображения данных на Web-странице;
  • Advanced (Дополнительно) — открывает диалоговое окно, позволяющее настроить параметры всей Web-страницы, разместить на ней помимо данных из таблицы, HTML-элементы (заголовки, текст, линии, бегущую строку и т. д.);
  • Preview (Просмотр) — загружает оформленную в соответствии с заданными стилями Web-страницу в обозреватель Internet Explorer без выхода из мастера. Вы можете просмотреть созданную страницу, в случае необходимости с помощью мастера изменить параметры настройки и снова просмотреть результат своей работы.

Используя расположенные в этом окне мастера объекты интерфейса, настройте параметры создаваемой Web-страницы и для перехода к следующему шагу нажмите кнопку Next (Далее).

Настройка параметров, осуществляемая на данном шаге мастера, будет рассмотрена чуть позже.

  1. На заключительном шаге создания Web-страницы с помощью мастера (рис. 24.4) укажите предполагаемые действия с созданной страницей, используя опции, описанные в табл. 24.1.

Таблица 24.1. Опции окна Web Publishing Wizard Step 4

Опция Действие
Save web page for later use (Сохранить Web-страницу) Созданная Web-страница сохраняется на диске в файле с расширением НТМ
Save web page and modify it in the text editor (Сохранить Web-страницу и открыть для модификации в текстовом редакторе) Созданная Web-страница сохраняется на диске в файле с расширением НТМ и открывается в текстовом редакторе для модификации
Save web page and open it in a browser (Сохранить Web-страницу и открыть для просмотра в Webбраузере) Созданная Web-страница сохраняется на диске в файле с расширением НТМ и открывается для просмотра в Web-браузере
Create script for generating web page (Создать скрипт генерации Web-страницы) Созданная Web-страница сохраняется в виде скрипта, т. е. генерируется программный файл с расширением PRG, при запуске которого на выполнение динамически создается Web-страница

Рис. 24.4. Заключительное окно мастера

Диалоговое окно содержит флажок Save style (Сохранить стиль). При его установке в расположенное справа поле можно ввести имя файла, в котором будет сохранен стиль, полученный при создании Web-страницы.

  1. После того как все параметры заданы, нажмите кнопку Finish (Готово). Откроется диалоговое окно Save as (Сохранить как), в котором укажите имя файла и папку, в которой созданная Web-страница должна быть сохранена. На этом создание Web-страницы завершено.

Что такое экспертная система?
1.1. Смысл экспертного анализа
1.2. Характеристики экспертных систем
1.3. Базовые функции экспертных систем
1.3.1. Приобретение знаний
1.3.2. Представление знаний
1.3.3. Управление процессом поиска решения
1.3.4. Разъяснение принятого решения
1.4. Резюме и структура книги
1.4.1. Текущее состояние проблемы
1.4.2. Распределение материала книги по главам
Упражнения

FoxPro будет жить еще долго

Перспективы развития FoxPro давно уже стали одной из самых актуальных проблем для мирового сообщества пользователей этой СУБД. Она стала активно обсуждаться еще в середине 90 годов, когда выяснилось, что потенциал развития баз данных класса xBase в значительной степени исчерпан. «Снизу» — в области небольших БД и клиентских приложений — их активно теснили системы быстрой разработки (Visual Basic, Delphi). А путь «наверх» — к созданию серверных корпоративных решений — был уже перекрыт SQL-системами.

Масла в огонь подливали также возникшие весной 1996 года слухи о прекращении поддержки FoxPro со стороны Microsoft. Представители корпорации тогда публично пообещали не бросать FoxPro-разработчиков на произвол судьбы, но при этом не конкретизировали планы развития системы. Если сегодня проанализировать дискуссии тех времен, складывается впечатление, что Microsoft сама была источником туманных слухов и проверяла сообщество FoxPro-пользователей на стойкость, упорно рекомендуя им подумать о переходе в среду VB-SQL.

Тенденции определились

Похоже, время взаимной проверки крепости нервов наконец закончилось — при выходе новой версии Visual Studio (VS) 6.0, в которую вошел и Visual FoxPro (VFP) 6.0, Microsoft объявила, что VFP продолжает оставаться одним из ее стратегических средств разработки и что корпорация гарантирует его развитие в будущем. В значительной степени такая позиция Microsoft определяется тем, что в течение последнего года очень четко обозначились тенденции миграции сообщества FoxPro-программистов.

Дело в том, что в свое время переход пользователей версий FoxPro 2.x (для DOS и Windwos 3.x) на появившуюся осенью 1995 года систему VFP 3.0 проходил очень вяло. Причин тому было довольно много. Главная из них состояла в необходимости резкого перехода от 16-разрядной среды к 32-разрядной Windows 95, с вытекающими отсюда проблемами модернизации ПО и техники. (Для плавного перехода пользователей Visual Basic корпорация тогда же выпустила версию VB 4.0 в двух вариантах — 16- и 32-разрядном.)

В результате, по оценкам журнала MS FoxPro User Study, еще в марте 1997 года около 65% из почти 160 тысяч пользователей FoxPro в мире продолжали работать с 16-разрядными версиями 2.х (в том числе 25% — в среде DOS), а с появившейся за четыре месяца до этого VFP 5.0 работали только 10%. Вопрос о том, куда будет переходить 16-разрядное большинство, был открыт, но вскоре ситуация прояснилась. Исследования в марте 1998 года показали, что число пользователей FoxPro осталось примерно тем же при резком росте доли VFP 5.0 (46%) и уменьшении более ранних версий (2.x/DOS — 14%, 2.x/Win16 — 20%, 3/Win32 — 20%).

Таким образом, стало ясно, что сообщество пользователей FoxPro в целом осталось верным своему инструменту. При этом обнаружилось, что миграция программистов действительно идет, но не путем перехода от одного инструмента к другому, а путем использования многих средств разработки одновременно. Последние исследования показали, что абсолютное большинство FoxPro-разработчиков пользуется и другими системами программирования — чаще всего VB (33%) и Access (32%). Хотя многие из них применяют также и инструменты не-Microsoft (25%), отчетливо видна ориентация на комплекс Visual Studio. Так, еще весной нынешнего года 66% пользователей VFP собирались покупать версию VFP 6.0 в составе VS. В то же время 10% владельцев VS начали впервые применять VFP в своей работе.

Здесь следует подчеркнуть, что тенденция к многоязычности пользователей инструментов Microsoft довольно искусно поощряется самой корпорацией путем дозированного распределения функциональности между различными средствами разработки. Тем самым между ними поддерживается внутренняя конкуренция. Например, как это ни странно, VB отстает от VFP в области объектно-ориентированного программирования, не говоря уже о специализированных средствах работы с базами данных. Однако VFP до недавнего времени заметно уступал VB в применении OLE-технологий, создании повторно используемых модулей, особенно для серверных приложений. Кстати, VC++ уступает им обоим по возможностям визуального программирования.

VFP 6.0 — позиционирование, новшества, перспективы

Прежде всего VFP остается эффективным инструментом создания универсальных настольных баз данных. Хотя возможности создания баз данных в последних версиях существенно расширены1, использование VFP для создания мощных систем представляется весьма проблематичным. Среди различных ограничений можно назвать отсутствие встроенных средств защиты информации (несанкционированный доступ, шифрование данных), обеспечения целостности данных в условиях сбоев, поддержки многопроцессорной обработки и пр.


Поэтому сегодня стратегия развития VFP определяется общей концепцией интеграции различных средств разработки Microsoft в рамках комплекса Visual Studio, который в свою очередь нацелен на возможность реализации многокомпонентных, масштабируемых приложений на базе архитектуры Microsoft DNA (Distributed interNet Applications — распределенные межсетевые приложения). Ключевой идеей DNA является переход к трехуровневой клиент-серверной структуре:

  • клиентская часть — пользовательский интерфейс;
  • промежуточный слой — управление бизнес-логикой;
  • серверная часть — интегрированные базы данных.

В рамках этой архитектуры FoxPro в принципе может использоваться для создания компонентов любого уровня2. Однако, с точки зрения Microsoft, для нижнего и верхнего слоя наилучшим образом подходят HTML и SQL Server соответственно, а для промежуточного — среда Microsoft Transaction Server, в которой работают бизнес-компоненты, созданные с помощью VB и VFP. Выбор конкретного средства (VB или VFP) остается за разработчиком, но тут следует иметь в виду, что VFP опережает VB по мощности средств обработки данных и возможностям объектно-ориентированного программирования.

В соответствии с таким позиционированием VFP идет развитие его функциональности. Новшеств в версии 6.0 появилось довольно много; с их описанием можно познакомиться по адресу www.microsoft.com/vfoxpro. Здесь же отметим только ключевые моменты. В первую очередь это полная поддержка среды Microsoft Transaction Server и расширенные возможности при создании Web-приложений (использование Active Server Pages, набора функций FoxISAPI, технологии Active Document и др.). Далее — возможность использования более чем 100 готовых классов (VFP Foundation Classes) и механизма создания и каталогизации библиотек классов (Component Gallery). Добавлены новые и улучшены ранее существовавшие средства отладки и мастера.

VFP 6.0 может теперь работать практически со всеми вспомогательными инструментами Enterprise Visual Studio для создания сложных приложений масштаба предприятия и поддержки групповой разработки (в автономном варианте поставки VFP 6.0 эти средства входят в состав Профессиональной редакции).

Ситуация в России

По оценкам московского представительства Microsoft (на основе базы данных российских разработчиков, формирующейся в течение последних лет и насчитывающей несколько тысяч записей), в России в целом наблюдаются общемировые тенденции миграции, но с некоторой временной задержкой (около одного года). При этом FoxPro был и продолжает оставаться одним из самых популярных инструментальных средств в России (в отличие от западных стран), для изучения которого имеется хорошая информационно-методическая база (книги, специализированные журналы, центры обучения и пр.).

Именно поэтому первая после общей презентации пакета VS 6.0 конференция российского отделения Microsoft (при участии петербургской компании «Компьютерное образование») из цикла «Средства разработки», состоявшаяся 11 ноября в Москве, была посвящена версии VFP 6.0. Основное внимание было уделено возможностям ее использования для создания компонентов бизнес-логики применительно к MS Transaction Server 2.0, клиент-серверных систем и приложения для Internet. Стоит отметить, что некоторая часть из почти 150 слушателей не являлась пользователями FoxPro; эти люди пришли, чтобы познакомиться с возможностями продукта в расчете на перспективу.

На конференции было объявлено, что в начале 1999 года в России должна появиться версия VFP 6.0 Russian, в которой будет локализован модуль времени выполнения (run-time module), позволяющий создавать приложения с русскоязычным интерфейсом. Кроме того, этот продукт будет стоить почти на 30% дешевле англоязычного варианта.

Foxpro начинает взаимодействовать с браузерами www

Давно не секрет, что требования современных компьютерных пользователей все чаще предполагают использование объёмных информационных хранилищ, которые называются базами данных, а программные средства для их управления СУБД. Практически на любом предприятии, фирме и даже самом маленьком офисе существует необходимость реализации задуманных проектов при помощи баз данных. Кроме всего прочего, часто необходимы встроенные механизмы для выборки данных (язык запросов SQL), а также интерфейс для взаимодействия с внешним программным обеспечением.

Несмотря на моральное устаревание (по сравнению с другими СУБД) и ограниченным набором инструментов для разработчика, данную СУБД продолжают успешно применять для решения целого списка задач, а выбор в её пользу обусловлен не только богатыми функциональными возможностями, но и тем, что скачать Microsoft Visual FoxPro можно бесплатно.

Специально для таких целей компания Microsoft и разрабатывала программную среду под названием Visual FoxPro, основной задачей которой является создание полноценных баз данных и развитие инструментов для работы с ними (обновление, удаление, бекап и тому подобное).

Visual FoxPro является продолжением популярной досовской версии FoxPro, которая ещё в далёкие девяностые завоевала любовь и уважение разработчиков во всём мире. Одним из главных достоинств Visual FoxPro является быстрая работа с содержимым базы при частом обращении, изменении и удалении данных со стороны пользователей.

Приятным моментом является то, что последние доработки программной среды и ряд исправлений ошибок включены в свежую версию продукта. Так, например, для программистов предоставлены новые возможности создания массивов с данными, начиная «с нуля». Также разработчики позаботились и об организации возможности печати необходимого содержимого и усовершенствовали поиск. Проведена интеграция в пакетные приложения Microsoft Office, добавлена поддержка работы с диаграммами и возможность создания серверных приложений.

Изначально скачать Visual FoxPro возможно только на английском языке (в базовой версии, размером в 30 Мб) и тем не менее данная СУБД имеет ряд неоспоримых преимуществ перед своими давними конкурентами.

Foxpro начинает взаимодействовать с браузерами www

Visual FoxPro — это полнофункциональный язык объектно-ориентированного программирования. Он предлагает мощные средства для интерактивной работы и создания приложений, предназначенных для управления реляционными базами данных. И, что не менее важно, этот язык прост в изучении. Кроме того, программы, написанные на языке Visual FoxPro 7.0, будут совместимы с программами, написанными на Visual FoxPro предыдущих версий.

Разработка объектно-ориентированных приложений начинается с моделирования реальных объектов, необходимых для выполнения конкретного задания. При создании приложения вы взаимодействуете с хорошо знакомыми объектами: таблицами баз данных, формами, цветовыми схемами. Создание каждого объекта предполагает использование Visual FoxPro. Вам предоставляется возможность скопировать созданные объекты из одного приложения в другое и тем самым сократить объем работы. Например, если вы создали кнопку, которая предназначена для поиска фамилии клиента в указанной таблице, то вы можете использовать эту же кнопку в другом приложении. Вам потребуется лишь изменить наименование поля и таблицы, в которых будет осуществляться поиск.

Visual FoxPro позволяет сэкономить ваше время и деньги на каждом этапе процесса создания приложения. На начальной стадии время, затраченное на разработку прототипов, не пропадает даром. Вы можете сохранить каждый прототип в качестве класса и использовать при создании новых форм. На следующих стадиях разработки приложения (и даже после того, как работа над приложением уже завершена) вы можете в любой момент вернуться к нужному объекту и изменить или расширить его свойства, не нарушая целостности других объектов. Сопровождение и модификация приложений, написанных на Visual FoxPro, осуществляется гораздо более эффективно и требует меньших затрат по сравнению с традиционными линейными программами.

Классы и объекты тесно связаны друг с другом, но, тем не менее, эти понятия не тождественны. Класс содержит информацию о том, как должен выглядеть объект и определяет выполняемые им действия. Объект является экземпляром класса, который наследует характеристики класса.

При создании объектов приложения вы можете использовать базовые классы Visual FoxPro, классы внешних библиотек, а также создавать новые классы.

Visual FoxPro содержит большое число базовых классов (табл. 19.1), которые можно использовать при создании форм любой сложности. Единственным недостатком базовых классов является невозможность их модификации, но вы можете использовать базовые классы для создания пользовательских классов, полностью вами управляемых. Далее при создании форм можно применять пользовательские классы вместо базовых.

Таблица 19.1. Базовые классы Visual FoxPro

Наименование Назначение Видимый Контейнер
ActiveDoc Активный документ Нет Нет
Checkbox Флажок Да Нет
Column Столбец Да Да
ComboBox Раскрывающийся список Да Нет
CoiranandButton Кнопка управления Да Нет
CommandGroup Набор кнопок управления Да Да
Container Контейнер Да Да
Control Базовый визуальный класс Да Нет
Custom Базовый невизуальный класс Нет Нет
EditBox Поле редактирования Да Нет
Form Форма Да Да
Forms et Набор форм Нет Да
Grid Таблица Да Да
Header Заголовок столбцов таблицы Да Нет
HyperLink Object Гиперссылка Нет Нет
Image Изображение Да Нет
Label Надпись Да Нет
Line Линия Да Нет
ListBox Список Да Нет
OleContainerControl OLE-объект управления
OleBoundControl OLE-объект данных
OptionButton Переключатель Да Нет
OptionGroup Набор переключателей Да Да
Page Вкладка формы Да Да
Page Frame Макет страницы Нет Да
ProjectHook Проект Нет Да
Separator Разделитель Да Нет
Shape Обрамление Да Нет
Spinner Счетчик Да Нет
TextBox Поле ввода Да Нет
Timer Таймер Нет Нет
ToolBar Панель управления Да Да

Почти все базовые классы являются визуальными. Объекты, созданные на их основе, отображаются на экране. Некоторые из базовых классов невидимы. Они используются для объединения объектов (например, FormSet), обработки специальных событий (например, Timer) или создания невизуальных объектов (например, ProjectHook).

В Visual FoxPro широко применяется вложенность классов. Вложенным является класс, являющийся частью другого класса, называемого контейнером (container class). Наиболее яркий пример контейнера представляет собой таблица, компоненты которой — это столбцы и надписи к ним. При создании формы и после запуска ее на выполнение вы можете получить доступ ко всем компонентам контейнера.

Каждый базовый класс предназначен для выполнения определенных функций и обладает соответствующим набором свойств, методов и событий. Кроме свойств и событий, специфических для данного класса, каждый базовый класс содержит основной набор свойств (табл. 19.2) и событий (табл. 19.3).

Таблица 19.2. Минимальный набор свойств класса

Наименование Описание
Class Тип класса
BaseClass Базовый класс, на основе которого создан данный класс
ClassLibrary Библиотека классов, в которой хранится данный класс
ParentClass Определенный пользователем класс, на основе которого создан данный класс

Таблица 19.3. Минимальный набор событий

Наименование Описание
Init Наступает при создании объекта
Destroy Наступает при освобождении объекта из памяти
Error Наступает при возникновении ошибки, связанной с объектом

При создании форм мы широко использовали базовые классы, список которых содержится на панели инструментов конструктора формы. Для создания объектов на основе базового класса достаточно выбрать его на панели инструментов, поместить в требуемом месте, а затем определить свойства и методы созданных объектов. Созданный объект будет обладать всеми характеристиками базового класса. Пример создания объекта на основе базового класса Grid (Таблица) показан на рис. 19J.

Для создания новых объектов можно использовать не только конструктор форм, но и функцию CREATEOBJECT, которая имеет следующий синтаксис:

CREATEOBJECT(имяКласса [, параметр1, параиетр2, . ])

Функция CREATEOBJECT возвращает идентификатор созданного объекта, который вы можете применять для ссылки на него. Например, для создания формы, определения ее заголовка и отображения формы на экране необходимо выполнить следующую последовательность команд:

f rmNew. Caption=»Заголовок формы»

Рис. 19.1. Создание объекта в конструкторе форм

Свойства объектов, созданных на основе базовых классов

Объект, созданный на основе базовых классов, наследует его свойства, методы и обрабатываемые события. Свойства подобны переменным, однако в отличие от последних, они не существуют вне объекта.

Возможность изменения свойств объектов в Visual FoxPro является мощным инструментом управления данными в интерактивном режиме. Например, вы можете:

  • изменить свойства формы (заголовок, размер, цвет, расположение и т. п.);
  • изменить цвета полей ввода, тип их отображения, цвет и формат выводимой в них информации;
  • запретить ввод информации в поля, переход на них или же сделать их невидимыми и многое другое.

Для того чтобы определить какое-либо из свойств объекта в интерактивном режиме, вам необходимо выделить требуемый объект, после чего выполнить одно из следующих действий:

  • в меню View (Вид) выбрать команду Properties (Свойства);
  • нажать правую кнопку мыши и из контекстного меню объекта выбрать команду Properties (Свойства).

В результате на экране появляется окно свойств текущего объекта (рис. 19.2). Свойства объектов могут принимать символьные, логические и числовые значения. Некоторые из них могут принимать произвольные значения (например, заголовок поля, его координаты). Другие свойства могут принимать значения из определенного списка.

Рис. 19.2. Окно свойств объекта

При программировании вы можете определить свойство объекта, указав имя объекта и имя свойства, которые разделяются точками. Для изменения свойства достаточно присвоить ему допустимое значение. Например:

* присваиваем заголовку формы значение переменной cName

frmNew. Caption = cName

Язык Visual FoxPro позволяет вам устанавливать не только свойства отдельных объектов, но и определенной группы объектов.

Для этого используется конструкция WITH .. . ENDWITH, которая имеет следующий синтаксис:

Например, вы можете установить одинаковый цвет для группы объектов:

Используя язык Visual FoxPro, можно изменять свойства объектов не только на этапе их создания, но и в процессе выполнения программы. Например, вы можете при переходе из режима просмотра в режим редактирования изменить заголовок формы «Просмотр списка клиентов», который является одним из свойств формы, на «Редактирование списка клиентов».

Свойства, определенные для объектов с помощью окна свойств или программным путем, сохраняются в описании формы. Поэтому, если во время одного сеанса работы вы изменили свойства объектов, они сохранятся до следующего изменения. Изменение свойств объекта не приводит к генерации события, за исключением изменения свойства Value (Значение).

Visual FoxPro позволяет не только использовать свойства, наследованные из базового класса, но и создавать новые, которые можно использовать для хранения характеристик объекта и связанных с ним данных.

Чтобы создать новое свойство объекта, используйте диалоговое окно New Property (Новое свойство) (рис. 19.3), которое открывается при выполнении команды New Property (Новое свойство) из меню Form (Форма). В этом диалоговом окне необходимо задать имя создаваемого свойства и описание.

В диалоговом окне New Property (Новое свойство) находятся флажки, определяющие возможности, приведенные в табл. 19.4.

Таблица 19.4. Флажки диалогового окна New Property

Флажок Назначение
Access Method (Метод доступа) Если установлен этот флажок, то для данного свойства будет автоматически создан метод Access (Доступ)
Assign Method (Метод назначения> Если установлен флажок, то для этого свойства будет автоматически создан метод Assign (Назначение)

Созданное вами свойство отображается на вкладке Other (Другие) окна свойств объекта. Далее вы можете присвоить созданному свойству требуемое значение в окне свойств объекта или программным путем и использовать его при выполнении приложения.

Рис. 19.3. Диалоговое окно New Property

Наследование событий и методов

Visual FoxPro является языком, управляемым по событиям. Событие представляет собой некоторое действие, которое активизирует стандартную реакцию объекта. В качестве события в Visual FoxPro могут рассматриваться нажатие кнопки мыши, выбор пункта меню или открытие таблицы.

Аналогично свойствам, наследуются события и методы базового класса, на основе которого создается объект. Список методов, определенных для объекта, можно просмотреть на вкладке Methods (Методы) окна свойств объекта (рис. 19.4).

Для каждого события определен соответствующий ему метод, который выполняется при возникновении данного события. Например, метод click (Нажатие) выполняется при нажатии кнопки мыши.


Список доступных методов обработки событий определяется базовым классом. Именно эти методы обеспечивают обработку всех действий пользователя (нажатие клавиш, управление мышью). Visual FoxPro предоставляет возможность модифицировать действия, выполняемые при обработке события данного объекта. Для редактирования метода установите курсор на этот метод в списке методов и дважды щелкните мышью. На экране откроется окно редактирования метода (рис. 19.5), в котором вы можете написать программу обработки события. Например, для кнопки формы вы можете определить программу перемещения по записям.

Для каждого события объекта выполняется определенное в базовом классе действие. В некоторых случаях вам может понадобиться запретить выполнение этих действий. Для этого используйте ключевое слово NODEFAULT в начале метода, связанного с этим событием.

Рис. 19.4. Вкладка Methods окна свойств объекта

Рис. 19.5. Окно редактирования методов

Методы, выполняющиеся при наступлении событий, в окне свойств объекта в списке методов в дополнение к имени содержат слово Event (Событие).

Команда MOUSE позволяет вам программным путем имитировать события click (Нажатие), Doubleclick (Двойное нажатие), MouseMove (Перемещение мыши) и DragDrop (Перенести и оставить). Остальные события не могут имитироваться программно, но вы можете вызвать методы, связанные с этими событиями.

Кроме методов, связанных с событиями, объект может содержать и дополнительные методы, которые выполняются только при их вызове. Например, для формы могут быть определены методы перехода на следующую запись, удаления записи и т. п. Эти методы могут наследоваться из базового класса, но вы можете создавать новые методы и для отдельных объектов.

Для создания нового метода в меню Form (Форма) выберите команду New Method (Новый метод) и в открывшемся диалоговом окне New Method (Новый метод) (рис. 19.6) определите имя и краткое описание метода. Созданный вами метод добавляется в список методов объекта, и вы можете открыть окно редактирования метода для ввода программного кода.

Для выполнения метода необходимо не только указать имя метода, но и объект, к которому данный метод будет применяться. Имя объекта и имя метода разделяются точкой. Например, для выполнения метода CaicSum формы Sales необходимо выполнить команду Sales.CalcSumO .

Рис. 19.6. Диалоговое окно New Method

В табл. 19.5 и табл. 19.6 приведены события и методы, которые распознаются и используются Visual FoxPro, и их краткое описание.

Таблица. 19.5. События, распознаваемые Visual FoxPro

Событие Возникает
Activate При активизации объектов FormSet (Набор форм), Form (Форма), Page (Вкладка формы) или при отображении объекта Toolbar (Панель управления)
AfterBuilld При перестроении проекта или приложения, а также при создании динамической библиотеки (dll) или выполняемого файла (ехе) на основе проекта
AfterCloseTables После закрытия таблиц или представлений данных
AfterDock После того, как фиксируется панель инструментов
AfterRowColChange При переходе в другую строку или другой столбец объекта Grid (Таблица)
Bef oreDock Имеет место перед фиксацией объекта ToolBar (Панель управления)
BeforeOpenTables Перед открытием таблиц и представлений, связанных со средой данных формы, набора срорм или отчета
BeforeRowCoIChange Перед тем, как пользователь изменяет активную строку или столбец объекта Grid (Таблица)
Click При нажатии и отпускании левой кнопки мыши
CoramandTargetExec При активизации программой-контейнером приложения

типа Active Document (Активный документ)

CoinmandTarget Query При изменении программой-контейнером пользовательского интерфейса
ContainerRelease При закрытии программой-контейнером приложения типа

Active Document (Активный документ)

DblClick При двойном нажатии и отпускании левой кнопки мыши
Deactivate Когда деакти визируется объект типа «форма»
Deleted Когда пользователь удаляет пометку записи на удаление или когда выдается команда DELETE
Destroy Когда освобождается объект
DownClick При нажатии кнопки со стрелкой, направленной вниз на объектах типа ComboBox (Раскрывающийся список), ListBox (Список) и Spinner (Счетчик)
DragDrop После завершения операции «перенести-и-оставить»
DragOver Когда элемент управления, переносимый с помощью мыши, накрывает объект назначения
DropDown В момент, когда после нажатия кнопки со стрелкой в элементе управления ComboBox (Раскрывающийся список) должен появиться список
Error При возникновении ошибки
ErrorMessage Используется для определения сообщения об ошибке, когда событие Valid (Корректный) возвращает значение False (Ложь)
GotFocus Когда объект получает фокус в результате действий пользователя или выполнения программного кода
HideDoc При переходе из активного документа
Init При создании объекта, когда объект еще не выведен на экран
Interactive Change При изменении значения элемента управления с помощью клавиатуры или мыши
KeyPress При нажатии и отпускании клавиши
Load Имеет место непосредственно перед созданием объекта
LostFocus Когда объект теряет фокус
Message Отображает сообщение в строке состояния, когда объект получает управление
MiddleClick При нажатии средней кнопки мыши (для трехкнопочной мыши)
MouseDown При нажатии кнопки мыши
MouseMove При перемещении указателя мыши по объекту
MouseUp При отпускании кнопки мыши
MouseWheel При вращении колесика мыши, если в мыши оно есть
Moved При перемещении объекта на новое место или когда значения свойства Тор (Верхняя позиция) или Left (Левая позиция) объекта-контейнера изменяются программным способом
OLECompleteDrag Когда данные помещены на новое место или отменена операция «перенести-и-оставить»
OLEDragOver Возникает в том случае, если свойство OLEDropMode имеет значение 1 и данные перенесены от источника к приемнику
OLEGiveFeedBack После каждого события OLEDragOver
OLESetData Возникает у источника данных при выполнении метода GetData, если нет данных в нужном формате
OLEStartDrag В начале переноса данных с помощью механизма «перенести-и-оставить»
Paint При перерисовывании формы или панели инструментов
ProgrammaticChange При изменении в коде значения элемента управления
QueryAddvirtual Перед добавлением файла в проект
QueryModifyvirtual Перед изменением файла в проекте
QueryRemovevirtual Перед удалением файла из проекта
QueryRunvirtual Перед выполнением файла или предварительным просмотром отчета или почтовой этикетки
QueryUnload Перед выгрузкой объекта Form (Форма)
RangeHigh Возвращает наибольшее значение счетчика или число элементов списка и имеет место, когда элемент управления Spinner (Счетчик) или TextBox (Поле ввода) теряет фокус и когда элемент управления comboBox <Раскрывающийся список) или ListBox (Список) получает фокус
RangeLow Возвращает наименьшее значение счетчика или значение первого элемента списка и имеет место, когда элемент управления Spinner (Счетчик) или TextBox (Поле ввода) теряет фокус или когда элемент управления СошЬоВох (Раскрывающийся список) или ListBox (Список) получает фокус
ReadActivate При активизации новой формы в наборе форм
ReadDeactivate При деактивизации формы в наборе форм
ReadShow Когда выдана команда SHOW GETS в активном объекте FormSet (Набор форм) активизируется объект FormSet (Набор форм)
ReadValid Имеет место после деактивизации объекта FormSet (Группа форм)
ReadWhen Имеет место после загрузки объекта FormSet (Группа форм)
Resize При изменении размеров объекта
RightClick При нажатии и отпускании правой кнопки мыши
Run Имеет место, когда Active Document (Активный документ) готов к выполнению кода пользователя
Scrolled При прокрутке данных в объекте управления Grid (Таблица)
ShowDoc При переходе в активный документ
Timer Когда истекает интервал времени, заданный свойством Interval (Интервал)
UIEnable Имеет место для всех объектов, содержащихся внутри объекта Page (Вкладка формы), каждый раз, когда объект Page (Вкладка формы) активизируется или деактивизируется
UnDock При перемещении объекта ToolBar (Панель управления) с помощью мыши
Unload При освобождении объекта
UpClick При нажатии кнопки с направленной вверх стрелкой на объектах управления типа СотЬоВох (Раскрывающийся список), ListBox (Список) и spinner (Счетчик)
Valid Перед тем, как элемент управления теряет фокус
When Перед тем, как элемент управления получает фокус

Таблица 19.6. Методы, используемые Visual FoxPro

Метод Описание
ActivateCell Активизирует ячейку в элементе управления Grid (Таблица)
AddColumn Добавляет объект Column (Столбец) в элемент управления Grid (Таблица)
Add I tern Добавляет новый элемент списка в объект СотЬоВох (Раскрывающийся список) или ListBox (Список), предоставляв при этом возможность задать индекс элемента
AddListltem Добавляет новый элемент списка в объект СотЬоВох (Раскрывающийся список) или ListBox (Список), давая возможность задать идентификатор элемента
AddObject Добавляет объект в контейнер на этапе выполнения
AddProperty Добавляет новое свойство в объект
AddToSCC Добавляет файл в проект
Box Рисует прямоугольник в форме
Build Перестраивает проект или создает приложение (арр), динамическую библиотеку (dli) или выполняемый файл (ехе) из проекта
Checkln Запоминает изменения, осуществленные в выбранном файле проекта
Checkout Выбирает файл из проекта для изменения
Circle Рисует окружность или эллипс в форме
Cleanup Очищает таблицу проекта, удаляя записи с пометкой на удаление и сжимая Memo-поля
Clear Очищает содержимое элемента управления СотЬоВох (Раскрывающийся список) или ListBox (Список)
ClearData Очищает все данные и форматы данных в объекте Dataobject (Объект данных). Доступен только в режиме выполнения программы
CloneObj ect Создает копию объекта со всеми его свойствами, событиями и методами
Close Закрывает проект и очищает объекты ProjectHook (Проект) и Project (Проект)
CloseTables Закрывает таблицы и представления данных, связанные со средой
Cls Удаляет графику и текст из формы
DataToClip Копирует группу записей в текстовом виде в буфер обмена Windows
DeleteColumn Удаляет объект Column (Столбец) из элемента управления Grid (Таблица)
Dock Располагает объект ToolBar (Панель управления) у границы основного окна Visual FoxPro
DoCrad Выполняет команду Visual FoxPro для сервера приложения Visual FoxPro
DoScroll Моделирует работу пользователя с полосами прокрутки в объекте Grid (Таблица)
DoVerb Выполняет команду для заданного OLE-объекта
Drag Начинает, заканчивает или отменяет операцию переноса объекта с помощью мыши
Draw Перерисовывает объект формы
Eval Вычисляет выражение и возвращает результат
GetData Заполняет данные из объекта DataObject (Объект данных). Доступен только в режиме выполнения программы
Get Format Возвращает True (Истина), если заданный формат доступен для объекта DataObject (Объект данных). Доступен только в режиме выполнения программы
GetLatestVersion Определяет последнюю версию файла проекта и копирует файл с пометкой только для чтения на диск
GoBack Возникает при возврате назад в списке хронологии программы-контейнера
GoForward Возникает при переходе вперед в списке хронологии программы-контейнера
Help Открывает окно справки
Hide Скрывает объект Form (Форма), FormSet (Набор форм) или ToolBar (Панель управления), присваивая его свойству visible значение False (Ложь)
IndexToItemID Возвращает индекс элемента с указанным идентификатором для объектов типа ComboBox (Раскрывающийся список) и ListBox (Список)
Item Возвращает объектную ссылку на определенный файл, проект или сервер в файловом, проектном, серверном сборнике
ItemlDToIndex Возвращает индекс позиции элемента в списке данного элемента управления для объектов типа ComboBox (Раскрывающийся список) и ListBox (Список)
Line Рисует линию в форме
Modify Открывает файл проекта для редактирования в соответствующем конструкторе или редакторе
Move Перемещает объект
NavigateTo Active Document (Активный документ) перемещается в контейнере в определенное место
OLEDrag Начинает операцию «леренести-и-оставить»
Point Возвращает цвет в модели RGB (красный-зеленый-синий) для заданной точки формы
Print Выдает в объекте Form (Форма) символьную строку, которую нужно напечатать
PSet Устанавливает для точки формы или основного окна Visual FoxPro основной цвет символов
Quit Завершает работу Visual FoxPro
ReadExpression Возвращает выражение, введенное в качестве значения свойства в окне свойств
ReadMethod Возвращает текст заданного метода
Refresh Перерисовывает объект Form (Форма) или элемент управления, обновляя все значения
Release Освобождает объект FormSet (Набор форм) или Form (Форма) из памяти
Remove Удаляет файл из сборника файла и проекта
RemoveFromSCC Удаляет файл из проекта
Remove I tern Удаляет элемент из списка элемента управления типа ComboBox (Раскрывающийся список) или ListBox (Список)
RemoveListltem Удаляет элемент из списка элемента управления типа ComboBox (Раскрывающийся список) или ListBox (Список)
RemoveObject Удаляет заданный объект из объекта-контейнера на этапе выполнения
Requery Повторно опрашивает источник строк, к которому привязан элемент управления типа ListBox (Список) или ComboBox (Раскрывающийся список)
RequestData Создает массив, содержащий данные из таблицы Visual FoxPro
Reset Сбрасывает элемент управления Timer (Таймер) в нулевое состояние
ResetToDefault Восстанавливает принятые по умолчанию в Visual FoxPro значения свойств, событий или методов
Run Запускает файл проекта на выполнение или предварительный просмотр
SaveAs Сохраняет объект в виде файла с расширением SCX
SaveAsClass Сохраняет экземпляр объекта в качестве определения класса в библиотеке классов
Set All Присваивает установку некоторого свойства всем элементам управления данного объекта Container (Контейнер) или определенному классу таких элементов управления
SetData Помещает данные в DataObject (Объект данных). Доступен в режиме выполнения программы
SetFocus Устанавливает фокус в элементе управления
SetFormat Помещает формат данных в DataObject (Объект данных). Доступен в режиме выполнения программы
SetMain Делает текущий файл главным в проекте
SetVar Создает переменную и хранит ее значение
SetViewPort Определяет значения ViewPortLeft и viewPortTop для формы
Show Отображает объект Form (Форма) и определяет его тип — модальный или немодальный
ShowWhatsThis Отображает тему справочной системы, заданную свойством

WhatsThisHelpID

TextHeight Возвращает высоту текстовой строки, используя единицу измерения, устанавливаемую свойством ScaleMode объекта Form (Форма)
TextWidth Возвращает ширину текстовой строки, используя единицу измерения, устанавливаемую свойством ScaleMode объекта Form (Форма)
UndoCheckOut Отменяет все изменения, осуществленные в выбранном файле, и оставляет его в проекте в неизмененном виде
WhatsThisMode Отображает курсор мыши в виде вопросительного знака и устанавливает режим whats This Help (Справка типа «что это?»)
WriteExpression Записывает символьную строку в таблицу свойств
WriteMethod Записывает указанный текст в заданный метод
ZOrder Помещает заданный объект Form (Форма) или элемент управления в заданную позицию данного объекта по отношению к другим объектам

В Visual FoxPro имеются базовые классы, предназначенные для создания вложенных объектов, например, класс Grid (Таблица). При ссылке на вложенный объект необходимо перечислить все объекты, в которые он входит, разделяя элементы списка точками. Например, ссылка на столбец coicustomerid объекта customer типа Grid (Таблица) определяется следующим образом:

Ссылка такого типа называется абсолютной. В Visual FoxPro кроме абсолютной ссылки, которая при большой глубине вложения объекта является слишком громоздкой, вы можете использовать относительные ссылки, т. е. ссылки относительно активных в данный момент объектов (сам объект, форма, в которую входит объект, и группа форм), что значительно сокращает список объектов ссылки и позволяет получить доступ к объекту, даже если вы не знаете его имени.

Ссылка на активную форму осуществляется с помощью свойства ActiveForm (Активная форма) объекта (_SCREEN). Например, следующее выражение позволяет изменить заголовок активной формы:

_SCREEN.ActiveForm.Caption= «Заголовок формы»

Аналогично, свойство ActiveControi (Активный элемент управления) позволяет получить доступ к активному объекту формы, а свойство ActivePage (Активная вкладка) — к активной вкладке формы. Например, следующее выражение позволяет изменить надпись активной кнопки

_SCREEN.ActiveControl.Caption= «Печать отчета»

При ссылке на вложенный объект вы можете использовать свойство Parent (Родительский) и ключевые слова для идентификации объекта, к которому вы хотите получить доступ. Свойство Parent (Родительский) содержит ссылку на непосредственный контейнер объекта. Список ключевых слов и определяемые ими ссылки приведены в табл. 19.7.

Таблица 19.7. Ключевые слова для идентификации объектов

Наименование Ссылка
THIS На сам объект
THISFORM На форму, которая содержит объект
THISFORMSET На группу форм, которая содержит объект

Для примера определим цвет текущего объекта и объекта, являющегося его непосредственным контейнером, а также заголовки формы и группы форм, которые содержат данный объект:

THISFORM.Caption=»Форма, содержащая объект»

THISFORMSET.Caption=»Группа форм, содержащая объект»

Каждый объект обрабатывает связанные с ним события независимо. Поэтому контейнер не может реагировать на события вложенного в него объекта даже в том случае, если данный объект не содержит метода для обработки события, а контейнер может реагировать на данное событие.

Ранее мы рассмотрели команды создания формы и присвоения ей заголовка. Теперь дополним эти команды командами размещения в форме кнопки, являющейся по отношению к ней вложенным объектом:

frmNew.Caption=»Форма, созданная с помощью команд»

Команда frmNew.AddObject(«Button», «CommandButton») создает В frmNew на основе базового класса CommandButton (Кнопка управления) новый объект Button (Кнопка). Следующая команда делает видимой созданную кнопку. На рис. 19.7 показана форма, созданная этими командами.

В прикладных программах объекты желательно сохранять невидимыми до полного определения всех их свойств.

Рис. 19.7. Форма с вложенным объектом — кнопкой

В предыдущих главах при создании форм мы использовали базовые классы Visual FoxPro. В случае необходимости вы могли добавлять в объекты, созданные на основе базовых классов, новые свойства и методы. Одним из способов повышения производительности разработки является определение стандартных объектов создаваемого приложения и разработка классов для таких объектов. При разработке приложений для больших фирм классы часто используются для стандартизации пользовательского интерфейса. Вы можете определить класс форм, в котором задан определенный цвет фона и стандартный набор кнопок для управления данными. В целях обеспечения стандартизации разработки полезно иметь один или несколько пользовательских классов для каждого базового класса. Например, вы можете определить отдельный класс для поля ввода, которое доступно только для чтения, и класс для редактируемого поля ввода. Если в дальнейшем вам понадобится изменить стандарт, то будет достаточно изменить только пользовательские классы, на основе которых создаются объекты приложения.

Для создания нового класса вы можете выполнить одно из следующих действий:

  • в окне проекта выбрать вкладку Classes (Классы) и нажать кнопку New (Новый);
  • в меню virtual (Файл) выбрать команду New (Новый), а затем в открывшемся диалоговом окне — опцию Class (Класс) и нажать кнопку New virtual (Новый файл);
  • в командном окне ввести команду CREATE CLASS,

Независимо от выбранного вами способа, на экране откроется диалоговое окно New Class (Новый класс) (рис. 19.8).

Рис. 19.8. Диалоговое окно New Class

В поле ввода Class Name (Имя класса) этого диалогового окна укажите имя создаваемого класса, а в следующем поле ввода Based On (Базовый класс) — имя класса, на основе которого создается новый класс. Поле From (Откуда) доступно только для чтения и содержит имя библиотеки классов, из которой выбран базовый класс. При использовании базовых классов Visual FoxPro данное поле остается пустым.

В поле ввода Store In (Сохранить в) необходимо ввести имя библиотеки, в которой будет храниться создаваемый класс. Библиотека классов представляет собой файл с расширением VCX. Вы можете выбрать созданные ранее библиотеки или указать новую библиотеку в диалоговом окне Save as (Сохранить как), которое вызывается при нажатии на кнопку, расположенную с правой стороны поля ввода.

Для создания библиотеки классов вы можете воспользоваться командой CREATE CLASSLIB в командном окне.

После ввода значений в поля нажмите кнопку ОК, в результате чего на экране появится окно конструктора классов. В основное меню Visual FoxPro добавляется пункт Class (Класс) (рис. 19.9), который содержит команды, описанные в табл. 19.8.

Таблица 19.8. Назначение команд пункта меню C l ass

Команда Назначение
New Property (Новое свойство) Создает новое свойство
New Method (Новый метод) Создает новый метод
Edit Property/Method (Правка свойства/метода) Редактирует наименование созданного ранее метода или свойства
Include virtual (Включить файл) Задает имя файла заголовка, содержащего описание предопределенных констант
Class Info (Информация о классе) Отображает информацию о текущем классе

Окно конструктора классов аналогично окну конструктора форм. Если создаваемый класс является контейнером, вы можете размещать в классе объекты, которые, в свою очередь, могут создаваться на основе пользовательских классов. Для каждого объекта класса вы можете определить свойства и методы, а при необходимости добавить новые. Эти действия аналогичны действиям, выполняемым в окне конструктора форм. Обратимся к примеру создания простого класса, который в дальнейшем может использоваться при создании новых форм.

Рис. 19.9. Окно конструктора классов

Рассмотрим создание класса для просмотра данных из одиночной таблицы, который содержит кнопки для перемещения по записям и выхода из формы.

  1. Откройте проект sales, в окне проекта выберите вкладку Classes (Классы) и нажмите кнопку New (Новый).
  2. В открывшемся диалоговом окне New Class (Новый класс) в поле ввода Class Name (Имя класса) введите имя создаваемого класса bcSingleTable.
  3. Из списка Based On (Базовый класс) выберите базовый класс Form (Форма).
  4. В поле Store In (Сохранить в) введите имя библиотеки классов Forms (Формы), в которой будет храниться создаваемый класс.
  5. На экране появляется пустая форма. Прежде всего изменим свойство Caption (Надпись) формы, введя в поле ввода значения свойства текст Табличная форма просмотра.
  6. Далее разместим в верхней части формы текст заголовка и определим для него цвет и размер шрифта (рис. 19.10). Форма, созданная на основе данного класса, будет содержать размещенный в классе текст заголовка. Разработчику формы потребуется только изменить текст заголовка, причем будут соблюдены все стандарты на создаваемую форму.

Рис. 19.10. Размещение заголовка формы

  1. Разместите в форме объект Grid (Таблица) и определите его свойства отображения данных, такие как шрифт, цвет, которые будут стандартными для просмотра данных в табличном виде.
  2. Установите для объекта Grid (Таблица) значение свойства Readonly (Только чтение) равным True (Истина), т. к. данную форму предполагается использовать только для просмотра данных.
  3. Для перемещения по записям, а также для выхода из формы используются кнопки, которые мы также разместим в форме и определим для них действия, выполняемые при нажатии на кнопки.
  4. Законченный вид класса приведен на рис. 19.11. Отметьте, что создание класса аналогично созданию формы.

Рис. 19.11. Класс для просмотра данных в табличном виде

Библиотеки классов используются для хранения созданных в Visual FoxPro пользовательских классов. Для создания библиотеки предназначено диалоговое окно New Class (Новый класс), рассмотренное нами в предыдущем разделе. При разработке приложения удобно иметь несколько библиотек классов, в которых размещаются отдельные группы классов. Например, в одной библиотеке можно располагать все классы кнопок, используемых в приложении, а в другой — классы форм.

В случае необходимости вы можете копировать класс из одной библиотеки в другую. Для этого перейдите на вкладку Classes (Классы) окна проекта и раскройте обе библиотеки. Затем выберите копируемый класс, нажмите кнопку мыши и, удерживая ее нажатой, перенесите класс в новую библиотеку. В заключение отпустите кнопку мыши.

Для удаления класса из библиотеки выберите класс и нажмите кнопку Remove (Удалить) в окне проекта.

При необходимости вы можете переименовать выбранный класс, используя команду Rename (Переименовать) контекстного меню окна проекта.

Для удаления класса из библиотеки классов вы можете воспользоваться командой REMOVE CLASS, а для изменения имени класса — командой RENAME CLASS.

При разработке приложений широко применяются подклассы, которые позволяют использовать уже имеющиеся пользовательские классы в качестве базы для создания следующих классов. Поскольку подкласс создается на базе ранее созданного класса, наследуются все свойства и методы, то достаточно добавить в подкласс новые свойства и методы или изменить некоторые свойства и методы базового класса.

Рассмотрим использование подклассов на примере создания нескольких классов кнопок. Сначала создадим подкласс пользовательской кнопки, для которой определим ее внешний вид. Далее на базе этого класса создадим текстовую кнопку перемещения на следующую запись. При определении этого класса определим надпись кнопки и выполняемое при нажатии на кнопку действие. Если понадобится кнопка для перемещения на следующую запись, содержащая вместо надписи графическое изображение, нет необходимости определять заново выполняемое при нажатии на нее действие. Достаточно использовать в качестве базового класса кнопку с надписью и определить для нее графическое изображение. Если затем понадобится изменить свойства отображения кнопок, достаточно будет скорректировать данные свойства в первом из созданных подклассов кнопки, и изменения будут отслеживаться во всей иерархии подклассов, созданных на базе этого класса.

Создание текстовой кнопки выхода из формы

Рассмотрим создание класса кнопки выхода из формы. Будем использовать возможности, предоставляемые системой при создании подклассов.

  1. Откройте проект Sales.
  2. В окне проекта выберите вкладку Classes (Классы) и нажмите кнопку New (Новый).
  3. В открывшемся диалоговом окне New Class (Новый класс) в поле ввода Class Name (Имя класса) введите имя создаваемого класса bcCmdButton.


Из списка Based On (Базовый класс) выберите базовый класс commandButton (Кнопка управления), а затем в поле ввода Store In (Сохранить в) введите имя библиотеки классов Buttons (Кнопки), в которой будет храниться создаваемый класс. Библиотека BASE.vex будет содержать пользовательские классы, созданные на основе базовых классов Visual FoxPro, которые содержат свойства, характерные для данного приложения. На начальной стадии разработки вы можете оставить свойства базового класса без изменения. Такой подход позволяет вам достаточно просто изменить свойства объекта, если в этом возникнет необходимость.

  • Завершив ввод в поля, нажмите кнопку ОК.
  • На экране появляется окно конструктора классов, содержащее кнопку. Так как кнопка не является контейнером, вы не можете добавить в нее другие объекты. Ваши возможности ограничены изменением свойств и методов объекта. Для создаваемого класса кнопки измените наименование шрифта, а затем установите свойство Caption (Надпись), введя в поле ввода значения свойства текст Кнопка (рис. 19.12).
  • Создание класса кнопки на этом завершено. Сохраните созданный класс и закройте окно конструктора классов.
  • Рис. 19.12. Создание класса кнопки

    1. Теперь приступим к созданию кнопки для выхода из формы. Находясь на вкладке Classes (Классы), нажмите кнопку New (Новый).
    2. В открывшемся диалоговом окне New Class (Новый класс) введите в поле ввода Class Name (Имя класса) имя создаваемого класса bcCmdTxtExit. В поле ввода Store In (Сохранить в) введите имя библиотеки классов

    Buttons (Классы), в которой будет храниться создаваемый класс. В данном случае для создания нового класса мы используем не базовый класс Visual FoxPro, а созданный на предыдущем шаге пользовательский класс. Поэтому нам необходимо указать не только имя класса, на основе которого будет создаваться новый класс, но и библиотеку, в которой он хранится. Для выбора библиотеки классов, а также класса из этой библиотеки, нажмите кнопку, расположенную правее списка Based On (Базовый класс). Откроется диалоговое окно Open (Открыть) (рис. 19.13).

    Рис. 19.13. Выбор класса из библиотеки классов

    1. Левая часть окна содержит стандартные средства выбора файла. В правой части диалогового окна находится список Class Name (Имя класса), который содержит список классов выбранной библиотеки. Выберите класс bcCmdButton, нажмите кнопку Open (Открыть), и вы вернетесь в диалоговое окно New Class (Новый класс), которое теперь будет содержать заполненные поля Based On (Базовый класс) и From (Откуда) (рис. 19.14). Нажмите кнопку ОК. В результате откроется окно конструктора классов, содержащее кнопку, которая наследует свойства класса (надпись на кнопке и шрифт), на основе которого мы будем создавать новый класс.

    Рис. 19.14. Диалоговое окно New Class после выбора пользовательского класса

    1. Для создаваемой кнопки измените надпись, введя в свойстве caption (Надпись) текст Выход.
    2. Используя свойство click (Нажатие), определите действия, выполняемые при нажатии на эту кнопку (рис. 19.15).
    3. Сохраните класс и закройте окно конструктора классов.

    Рис. 19.15. Определение свойств и методов для кнопки выхода из формы

    Создание кнопки, содержащей изображение, для выхода из формы

    На многих кнопках, используемых в Windows, имеется графическое изображение, которое занимает меньше места, чем текст, и является более информативным. В качестве примера использования подклассов создадим кнопку, предназначенную для выхода из формы (она будет содержать изображение вместо текста). Для этого выполните следующие действия:

    1. На вкладке Classes (Классы) нажмите кнопку New (Новый).
    2. В открывшемся диалоговом окне New Class (Новый класс) введите в поле ввода Class Name (Имя класса) имя создаваемого класса bcCmdPicExit.

    В поле ввода Store In (Сохранить в) введите имя библиотеки классов Buttons, в которой будет храниться создаваемый класс. В качестве базового класса для создания нового класса выберите созданный на предыдущем шаге класс bcCmdTxtExit из библиотеки классов Buttons (Кнопки).

  • Для создаваемого класса наследуется метод, выполняемый при нажатии на кнопку мыши, поэтому нам необходимо только изменить внешний вид кнопки. Удалите надпись кнопки.
  • В поле ввода свойства Picture (Изображение) укажите имя файла с изображением, которое будет отображаться на кнопке (рис. 19.16).
  • Рис. 19.16. Определение кнопки с изображением

    Аналогичным образом вы можете создать классы для кнопок перемещения по записям и разместите их в библиотеке Buttons (Кнопки).

    В данной главе был рассмотрен пример создания класса формы, причем при создании кнопок перемещения по записям и выхода использовался базовый класс кнопки. Теперь, после создания собственных классов кнопок, можно заменить базовые классы на пользовательские. Для этого выполните следующие действия:

    1. Откройте Проект Sales.
    2. В окне проекта перейдите на вкладку Classes (Классы), выберите в библиотеке Forms (Формы) класс bcSingieTabie и нажмите кнопку Modify (Модифицировать).
    3. В окне конструктора классов появится созданный нами ранее пользовательский класс формы для просмотра данных из одиночной таблицы.
    4. Удалите из него созданные ранее кнопки.
    5. Нажмите кнопку View Classes (Показать классы) WI на панели инструментов Form Controls (Элементы управления формы).
    6. На экране появляется меню кнопки, содержащее список библиотек классов, а также команду Add (Добавить), которая позволяет добавить в этот список новую библиотеку. Выберите команду Add (Добавить).
    7. В открывшемся диалоговом окне Open (Открыть) выберите созданную пользовательскую библиотеку Buttons (Кнопки) и нажмите Open (Открыть). В результате выбора наименования библиотеки классов в меню кнопки View Classes (Показать классы) появляется команда Buttons (Кнопки).
    8. Выберите команду Buttons (Кнопки). На панели инструментов Form Controls (Элементы управления формы) размещаются значки классов выбранной библиотеки. Теперь можно размещать эти объекты в классе обычным образом.
    9. Выберите на панели инструментов кнопки перемещения по записям и кнопку выхода из формы и разместите их в форме. Создание кнопок управления на этом заканчивается, т. к. действия, выполняемые ими, наследуются из классов кнопок. Вкладка Other (Другие) окна свойств содержит наименования класса объекта и библиотеки классов (рис. 19.17).

    Рис. 19.17. Размещение объекта, основанного на пользовательском классе

    Для просмотра информации о классе и определения значка для него используется диалоговое окно Class Info (Информация о классе), открываемое при выборе из меню Class (Класс) команды Class Info (Информация о классе).

    Вкладка Class (Класс) содержит поля ввода изображений значков классов и поле редактирования Description (Описание), в которое можно ввести краткое описание класса.

    На вкладке Members (Члены) (рис. 19.18) отображается список объектов класса, а также перечень методов и свойств. Столбец Class (Класс) содержит наименование объектов, а столбец Name (Наименование) — свойства и методы класса. С помощью параметра Visibility (Видимость), который может принимать одно из трех значений — Public (Открытый), Protected (Защищенный) и Hidden (Скрытый), вы можете установить степень защищенности объекта, а в столбце No Init (He инициализировать) указать, будет ли выполняться метод init (Инициализация) при создании объекта.

    Рис. 19.18. Вкладка Members диалогового окна Class Info

    Для каждого класса вы можете указать два значка, вид которых задается на вкладке Class (Класс) (рис. 19.19).

    Рис. 19.19. Вкладка Class диалогового окна Class Info

    Имя первого из них вводится в поле ввода Toolbar icon (Значок на панели инструментов) и в дальнейшем отображается на панели инструментов Form Controls (Элементы управления формы) в окнах конструктора форм и конструктора классов при выборе библиотеки классов, содержащей данный класс. Имя второго значка вводится в поле ввода Container icon (Значок контейнера) и отображается в диалоговом окне Class Browser (Обзор класса). Для задания значка вы можете ввести имя графического файла непосредственно в поля ввода или использовать кнопки выбора файла, расположенные справа от полей.

    Настоятельно рекомендуется определять значки для создаваемых классов. В противном случае вам будет трудно выбирать пользовательские классы на панели инструментов Form Controls (Элементы управления формы), т. к. они будут иметь значки базовых классов и отличить один от другого можно только по всплывающей подсказке.

    Рис. 19.20. Диалоговое окно Edit Property/Method

    С помощью кнопки Modify (Модифицировать), расположенной на вкладке Members (Члены) диалогового окна Class Info (Информация о классе), вы можете изменить параметры объектов, свойств и методов объектов, входящих в класс. При нажатии на эту кнопку открывается диалоговое окно Edit Property/Method (Редактирование свойства/метода) (рис. 19.20), которое содержит таблицу с перечнем всех объектов, свойств и методов (табл. 19.9).

    Таблица 19.9. Назначение столбцов таблицы диалогового окна Edit Property/Method

    Столбец Назначение
    Name (Наименование) Наименование объекта, свойства или метода
    Туре (Тип) Тип объекта: 0 — объект, М — метод, Р — свойство
    Access (Доступ) Данный столбец указывает, создан ли метод Access для свойства
    Assign (Назначение) Данный столбец указывает, создан ли метод Assign для свойства
    Visibility (Видимость) Определяет тип свойства или метода

    Для добавления библиотек классов на панель инструментов Form Controls (Элементы управления формы) можно использовать не только опцию Add (Добавить) всплывающего меню кнопки View Classes (Показать классы), но и вкладку Controls (Элементы управления) (рис. 19,21) диалогового окна Options (Параметры). Для его открытия выполните команду Options (Параметры) из меню Tools (Сервис).

    Рис. 19.21. Вкладка Controls диалогового окна Options

    Чтобы определить библиотеки классов, установите переключатель Visual class libraries (Библиотеки визуальных классов). Затем заполните список Selected (Выбранные) названиями библиотек классов, которые вы собираетесь отображать на панели инструментов. Идя добавления нового класса в этот список используется кнопка Add (Добавить), при нажатии на которую открывается диалоговое окно Open (Открыть). В этом окне найдите и выберите требуемую библиотеку классов. Удаление из списка выбранной библиотеки осуществляется нажатием кнопки Remove (Удалить). При нажатии кнопки Set As Default (Использовать по умолчанию) введенные установки будут использоваться и в следующих сеансах работы с Visual FoxPro.

    С помощью вкладки Forms (Формы) (рис. 19.22) диалогового окна Options (Параметры) вы можете задать класс формы, который будет использоваться при создании новой формы.

    Рис. 19.22. Выбор класса, используемого при создании формы

    Для выбора класса, используемого при создании формы, выполните следующие действия:

    1. На вкладке Forms (Формы) диалогового окна Options (Параметры) в области Template classes (Шаблон классов) установите флажок Form (Форма).
    2. Откроется диалоговое окно Form Template (Шаблон формы) (рис. 19.23). Выберите библиотеку, а затем в области Class Name (Имя класса) — требуемый класс.
    3. Нажмите кнопку ОК.
    4. Вернувшись в диалоговое окно Options (Параметры), нажмите кнопку ОК для его закрытия.

    Аналогичным образом вы можете установить и пользовательский класс для создания наборов форм.

    Пользовательский класс, используемый при создании набора форм, определяется аналогичным образом. Только на вкладке Forms (Формы) диалогового окна Options (Параметры) необходимо установить флажок Form set (Набор форм).

    Рис. 19.23. Диалоговое окно Form Template

    Рассмотрим создание формы просмотра информации о клиентах, используя класс bcsingieTabie, созданный в предыдущем примере.

    1. Откройте диалоговое окно Options (Параметры).
    2. На вкладке Forms (Формы) установите флажок Form (Форма).
    3. В открывшемся диалоговом окне Form Template (Шаблон формы) (см. рис. 19.23) выберите пользовательскую библиотеку Forms (Формы).
    4. В области Class Name (Имя класса) выберите требуемый класс bcSingleTable.
    5. Нажмите кнопку ОК.
    6. Вернувшись в диалоговое окно Options (Параметры), нажмите кнопку ОК для его закрытия.
    7. Откройте проект sales.
    8. В окне проекта выберите вкладку Documents (Документы), затем перейдите в раздел Forms (Формы) и нажмите кнопку New (Новый). На экране открывается окно конструктора форм, которое содержит объекты Класса bcSingleTable (рис. 19.24).

    Рис. 19.24. Начальная стадия создания формы, основанной на пользовательском классе

    1. Выберите текстовый объект, расположенный в верхней части формы, и измените его свойство Caption (Надпись), введя Просмотр информации о клиентах.
    2. В окно окружения формы добавьте таблицу Customer.
    3. Установите свойства объекта Grid (Таблица). Для этого задайте количество столбцов в таблице, свяжите их с полями таблицы customer и определите заголовки полей. На этом создание формы заканчивается (рис. 19.25).
    4. Сохраните форму и запустите ее на выполнение.

    Рис. 19.25. Форма просмотра информации о клиентах

    В Visual FoxPro имеется возможность использования существующей формы для создания класса. Вы можете сохранить всю форму в виде класса или же выбрать определенные объекты формы и сохранить их в виде одного класса. Созданная в предыдущем примере форма содержит некоторую часть информации о клиентах. В создаваемом приложении могут понадобиться еще несколько форм для просмотра информации о клиентах, каждая из которых отображает определенную часть информации. В этом случае желательно иметь класс формы просмотра информации о клиентах, который содержит всего лишь два поля icdcustomer и ccompany таблицы Customer.

    Для создания такого класса воспользуемся формой, созданной в предыдущем примере.

    1. Откройте окно конструктора для формы, созданной в предыдущем примере.
    2. В объекте Gr > с полями icdcustomer и ccompany (р ис . 19.26).

    Рис. 19.26. Подготовка формы для создания класса


    1. В меню virtual (Файл) выберите команду Save As Class (Сохранить как класс).
    2. В открывшемся диалоговом окне Save As Class (Сохранить как класс) установите переключатель Save (Сохранить) в положение Current form (Текущая форма). В поле Name (Имя) укажите имя класса и имя библиотеки, в которой будет располагаться класс, а в поле Description (Описание) — его краткое описание. После ввода всех атрибутов нажмите кнопку ОК, в результате в указанной библиотеке будет создан новый класс.

    Для сохранения объектов формы в виде класса выделите их в форме, а затем в диалоговом окне Save As Class (Сохранить как класс) установите переключатель Save (Сохранить) в положение Selected controls (Выбранные элементы управления). Для сохранения набора форм в виде класса откройте окно конструктора для набора форм и в диалоговом окне Save As Class (Сохранить как класс) установите переключатель Save (Сохранить) в положение Entire form set (Набор форм).

    В Visual FoxPro имеется удобное средство, предназначенное для работы с классами, — это Class Browser (Обзор классов), с помощью которого вы можете просматривать библиотеки классов, создавать новые классы и редактировать существующие.

    Для открытия окна Class Browser (Обзор классов) выполните одно из следующих действий.

    • В меню Tools (Сервис) выберите команду Class Browser (Обзор классов).
    • В командном окне выполните команду DO (_BROWSER) .

    Независимо от выбранного вами способа, будет запущено приложение Browser.app, которое открывает окно Class Browser (Обзор классов) (рис. 19.27), содержащее панель инструментов для управления классами и список объектов выбранной библиотеки.

    После открытия библиотеки классов в левой части окна Class Browser (Обзор классов) будет отображен иерархический список классов выбранной библиотеки со значками, которые вы присвоили с помощью команды Class Info (Информация о классе) из меню Class (Класс). В правой части окна отображается список объектов, входящих в данный класс, его свойства и методы. В нижней части окна содержатся параметры выбранного класса или элемента класса.

    Рис. 19.27. Окно Class Browser

    Двойной щелчок на имени класса в левой области окна Class Browser (Обзор классов) автоматически открывает данный класс в конструкторе классов.

    В окне Class Browser (Обзор классов) могут отображаться несколько библиотек классов. Для добавления новой библиотеки нажмите кнопку View Additional virtual (Просмотр дополнительного файла) на панели инструментов окна Class Browser (Обзор классов) и диалоговом окне Open (Открыть) выберите библиотеку классов.

    Для просмотра любой другой библиотеки классов нажмите кнопку Open (Открыть) на панели инструментов и в диалоговом окне Open (Открыть) выберите требуемую библиотеку.

    В окне Class Browser (Обзор классов) могут отображаться не только библиотеки классов, но и формы.

    Чтобы просмотреть классы одного типа (например, класс кнопок), выберите из раскрывающегося списка Class Type (Тип класса) наименование требуемого типа.

    Для создания нового класса, изменения его имени, удаления его из библиотеки классов вы можете в окне Oass Browser (Обзор классов) использовать кнопки, описанные в табл. 19.10.

    Рис. 19.28. Исходный текст описания класса

    Таблица 19.10. Кнопки окна Class Browser

    Наименование Описание
    Find (Поиск) Открывает диалоговое окно Find (Найти) для поиска класса и элементов класса по имени, описанию
    New Class (Новый класс) Открывает диалоговое окно New Class (Новый класс) для создания нового класса
    Rename

    (Переименовать)

    Изменяет имя выбранного класса. Изменение имени может привести к ошибкам в формах, использующих данный класс
    Redefine

    <Переопределить родительский класс)

    Переопределяет родительский класс выбранного класса
    Clean Up Class Library

    (Упаковать библиотеку классов)

    Упаковывает библиотеку классов, удаляя из нее физически записи, помеченные для удаления
    View Class Code

    (Просмотр кода класса)

    Открывает диалоговое окно с исходным текстом описания класса (рис. 19.28). Вы можете использовать эту информацию при создании собственных классов программным путем

    Панели инструментов являются неотъемлемой частью приложений Windows. Visual FoxPro также позволяет разрабатывать класс панели инструментов и применять его при создании объекта панели инструментов. Этот объект может использоваться в формах для управления перемещением по записям, поиска данных и т. п.

    В качестве примера создадим класс панели инструментов, предназначенный для просмотра данных таблицы. На панели содержатся кнопки перемещения по записям и выхода из формы. Выполните следующие действия:

    1. Откройте проект sales.
    2. В окне проекта перейдите на вкладку Classes (Классы) и нажмите кнопку New (Новый).
    3. В диалоговом окне New Class (Новый класс) выберите базовый класс Toolbar (Панель управления), введите имя класса bcTabieTooiBar и укажите пользовательскую библиотеку классов ForForms, а затем нажмите кнопку ОК. В окне конструктора классов появляется панель инструментов, не содержащая ни одного объекта.
    4. Используя ранее созданные классы кнопок, разместите на создаваемой панели инструментов графические кнопки перемещения по записям и выхода из формы (рис. 19.29).

    Рис. 19.29. Создание класса панели управления для перемещения по записям таблицы

    После создания класса панели инструментов нет необходимости размещать в формах кнопки перемещения по записям. Вместо них можно при инициализации формы создавать панель инструментов и использовать ее для перемещения по записям и выхода из формы. Рассмотрим пример создания формы, в которой для перемещения по записям используется панель инструментов:

    1. Откройте проект sales.
    2. В окне проекта перейдите на вкладку Classes (Классы) и нажмите кнопку New (Новый).
    3. В открывшемся диалоговом окне New Class (Новый класс) в поле ввода Class Name (Имя класса) введите имя создаваемого класса bcSingleTableToolbar. Из списка Based On (Базовый класс) выберите базовый класс Form (Форма), а затем в поле ввода Store In (Сохранить в) введите имя библиотеки классов Forms (Формы), в которой будет храниться создаваемый класс.
    4. Разместите в форме текст заголовка и объект Grid (Таблица).
    5. Нам необходимо создать в форме объект типа «панель» инструментов на основе созданного в предыдущем примере класса. Для этого определите новое свойство oTooiBar формы, выполнив команду New Property (Новое свойство) из меню Class (Класс), а затем в методе Activate (Активизация) формы создайте объект типа «панель инструментов» и отобразите его на экране:

    * Отображаем панель инструментов на экране

    __screen.ActiveForm. oTooiBar. Show ()

    1. Сохраните созданный класс и закройте окно конструктора классов.
    2. Теперь приступим к созданию формы на основе созданного в этом примере класса. Для этого откройте диалоговое окно Options (Параметры), перейдите на вкладку Forms (Формы) и установите в поле ввода Form (Форма) имя пользовательского класса bcsingieTabieTooibar из библиотеки Forms (Формы).
    3. Откройте проект sales.
    4. В окне проекта выберите вкладку Documents (Документы), перейдите в раздел Forms (Формы) и нажмите кнопку New (Новый). На экране откроется окно конструктора форм, которое содержит объекты класса bcsingieTabieTooibar. Обратите внимание на то, что в форме панель инструментов отсутствует. Она создается при запуске формы на выполнение,
    5. Выберите текстовый объект, расположенный в верхней части формы, и измените его свойство caption (Надпись), введя Просмотр информации о клиентах,
    6. Добавьте в окружение формы таблицу customer.
    7. Установите свойства объекта Grid (Таблица). Для этого свяжите столбцы таблицы с полями таблицы customer и определите заголовки столбцов.
    8. На этом создание формы заканчивается. Сохраните ее и запустите на выполнение.

    Если при запуске данной формы на выполнение появляется сообщение о том, что класс не найден, вам необходимо в методе Activate (Активизация) формы перед созданием объекта типа «панель инструментов» вставить команду SET CLASSLIB то с указанием папки расположения класса.

    Запуск Microsoft Visual FoxPro

    СОЗДАНИЕ БАЗЫ ДАННЫХ

    Для запуска Microsoft Visual FoxPro на вашем компьютере нажмите

    кнопку «Пуск» и выберите в открывшемся главном меню пункт «Все программы». В списке программ найдите «Microsoft Visual FoxPro 9» – FoxPro установлен там по умолчанию. Щелчок левой кнопкой мыши даст следующую картинку (рис. 1.1).

    Рис. 1.1. Главное окно Microsoft Visual Fox Pro 9.0

    На экране появится главное окно Visual FoxPro, окно менеджера панели задач (Task Pane Manager), в нижней части которого содержится список ранее открывавшихся баз данных, и командное окно (Command) с последними, набранными в нем командами.

    Команду Visual FoxPro можно выполнить, набрав ее в окне Command и нажав на клавишу Enter. Для повторного выполнения команды поместите курсор на строку с командой и нажмите Enter еще раз.

    Так как в окне Command допускается редактирование, можно изменить команду инструментами редактирования, доступными в Visual FoxPro. Эти инструменты позволяют редактировать, вставлять, удалять, вырезать и помещать текст в окне Command. Преимущество использования окна Command состоит в немедленном выполнении инструкций. Нет необходимости сохранять файл и запускать его как программу.

    Кроме того, в окне Command сохраняются в виде команд все действия, производимые с меню и диалоговыми окнами. Вы можете скопировать и разместить эти команды в программе Visual FoxPro. После этого программу можно запускать сколько угодно раз, избегая многократного повтора одних и тех же действий.

    Для комфортной работы создайте на рабочем столе ярлык Microsoft Visual FoxPro 9, в его свойствах в качестве рабочей папки укажите ту, в которой будет располагаться разрабатываемое приложение и данные. В нашем примере – это папка Real Estate. Не устраивайте в ней «свалку», разместив одновременно все объекты приложения: таблицы, индексы, контейнер базы данных, формы, отчеты, классы и т. д.

    Советую все объекты в этой папке расположить структурировано. Примерный вид папки c приложением может быть таким (рис. 1.2).

    Рис. 1.2. Состав папки Real Estate

    BOOK – папка, содержащая формы справочников.

    CLASS – папка, содержащая пользовательские классы.

    DBF – папка с данными (контейнер, таблицы, индексные файлы, поля примечаний и т. д.).

    DECKTOP – в этой папке расположены картинки, используемые для оформления главного окна программного комплекса.

    FORM – папка, содержащая главные формы приложения.

    HELP – папка с файлами контекстуально-зависимой помощи, вызываемой при нажатии клавиши F1.

    ICO – иконки для оформления интерфейса вашего приложения.

    INSTALL – папка, содержащая файлы дистрибутива для инсталляции готового программного комплекса на клиентский компьютер.

    PICTURE – фотографии зданий (в данном примере).

    REPORT – папка, содержащая отчеты Visual FoxPro.

    USER – папка, содержащая информацию о пользователях и паролях для работы с программным комплексом. В ней расположена фактически одна таблица. Это связано с тем, что в Visual FoxPro отсутствует система защиты от несанкционированного доступа средствами СУБД. Такое выделение отдельной папки позволит обеспечить защиту комплекса средствами операционной системы.

    Создание базы данных Visual FoxPro


    Перейдем к конкретным действиям по созданию базы данных. Запустите Microsoft Visual FoxPro на вашем компьютере и воспользуйтесь одним из трех способов.

    В окне менеджера панели задач (Task Pane Manager) на его первой вкладке Start выберите ссылку New Database. На экране дисплея появится окно Create. Перейдите в папку DBF, в которой мы будем хранить данные, задайте имя базы данных — Real Estate. Нажмите кнопку Сохранить. База данных получила свое название и законное место на жестком диске.

    В главном меню Visual FoxPro щелкните пункт File и выберите команду New. В открывшемся окне щелкните радиокнопку Database и нажмите кнопку New file. На экране дисплея появится окно Create. Перейдите в папку DBF, в которой мы будем хранить данные, задайте имя базы данных — Real Estate. Нажмите кнопку Сохранить.

    Введите в командном окне (Command) команду Create Database. На экране дисплея появится окно Create. Перейдите в папку DBF, в которой мы будем хранить данные, задайте имя базы данных — Real Estate. Нажмите кнопку Сохранить.

    Теперь в папке DBF появилось три файла — так называемый контейнер базы данных. Это файлы:

    Real Estate.dbc Real Estate.dct Real Estate.dcx

    Отличительной особенностью Microsoft Visual FoxPro является то, что один объект этой СУБД размещается в нескольких файлах (от одного до трех). Расширения других файлов, используемых Visual FoxPro, будут рас­смотрены нами позднее в соответствующих главах.

    Visual FoxPro 9.0 позволяет создавать как таблицы, входящие в базу данных, так и свободные таблицы. Это дань истории развития продукта -черта, свойственная только ему. Так уж сложилось со времен появления Visual FoxPro 3.0. Воспользуемся ей.

    Будут применяться таблицы обоих типов. Свободная (вне базы данных) таблица User даст возможность отрегулировать вопрос о правах доступа к приложению (рис. 1.2), а все остальные, размещенные в контейнере Real Estate, представляют реляционную базу данных.

    Существует несколько способов создания таблиц в Microsoft Visual FoxPro:

    — с помощью мастера таблиц;

    — с использованием конструктора таблиц;

    — путем импорта данных из внешнего файла в текущую базу данных;

    4) создание их в текущей базе данных, связанных с таблицами внешнего файла.

    Первый способ — для новичков в работе с базами данных, испытывающих сильное желание немедленно создать свою первую таблицу.

    Рис. 1.5. Работа в главном меню Visual FoxPro 9.0 с базой данных

    Во всех трех случаях увидим окно конструктора таблицы. Это форма с тремя вкладками: Fiels, Indexes и Table.

    • Fields (Поля) — поля создаваемой таблицы и условия достоверности вводимых данных на уровне поля;

    • Indexes (Индексы) — индексы создаваемой таблицы;

    • Table (Таблица) — условия достоверности вводимых данных на уровне записи, а также триггеров добавления, удаления и модификации.

    Первая вкладка (рис. 1.6) используется при определении полей таблицы. Она предназначена для ввода названия полей, типа данных и ширины поля. При занесении числовых полей задается количество десятичных знаков. Кроме основных параметров для каждого поля на этой вкладке задаются дополнительные параметры, которые помогут вам при сопровождении программного комплекса. Обратите особое внимание на ячейку Field comment. Не оставляйте ее пустой! Опишите подробно назначение поля таблицы. Позже обязательно поймете важность этого совета.

    Имена полей должны содержать не более 255 символов и могут включать любые комбинации символов за исключением точки, восклицательного знака и квадратных скобок. Используйте в именах полей только латинские буквы при общей длине имени до 10 символов включительно. В этом случае у Вас не будет проблем с конвертацией таблиц Microsoft Visual FoxPro в таблицы других СУБД (например, Microsoft SQL Server).

    Каждое поле таблицы должно иметь уникальное имя, но в различных таблицах можно использовать одинаковые имена полей. В табл. 1.1 приведены основные типы данных полей Microsoft Visual FoxPro 9.0.

    Типы данных полей таблиц Microsoft Visual FoxPro 9.0

    Вид данных Тип данных Описание
    Текстовый Character Текст или числа, не требующие проведения расчетов. Максимальная длина — 255 символов. По умолчанию длина текстового поля устанавливается равной 10 символов
    Character 1 Аналогичен Character. Используется в том случае, (binary) | если не требуется учитывать кодовую страницу
    Varchar 1Аналогичен Character. Для этого типа не происходит заполнение свободных мест незначащей информацией
    Varbinary Шестнадцатеричные значения
    Дата и время Datetime Любая дата от 01.01.0001 до 31.12.9999 и время от 00.00.00 a.m. до 11.59.59 p.m.
    Дата Date Любая дата от 01.01.0001 до 31.12.9999
    Денежный Currency Позволяет выполнять расчеты с точностью до 15 знаков в целой и до 4 знаков в дробной части
    Логический Logical Содержит значение True (.T.) или False (.F.) Истина или ложь
    Числовой Integer Целые числа от -2147483647 до 2147483648
    Integer (AutoInc) Счетчик. Уникальные, последовательно возрастающие числа, автоматически вводящиеся в таблицу при добавлении каждой новой записи
    Numeric Десятичные данные с фиксированной точкой
    Float Десятичные данные с плавающей точкой простой точности
    Double Десятичные данные с плавающей точкой высокой точности
    Двоичное поле произвольной длины General Включает рисунок, фотографию, звукозапись, диа­граммы, векторную графику, форматированный текст и т. п.
    Текстовое поле произвольной длины Мемо Поля типа МЕМО предназначены для хранения больших текстовых данных. Длина поля может достигать 64 Кб. Поле не может быть ключевым или индексированным
    Двоичный Blob Двоичные символы

    В правой части первой вкладки Fields конструктора таблицы (рис. 1.6) также расположены ячейки, позволяющие задать для каждого поля созда­ваемой таблицы свойства, которые будут задействованы при вводе данных.

    Format (Формат) — задает формат отображения данных в окне Browse, отчетах и формах.

    Input mask (Маска ввода) — задает шаблон для ввода данных.

    Caption (Заголовок) — определяет заголовок поля.

    Rule (Условие) — проверка правильности ввода данных на уровне поля создаваемой таблицы.

    Message (Сообщение) — текст сообщения, которое появится на экране дисплея при неправильном вводе данных в поле.

    Default value (Значение по умолчанию) — значение, вводимое в поле по умолчанию.

    Display library (Показать библиотеку) — определяет имя файла библиотеки классов.

    Display class (Показать класс) — определяет имя класса из выбранной библиотеки классов.

    Next Value (Начальное значение) — задает начальное значение счетчика. Доступно только для поля IntegerInc.

    Step (Шаг) — приращение счетчика. Доступно только для поля Integerlnc.

    Создадим нашу первую таблицу Building. Ее окончательная структура взята из табл. 2.7. Имейте в виду, что имя поля и его описание вводится с клавиатуры, а тип данных выбирается из списка.

    Рассмотрим действия по созданию таблицы подробнее (рис. 3.6).

    1. Введите в первую колонку имя первого поля: Street и нажмите клавишу . Курсор переместится во вторую колонку Type. По умолчанию будет назначен тип Character длиной 10 символов.

    2. Раскройте список типов данных при помощи мыши. Выберите тип Numeric и нажмите клавишу .

    3. Заполните колонки Width (Число знаков) и Decimal (Число знаков после десятичной точки). Для ссылки на номер улицы используем четыре десятичных знака. Это дает возможность работать с 9999 улицами, что вполне достаточно для города с миллионным населением. Кстати, в Хабаровске 1248 улиц, переулков, проездов, шоссе, кварталов, площадей, бульваров и т. д.

    4. Обязательно заполните ячейку Field comment. Не ленитесь, пишите подробнее!

    5. Повторите шаги 1-4 для всех оставшихся полей таблицы. Остальные поля первой вкладки конструктора таблиц на этом этапе можно не заполнять. После занесения данных обо всех полях таблицы просто закройте окно конструктора таблиц. Появится диалоговое окно «Сохранение», запрашивающее подтверждение на сохранение структуры таблицы (рис. 1.7).

    Щелкните по кнопке «Yes». Наша первая таблица появится в окне базы данных, а в папке DBF — два файла: Building.dbf (сама таблица) и Building.fpt (поле Memo). Заполнять сейчас созданную таблицу начинающему пользователю категорически не рекомендуется, да так и не делается! Посмотрите на содержимое табл. 1.2. Это не отдельная таблица, она будет связана с другими таблицами базы данных Real Estate. Что в ней хранится — пока загадка. Уверен, что большинство цифр Вам просто непонятны.

    Информация, содержащаяся в связанной таблице

    Street House Flat Storey Rooms Square Dwell Branch Account
    60,8

    Аналогичным образом создадим все наши таблицы, разработанные в разд. 2: Flat, Owners, Account, Street, District и Wall.

    3.4. Создание первичных ключей и индексов

    Одним из основных требований, предъявляемых к СУБД, является возможность быстрого поиска требуемых записей. В реляционных СУБД для реализации этого требования служат индексы. Индекс очень похож на алфавитный указатель в книге. Например, у вас в руках книга по Microsoft Visual FoxPro и вы хотите узнать о том, что написано в ней об индексах. Загляните в конец книги и найдите в предметном указателе слово «индекс». Так как указатель отсортирован по алфавиту, вы без труда найдете нужное слово и ссылки на страницы, где оно встречается в книге. Индекс работает с таблицей по такому же принципу. Он содержит отсортированные значения указанного поля таблицы и ссылки на номера записей таблицы, где эти значения находятся. При поиске записи система управления базами данных сначала просматривает индекс, что занимает совсем немного времени, так как для этого используется специальный алгоритм, находит ссылку на номер записи и по ней — нужную строчку в таблице. Таким образом, отпадает необходимость последовательного просмотра всех записей в таблице.

    Индекс можно построить по полю почти любого типа. К счастью, пользователь не обязан знать, за счет чего достигается такое огромное увеличение скорости поиска. Достаточно создать индекс, а система Visual FoxPro позаботится обо всем остальном.

    Посмотрим на конечный результат (рис. 1.8). На нем представлены индексы таблицы Flat. Их три: Flat Id (Primary), Account (Candidate) и Address (Regular).

    Хочу предостеречь вас от типичной ошибки начинающего разработчика — создания индексов по всем полям таблицы для достижения максимальной скорости поиска в сложных запросах. Во-первых, в этом просто нет необходимости, а во-вторых — возникнет серьезная задержка при добавлении записей в таблицу, так как системе придется перестраивать большое число индексов одновременно.

    Простой первичный ключ — это индекс, созданный по ключевому полю таблицы (Тип Visual FoxPro — Primary).

    Составной первичный ключ — это индекс, созданный по ключевой связке полей таблицы (Тип Visual FoxPro также — Primary).

    Первичный ключ у любой таблицы может быть только один. Этого требует теория нормализации. Кроме первичного ключа таблица может иметь любое количество обычных индексов (Тип Visual FoxPro — Regular). Среди них могут быть и уникальные, не допускающие повторяющихся значений. Их принято называть индексы-кандидаты на роль первичного ключа (Тип Visual FoxPro — Candidate). В нашем примере такой индекс есть. Загляните в таблицу Flat (рис. 2.4) и обратите внимание на поле Account (номер лицевого счета квартиросъемщика). Это поле однозначно определяет положение любой квартиры в таблице.

    А теперь о создании ключей и обычных индексов с самого начала и по порядку.

    Создание простого первичного ключа. Создадим простой первичный ключ для таблицы Street (улицы). Ключевое поле, однозначно определяющее положение любой улицы в таблице улиц, также носит название Street (рис. 2.1).

    1.
    Откройте таблицу Street в режиме конструктора. Для этого в окне базы данных Real Estate (рис. 2.1) щелкните по таблице Street правой кнопкой мыши. Появится меню. В нем пять пунктов. Выберите из них четвертый с названием Modify.

    2. Появится окно конструктора таблиц. Перейдите на вторую вкладку с названием Indexes (рис. 1.9). Увидите таблицу. В ней шесть колонок: Order, Name, Type, Expression, Filter и Collate.

    3. Во вторую колонку введите название индекса — street.

    4. Нажмите клавишу Tab для перехода в третью колонку Type.

    5. Откройте при помощи мыши поле со списком. В нем четыре значения: Primary, Candidate, Binary и Regular. Выберите первое — Primary.

    6. В четвертую колонку введите название поля, по которому создается индекс (первичный ключ в данном случае) — street. Остальные колонки заполнять не требуется.

    7. Щелкните мышью по кнопке OK. Visual FoxPro попросит подтвердить сделанные изменения. В появившемся окне выберите кнопку Yes.

    Создание составного первичного ключа. Создадим составной первичный ключ для таблицы Owners (Проживающие). Связка ключевых полей, однозначно определяющая положение любой записи в этой таблице, выглядит так: Street+House+Flat+ Number.

    1. Откройте таблицу Owners в режиме конструктора. Для этого в окне базы данных Real Estate (рис. 2.1) щелкните по таблице Owners правой кнопкой мыши. Появится меню. В нем пять пунктов. Выберите из них четвертый с названием Modify.

    2. Появится окно конструктора таблиц. Перейдите на вторую вкладку с названием Indexes (рис. 1.10). Увидите таблицу. В ней шесть колонок: Order, Name, Type, Expression, Filter и Collate.


    Рис. 1.10. Таблица Owners в конструкторе таблиц (вторая вкладка Indexes)

    3. Во вторую колонку введите название индекса — Ownersid.

    4. Нажмите клавишу Tab для перехода в третью колонку Type.

    5. Откройте при помощи мыши поле со списком. В нем четыре значения: Primary, Candidate, Binary и Regular. Выберите первое, как и в предыдущем случае — Primary.

    6. В четвертую колонку с названием Expression необходимо ввести выражение для составного индекса. Воспользуемся построителем выражений. Для его запуска сделайте щелчок мышью по кнопке Q. Она расположена справа

    7. Щелкните мышью по кнопке OK. Visual FoxPro попросит подтвердить сделанные изменения. В окне выберите кнопку Yes.

    Создание обычного индекса по полю таблицы. Порядок создания как простого индекса (Regular), так и уникального (индекса-кандидата Candidate) — один и тот же и практически ничем не отличается от создания первичного ключа. Просто в пункте номер пять предыдущей инструкции выберите соответствующее значение (Regular или Candidate). Все индексы одной таблицы Visual FoxPro хранит в одном CDX-файле.

    Контроль правильности ввода данных

    Информация, накапливаемая в базе данных, должна обладать абсолютной достоверностью. Несоблюдение этого правила может порой привести к печальным последствиям. Например, отдел комплектации не сделает вовремя заказ на поставку необходимых материалов, владелец квартиры получит квитанцию для оплаты налога на автотранспорт, которого у него никогда не было, а пенсионеру будет отказано в выдаче страхового полиса и т. д. Даже самые опытные пользователи, заполняющие таблицы, могут допустить ошибку и занести неверные данные, что, скорее всего, и произошло в перечисленных выше случаях.

    Разработчик программного комплекса просто обязан помочь пользователю избежать большинства ошибок при вводе информации. Ниже приведены две возможности, которые любезно предоставили в наше распоряжение авторы Microsoft Visual FoxPro 9.0.

    Добавление условия на значение поля позволяет проверить корректность данных только в одном поле, независимо от значений других полей. Рассмотрим пример, в котором на номер района наложено ограничение. Этот номер не может находиться вне диапазона от 1 до 9, даже если пользователь этого очень захочет (рис. 1.12).

    Рис. 1.12. Добавление условия на значение поля district (номер района)

    Чтобы добавить условие на значение поля таблицы District (районы): 1. Откройте таблицу District в режиме конструктора. Для этого в окне базы данных Real Estate (рис. 2.1) щелкните по таблице District правой кнопкой мыши. Появится меню. В нем пять пунктов. Выберите из них четвертый с названием Modify.

    2. Появится окно (рис. 1.13) конструктора таблиц (вкладка Fields).

    Запустите построитель выражений для ячейки Rule, выбрав пиктограмму U. Наберите на клавиатуре: District>0 .And. District

    Не нашли то, что искали? Воспользуйтесь поиском:

    Лучшие изречения: Для студента самое главное не сдать экзамен, а вовремя вспомнить про него. 10035 — | 7499 — или читать все.

    188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

    Отключите adBlock!
    и обновите страницу (F5)

    очень нужно

    Главное окно в среде Visual FoxPro

    Читайте также:

    1. IV. Организация ГДЗС на месте тушения пожаров в непригодной для дыхания среде
    2. Table Designer Visual Foxpro.
    3. V. Обязанности личного состава при тушении пожаров в непригодной для дыхания среде
    4. Visual FoxPro 9.0 SP1
    5. Адаптация животных к водной среде
    6. БАЗЕ ПЛИС ФИРМЫ XILINX В СРЕДЕ ПАКЕТА WebPACK
    7. В СРЕДЕ MS ACCESS
    8. В СРЕДЕ MS ACCESS
    9. В СРЕДЕ MS ACCESS
    10. Возмещение в установленном порядке вреда, причиненного окружающей природной среде и здоровью человека.
    11. Возмещение вреда,причиненного окружающей природной среде.
    12. Гигиенические требования к воздушной среде учебных помещений.

    Главное окно в среде Visual FoxPro – содержит:

    · Строка заголовка (Caption);

    · Строка главного меню (System menu);

    · Панель инструментов (Toolbar);

    · Рабочая область (Desktop);

    · Командное окно (Command window);

    · Строка состояния (Status bar).

    При загрузке системы FoxPro активизируются два основных объекта «Главная Строка Меню» и «Окно Command».

    Главная строка меню:

    File Edit View Format Tools Program Windows Help

    Команда главного меню Help – справочная информация :

    Команда главного меню Window – управление окнами:

    · Hide – удалить окно (восстановить: Names of BD)

    · Clear – очистить экран, окна остаются на экране

    · Move ^F7 – перемещение окна

    · Size ^F8 – изменение размера окна

    · Zoom F10 – распахнуть окно во весь экран

    · Zoom ^F9 – показать только заголовок окна

    · Cycle ^F1 – циклический переход между окнами

    · Color – установка цветов окон

    · Command ^F2 – переход в командное окно

    · Debug – вызов окна отладки программ

    · Trace – вызов окна трассировки программ

    · View – переход в окно меню View

    Меню View(Вид) набор команд меняется в зависимости от открытия объектов, с которыми мы работаем, например таблица, форма, отчет, иначе в меню содержится только одна опция Toolbars(Панели инструментов).

    Окно View содержит кнопки включения окон меню: установок , открытия файла ; команды: редактирования , закрытия БД , задания дорожек к файлам ; установки режимов работы системы , установки параметров даты, времени и др. . В рабочей области (Work Areas) показаны имена открытых баз данных и имена свободных областей. Индексированные БД отмечены точкой перед именем.

    Таблица 1. Команды меню View

    Команда Описание
    Edit (Редактирование) Включает режим Edit для просмотра и редак­тирования записей. В этом режиме поля таблиц отображаются вертикально
    Browse (Просмотр) Включает режим Browseдля просмотра и ре­дактирования записей. В этом режиме поля таблиц отображаются горизонтально. Строки представляют записи
    Append Mode(Добавление), (Расширенный режим) Добавляет пустую запись в конец таблицы, при этом указатель записи устанавливается на ее первое поле
    Design (Конструкторы) Отображает окно Конструктора форм (Form Designer), или окно Конструктора отчетов (Report Designer), или окно Конструктора эти­кеток (Label Designer) — в зависимости от того, что тебе нужно
    Tab Order (Порядок табуляции) Определяет порядок обхода объектов в экран­ных формах при использовании клавиши
    Preview (Предварительный просмотр) Отображает отчеты на экране такими, какими они будут после печати
    Data Environment (Среда данных) Определяет таблицы и отношения, данные из которых будут использованы в экранных фор­мах и отчетах (этикетках)
    Properties (Свойства) Открывает диалоговое окно Properties (Свойства), в котором отражены все свойства экранных форм и элементов управления
    Code (Код, программа) Открывает окна программ для редактирования методов объектов
    Form Controls Toolbar (Панель элементов экранной формы) Открывает панель инструментов для разработки экранной формы во время работы в конструкторе форм
    Report Control Toolbar (Панель инструментов отчета) Открывает панель инструментов для разработ­ки отчета во время работы в Конструкторе отче­тов
    Layout Toolbar (Панель инструментов для макетирования) Используя эту панель инструментов, можно выравнивать элементы управления в формах и отчетах
    Color Palette Toollbar (Панель палитры цветов) Панель палитры цветов позволяет выбирать цвет для элементов управления
    Report Preview Toolbars (Панель предварительного просмотра отчета) На этой панеле расположены кнопки, которые помогут тебе напечатать отчет, просмотреть его страницы или выйти из режима просмотра
    Database Designer (Конструктор базы данных) Открывает окно Database Designer(Конструк­тор базы данных), в котором можно управлять таблицами, видами и отношениями между таблицами
    Grid Lines (Линии сетки) Включает и выключает режим отображения линий сетки
    Show Position (Показать позицию) При выборе этой опции в строке состояния ото­бражаются позиция, высота и ширина объекта
    General Options (Общие параметры) Добавляет код в меню во время работы с Кон­структором меню (Menu Designer)
    Menu Options (Опции меню) Добавляет программный код для выбранной опции меню
    Toolbars (Инструменты) Открывает диалоговое окно Toolbars (Инструменты), в котором отображены все панели инструментов Visual РохРго

    Работа с базами данных производится через пункты Главного Меню File.

    Главное Меню File.

    · New создать новый файл

    · Open открыть записанный ранее на диске файл

    · Close закрыть активное окно

    · Save сохранить файл на диске (^W)

    · Save as записать файл на диске под новым именем

    · Revert убрать изменения, внесенные после открытия файла

    · Printer Setup установить параметры для печати

    · Print печать файла

    · Quit выход из FoxPro.

    Основная работа с содержимым баз данных осуществляется через Главное Меню Database – работа с файлами БД , модификация структуры, создание БД:

    · SetUp работа с индексными файлами, установка фильтров и полей

    · Browse создание меню и окна редактирования БД

    · Append From добавление записей в конец БД из другой БД

    · Copy To – копирование записей из активной БД в другую БД

    · Sort – сортировка записей с созданием новой БД

    · Total – вычисление суммы значений в полях БД


    · Average – вычисление средних значений в полях БД

    · Count – подсчет числа записей в полях БД

    · Sum – суммирование числовых данных в полях БД

    · Calculate – произвести вычисления в БД

    · Report – работа с созданным ранее файлом отчета

    · Label – работа с созданным ранее файлом визиток

    · Pack – удалить помеченные маркером (*) записи в БД

    · Reindex – обновить индексный файл после внесения в БД изменений (при закрытом индексном файле).

    При редактировании текущей записи в БД используются команды верхнего Главного Меню Record.

    · Record – работа с записями БД

    · Append – режим автодобавления пустых записей в БД

    · Change – показать изменения в записях БД после выполнения команд установки фильтров, полей доступа и т.п.

    · Goto – переход к указанной записи

    · Locate – поиск записи

    · Continue – продолжить поиск записи (^K)

    · Seek – поиск в индексированной БД

    · Replace – произвести вычисления и замену записей в поле БД

    · Delete – пометить маркером записи к удалению

    · Recall – убрать маркер для удаления записей.

    Для работы с программой предназначено меню Program:

    · Do. (^D) — выполнить программу,

    · Cancel — прервать выполнение программы,

    · Resume (^M ) — продолжить выполнение программы,

    · Compile. — компиляция программы,

    · Generate. — генерировать программный файл,

    · FoxDoc — работа с документацией,

    · FoxGraph. — работа с графикой.

    При активизации пунктов меню появляются всплывающие меню, описанные ниже.

    Таблица 2. Команды меню Program

    Команда Описание
    Do (Выполнить) Запускает программу из диалогового окна
    Canсеl(Отменить) Отменяет выполнение текущей программы
    Resume (Продолжить) Возобновляет выполнение программы, находящейся в состоянии ожидания. «Довести» программу до такого состояния очень просто — используйте следующую команду
    Suspend (Приостановить) Приостанавливает выполнение текущей программы
    Compile (Компилировать) Компилирует исходный файл в объектный код
    Run (Выполнить) Запускает текущую программу

    Таблица 3. Кнопки панели Form Controls

    Кнопка Описание
    Select Object (Выбор объекта) Если ни один из элементов на панели Form Controls не выбран, кнопка находится в состоянии Вкл. Это означает, что теперь мышь служит указа­телем объекта на поле макета экранной формы. Когда же мы выбираем какой-нибудь элемент, дан­ная кнопка принимает свое нормальное состояние Откл и при щелчке мышью в указанном месте ма­кета формы Появится выбранный элемент
    View Classes (Просмотр классов) Позволяет переключаться между библиотеками классов. После щелчка на этой кнопке мы увидим три доступных опции. Опция Standard (Стандартная) включает библиотеку базовых классов РохРго. Опция ActiveX включает библиотеку классов ActiveX. Опция Add (Добавить) позволяет нам добавить в список панели инструментов любую библиотеку классов, какие только имеются на компьютере
    Label (Этикетка) Создает в форме объект в виде текста
    Text Box (Поле ввода данных) Создает объект в виде поля ввода, при помощи которого можно редактировать значения полей таблиц
    Edit Box (Поле редактирования данных) Те же функции, что и у ТехtВох, но этот элемент очень удобен для редактирования данных большого объема, например полей типа Memo
    Command Button (Кнопка управления) Создает объект в виде кнопки. Это обычная кнопка. При щелчке на ней мышью происходит какое-нибудь определенное нами событие
    Command Group (Группа кнопок) Кнопки управления, объединенные в одну группу (один объект)
    Option Group (Группа переключателей) Создает в форме объект в виде группы переключателей или «радиокнопок». Из этой группы только один элемент может принимать фиксированное значение (Вкл)
    Check Box (Флажок) Создает в форме элемент в виде флажка
    Combo Box (Раскрывающийся список) Создает в форме элемент управления в виде раскрывающегося списка, из которого можно выбирать значения данных
    List Box (Список) Создает в форме элемент управления в виде списка, из которого можно выбирать значения данных. В отличие от СоmbоВох, в котором отображается только выбранное значение, в данном элементе отображаются сразу все значения в виде списка
    Spinner (Счетчик) Создает элемент управления в виде счетчика. Строго говоря, это поле ввода в виде счетчика
    Grid (Сетка) Создает элемент управления в виде таблицы
    Image (Рисунок) Создает элемент управления в виде графического изображения
    Timer (Таймер) Элемент управления таймер. Через заданный промежуток времени инициирует определенное событие
    Page Frame (Вкладки) Создает элемент управления в виде страничного блока с вкладками
    ActiveX Control (OLE Control) Отображает ОLЕ-обьект, хранящийся в поле типа General
    ActiveX BoundControl (OLE Bound Control) Создает ОLЕ-объект
    Line (Линия) Создает в форме объект в виде линии
    Shape (Контур) Создает в форме элемент управления в виде контура
    Container (Контейнер) Создает в форме элемент управления контейнер, который, в свою очередь, также может включать в себя различные объекты
    Separator (Разделитель) Создает в форме элемент управления разделитель
    HuperLink (Гиперссылка) Вставляет в форму объект в виде гиперссылки
    Builder Lock (Запуск построителя) Автоматически запускает построитель (Builder) после вставки объекта в поле макета формы. Если для выбранного элемента управления имеется построитель, будь спокоен — он и запустится. Можно, конечно, вызывать построитель вручную, но эта кнопка позволяет немного сэкономить время, не тратя его на дополнительные манипуляции с мышью
    Button Lock (закрепитель кнопки) Видишь ли, какая штука: после вставки объекта в форму приходится опять «лезть» на Form Controls и снова выбирать следующий элемент управления. А вдруг твоему заказчику взбредет в голову, чтобы в его экранной форме было, скажем, 92 текстовых поля? Вот для таких случаев разработчики Visual FохРго и придумали эту кнопку. После ее включения можно вводить любое количество однотипных элементов управления, не обращаясь к панели Form Controls

    Окно Command – для ввода команд в интерактивном режиме. При работе с меню выполняемые команды дублируются в окне команд (Command), что позволяет контролировать и повторять введенные ранее команды меню.

    Строка состояния расположена в нижней части главного окна Visual FoxPro. Этот элемент можно условно разделить на две части: область сообщений и индикаторы. Область сообщений используется различными конструкторами для отображения позиции расположенных в них объектах.

    Дата добавления: 2015-05-09 ; Просмотров: 761 ; Нарушение авторских прав? ;

    Будь умным!

    Работа добавлена на сайт samzan.ru: 2015-07-05

    Заказать написание уникльной работы

    «>31. «>СОЗДАНИЕ ЗАПРОСОВ

    «>Запрос в Visual Fox Pro — это тот же вопрос. Если вы обращаетесь с запросами к базе данных, то вы задаете ей вопросы о данных, содержащихся в ней. Запросы хранятся как программные файлы с расширением .QPR, которые содержат команду SELECT языка SQL.
    Для создания запросов в Visual FoxPro можно использовать «>Query Wizard «> (Мастер по созданию запросов), или «>Query Designer «>(Конструктор запросов), или же и то, и другое. Применение «>Query Wizard «> целесообразно для быстрого создания несложных, стандартных запросов. В свою очередь «>Query Designer «> позволяет вам творчески подойти к задаче и конструировать более изящные, эффективные и сложные запросы.

    «> В самом простом варианте команда, которая выбирает все записи из одной таблицы, выглядит так:

    » xml:lang=»en-US» lang=»en-US»>SELECT mytable.* FROM mytable

    » xml:lang=»en-US» lang=»en-US»> «>Впрочем » xml:lang=»en-US» lang=»en-US»>, «>можно » xml:lang=»en-US» lang=»en-US»> «>еще » xml:lang=»en-US» lang=»en-US»> «>короче » xml:lang=»en-US» lang=»en-US»>:

    » xml:lang=»en-US» lang=»en-US»>SELECT * FROM mytable

    » xml:lang=»en-US» lang=»en-US»> «>Таким образом, выбраны все записи из таблицы Mytable. ;color:#242424″> «>
    В зависимости от того, какое приложение вы выбрали для изучения SQL, вас ожидают совершенно разные пути ввода данной команды в память вашего компьютера «>. ;color:#242424″> «> Начнем с Visual FoxPro. Здесь у нас есть целых три варианта выполнения команд SQL: «> Набрать команду в окне ;color:#242424″> «>Command «>.

    «>Создать программу, в которую включить нужную команду. Этот способ более эффективен, так как у вас есть возможность сохранить возможно высшей степени изощренную команду для дальнейшего использования.

    «>Способ, наиболее привлекательный для начинающих программистов, — использовать ;color:#242424″> «>Relation Query By Example ;color:#242424″> «>(RQBE) — ;color:#242424″> «>Реляционный запрос по образцу «>.

    «> Для того чтобы использовать RQBE, вам достаточно выполнить команду ;color:#242424″> «>New ;color:#242424″> «>из меню ;color:#242424″> «>File «>, а затем выбрать тип создаваемого файла — Query. RQBE — это интерактивная среда, в которой вы формируете запрос в основном с помощью мыши, перетаскивая нужные вам поля в определенные области диалогового окна. ;color:#242424″>

    «>В язык FoxPro включен ряд команд из языка запросов SQL. Команды SQL могут непосредственно включаться в программы наряду с собственными командами FoxPro.

    ;text-decoration:underline»>Создание баз данных

    «>Команда создает новую базу данных: DBF-файл с указанным именем. Для каждого поля задаются его имя, тип (одной из букв C, N, D, M, F, L), длина и число десятичных разрядов. Длина и точность не задаются для типов дата (D), логический (L) и примечаний (M).

    ;text-decoration:underline»>Пример. «> Создание базы KADR.DBF

    » xml:lang=»en-US» lang=»en-US»>CREATE DBF kadr (FAM C(15), TAB N(3), DTR D, POL C(1), SEM C(1), DET N(1), ;
    PODR C(15), SZAR N(9), PER M)

    ;text-decoration:underline»>Дополнение базы данных

    «>INSERT INTO [( [, . ] » xml:lang=»en-US» lang=»en-US»>VALUES «> ( [, . ])

    ;text-decoration:underline»>Пример. ;text-decoration:underline» xml:lang=»en-US» lang=»en-US»> «>
    » xml:lang=»en-US» lang=»en-US»>INSERT INTO kadr (fam, tab, szar) VALUES (‘ «>Иванов » xml:lang=»en-US» lang=»en-US»>’, 350, 800000)

    «> FROM INTO
    WHERE
    GROUP BY
    HAVING
    ORDER BY

    «> Каждый параметр команды SELECT имеет опции

    «>SELECT [DISTINCT] [ . ] [AS ]
    FROM [ ] [, [ ]. ]

    «>Псевдоним используется в тех случаях, когда выборка делается из нескольких баз данных, где имена полей совпадают. Выражение может быть полем записи из БД, константой, функцией. Если не устраивают имена, формируемые по умолчанию, можно назначить свои, указав их после слова AS . Такое переименование имеет смысл, если выборка помещается во вновь создаваемую базу данных.
    DISTINCT — исключает возможность вывода одинаковых строк в выборке.

    «>INTO получатель
    Получателем может быть
    ARRAY — задается вновь создаваемый двумерный массив
    CURSOR — задается имя Курсора
    DBF/TABLE — новая база данных с указанным именем
    Курсор — это временный набор данных, который может быть областью памяти или временным файлом. Кроме того, данные можно переслать в файл или на принтер.
    TO FILE ADDITIVE / TO PRINTER — выборка посылается в текстовый файл или на принтер. Если используется слово ADDITIVE, то выборка будет добавлена будет добавлена в конец существующего файла без его перезаписи.
    GROUP BY — производит группирование выходных данных.
    HAVING — опция задает критерий отбора данных.
    ORDER BY [ASC/DESC] — опция задает упорядочение по заданной колонке. По умолчанию сортировка выполняется по возрастанию (ASC) или по убыванию (DESC).

    ;text-decoration:underline»>Стандартные функции. «>
    COUNT( ) – число значений в столбце.
    SUM( ) – сумма значений какого-либо столбца.
    AVG( ) – среднее значение.
    MAX( ) – самое большое значение в столбце.
    MIN( ) – самое малое значение в столбце.

    ;font-family:’Arial'»>34. ;background:#ffffff»>Работа с данными в локальной сети

    «> Как правило, данные необходимо использовать не на одном компьютере. Обычно с ними работает группа пользователей. Способ обмена данными посредством дискеты, безусловно, значительно облегчает работу программиста, однако такой способ организации выглядит в настоящее время скорее вызовом, чем правилом. Тем более, что сама работа в сети экономит массу средств и самое главное — время, которое, как вам уже известно, все больше становится эквивалентом денег. ;color:#242424″> «>
    Visual FoxPro обеспечивает работу с данными с помощью монопольного или раздельного доступа к данным, опций блокировки, буферизации таблиц и записей, а также поддержки транзакций. Помимо этого Visual FoxPro автоматизирует многоразовую установку среды окружения посредством сессий данных. ;color:#242424″> «>
    В многопользовательских системах необходима уверенность, что только один пользователь может заносить данные в файл или запись в текущий момент. Один из способов добиться этого — открыть таблицу с монопольным доступом. Ни один пользователь или приложение не смогут после этого ни читать данные из этого файла, ни писать в него. Приложение выведет сообщение об ошибке, если какая-нибудь таблица, необходимая для монопольного доступа, уже открыта. ;color:#242424″> «>
    После выполнения команды ;color:#242424″> «>SET EXCLUSIVE ON ;color:#242424″> «>все таблицы будут открываться в монопольном режиме. Если необходимо проверить текущую установку, то используйте функцию ;color:#242424″> «>SET() ;color:#242424″> «>с аргументом EXCLUSIVE следующим образом:

    «> Если вы не хотите менять текущую установку в приложении для монопольного или многопользовательского режима открытия таблиц, то открывайте таблицу с помощью команды ;color:#242424″> «>USE ;color:#242424″> «>и точного указания, в каком режиме вы будете ее использовать. Например, если вам обязательно надо открыть таблицу в монопольном режиме, необходимо использовать следующую команду:

    «>USE myfile EXCLUSIVE

    «> В дополнение к монопольному или многопользовательскому режиму доступа к файлам вы можете управлять доступом к таблицам с помощью блокировок как файлов, так и записей. Блокировки могут обеспечить как долгосрочный, так и краткосрочный контроль над данными. Вдобавок, блокировки предотвратят одновременную модификацию двумя или более пользователями одной и той же записи или таблицы. Существуют два типа блокировок: автоматические и ручные. ;color:#242424″> «>
    Если выполняемая команда требует блокировки таблицы или записи и запись или таблица еще не заблокированы, Visual FoxPro автоматически пытается совершить блокировку, выполняет команду и снимает блокировку. Команды могут блокировать запись, целую таблицу или заголовок таблицы. Когда заблокирована запись, то другие пользователи могут добавлять, удалять и изменять другие записи, кроме заблокированной. Блокировка таблицы предотвращает любые изменения другими пользователями в таблице. Блокировка заголовка занимает промежуточное положение, другие пользователи могут изменять записи, но не могут удалять и добавлять записи. ;color:#242424″>


    «> Иногда бывает необходимо применить ручную блокировку. Visual FoxPro блокирует текущую таблицу с помощью функции FLOCK(). В отличие от команды SET EXCLUSIVE ON, которая предотвращает любой доступ к таблице со стороны других пользователей, FLOCK() блокирует таблицу, оставляя ее доступной для чтения. Остальные пользователи могут открывать таблицу и просматривать записи, даже не задумываясь о том, что она заблокирована. FLOCK() блокирует текущую таблицу и возвращает .T., если блокировка прошла успешно.
    Если в качестве аргумента функции вы укажете псевдоним или номер рабочей области, то у вас появится возможность заблокировать таблицу в другой, не текущей рабочей области. Например: FLOCK(‘1’) или FLOCK(‘Account’). Эта особенность очень полезна для блокировки связанных таблиц. RLOCK() и LOCK() блокируют текущую запись и возвращают .T., если блокировка завершилась успешно.

    «>32. «>При знакомстве со средствами Visual FoxPro для создания экранных форм вы могли убедиться в их гибкости и мощности. Аналогичные средства Visual FoxPro предоставляются в ваше распоряжение для создания отчетов. При создании отчета вы можете воспользовать ся стандартными средствами, ускоряющими процесс создания отчета, или разработать для отчета специальный формат с помощью конструктора отчетов. Конструктор отчетов позволяет создавать отчеты как в табличном виде, так и в свободной форме. Табличный отчет представляет собой напечатанную таблицу, в которой данные упорядочены по столбцам и строкам. Каждый из столбцов отчета содержит поле исходной таблицы или вычисляемое поле, а строка представляет собой запись. Табличный отчет позволяет напечатать данные из таблиц в наиболее простом и естественном виде. Однако табулированное представление данных в отчете имеет свои недостатки. На практике в ряде случаев (почтовые этикетки, чеки, письма и т.д.) поля исход ной таблицы должны располагаться в специально отведенных для них местах отчета. Очевидно, что табличный отчет не пригоден для этих целей.

    «>Отчеты в свободной форме позволяют устранить ограничения, свойственные табличным отчетам. При получении отчета в свободной форме вы можете воспользоваться стандартным форматом, автоматически создаваемым Visual FoxPro для каждой таблицы. В этом форм ате поля исходной таблицы расположены вертикально. Однако с помощью конструктора отчетов вы можете разработать специальный формат отчета, где поля исходной таблицы будут расположены в требуемых местах отчета. В настоящей главе мы обсудим основные средства, используемые при создании табличных отчетов и отчетов в свободной форме. Кроме того, вы узнаете, как напечатать отчет в соответствии с разработанным форматом, а также как улучшить формат отчета не выводя его на печать.

    «>В Visual FoxPro для создания отчетов используется:

    «>Мастер отчетов (Report Wizard), позволяющий достаточно быстро создать отчет, выбрав параметры сортировки и группировки данных, стиль отображения данных и их расположение Стандартный отчет (Quick Report), позволяющий создавать стандартный отчет, в котором поля отчета располагаются автоматически по внутреннему алгоритму Visual FoxPro Конструктор отчета, в котором вы самостоятельно разрабатываете собственные отчеты

    «>33. «>Объекты » xml:lang=»en-US» lang=»en-US»>Visual «> » xml:lang=»en-US» lang=»en-US»>FoxPro ;color:#000000″ xml:lang=»en-US» lang=»en-US»>

    «>Visual FoxPro состоит из отдельных компонентов, которые используются для хранения информации, ее отображения и редактирования. В Visual FoxPro вся информация хранится в базе данных, которая состоит из таблиц, отношений между таблицами, индексов, триггеров и хранимых процедур. Каждая таблица имеет уникальное имя и хранится в отдельном файле, наименование которого совпадает с именем таблицы. Созданный файл имеет расширение DBF.

    «>Каждая создаваемая таблица может иметь связанные с ней индексы, используемые для упорядочения данных и быстрого поиска необходимых записей, причем каждая таблица может иметь несколько индексов. Для хранения значений полей типа Memo и General применяются отдельные файлы. Memo-поля таблиц содержат текстовую информацию, а поля типа General используются, как правило, для хранения двоичной информации и данных других приложений, работающих в среде Windows.В Visual FoxPro реализованы триггеры, которые позволяют централизованно обрабатывать события, возникающие при любых изменениях в базе данных.Вы также можете создавать хранимые процедуры, которые являются частью базы данных и могут использоваться при описании таблиц, для проверки введенных данных, определения значения по умолчанию и т. п.

    «>Чрезвычайно удобным и полезным средством доступа к базе данных являются представления данных. Представления данных позволяют объединять данные таблиц и отображать их в более удобном виде. Вы можете выбрать только интересующие вас поля таблиц, объединить несколько полей в одно поле, вычислить итоговые значения и задать новые имена полей таблицы. Как правило, количество представлений в базе данных намного превосходит количество таблиц. По мере эксплуатации базы данных их количество непрерывно растет. Во многих информационных системах доступ к данным, включая просмотр, добавление и редактирование, осуществляется только с помощью представлений данных. Данный подход позволяет осуществить гибкое управление доступом к информации. При использовании представлений для выборки данных в формах, отчетах, при создании запросов и в программах применяются те же правила, что и для таблиц. Редактирование данных, включенных в представление, возможно только при определенных условиях. Например, в том случае, если оно создано на основе только одной таблицы.

    «>Для отображения и редактирования данных используются формы, отчеты, запросы и программы. При создании форм, отчетов и запросов применяются конструкторы. Поэтому эти компоненты часто называют конструкторскими объектами. Формы и отчеты являются составными объектами, т. к. они состоят из более мелких объектов (таких как поля, кнопки, диаграммы, рамки, OLE — компоненты и т. п.), которые называются объектами интерфейса.

    «>Формы используются для просмотра или ввода данных в таблицы. Данные можно вводить непосредственно в таблицы, но использование формы является более быстрым и более эффективным способом ввода. Форма содержит некоторые или все поля таблиц, в которые вы вводите информацию. Для создания форм вы можете использовать мастер создания форм или конструктор форм. Мастер форм содержит целый ряд шаблонов, которые определяют соотношение между помещаемыми в форму таблицами, вид отображения данных и порядок размещения полей. Для создания сложных форм применяется конструктор форм.

    «>Отчеты используются для просмотра и вывода на печать содержащейся в базе данных информации. Примерами отчетов являются прайс-лист товаров, список покупателей, оборотная складская ведомость. Как правило, отчеты создаются в том случае, если информацию необходимо передавать кому-либо в печатном виде. Для создания отчетов в Visual FoxPro, как и для форм, используются мастер и конструктор отчетов. С помощью мастера отчетов вы можете быстро создать собственный отчет на основе имеющихся шаблонов. Применение конструктора отчетов позволяет создавать отчеты произвольной сложности, включая многоуровневую группировку данных и размещение вычисляемых полей. Запросы являются средством выборки данных из одной или нескольких таблиц. В Visual FoxPro для создания запроса вы можете использовать как конструктор запросов, так и специализированный язык Structured Query Language (SQL). Результаты выполнения запроса могут отображаться в форме, выводиться в виде отчетов и диаграмм или сохраняться в указанной вами таблице.

    «>Программы, написанные на языке Visual FoxPro, являются объектно-ориентированными. С помощью них вы обрабатываете события в форме, создаете объекты, осуществляете различные вычисления, управляете базой данных. Для удобства работы вы можете объединить программы в библиотеки.

    «>Для создания форм в Visual FoxPro можно использовать не только базовые классы, но и создавать собственные. Например, вы можете определить класс форм, в котором задан определенный цвет фона и стандартный набор кнопок для управления данными. Чтобы стандартизировать разработку, полезно иметь один или несколько пользовательских классов для каждого базового класса. Классы, созданные в Visual FoxPro, хранятся в библиотеках классов. Для объединения компонентов создаваемого приложения используется проект, в который включаются все перечисленные выше компоненты. Использование проекта упрощает разработку приложения и его сопровождение. В Visual FoxPro имеется возможность сохранять параметры основного окна Visual FoxPro, настройки таблиц, параметры диалоговых окон и панели инструментов с помощью файла параметров настройки.

    «>Каждый компонент хранится в отдельном файле, причем имена файлов, содержащих основные компоненты, вы задаете самостоятельно, а наименования файлов, содержащих объекты, связанные с таблицей, совпадают с именем таблицы. В зависимости от типа содержащегося в нем объекта Visual FoxPro автоматически присваивает каждому файлу расширение, которое помогает в идентификации объекта. ;color:#000000″>

    «>39. «>Форму можно создать тремя различными способами.

    «>При помощи автоформы на основе таблицы или запроса «>. С помощью автоформ можно создавать формы, в которых выводятся все поля и записи базовой таблицы или ;text-decoration:underline;color:#6633b3″>запроса «>. Если выбранный ;text-decoration:underline;color:#6633b3″>источник записей «> имеет связанные таблицы или запросы, то в форме также будут присутствовать все поля и записи этих источников записей. «>При помощи мастера на основе одной или нескольких таблиц или запросов. «> Мастер задает подробные вопросы об источниках записей, полях, макете, требуемых форматах и создает форму на основании полученных ответов.

    «>Вручную в режиме конструктора. «> Сначала создается базовая форма, которая затем изменяется в соответствии с требованиями в «>режиме конструктора «>.

    ;background:#ffff00″>3 ;background:#ffff00″> ;color:#000000″>3.1. Основные функции СУБД

    «>Более точно, к числу функций СУБД принято относить следующие:

    ;color:#000000″>3.1. Непосредственное управление данными во внешней памяти

    «>Эта функция включает обеспечение необходимых структур внешней памяти как для хранения данных, непосредственно входящих в БД, так и для служебных целей, например, для убыстрения доступа к данным в некоторых случаях (обычно для этого используются индексы). В некоторых реализациях СУБД активно используются возможности существующих файловых систем, в других работа производится вплоть до уровня устройств внешней памяти. Но подчеркнем, что в развитых СУБД пользователи в любом случае не обязаны знать, использует ли СУБД файловую систему, и если использует, то как организованы файлы. В частности, СУБД поддерживает собственную систему именования объектов БД.

    ;color:#000000″>3.2. Управление буферами оперативной памяти

    «>СУБД обычно работают с БД значительного размера; по крайней мере этот размер обычно существенно больше доступного объема оперативной памяти. Понятно, что если при обращении к любому элементу данных будет производиться обмен с внешней памятью, то вся система будет работать со скоростью устройства внешней памяти. Практически единственным способом реального увеличения этой скорости является буферизация данных в оперативной памяти. При этом, даже если операционная система производит общесистемную буферизацию (как в случае ОС UNIX), этого недостаточно для целей СУБД, которая располагает гораздо большей информацией о полезности буферизации той или иной части БД. Поэтому в развитых СУБД поддерживается собственный набор буферов оперативной памяти с собственной дисциплиной замены буферов.

    «>Заметим, что существует отдельное направление СУБД, которое ориентировано на постоянное присутствие в оперативной памяти всей БД. Это направление основывается на предположении, что в будущем объем оперативной памяти компьютеров будет настолько велик, что позволит не беспокоиться о буферизации. Пока эти работы находятся в стадии исследований.

    ;color:#000000″>3.3. Управление транзакциями

    «>Транзакция — это последовательность операций над БД, рассматриваемых СУБД как единое целое. Либо транзакция успешно выполняется, и СУБД фиксирует (COMMIT) изменения БД, произведенные этой транзакцией, во внешней памяти, либо ни одно из этих изменений никак не отражается на состоянии БД. Понятие транзакции необходимо для поддержания логической целостности БД. Если вспомнить наш пример информационной системы с файлами СОТРУДНИКИ и ОТДЕЛЫ, то единственным способом не нарушить целостность БД при выполнении операции приема на работу нового сотрудника является объединение элементарных операций над файлами СОТРУДНИКИ и ОТДЕЛЫ в одну транзакцию. Таким образом, поддержание механизма транзакций является обязательным условием даже однопользовательских СУБД (если, конечно, такая система заслуживает названия СУБД). Но понятие транзакции гораздо более важно в многопользовательских СУБД.

    «>То свойство, что каждая транзакция начинается при целостном состоянии БД и оставляет это состояние целостным после своего завершения, делает очень удобным использование понятия транзакции как единицы активности пользователя по отношению к БД. При соответствующем управлении параллельно выполняющимися транзакциями со стороны СУБД каждый из пользователей может в принципе ощущать себя единственным пользователем СУБД (на самом деле, это несколько идеализированное представление, поскольку в некоторых случаях пользователи многопользовательских СУБД могут ощутить присутствие своих коллег).

    «>С управлением транзакциями в многопользовательской СУБД связаны важные понятия сериализации транзакций и сериального плана выполнения смеси транзакций. Под сериализаций параллельно выполняющихся транзакций понимается такой порядок планирования их работы, при котором суммарный эффект смеси транзакций эквивалентен эффекту их некоторого последовательного выполнения. Сериальный план выполнения смеси транзакций — это такой план, который приводит к сериализации транзакций. Понятно, что если удается добиться действительно сериального выполнения смеси транзакций, то для каждого пользователя, по инициативе которого образована транзакция, присутствие других транзакций будет незаметно (если не считать некоторого замедления работы по сравнению с однопользовательским режимом).

    «>Существует несколько базовых алгоритмов сериализации транзакций. В централизованных СУБД наиболее распространены алгоритмы, основанные на синхронизационных захватах объектов БД. При использовании любого алгоритма сериализации возможны ситуации конфликтов между двумя или более транзакциями по доступу к объектам БД. В этом случае для поддержания сериализации необходимо выполнить откат (ликвидировать все изменения, произведенные в БД) одной или более транзакций. Это один из случаев, когда пользователь многопользовательской СУБД может реально (и достаточно неприятно) ощутить присутствие в системе транзакций других пользователей.

    «>37. «> «>Создание базы данных

    ;color:#444444″>В Microsoft Access поддерживаются три метода создания ;color:#6633b3″>Базы данных Access ;color:#444444″>.

    ;color:#444444″>Можно создать базу данных с помощью мастера создания баз данных. Этот мастер позволяет выбирать один из встроенных шаблонов и настраивать его требуемым образом. Затем создается набор таблиц, запросов, форм и отчетов, а также кнопочная форма базы данных. Таблицы не содержат данных. Этот метод используется, если встроенный шаблон полностью удовлетворяет требованиям.

    ;color:#6633b3″>Создание базы данных с помощью мастера

    ;color:#444444″>При использовании Microsoft Access 2003, можно выполнить поиск шаблонов Access на веб-узле . Загрузка шаблона — это самый быстрый способ создания базы данных. Если удалось найти шаблон, полностью удовлетворяющий требованиям, используйте метод, описанный выше. Шаблон представлен файлом Access (*.mdb) и содержит таблицы, запросы, формы и отчеты. Таблицы не содержат данных. После открытия базы данных можно настроить ее и ее объекты.

    ;color:#6633b3″>Создание базы данных с помощью шаблона

    ;color:#444444″>Если требуется начать создание базы данных по собственному проекту, создайте пустую базу данных, а затем добавьте в нее таблицы, формы, отчеты и другие объекты — это наиболее гибкий способ, но он требует отдельного определения каждого элемента базы данных.

    ;color:#6633b3″>Создание пустой базы данных без помощи мастера

    ;color:#444444″>После создания собственной базы данных может потребоваться выполнить следующие действия.

    ;color:#444444″>Добавить данные в базу данных.

    ;color:#444444″>Импортировать или связать данные с источником данных, таким как электронная таблица Microsoft Excel или другая база данных Microsoft Access.

    «>27. «>Структура программы_
    Программный файл обычно содержит следующие элементы.
    1 «>. Заголовок программного файла «> — позволяет легко ориентироваться в большом количестве программ. Поскольку это комментарий, строка заголовка начинается символом * и не компилируется.
    Заголовок может выглядеть так.
    * Наименование программы: search.prg
    * Назначение:’ поиск по введенному параметру
    * Вызывается из программы main.prg
    Глава 7. Программирование в Visual FoxPro 7.0
    115
    * Программа начата 25.09.1998
    * Дата последней модификации 03/02/9
    2. «>Установочная часть программы «> — содержит команды SET, определяющие окружение: озвучивание, цветовую гамму, форматы, подавление вывода ненужных сообщений. После компиляции выполненные в программе настройки изменить нельзя. Например, если файл, который вы хотите создать, уже существует, на экране появляется вопрос, перезаписать ли этот файл? При положительном ответе файл будет обновлен. Для того чтобы при выполнении программы такое сообщение не выводилось, в ней должна быть команда SET SAFETY OFF.
    Кроме того, в установочной части записываются команды очистки экрана, макросов, окон и других результатов, полученных ранее. Ниже » xml:lang=»en-US» lang=»en-US»> «>показан » xml:lang=»en-US» lang=»en-US»> «>пример » xml:lang=»en-US» lang=»en-US»> «>установочной » xml:lang=»en-US» lang=»en-US»> «>части » xml:lang=»en-US» lang=»en-US»> «>программы » xml:lang=»en-US» lang=»en-US»>.
    CLEAR

    » xml:lang=»en-US» lang=»en-US»>CLEAR MEMORY CLEAR ALL CLOSE ALL CLEAR MACROS
    ************************************************ SET TALK OFF
    SET COLOR OF SCHEME 1 TO. 5
    SET CONFIRM ON
    SET BELL OFF
    SET DATE GERMAN
    SET ESCAPE OFF
    SET COMPATIBLE OFF
    SET SCOREBOARD OFF
    SET HOURS TO 24
    SET CLOCK ON
    SET EXACT ON
    SET SAFETY OFF
    SET SYSMENU ON
    SET PROCEDURE TO rOZ_pro
    SET AUTOSAVE ON
    3. «>Операционная часть программы «> — содержит команды открытия файлов, выбора рабочих областей, обработки и отображения информации.
    4. «>Заключительная часть программы «> — приводит рабочее пространство в исходное состояние, удаляет временные переменные и закрывает открытые файлы. Например » xml:lang=»en-US» lang=»en-US»>:
    POP KEY CLEAR ALL CLEAR ON KEY CLOSE ALL
    RELEASE WINDOWS ALL

    «>2. «>Основные функции СУБД

    «>управление данными во ;text-decoration:underline;color:#0b0080″>внешней памяти «> (на дисках);

    «>управление данными в ;text-decoration:underline;color:#0b0080″>оперативной памяти «> с использованием ;text-decoration:underline;color:#0b0080″>дискового кэша «>;

    ;text-decoration:underline;color:#0b0080″>журнализация изменений «>, ;text-decoration:underline;color:#0b0080″>резервное копирование «> и ;text-decoration:underline;color:#0b0080″>восстановление базы данных «> после сбоев;

    «>поддержка языков БД ( ;text-decoration:underline;color:#0b0080″>язык определения данных «>, ;text-decoration:underline;color:#0b0080″>язык манипулирования данными «>).

    «>Обычно современная СУБД содержит следующие компоненты:

    «>ядро «>, которое отвечает за управление данными во внешней и оперативной памяти, и ;text-decoration:underline;color:#0b0080″>журнализацию «>,

    «>процессор языка базы данных «>, обеспечивающий ;text-decoration:underline;color:#0b0080″>оптимизацию запросов «> на извлечение и изменение данных и создание, как правило, машинно-независимого исполняемого внутреннего кода,

    «>подсистему поддержки времени исполнения «>, которая интерпретирует программы манипуляции данными, создающие пользовательский интерфейс с СУБД

    «>а также «>сервисные программы «> (внешние ;text-decoration:underline;color:#0b0080″>утилиты «>), обеспечивающие ряд дополнительных возможностей по обслуживанию информационной системы.

    «>Функции СУБД. Типовая организация СУБД. Примеры

    «>Как было показано в первой лекции, традиционных возможностей файловых систем оказывается недостаточно для построения даже простых информационных систем. Мы выявили несколько потребностей, которые не покрываются возможностями систем управления файлами: поддержание логически согласованного набора файлов; обеспечение языка манипулирования данными; восстановление информации после разного рода сбоев; реально параллельная работа нескольких пользователей. Можно считать, что если прикладная информационная система опирается на некоторую систему управления данными, обладающую этими свойствами, то эта система управления данными является системой управления базами данных (СУБД).

    ;color:#000000″>Типовая организация СУБД

    «>Естественно, организация типичной СУБД и состав ее компонентов соответствует рассмотренному нами набору функций. Напомним, что мы выделили следующие основные функции СУБД:

    «>управление данными во внешней памяти;

    «>управление буферами оперативной памяти;

    «>журнализация и восстановление БД после сбоев;

    «>поддержание языков БД.

    «>Логически в современной реляционной СУБД можно выделить наиболее внутреннюю часть — ядро СУБД (часто его называют Data Base Engine), компилятор языка БД (обычно SQL), подсистему поддержки времени выполнения, набор утилит. В некоторых системах эти части выделяются явно, в других — нет, но логически такое разделение можно провести во всех СУБД.

    «>Ядро СУБД отвечает за управление данными во внешней памяти, управление буферами оперативной памяти, управление транзакциями и журнализацию. Соответственно, можно выделить такие компоненты ядра (по крайней мере, логически, хотя в некоторых системах эти компоненты выделяются явно), как менеджер данных, менеджер буферов, менеджер транзакций и менеджер журнала. Как можно было понять из первой части этой лекции, функции этих компонентов взаимосвязаны, и для обеспечения корректной работы СУБД все эти компоненты должны взаимодействовать по тщательно продуманным и проверенным протоколам. Ядро СУБД обладает собственным интерфейсом, не доступным пользователям напрямую и используемым в программах, производимых компилятором SQL (или в подсистеме поддержки выполнения таких программ) и утилитах БД. Ядро СУБД является основной резидентной частью СУБД. При использовании архитектуры «клиент-сервер» ядро является основной составляющей серверной части системы.

    «>Основной функцией компилятора языка БД является компиляция операторов языка БД в некоторую выполняемую программу. Основной проблемой реляционных СУБД является то, что языки этих систем (а это, как правило, SQL) являются непроцедурными, т.е. в операторе такого языка специфицируется некоторое действие над БД, но эта спецификация не является процедурой, а лишь описывает в некоторой форме условия совершения желаемого действия (вспомните примеры из первой лекции). Поэтому компилятор должен решить, каким образом выполнять оператор языка прежде, чем произвести программу. Применяются достаточно сложные методы оптимизации операторов, которые мы подробно рассмотрим в следующих лекциях. Результатом компиляции является выполняемая программа, представляемая в некоторых системах в машинных кодах, но более часто в выполняемом внутреннем машинно-независимом коде. В последнем случае реальное выполнение оператора производится с привлечением подсистемы поддержки времени выполнения, представляющей собой, по сути дела, интерпретатор этого внутреннего языка.

    «>Наконец, в отдельные утилиты БД обычно выделяют такие процедуры, которые слишком накладно выполнять с использованием языка БД, например, загрузка и выгрузка БД, сбор статистики, глобальная проверка целостности БД и т.д. Утилиты программируются с использованием интерфейса ядра СУБД, а иногда даже с проникновением внутрь ядра.

    Вывод сообщений в Microsoft Visual FoxPro

    MESSAGEBOX(eMessageText [, nDialogBoxType]
    [, cTitleBarText] [, nTimeout])

    выводит диалог, содержащий сформированное пользователем сообщение.


    eMessageText – текст, появляющийся в диалоге. Если выражение eMessageText не имеет тип Character, то оно преобразовывается в этот тип автоматически, неявно используя функцию TRANSFORM( ).

    Текст eMessageText разбивается на строки в результате применения в нем символа возврата каретки CHR(13), например:

    MessageBox(«а» + Chr(13) + «б»)

    nDialogBoxType – тип диалога. Задает кнопки и иконки, появляющиеся в диалоге. В табл. 4.7 значения 0 – 5 используются для задания кнопок диалога; 16, 32, 48 и 64 – для задания его иконок; 0, 256 и 512 – для указания кнопки по умолчанию, то есть кнопки выбираемой при открытии диалога.

    Значения, применяемые для задания nDialogBoxType

    Только кнопка OK (по умолчанию)

    Кнопки OK и Отмена

    Кнопки Прервать, Повтор и Пропустить

    Кнопки Да, Нет и Отмена

    Кнопки Да и Нет

    Кнопки Повтор и Отмена

    Кнопка по умолчанию

    Значение параметра nDialogBoxType может быть сумой трех величин, взятых из разных частей таблицы, например задание 4 + 48 + 0 означает, что в диалоге присутствуют кнопки Да и Нет, картинка восклицательного знака, а при открытии диалога выбирается кнопка Да.

    Взамен цифр можно употребить соответствующие константы, определенные в файле FoxPro.h. Так, величина 52 (4 + 48 + 0) может быть задана следующим образом:

    MB_YESNO + MB_ICONEXCLAMATION + MB_DEFBUTTON1

    cTitleBarText – текст заголовка диалога. Если параметр опущен, в заголовке разместится текст Microsoft Visual FoxPro.

    nTimeout – время существования диалога (в миллисекундах). Если параметр меньше 1 или отсутствует, то диалог будет открыт до тех пор, пока не нажата одна из его кнопок.

    Функция в зависимости от нажатой кнопки возвращает одно из приведенных в табл. 4.8 чисел.

    В диалоге с кнопкой Cancel нажатие Esc равносильно нажатию Cancel.

    Функция MESSAGEBOX( ) вернет –1, если диалог закрыт по причине истечения срока его существования.

    Замечание . Наименьшее сокращение имени функции – MESSAGEB( ).

    Если второй параметр функции имеет тип Numeric, то он воспринимается как nDialogBoxType, однако если этот параметр имеет тип Character, то он трактуется как cTitleBarText. Если третий параметр имеет тип Numeric, то функция считает, что это nTimeout. Таким образом, правильно выполнены все следующие вызовы функции MESSAGEBOX( ).

    MessageBox(«Привет!», «Заголовок диалога», 0, 1000)

    MessageBox(«Привет!», 0, «Заголовок диалога», 1000)

    MessageBox(«Привет!», 0, 1000)

    MessageBox(«Привет!», 0, 1000, «Заголовок диалога»)

    && Выводится приведенный на рис. 4.7 диалог

    if not File(fileName) then

    createFile = MessageBox(«Файл не найден и будет создан!», ;

    MB_YESNO + MB_ICONEXCLAMATION + MB_DEFBUTTON1, ;

    «Результаты поиска файла»)

    Рис. 4.7. Пример MessageBox-диалога

    INPUTBOX(cInputPrompt [, cDialogCaption [, cDefaultValue
    [, nTimeout [, cTimeoutValue [, cCancelValue]]]]))

    открывает модальный диалог, используемый в том числе параметризованным видом, для ввода одной строки.

    cInputPrompt – подсказка, отображаемая над полем ввода.

    cDialogCaption – заголовок диалога.

    cDefaultValue – значение, отображаемое в поле ввода при открытии диалога; если нажата кнопка Cancel, то функция вернет cDefaultValue.

    nTimeout – время в миллисекундах существования диалога; если параметр не задан, то диалог закрывается при нажатии на OK или Cancel.

    cTimeoutValue – значение, возвращаемое функцией, когда диалог закрывается в результате превышения nTimeout. Если параметр не задан и время nTimeout превышено, то функция вернет пустую строку.

    cCancelValue – задает символьную строку, возвращаемую, если пользователь покинул диалог, выбрав кнопку Cancel или нажав на Esc.

    st = «Начальное значение»

    && Открытый диалог приведен на рис. 4.8

    st = InputBox(«Введите строку», «Ввод», st, 3000, «Время истекло»)

    Рис. 4.8. Диалог ввода строки

    ASSERT lExpression [MESSAGE cMessageText]

    выводит сообщение cMessageText в ASSERT-диалоге. Вывод осуществляется, когда выражение lExpression вычисляется со значением .F.

    Если сообщение cMessageText не задано, то выводится сообщение по умолчанию (рис. 4.9).

    Рис. 4.9. ASSERT-диалог с сообщением по умолчанию

    VFP генерирует ошибку, если тип параметра lExpression отличен от Logical.

    Команда ASSERT игнорируется, если SET ASSERTS установлен в OFF (задано по умолчанию), и выполняется при установке SET ASSERTS в ON.

    Команда ASSERT игнорируется в распространяемых приложениях.

    Действия, инициируемые кнопками диалога, описаны в табл. 4.9.

    Кнопки диалога и их действия

    Выполнение программы приостанавливается; появляются окна отладчика с активным окном трассировки

    Выполнение программы завершается

    Выполнение программы продолжается начиная со строки, следующей за выполненной командой ASSERT

    Выполнение программы продолжается начиная со строки, следующей за выполненной командой ASSERT, и SET ASSERTS устанавливается в OFF. Последующие команды ASSERT игнорируются, пока SET ASSERTS не будет установлен в ON

    Команда применяется на этапе отладки, например для проверки значений переменных:

    assert x >= 0 message «Аргумент функции SQRT( ) меньше нуля»

    WAIT [eMessageText] [TO VarName] [WINDOW [AT nRow, nColumn]]
    [NOWAIT] [CLEAR | NOCLEAR] [TIMEOUT nSeconds]

    выводит сообщение в окно VFP и приостанавливает, если не задана опция NOWAIT, выполнение программы до тех пор, пока не нажата любая клавиша клавиатуры или кнопка мыши.

    Опции и параметры:

    eMessageText – выводимое сообщение. Может быть любого типа. Если выражение eMessageText не имеет тип Character, то оно преобразовывается в этот тип автоматически неявно используемой функцией TRANSFORM( ). Если параметр eMessageText отсутствует, то выводится сообщение по умолчанию (рис. 4.10).

    Рис. 4.10. Wait-сообщение по умолчанию

    Если на месте eMessageText задана строка нулевой длины («»), wait-сообщение не появляется, однако программа приостанавливается до нажатия клавиши клавиатуры или кнопки мыши.

    TO VarName – сохраняет символ, соответствующий нажатой клавише. Если переменная VarName не существует, то она будет создана. Если нажата клавиша Enter или клавиша (комбинация клавиш), соответствующая неотображаемому на экране символу, например Esc, то в VarName будет помещена строка нулевой длины.

    WINDOW – обеспечивает вывод сообщения в окне, размещенном в главном окне VFP. По умолчанию wait-сообщение появляется в правом верхнем углу главного окна. Окно с wait-сообщением, наряду с другими окнами VFP, временно может быть спрятано путем нажатия кнопки CTRL или SHIFT. Шрифт и его атрибуты, используемые при выводе сообщения, устанавливаются на закладке «Оформление» окна «Экран» контрольной панели Windows после нажатия на кнопку «Дополнительно» и выбора элемента «Окно сообщения».

    AT nRow, nColumn – задает позицию (номер строки и столбца) левого верхнего угла wait-окна. Начало координат находится в верхнем левом углу экрана. Позиция задается, если задана опции WINDOW.

    NOWAIT – обеспечивает продолжение выполнения программы сразу после появления wait-сообщения. Сообщение пропадет после нажатия на клавишу клавиатуры, кнопку мыши или в результате перемещения мыши.

    CLEAR – удаляет системное окно VFP или wait-окно. Применяется, например, для удаления wait-окна, активизированного перед запуском продолжительного процесса, после его завершения, например:

    close tables all

    if File(tableName) then

    use (tableName) in 0 exclusive

    wait «Упаковка таблицы Test. » window nowait noclear

    MessageBox(«Файл » + tableName + » не найден!»)

    NOCLEAR – обеспечивает сохранность wait-окна до выполнения WAIT CLEAR или новой команды WAIT.

    TIMEOUT nSeconds – число секунд, на которое появляется wait-окно. Время существования wait-окна будет меньше, если до истечения nSeconds нажата клавиша клавиатуры или кнопка мыши. Опция TIMEOUT должна быть последней в команде WAIT; в противном случае VFP генерирует ошибку. Нажатие на Esc при заданной опции TIMEOUT приведет к ошибке INTERRUPTED.

    SET TALK ON | OFF | WINDOW [WindowName] | NOWINDOW

    устанавливает режим отображения результатов выполнения команд VFP в главном окне VFP, окне для системных сообщений, пользовательском окне или статус-строке.

    Опции и параметр:

    ON – (по умолчанию) разрешает вывод информации о ходе выполнения команды VFP. Если SET TALK устанавливается в ON повторно после выполнения SET TALK OFF, то место вывода берется из более ранней установки SET TALK.

    OFF – запрещает вывод результатов выполнения команд VFP (задается по умолчанию для внутренних DLL-процессов серверов автоматизации).

    WINDOW [WindowName] – задет, если указан параметр WindowName, пользовательское окно, в которое направляются talk-сообщения. Окно должно быть создано до выполнения команды VFP, о ходе работы которой посылаются сообщения. Если окно не существует, то talk-результаты направляются в системное окно VFP.

    NOWINDOW – talk-вывод направляется в главное окно VFP.

    Статус-информацию – сведения о процессе своего выполнения сообщают следующие, работающие с DBF-таблицами команды VFP:

    Илон Маск рекомендует:  Красивое портфолио фрилансера
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL