GUI с самого начала
Сейчас мы отложим темы “Перенос” и “Совместимость с Clipper” и посмотрим, что еще предлагает Xbase++, помимо совместимости с Clipper. Вы уже видели некоторые вещи на эту тему (типы приложений, типы окон, графические функции, Xbase Parts), однако сейчас мы немного углубимся в Xbase++.
Для следующего упражнения вам понадобится база данных (файл DBF) находящийся в разделе XPPFIRST. Вы можете скопировать любой файл DBF по вашему выбору в этот каталог. Если у вас под рукой не окажется файла DBF, то вы найдете такие файлы (CUSTOMER.DBF и CUSTOMER.DBT) в разделе ..\SOURCE\SAMPLES\DATA. Вы можете скопировать эти файлы в раздел XPPFIRST и тогда в упражнении будет использоваться эта база данных.
Запустите редактор и создайте новый файл APPTEST.PRG, который будет состоять из следующих строчек кода:
#include "AppEdit.ch"
PROCEDURE AppSys
RETURN // окно приложения без задания
PROCEDURE Main
USE Customer // открывает базу данных
APPEDIT // создает окно Edit
APPDISPLAY // выводит окно Edit
RETURN
Скомпилируйте файл APPTEST.PRG и скомпонуйте его для выполнения в графическом режиме:
[C:\XPPFIRST]xpp apptest
[C:\XPPFIRST]alink apptest /PM:PM
Запустите программу APPTEST.EXE и полюбуйтесь всей мощью частей приложения Xbase++ (Xbase++ Application Parts). Вы возможно еще не знаете, но то, что вы только что запрограммировали и видите сейчас на экране, это часть приложения, которая создала окно редактирования базы данных. При помощи всего 12 строк кода вы полностью запрограммировали графическое приложение с доступом к базе данных, окнами с изменяемыми размерами и полосами прокрутки, с редактированием полей базы данных, с управлением клавиатурой и мышью. Вы даже можете запускать приложение в сети, так как включено автоматическое блокирование записи.
Application Parts включают Xbase Parts и специально разработаны для быстрого получения результатов при минимуме усилий с максимальной гибкостью. Попробуйте изменить команду APPEDIT в файле APPTEST.PRG следующим образом:
APPEDIT;
POSITIONCENTERSTYLEFANCY
Обратите внимание на точку с запятой (символ продолжения строки) в конце первых двух строчек. Команда APPEDIT очень мощная, и для лучшего результата рекомендуется начинать с новой линии каждую новую функцию этой команды.
Снова скомпилируйте программу и запустите ее. Что вы думаете? Всего две дополнительные строчки кода, и все выглядит совершенно по-другому. Но за кулисами еще больше возможностей! Остановите программу и снова измените APPTEST.PRG:
#include "AppEdit.ch"
#include "AppBrow.ch" // <— вставьтеэтустроку
PROCEDURE AppSys
RETURN
PROCEDURE Main
USE Customer
APPEDIT ;
POSITION LEFT, CENTER ; // <— LEFT, добавлено
STYLE FANCY
APPDISPLAY MODELESS // <— MODELESS добавлено
APPBROWSE ; // <— вставьте
POSITION RIGHT, CENTER // двеэтистрочки
APPDISPLAY // <— вставьтеэтустрочку
RETURN
Сохраните файл, скомпилируйте и скомпонуйте, как обычно, но теперь следите за сообщениями компилятора. Если компилятор выдаст синтаксическую ошибку, то, скорее всего, отсутствует запятая между LEFT, CENTER или RIGHT, CENTER. После успешной компиляции запустите программу.
Сейчас вы видите две части приложения: окно редактирования Edit и окно просмотра Browse. Наведите курсор на окно Browse и посмотрите на окно Edit: оно автоматически синхронизируется с окном Browse. Естественно, это работает и наоборот. Если вы измените запись в окне Edit, то соответственно обновится окно Browse.
Закройте оба окна, передохните и подумайте о том, что вы только что сделали: при помощи нескольких строчек кода вы получили окна Edit и Browse. Оба обеспечивают доступ к базе данных, и оба синхронизированы друг с другом. Самое важное: программа является настоящим 32-разрядным графическим приложением. Вот это да! Примите наши поздравления! Ни один из программистов C не смог бы сделать то же самое за такое короткое время.
Если вы удивляетесь, как одна часть приложения сообщает другой о необходимости обновления дисплея, или как оба окна обмениваются сообщениями, мы должны вас разочаровать: обе части независимы друг от друга, и между окнами нет никакого обмена. Автоматическая синхронизация обоих окон – это результат технологии баз данных Xbase++. Да, так оно и есть, причиной этого является технология баз данных!
База данных CUSTOMER.DBF управляется при помощи системы доступа к базам данных (DatabaseEngine) Xbase++. Когда одна часть приложения пытается передвинуть указатель записи, то само задание выполняет система DatabaseEngine, которая, в свое время, приказывает другой части приложения обновить себя. Это так просто только тогда, когда программное обеспечение основано на высокотехнологичных концепциях, которые гладко дополняют друг друга. И вы можете нам поверить, Xbase++ полон Высоких Технологий, которые не видны на первый взгляд. Может быть этот пример дал вам представление об этом...
Чему я научился?
Я увидел концепцию Application Parts. Я еще никогда не мог в Windows при таком небольшом количестве кода получать такие результаты! Когда мне необходимо быстро создать прототип, я буду делать его при помощи Application Parts.
-