Смекни!
smekni.com

Создание базы данных (стр. 3 из 13)

2.3.3. Работа с окном диаграммы (DiagResForm. frm) (рис.16)

Форма DiagResForm, вызываемая из формы DiagMasterForm(рис.11) кнопкой «Принять», предназначена непосредственно для построения диаграмм. Диаграммы строятся на канве компонента Chart типа PictureBox, используя его методы. Кнопка Image1 с изображение дискеты позволяет сохранить диаграмму в качестве BMP файла. Для этого предназначена процедура Image1_Click(строка 2046), в которой, используя компонент CD типа CommonDialog, указывается путь к создаваемому растровому файлу, после чего (если файл был указан) вызывается встроенная процедура SavePicture, сохраняющая диаграмму. Нажатие на изображение Image2 с изображением вопроса показывает модально окно настроек DiagOptForm(рис.15). Кнопка Image3 с изображение стрелки выгружает форму из памяти. Процедура DrawDiagram(строка 1975), вызываемая при изменении размеров и изменении настроек, непосредственно не строит диаграммы, она лишь заливает фон градиентной заливкой (процедура ColorFill(строка 1440)), а также в зависимости от типа строимой диаграммы вызывает процедуры DrawCircle(строка 1673) (круговая диаграмма) и DrawPoint(строка 1749) (колончатая, точечная и линейчатая диаграммы). Также DrawCircle вызывает процедуру OutOneElem(строка 1482), стоящую один элемент круговой диаграммы. Данные для построения хранятся в массиве DiagData(строка 1387), режим построения (тип диаграммы) в переменной DrawingMode(строка 1388), а флаг использования 3D в переменной Use3D(строка 1388). Значения этих переменных определяются в процедуре InitDiagData(строка 1424). При перемещении мыши над диаграммой Chart вызывается процедура Chart_MouseMove(строка 1988), выводящая в метку Label2 текст о значении функции в указанной точке. Перемещение ползунка полосы прокрутки VScroll вызывает процедуру VScroll_Change(строка 2122), изменяющую значение переменной Ellipce в зависимости от позиции ползунка и перерисовывающую диаграмму.

2.3.4. Работа с окном настроек диаграммы (DiagOpt. frm) (рис.15)

На закладке «Цвета и текст» щелчок по любому компоненту Frame2 вызывает диалог выбора цвета (используется ColorDlg). Изменение цвета фреймов с индексами 0 или 1 вызывает процедуру ColorFill(строка 1440) для компонента Picture1 типа PictureBox. В списке List1 хранятся надписи элементов диаграммы, а в массиве List1. ItemData хранятся цвета соответствующих элементов. В текстовом поле Text1 можно менять значение выбранной в List1 записи. При нажатии кнопки [Enter] вызывается процедура Text1_KeyDown(строка 2203), сохраняющая значение подписи в массив List1. Item. При нажатии кнопки Принять переменной res присваивается значение 1, что сигнализирует об необходимости применить внесенные изменения. После этого форма скрывается. При нажатии на кнопку Отмена форма делается невидимой без изменения переменной res.

2.3.5. Работа с редактором записей (EditRecordForm. frm) (рис.3)

Двойной щелчок по строке в списке ListView вызывает процедуру ListView_DblClick(строка 220), в которой настраивается внешний вид формы EditRecordForm, вызывается процедура LoadData(строка 855), определенная в модуле формы, и форма модально отображается. При загрузке формы вызываются процедура Form_Load(строка 891), настраивающая внешний вид формы. В списке CellList_Click выводятся поля выбранной в списке ListView записи. Выбор элемента в списке сопровождается вызовом процедуры CellList_Click(строка 866), в которой в зависимости от типа выбранного поля в метку Label6 выводится соответствующий текст, а также процедурой ButEnabled(строка 2934), определенной в модуле DBConst, меняется состояние кнопки «Редактор». После этого в текстовое поле Text1 загружается значение выбранного поля и полностью выделяется. Нажатие кнопки «Редактор» вызывает процедуру EditorBut_Click(строка 917), в которой сначала проверяется тип редактируемого поля, затем, если оно числовое, выдается сообщение об ошибке, иначе поле сравнивается с форматом даты. Если формат совпадает и флажок MonthForm. Check1(рис. 19) (установлен – календарь не показывается) не установлен, то загружается форма TextEditForm(рис.8) (в ином случае загружается форма MonthForm), в текстовый редактор TextEdit типа RichTextBox загружается значение из текстового поля Text1. Если окно TextEditForm было закрыто с сохранением текста, то переменная TextEditForm. res истинна и измененный текст загружается в текстовое поле Text1. После этого форма TextEditForm выгружается из памяти. Нажатие на кнопку «Применить» вызывает процедуру FlipBut_Click(строка 1010), проверяющую введенное значение на корректность (соответствие типу и разрядной сетке) и, в случае отсутствия ошибок, присваивает выбранному в списке CellList элементу введенное значение. В случае какой-либо ошибки выдается соответствующее сообщение. Нажатие на кнопку «Вернуть» восстанавливает все поля записи из БД в процедуре ReturnBut_Click(строка 908), вызывающей последовательно LoadData(строка 855) и OverloadList(строка 883), получающие и копирующие запись во временный буфер Arr(строка 853). Нажатие на кнопку «Отмена» вызывает процедуру CancelBut_Click(строка 982), выгружающая форму EditRecordForm из памяти. Кнопка «Принять» вызывает процедуру SelectBut_Click(строка 954), работа которой заключается в сохранении полей записи из локального массива Arr в глобальную таблицу.

