на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Расчет и анализ потерь активной мощности
p align="left"> реализация дополнительных функций, предоставляемых рассматриваемой программой.

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

Алгоритм работы оконного редактора.

Отображение редактируемой базы данных и строкового редактора.

Обработка сообщений мыши.

Обработка сообщений полос прокрутки.

Обработка сообщения WM_COMMAND.

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

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

Рис. 3.9

js, jsMax - номер текущей записи и максимальное число полей в записи базы данных соответственно;

jsLeft, jsRight - границы отображаемого текста базы данных (содержимого оконного редактора) по горизонтали (номера столбцов);

MaxRow, MaxCol - максимальное число символов, отображаемых в оконном редакторе, по вертикали и горизонтали соответственно;

in, iv - границы отображаемого текста базы данных (содержимого оконного редактора) по вертикали (номера записей);

Row - номер записи, на которой находится строковый редактор (принимает значения от 1 до MaxRow);

Kol - количество записей (строк) в базе данных.

Используются также следующие переменные и массивы:

Text - исходный массив (база данных);

Bufv - символьный массив, отображаемый на экране (содержимое оконного редактора);

Par - целочисленный массив, содержащий границы полей базы данных (табуляция);

Ndn, Nup - минимальный и максимальный номера строк массива Bufv, в пределах которых его необходимо заполнить новыми данными из Text;

BVpol, Bhpol - логические переменные, указывающие на наличие полос прокрутки.

Все упомянутые переменные, кроме BVpol и Bhpol - целочисленные. Назначение некоторых других переменных, используемых в программе, будет пояснено далее.

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

После создания оконного редактора, но перед его отображением, оконная процедура получает сообщение WM_CREATE. При его обработке путем вызова функции SetStatePnUpr на панели инструментов активизируются доступные оконному редактору функции. Затем вызывается функция WMCREATE:

Ret = WMCREATE (hWch, NumbRowTitr, Par),

где NumbRowTitr - число строк титров (в рассматриваемой программе равно 1).

В процессе выполнения этой функции задаются шрифт и цвет выводимого в окно текста, рассчитываются значения переменных js, jsMax, jsLeft, jsRight, MaxRow, MaxCol. После этого вызывается подпрограмма коррекции данных corUnsch с параметром hWch, в которой данные подготавливаются для вывода на экран (более подробно работа подпрограммы corUnsch будет рассмотрена далее). Затем путем вызова функции CreateEdit с параметром hWch создается строковый редактор.

При получении сообщения WM_PAINT оконная процедура вызывает функцию WMPAINT:

ret = WMPAINT (hWch, TitrUnsch, NumbRowTitr, Par, Bufv),

где TitrUnsch - символьный массив, содержащий титры.

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

При получении сообщения WM_SIZE оконная процедура вызывает функцию WMSIZE:

ret = WMSIZE (hWch, Kol, NumbRowTitr, LengStr),

в которой, исходя из нового размера рабочей области оконного редактора, пересчитываются переменные MaxRow, MaxCol, и анализируется, нужно ли отображать полосы прокрутки. Далее в оконной процедуре рассчитывается новое значение переменной jsRight, а затем, в случае необходимости, корректируется положение окна строкового редактора (при уменьшении размеров рабочей области оконного редактора) или содержимое массива Bufv (при увеличении размеров рабочей области оконного редактора).

При получении сообщения WM_DESTROY обнуляется переменная hWch, уничтожается окно строкового редактора и закрывается окно оконного редактора.

Рассмотрим более подробно подпрограмму corUnsch.

В случае, если код возврата отличен от нуля, сначала в символьный массив Bufv, а затем и в Text, заносятся изменения, произведенные в строковом редакторе. Затем вызывается функция MoveEditWithMouse:

ret = MoveEditWithMouse (Par, Kol),

Если в результате щелчка левой кнопкой мыши или действия полос прокрутки окно строкового редактора необходимо переместить, функция возвращает положительное значение, в зависимости от которого вызывается функция Metka4 или Metka5, а затем Metka6. Если в результате действия полосы прокрутки требуется изменить содержимое оконного редактора, то пересчитываются границы отображаемого текста базы данных in, iv, в соответствии с ними заполняется массив Bufv, а затем вызываются функции Metka4, Metka5, Metka6. Если функция MoveEditWithMouse возвращает 0, т.е. перемещение окна не производилось ни мышью, ни полосами прокрутки, то вызывается подпрограмма управления окном contw, и в случае перемещения строкового редактора с помощью клавиатуры или всплывающего меню (влево / вправо, вверх / вниз, в начало / конец строки, в начало / конец базы данных, листание вверх / вниз) пересчитывается положение строкового и оконного редакторов. В том случае, если перемещение строкового редактора не производилось, проверяется, был ли запрос на поиск по шаблону.

Функция Metka4 выполняет пересчет переменных jsLeft, jsRight в зависимости от того, в каком столбце (js) находится строковый редактор. Пересчитывается также его горизонтальная координата XEdit.

Функция Metka5 выполняет пересчет вертикальной координаты строкового редактора YEdit, а в символьную строку Bufed помещается редактируемый текст.

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

