Реализация алгоритма обработки данных
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
et_fl := .T. // завершение просмотра
ENDIF
brws:RefreshAll()
nrc := 0
CASE nKey = K_ESC
ret_fl := .T. // завершение просмотра
CASE ( nKey = K_ENTER )
// Редактирование текущего элемента данных
aaGet(brws ;
, " Редактирование файла aa.dbf" )
nrc := 0 // обновить верхнюю строку
CASE nKey == K_F3
APPEND BLANK
brws:RefreshAll()
ENDCASE
ENDIF
ENDDO
SET RELAT TO
s_r_s(.T.)
r_scr()
RETURN ret
16) п.п. выполнения GET в текущей колонке файла aa.dbf:
PROCEDURE aaGet( brws , z0 )
LOCAL r , c , w , w2 , otb
LOCAL retcurs,retexit // форма курсора и режим выхода из READ
LOCAL retins, retcol // режим вставка-замена в READ
LOCAL indch := .F. // флаг изменений значений полей, входящих в
// индекснове выражение (тогда нужно REFRESHALL(),
// а не REFRESHCURRENT() )
LOCAL col
r := ROW()
c := COL()
// Проверка обновления экрана, корректности базы и т.д.
ForceStable(brws)
// Установка клавиш Up-Arrow и Down-Arrow как клавиш выхода из
// команды READ
retexit := READEXIT(.T.)
// Установка клавиши INS для переключения
// режима вставка/замена
// и соответствующего изменения вида курсора
retins := SetKey( K_INS, {|| Repl_Ins()} )
// эквивалентно Set Key K_INS To Procedure Repl_Ins
// Установка вида курсора по текущему состоянию режима
retcurs := SetCursor( IF(ReadInsert(), SC_NORMAL, SC_INSERT ) )
s_scr()
retcol := SETCOLOR("w+/g")
@ brws:nTop-3,0
@ brws:nTop-3,0 SAY z0
hlp("GET")
SETCOLOR("gr+/n,w+/g")
indch := .F.
DO CASE
CASE brws:colpos = 1
w := aa->idst
@ r,c+2 GET w
READ
IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->idst == w )
REPLACE aa->idst WITH w
indch := .T.
ENDIF
CASE brws:colpos = 2
n := aa->namest
@ r,c+2 GET n
READ
IF .NOT.( LASTKEY() = K_ESC ).OR.( aa->namest == n )
REPLACE aa->namest WITH n
ENDIF
CASE brws:colpos = 3
w := aa->norma
@ r,c+1 GET w
READ
IF .NOT.( ( LASTKEY() = K_ESC ) .OR. ( aa->norma = w ) )
REPLACE aa->norma WITH w
ENDIF
ENDCASE
SETCOLOR(retcol)
r_scr()
SETPOS(r,c)
IF indch
brws:RefreshAll()
ELSE
brws:RefreshCurrent() // Обеспечить перерисовку текущей строки,
ENDIF // поскольку изменялся элемент данных
// Восстановление формы курсора и режима выхода из READ по стрелкам
// и процедуры по клавише K_INS
SetCursor(retcurs)
READEXIT(retexit)
SetKey(K_INS, retIns)
// Проверка требования ухода с текущей записи после GET
nKey := LASTKEY()
IF nKey == K_UP .OR. nKey == K_DOWN .OR. ;
nKey == K_PGUP .OR. nKey == K_PGDN
// управление курсором -- переход к другой записи
KEYBOARD( CHR(nKey) )
ENDIF
RETURN