Изучаем программирование в GUPTA Team Developer. Шаг 1 - Запуск и настройка приложений. Основные функции, события, классы и объекты

Большаков С.А.

Оглавление

Данная статья является первой в цикле статей под общим названием "Изучаем программирование в Team Developer /GUPTA", в котором мы постараемся дать начинающему пользователю программных продуктов Gupta Technologies всю необходимую информацию для изучения программирования и получения навыков создания информационных систем. В ней мы рассмотрим основные понятия и стандартные объекты программирования на TD. По завершению освоения пользователь сможет самостоятельно создать свое первое приложений в виде EXE файла. При этом, для практического освоения программирования, читатель может скачать демонстрационную версию продукта с нашего сайта и, ориентируясь непосредственно на текст статьи, приступить к изучению. Здесь мы не будем описывать основные программные продукты фирмы Gupta Technologies (Team Developer - TD и СУБД - SQLBase), информация о них имеется в других статьях нашего сайта.

Введение

В качестве базовых средств разработки используется продукт Team Developer. Другие названия этих средств разработки (возможно известные нашим читателям) - SQLWindows, Centura Builder и Centura Team Developer. Основным языком программирования является язык SAL, который во многом похож на язык СИ, но имеет ряд особенностей, упрощающих процесс программирования информационных систем. Для изучения работы с БД мы воспользуемся продуктом SQLBase, который в локальном варианте включен в продукт TD и существует как отдельный SQL сервер БД - СУБД. Мы будем ориентироваться на версии: TD 2.1 и SQLBase 8.0, хотя все действия описываемые в статьях вы сможете реализовать практически для любой версии программных продуктов.

Запуск TD и сохранение приложения

После инсталляции TD, которая выполняется в режиме мастера подсказок, вы можете запустить средства разработки любым известным Вам способом, например, из системного меню Windows:

1. START->PROGRAMS->CENTURA->Team Developer 2.1-> SQLWindows 2.1.

На экране высветиться стандартное окно - Рис. 1 с пустым приложением (стандартное название в заголовке - Application1).

2.

Для сохранения приложения необходимо выполнить следующие действия: МЕНЮ FILE-> SAVE AS.. , выбрать нужный каталог и ввести любое имя, мы назовем приложение STEP1.APP. Приложения в TD имеют расширение .app. О других возможных расширениях (*.APL и *.APT) для сохранения мы будем говорить позднее.

3. Для удобства работы включим и разместим на экране по своему вкусу специальные окна дизайнера: палитру объектов (Controls), ассистента кодировки (Coding assistant) и окно настройки свойств объектов (Attribute Inspector). При этом для разнообразия, воспользуемся горячими клавишами: Alt+2, Alt+3, Alt+4. Эти клавиши работают в режиме "триггера". Кроме этого можно воспользоваться меню (TOOLS->Controls и т.д.) или соответствующими кнопками панелей инструментов.

Рис. 1. Первоначальное окно TD после запуска

На рис. 2 показано окно TD после выполненных действий.

Рис. 2. Окно TD после сохранения приложения и включения окон дизайнера

В нашем случае (слева направо), расположены следующие окна:

  • окно дерева приложения (Заголовок step1.app - пока с пустым наполнением);
  • окно OUTLINE с закладками для настройки текста программы;
  • окно ассистента кодировки (с тремя допустимыми видами сообщений), а также в одном вертикальном ряду
  • окна настройки свойств объектов (пока оно совсем пустое) и
  • окно палитры стандартных объектов (у нас снизу).

Размеры и расположения окон могут быть подобраны пользователем по вкусу и в зависимости от разрешения дисплея произвольно. Кроме того, пользователь может создавать различные обзоры (VIEW) с нужными настройками.

Обработка сообщений приложения и вызов стандартной функции

Приложение (Application) является стандартным объектом и обрабатывает только следующие стандартные сообщения:

  • SAM_AppStartup - данное сообщение активизируется при запуске приложения, реакцией на это сообщение может быть любой корректный код на языке SAL.
  • SAM_AppExit - данное сообщение активизируется при завершении приложения.
  • SAM_SqlError - данное сообщение посылается в приложение при обнаружении ошибок при взаимодействии с СУБД, если исключение не было обработано на другом уровне кода программы. Об этом сообщении поговорим позднее.