2.3.6. Работа с окном выбора (SelectForm. frm) (Рис.6)

Выбор записей и полей БД производится при помощи формы SelectForm, предоставляющей удобный выбор среды указанных списков. В модуле формы глобально объявлены функции SelectDlg(строка 556) и MultiSelectDlg(строка 598), предназначенные для организации диалога по выбору одного (SD) или нескольких (MSD) записей (SD) либо полей (SD, MSD) из указанной при вызове таблицы. Функция SelectDlg возвращает число равное номеру выбранного элемента, либо «-1», если выбор был отменен. Функция MultiSelectDlg возвращает строку, в которой через запятую перечислены индексы всех выбранных элементов. Если строка пуста, то это однозначно указывает, что ничего не было выбрано.

2.3.7. Работа с редактором текста (TextEditForm. frm) (рис.8)

Нажатие кнопки «Редактор» вызывает форму «Редактор текстовых полей» (TextEditForm), главной частью которой является компонент TextEdit типа RichTextBox. На панель Toolbar1, расположен ряд кнопок, обработка нажатий которых расположена в процедуре Toolbar1_ButtonClick(строка 522). Кнопка «ClearText» очищает весь текст в TextEdit, а кнопка «SaveText» указывает вызывающей форме о необходимости внести изменения в данные. Кнопки «CopyText», «PasteText», «CutText» и «DeleteText» работают с системным буфером обмена. Кнопка «Properties» позволяет, используя компонент FontDlg, настраивать шрифт в редакторе.

2.3.8. Работа с календарем (MonthForm. frm) (рис. 19)

При загрузке формы в процедуре Form_Load настраивается внешний вид окна а также переменной res(строка 2231), хранящей результат работы с окном, присваивается значение 0. При нажатии кнопки Принять вызывается процедура YesBut_Click(строка 2249), устанавливающая значение res в 1 (дата выбрана) и скрывает форму. При нажатии кнопки Текст вызывается процедура EditBut_Click(строка 2237), устанавливающая значение res в - 1 (редактирование как текст) и также скрывает форму. Нажатие кнопки Отмена просто скрывает форму в процедуре CancelBut_Click(строка 2233).

2.3.9. Работа DBConst (DBConst. bas)

В модуле описаны глобальные константы, процедуры:

SoundClick(строка 2914), для проигрывания звука нажатия на кнопку

IsInteger(строка 2918), для проверки возможности преобразования строки в целое число

ButEnabled(строка 2934), для анимации кнопок

2.3.10. Работа DBTypes (DBTypes. bas)

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

DelCol_(строка 2318), процедура для удаления поля из указанной таблицы

DelRow_(строка 2348), процедура для удаления записи из указанной таблицы

TestDBChanged(строка 2369), процедура проверки изменения БД и отображения дискеты в первом секторе строки состояния главной формы

ShowTable(строка 2378), процедура вывода указанной БД на экран

ItColAlreadyCreate(строка 2419), функция проверки уникальности поля

AddCol(строка 2432), процедура добавление поля

AddField(строка 2465), процедура добавления записи

DelTable(строка 2475), процедура удаления указанной таблицы из массива таблиц DB

CodeDecode(строка 2483), функция шифрует строки

FlushDB(строка 2500), процедура сохранения БД

LoadDB(строка 2600), функция загрузки БД

NewDB(строка 2788), процедура создания новой БД и инициализации настроек

ClearAll(строка 2806), процедура освобождения занимаемой памяти и сброса настроек

ClearHeader(строка 2814), процедура установки полей заголовка БД в стандартное (начальное) состояние

2.3.11. Работа QueryRunner (QueryRunner. bas)

Модуль предназначен для работы с запросами. Для формирования и выполнения запросов в модуле описаны необходимые константы и процедуры с функциями:

Формирование строки запросов на основе диалогов:

Generate_Add(строка 2982) – добавление полей и записей

Generate_Del(строка 2996) – удаление полей и записей

Generate_Sort(строка 3031) – сортировка записей

Generate_Out(строка 3043) – вывод записей

Generate_Swap(строка 3068) – перестановка полей и записей

Generate_Change(строка 3089) – изменение типа и заголовка поля

ErrorInQuery(строка 3105) – сообщение об ошибке в запросе, связано с ручной правкой запросов и/или некорректными параметрами

TestZero(строка 3109) – проверка параметра на равенство нулю. В случае равенства вызывается ErrorInQuery

Выполнение запросов:

AddRun(строка 3118) – добавление полей и записей

DelRun(строка 3187) – удаление полей и записей

SortRun(строка 3227) – сортировка записей

OutRun(строка 3340) – вывод записей. Используются дополнительные функции:

Equal(строка 3290) – сравнение передаваемых значений в соответствии с типами

CalcCount(строка 3308) – подсчет количества записей с полем равным заданному

EarlierDontFind(строка 3316) – проверка на существование ранее идентичного поля по записям

FindRow(строка 3326) – поиск записи

SwapRun(строка 3464) – перестановка полей и записей

ChangeRun(строка 3518) – изменение типа и заголовка поля

RunQuery(строка 3583) – выполнение произвольного запроса. Выполняет ветвление и передачу процедурам указанных в запросе данных