Программное обеспечение пункта обмена валюты банкаРефераты >> Программирование и компьютеры >> Программное обеспечение пункта обмена валюты банка
@ Y2-1,X1+(X2-X1-31)/2+1 SAY "-------------------------------"
@ Y2-2,X1+(X2-X1-31)/2+31 SAY "-"
L_showcurs()
KL1=0
do while .T.
KL1=inkey()
STAT=L_getmstat()
if KL1<>0.or.STAT<>0
exit
endif
enddo
L_hidecurs()
restore screen
csetall(STATS)
setcolor(CLR)
return 0
elseif empty(M3).and not.empty(M2)
declare MM1[2],MM2[2]
MM1[1]=M1
MM1[2]=M2
XX=X1+int((X2-X1-len(M1+M2)-1)/2)
MM2[1]=XX
MM2[2]=XX+len(M1)+1
do while .T.
MM=1
MM=selopt(MM,MM1,MM2,"",Y2-2,.F.,.F.,At_E_S,At_E_U,At_E_F)
if MM<>0
restore screen
csetall(STATS)
setcolor(CLR)
return MM
endif
enddo
elseif .not.empty(M1).and not.empty(M2).and not.empty(M3)
declare MM1[3],MM2[3]
MM1[1]=M1
MM1[2]=M2
MM1[3]=M3
XX=X1+int((X2-X1-len(M1+M2+M3)-2)/2)
MM2[1]=XX
MM2[2]=XX+len(M1)+1
MM2[3]=XX+len(M1+M2)+2
do while .T.
MM=1
MM=selopt(MM,MM1,MM2,"",Y2-2,.F.,.F.,At_E_S,At_E_U,At_E_F)
if MM<>0
restore screen
csetall(STATS)
setcolor(CLR)
return MM
endif
enddo
endif
csetall(STATS)
setcolor(CLR)
return 0
Функция вывода линейного индикатора процесса
Function _LIN
parameters YCOR,XCOR,LENG,LMAX,LUSE
private YCOR,XCOR,LENG,LMAX,LUSE,STATS,RW,CL
STATS=csetall()
RW=row()
CL=col()
LMAX=iif(LMAX<=0,1,LMAX)
XUSE=int((LENG/LMAX)*LUSE)+XCOR
CLR=setcolor(AT_S_U)
@ YCOR,XCOR,YCOR,XUSE BOX "---------"
setcolor(AT_S_S)
if XUSE<LENG
@ YCOR,XUSE+1,YCOR,XCOR+LENG BOX "---------"
endif
csetall(STATS)
setcolor(CLR)
@ RW,CL SAY ""
return 0
Функция вывода рамки для всплывающего меню
Function POPMENU
parameters Y1,X1,Y2,X2,OPT,OFFS,COLORF
private Y1,X1,Y2,X2,OPT,OFFS,COLORF,I,CLR
L_hidecurs()
CLR=setcolor(COLORF)
@ Y1,X1 SAY "-"+repl("-",OFFS-1)
@ Y1,X1+OFFS+len(OPT) SAY repl("-",X2-X1-OFFS-len(OPT))+"¬"
shadow(Y1+1,X2+1,Y1+1,X2+2,SHC)
_open_t(Y1+1,X1,Y2,X2,"¦ ¦¦--L¦ ")
setcolor(CLR)
L_showcurs()
return 0
Функция вывода строки подсказки
Function _NORT
static NORTSCR
parameters BINSTR,NUM
private CL,ROW,COL
if pcount()=0
restscreen(24,0,24,79,NORTSCR)
else
if pcount()=1
NUM=0
endif
ROW=row()
COL=col()
NORTSCR=savescreen(24,0,24,79)
CL=setcolor(AT_N_I)
@ 24,00 say space(80)
for I=0 to 9
setcolor(AT_N_I)
@ 24,I*8 say str(I+1,iif(I=9,2,1))
setcolor(AT_N_S)
if substr(BINSTR,I+1,1)="1"
@ 24,I*8+iif(I=9,2,1) say iif(NUM=0,MHP[I+1],MHPA[I+1])
else
@ 24,I*8+iif(I=9,2,1) say " "
endif
next
setcolor(CL)
@ ROW,COL say ""
endif
return 0
Функция вывода транспаранта ожидания
Function _WAIT
static WAITSCR
parameters STROKE
local CL,ROW,COL,X1,LENM
if pcount()=0
restscreen(11,0,15,79,WAITSCR)
else
ROW=row()
COL=col()
WAITSCR=savescreen(11,0,15,79)
CL=setcolor("+BG/B")
if empty(STROKE)
_open_n(12,20,14,59)
else
LENM=max(len(STROKE),31)
X1=(74-LENM)/2
_open_n(11,X1,14,X1+6+LENM)
setcolor("+BG/B")
@ 12,X1+3+iif(LENM=31,(31-len(STROKE))/2,0) say STROKE
endif
setcolor("+BG/B")
@ 13,25 say "Ожидайте окончания операции"
setcolor("+BG/B*")
@ 13,52 say " ."
endif
@ ROW,COL say ""
setcolor(CL)
return 0
Функция выбора опции из меню с использованием манипулятора "Мышь" или клавиатуры.
Синтаксис:
selopt(expN,arrC,arrN,arrC,expN,expL,expL,expC,expC,expL)
Параметры:
1 номер начальной опции меню
2 массив опций
3 массив координат опций (строка/столбец)
4 массив подсказок
5 начальная строка/столбец вывода опций
6 флаг вывода (.T. вертикально,.F. горизонтально)
7 флаг вывода подсказок (.T. выводить в 24 строке)
8 цвет выбранной опции
9 цвет невыбранной опции
10 флаг прорисовки тени опции (default - none)
Возврат:
Номер выбранной опции либо 0 при прерывании выбора
Function SELOPT
parameters NOPT,MO,MC,ME,COLROW,ORIENT,SAYHELP,CLRS,CLRN,CSD
local CL
private NOPT, COUN, INDO, INDM, INDN, MO, MC, ME, COLROW, ORIENT, SAYHELP, CLRS, CLRN, STAT, KL, ROWMO, IN
if pcount()<10
SHD=.F.
else
CSD="N"+substr(CSD,at("/",CSD))
SHD=.T.
endif
keyboard chr(0)
COLORN="R"+substr(CLRN,at("/",CLRN))
COLORS="R"+substr(CLRS,at("/",CLRS))
L_showcurs()
NOPT=iif(NOPT=0,1,NOPT) && Номер начальной опции меню
COUN=len(MO) && Количество опций
store NOPT to INDO,INDN,INDM
CL=setcolor()
for IN=1 to COUN
setcolor(CLRN)
@ iif(ORIENT,MC[IN],COLROW),iif(ORIENT,COLROW,MC[IN]) ;
SAY strtran(MO[IN],"~","")
if (POS:=at("~",MO[IN]))>0
setcolor(COLORN)
@ iif(ORIENT,MC[IN],COLROW),iif(ORIENT,COLROW+POS-1,MC[IN]+POS-1);
SAY substr(MO[IN],POS+1,1)
setcolor(CL)
endif
if SHD
setcolor (CSD)
@ iif(ORIENT,MC[IN]+1,COLROW+1),iif(ORIENT,COLROW+1,MC[IN]+1);
SAY repl("-",len(strtran(MO[IN],"~","")))
@ iif(ORIENT,MC[IN],COLROW),iif(ORIENT,COLROW+;
len(strtran(MO[IN],"~","")),MC[IN]+;
len(strtran(MO[IN],"~",""))) SAY "-"
setcolor(CL)
endif
NEXT
COLMO=L_getxposn()/8
ROWMO=L_getyposn()/8
setcolor(CLRS)
L_hidecurs()
@ iif(ORIENT,MC[NOPT],COLROW),iif(ORIENT,COLROW,MC[NOPT]);
SAY strtran(MO[NOPT],"~","")
if (POS:=at("~",MO[NOPT]))>0
CL= setcolor(COLORS)
@ iif(ORIENT,MC[NOPT],COLROW),iif(ORIENT,COLROW+POS-1,MC[NOPT]+POS-1) ;
SAY substr(MO[NOPT],POS+1,1)
setcolor(CL)
endif
if SAYHELP
setcolor(At_M0_N)
@ 24,(80-len(ME[INDN]))/2 SAY ME[INDN]
endif
L_showcurs()
KEYPRESSED=.F.
do while .T.
COLMN=L_getxposn()/8
ROWMN=L_getyposn()/8
STAT=L_getmstat()
KL=inkey()
if KL>0
KEYPRESSED=.T.
else
KEYPRESSED=.F.
endif
if KL=13
L_hidecurs()
return INDN
endif
if STAT=2.or.KL=27
if KL<>27
for TT=1 to COUN
if iif(ORIENT,COLMN>=COLROW.and.COLMN<=COLROW+;
len(strtran(MO[TT],"~","")).and.ascan(MC,ROWMN)<>0,;
ROWMN=COLROW.and.COLMN>=MC[TT].and.COLMN<=MC[TT]+;