Второй пункт алгоритма реализуется следующим образом.

Оконная процедура оконного редактора обрабатывает пять сообщений мыши: WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MOUSEMOVE, WM_LBUTTONDBLCLK и WM_LBUTTONUP.

При получении сообщения WM_LBUTTONDOWN вызывается функция WMLBUTTONDOWN:

ret = WMLBUTTONDOWN (hWch, mesg, lParam, corUnsch).

В процессе выполнении этой функции переменной cod присваивается значение переменной mesg, т.е. идентификатор сообщения WM_LBUTTONDOWN, а переменной sccod - значение переменной lParam, содержащей горизонтальную позицию курсора мыши в младшем слове и вертикальную позицию курсора мыши в старшем слове. Затем вызывается подпрограмма corUnsch, в которой рассчитываются новые координаты окна строкового редактора. Обновляется его содержимое, каретка устанавливается на первую позицию. Для перемещения окна строкового редактора вызывается функция SetWindowPos, после чего управление возвращается в оконную процедуру, где выполняются еще несколько операторов, связанных с реализацией дополнительных функций, и о которых более подробно будет рассказано при описании четвертого пункта алгоритма.

При получении оконной процедурой оконного редактора сообщения WM_RBUTTONDOWN на экран выводится всплывающее меню. Перед его созданием для каждого пункта меню задается идентификатор и отображаемый текст. Затем вызывается подпрограмма popupm с параметром hWch, в которой происходит создание и отображение меню. Вид всплывающего меню оконного редактора представлен на рис. 3.10.

Рис. 3.10. Вид всплывающего меню оконного редактора

При щелчке левой кнопкой мыши на к.-л. пункте всплывающего меню оконной процедуре оконного редактора посылается сообщение WM_COMMAND, содержащее в младшем слове параметра wParam идентификатор выбранного пункта меню.

Обработка оконной процедурой сообщений WM_MOUSEMOVE, WM_LBUTTONDBLCLK и WM_LBUTTONUP необходима для реализации дополнительных функций, предоставляемых программой, и подробнее будет рассмотрена при описании четвертого пункта алгоритма.

Третий пункт алгоритма реализуется следующим образом.

При обработке действий пользователя вертикальная и горизонтальная полосы прокрутки посылают родительскому окну (т.е. оконному редактору) сообщения WM_VSCROLL и WM_HSCROLL соответственно. При этом переменная wParam в младшем слове содержит одну из величин, идентифицирующих действие пользователя, и определенных в файле msfwinty.f90 (приведены только те, которые обрабатываются в рассматриваемой программе):

SB_LINEDOWN - прокрутка на строку вниз;

SB_LINEUP - прокрутка на строку вверх;

SB_PAGEDOWN - прокрутка на страницу вниз;

SB_PAGEUP - прокрутка на страницу вверх;

SB_THUMBTRACK - перетаскивание бегунка. Номер текущей позиции бегунка содержится в старшем слове wParam.

При обработке сообщения WM_VSCROLL вызывается функция WMVSCROLL:

ret = WMVSCROLL (hWch, mesg, wParam, corUnsch).

При обработке сообщения WM_HSCROLL вызывается функция WMHSCROLL:

ret = WMHSCROLL (hWch, mesg, wParam, corUnsch).

Алгоритмы работы этих функций схожи. В случае, если младшее слово wParam содержит идентификатор SB_LINEDOWN, SB_LINEUP, SB_PAGEDOWN или SB_PAGEUP, переменная cod обнуляется, а переменной sccod присваивается значение идентификатора соответствующего пункта всплывающего меню. Если младшее слово wParam содержит идентификатор SB_THUMBTRACK, переменной cod присваивается значение переменной mesg, а переменной sccod - значение переменной wParam. (Во всех остальных случаях управление возвращается оконной процедуре.) Затем вызывается подпрограмма corUnsch, в которой рассчитываются новые координаты окна строкового редактора. Обновляется его содержимое, каретка устанавливается на первую позицию. Для перемещения окна строкового редактора вызывается функция SetWindowPos, после чего управление возвращается оконной процедуре.

Если указанное сообщение поступило от горизонтальной полосы прокрутки, то соответствующие операции осуществляются влево / вправо.

Четвертый пункт алгоритма.

При получении сообщения WM_COMMAND вспомогательной переменной ret присваивается значение младшего слова wParam. Дальнейшая работа программы организуется с помощью конструкции Select Case, тест-выражением для которой является переменная ret.

Если ret = -1, т.е. сообщение пришло от оконной процедуры строкового редактора, или ret является идентификатором пункта всплывающего меню оконного редактора (кроме последних пяти), вызывается функция MYCASE:

ret = MYCASE (hWch, ret, corUnsch).

При выполнении функции сначала анализируется значение переменной ret, и если ret является идентификатором пункта всплывающего меню, переменная cod обнуляется, а sccod присваивается значение ret. Затем вызывается подпрограмма corUnsch. Обновляется содержимое строкового редактора, каретка устанавливается на первую позицию. Для перемещения окна строкового редактора вызывается функция SetWindowPos и управление возвращается оконной процедуре.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.