Заметим, что в ассистенте кодировки данные сообщения появляются при выделении строки Application Action, для чего нужно левой кнопкой однократно щелкнуть слева от ромбика (а). Если Вы выделите другой раздел текста (OUTLINE) из глобальных определений (Global Declarations) приложение, то содержимое окна подсказки измениться в соответствии с контекстом выделенного раздела.

4.

Для создания реакции на запуск приложения дважды щелкнем на строке с SAM_AppStartup. После этого окно подсказки разделится на две части, так как мы можем: и создать новую реакцию на другое сообщение (Add same level) или начать кодировать текст подпрограммы реакции (Add next level). Во втором случае нам доступны основные операторы языка SAL (заметим попутно, что наблюдается большое сходство с операторами универсальных языков программирования, в частности с СИ).

5. Выберем строку с оператором CALL (вызов функций и процедур). Первоначально будем вызывать простейшую функцию WINDOWS (MsgBox) для формирования оконных сообщений на экране. В ассистенте кодирования (отметим, что его содержимое опять изменилось) в комбинированном списке выберем раздел Sal Function (это будет означать, что мы воспользуемся стандартной библиотекой SAL). В списке выберем функцию SalMessageBox и дважды щелкнем, в итоге получим строку:

а Сall SalMessageBox( String, String, Number ),

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

а Call SalMessageBox ("Сообщение запуска первой программ на TD!!", "Информация", MB_Ok)

Примечания:

1. Для разделения строки OUTLINE на части нужно в нужном месте нажать клавиши - Ctrl+Enter.
2. Константу MB_Ok мы можем также получить из ассистента кодировки, выбрав раздел констант (Constants).

6. Аналогичным образом создадим реакцию приложения на сообщение на SAM_AppExit:

а Call SalMessageBox ("Сообщение завершения первой программ на TD!!", "Информация", MB_Ok)

В результате мы получим следующий текст приложения в разделе реакции на стандартные сообщения (Рис. 3):

Рис. 3. Фрагмент текста обработки сообщений для приложения

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

Компиляция и запуск приложения

Для компиляции и запуска приложения нужно нажать клавишу F7. Кроме того, можно это сделать через меню дизайнера (DEBUG ->GO) или панели инструментов (ориентируйтесь по пиктограммам, задублированным в меню). При обнаружении ошибок, компилятор выдаст диагностику. В этом случае программу нужно откорректировать и запустить компиляцию и выполнение заново.

7. Запустите программу и проверьте, что на экране дважды появятся сообщения при запуске и завершении приложения. Тексты сообщений должны соответствовать Вашим текстам, указанным в первом параметре при вызове функции SalMessageBox. 

Рис. 4. Результат работы первого приложения на TD

Формирование исполнимого модуля приложения

Для формирования исполнимого модуля (*.EXE) нужно выполнить следующие действия:

8. Вызвать окно настройки свойств приложения: PROJECT->BUILD SETTING…

Рис. 5. Окно настройки исполнимого модуля для TD

Выбрать тип создаваемого приложения Standart EXE, задать имя файла EXE (Target Name - у нас step1.exe), при необходимости задать пиктограмму приложения (Target Icon) и другие свойства, смысл которых ясен из контекстной подсказки. Для начала, не надо задавать другие свойства, их назначение мы поясним позднее. После установок нажать OK. Для компиляции и создания EXE нужно вызвать пункт меню - PROJECT->BUILD: step1.exe. При нормальном создании приложения будет выдано сообщение компилятором: "Build was successful". В том каталоге, где храниться исходный текст step1.app, будет сформировано исполнимое приложение step1.exe. Его можно запустить отдельно от TD и проверить его работоспособность.

Примечание:

Данное приложение будет работать только в том случае, если на компьютере установлена система TD или развернута среда поддержки из каталога Deploy (deploy21.exe). Эта среда RUNTIME содержит все библиотеки и модули, необходимые для работы любого приложения на TD. При необходимости методом последовательного исключения можно оставить только те модули, которые необходимы для Вашего приложения. В большинстве случаев среду RUNTIME можно сократить до 4-5 Мб.

Переменные и их описание

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

9. Рассмотрим, на первом этапе, использование глобальных переменных, для описания которых нужно выделить строку Variables в разделе Global Declarations приложения. Все допустимые виды стандартных переменных SAL будут представлены в окне ассистента кодировки:
  • Boolean - булевские переменные
  • Date/Time - переменные даты и времени
  • File Handle - дексритор файлов
  • Long String - работа с длинными строками (> 256 байт)
  • Number - числовые переменные произвольного типа
  • Session Handle - дескриптор сессий для OLE DB
  • Sql Handle - курсоры для доступа к БД
  • String - строковые переменные
  • Window Handle - дескрипторы оконных объектов.

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

а Number: nSum

Примечания:  
1. Ввод типа переменной и ее название могут быть выполнены и вручную, для чего нужно с помощью клавиши Ins добавить пустую строку и набрать соответствующий текст
2. Венгерская нотация для именования переменных, применяемая нами в примерах не является обязательной, однако при коллективном программировании можно установить контролируемые стандарты именования и затем их автоматически поддерживать.
3. Комментарии в программе задаются с восклицательным знаком (!) вначале строки.

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

Рис. 6. Описание глобальных переменных

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

Рис. 7. Фрагмент текста с переменными

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

Функции и их описание

Для повышения эффективности работы программы могут быть описаны и вызваны функции. Функции могут быть внешними, если тело определено в другом программном модуле (например, DLL) или внутренними, если тело функции определено в приложении, или подключено в виде текста в приложение. Внутренние функции могут быть глобальными (раздел Global Declarations) или локальными, определенными в окнах или классах. Описание всех видов функций выполняется аналогично, поэтому рассмотрим их описание на примере описания внутренних глобальных функций. Описание функций имеет стандартную структуру, представленную на рисунке ниже.

Рис. 8. Структура описания функции

12.

После заголовка функции (Function), где дано ее название (Sum) дается необязательное описание назначения функции. В части Returns указывается тип возвращаемого значения, причем именовать переменную необязательно. В разделе Parameters определяется тип и последовательность формальных параметров функции, если параметр возвращаемый, то его типу предшествует специальное ключевое слово Receive. Статические переменные (Static Variables), являются общими для всех вызовов функции, а локальные (Local Variables), генерируются при каждом вызове функции. Раздел Actions используется для задания операторов языка SAL, образующих тело функции. Для возврата значения из функции применяется оператор Return с выражением этого значения.

13. Пример описания функции суммирования, которую нужно описать, приведен ниже.

Рис. 9. Пример описания функции суммирования Sum

Функция возвращает целочисленное значение суммы двух параметров и его же в виде второго параметра. Локальная переменная nSum используется для суммирования.

14. Вызов данной функции иллюстрируется текстом приводимым ниже.

Рис. 10. Пример вызова функции суммирования Sum

Поместите его в тело обработчика сообщений приложения. В первом вызове функции Sum используется возвращаемое значение самой функции, а во втором вызове используется возвращаемый параметр nSecond.

Примечания:

  1. При кодировании вызова функции можно воспользоваться кодировщиком в режиме User Functions, в этом случае в текст будут вставлены прототипы функций написанных пользователем.
  2. При кодировании текста функции можно пользоваться кодировщиком в режимах: Variables (будут показаны доступные переменные) и Parameters (будут показаны доступные параметры).

Параметры приложения

15. Для получения параметров в приложении используются стандартные системные переменные (как и СИ):

nArgCount - целочисленная переменная, определяющая число параметров (первый параметр определяет название приложения и путь к нему).

strArgArray[*] - строковый массив, содержащий переданные параметры. strArgArray[0] - название приложения и путь к нему.

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

Рис. 11. Фрагмент текста с использованием параметров приложения

Если счетчик параметров больше 1, то это означает, что помимо имени приложения в запуске присутствует, по крайней мере, один параметр. Этот параметр выводится в окне сообщения. Если счетчик параметров равен 1, то выводится нулевой параметр, идентифицирующий название приложения и путь к нему.

17. Внесите данный текст в любой фрагмент текста, например, в тело обработки сообщения SAM_AppExit и запустите приложение из командной строки (например, в FAR или другим способом) причем двумя следующими способами:

>step1.exe

и

> step1.exe Параметр

Во втором случае вы получите следующее окно сообщения при выполнении данного фрагмента программы.

Рис. 12. Результат работы фрагмента программы при задании параметра

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

Заключение

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

Часть 2


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=2259