/* TITULO : Diario DATA : 12/02/21 PROGRAMA : DIARYFU2.PRG COMENTARIO : FUNCOES - PARTE 2 */ #include "DIARY.CH" #include "DIARYMOU.CH" ** **BI [INI] FUN.B04 **BI [FIM] FUN.B04 ** FUNCTION MENU( OBJETO_MENU ) // // -> Funcao que monta menu LOCAL COL_MENU, CONTAR, LIN_INICIA, LAR_GURA, AL_TURA, NAO_EDITA := {},; ES_COLHA, DESTAQUE_MENU := {}, POS_DESTAQUE, OPCOES_MENU, ROTINAS_MENU TIPO_MENU := OBJETO_MENU[ _TIPO_MENU ] OPCOES_MENU := OBJETO_MENU[ _OPCOES_MENU ] ROTINAS_MENU := OBJETO_MENU[ _CHAMADA_MENU ] FOR CONTAR := 1 TO LEN( OPCOES_MENU ) AADD( DESTAQUE_MENU, OPCOES_MENU[ CONTAR ] ) IF SUBS( DESTAQUE_MENU[ CONTAR ], 1, 1 ) = ">" DESTAQUE_MENU[ CONTAR ] := SUBS( DESTAQUE_MENU[ CONTAR ], 2 ) ENDIF IF ( POS_DESTAQUE := AT( "~", OPCOES_MENU[ CONTAR ] ) ) != 0 OPCOES_MENU[ CONTAR ] := STUFF( OPCOES_MENU[ CONTAR ], POS_DESTAQUE,; 1, "" ) ENDIF NEXT IF TIPO_MENU = NIL; TIPO_MENU := MENU_PRINCIPAL; ENDIF COL_MENU := MENU_POS[ MENU_P ] LIN_INICIA := LIN_MENU + 1 // // -> Para edicao de sub-menu IF TIPO_MENU = SUB_MENU COL_MENU += 10 IF LEN( OPCOES_MENU ) > 13 .OR. POS_ULT_MENU > 13 LIN_INICIA := LIN_MENU + 2 ELSE LIN_INICIA := LIN_MENU + POS_ULT_MENU + 2 ENDIF ENDIF // // -> Verfica a largura maxima do menu LAR_GURA := 0 AL_TURA := LEN( OPCOES_MENU ) FOR CONTAR = 1 TO AL_TURA AADD( NAO_EDITA, .T. ) OPCOES_MENU[ CONTAR ] := " " + TRIM( OPCOES_MENU[ CONTAR ] ) + " " IF LEN( OPCOES_MENU[ CONTAR ] ) > LAR_GURA LAR_GURA = LEN( OPCOES_MENU[ CONTAR ] ) IF SUBS( OPCOES_MENU[ CONTAR ], 2, 1 ) = ">" LAR_GURA++ ENDIF ENDIF NEXT // // -> Verfica se a largura esta abaixo da largura minima IF LAR_GURA < 18; LAR_GURA := 18; ENDIF // // -> Prepara os separadores de menu e simbolos de sub-menu FOR CONTAR = 1 TO AL_TURA IF OPCOES_MENU[ CONTAR ] = " - " NAO_EDITA[ CONTAR ] := .F. OPCOES_MENU[ CONTAR ] := REPL( "─", LAR_GURA ) ELSEIF SUBS( OPCOES_MENU[ CONTAR ], 2, 1 ) = ">" OPCOES_MENU[ CONTAR ] := " " + PADR( SUBS( OPCOES_MENU[ CONTAR ], 3 ), ; LAR_GURA - 3 ) + CHR( 16 ) + " " ELSE OPCOES_MENU[ CONTAR ] := PADR( OPCOES_MENU[ CONTAR ], LAR_GURA ) ENDIF NEXT // // -> Verrifica se a altura ultrapassa a altura maxima AL_TURA += 2 IF AL_TURA > 15; AL_TURA := 15; ENDIF // // -> Verfica se a largura do menu ultrapassa a tela e faz ajuste IF COL_MENU + LAR_GURA + 3 > 79 IF TIPO_MENU = MENU_PRINCIPAL COL_MENU -= ( ( LAR_GURA + 2 ) - LEN( MENU_PRI[ MENU_P ] ) ) ELSE COL_MENU -= ( ( COL_MENU + LAR_GURA + 3 ) - 79 ) ENDIF ENDIF SOMBRA( LIN_INICIA, COL_MENU, AL_TURA + LIN_INICIA - 1,; COL_MENU + LAR_GURA + 3) COR( "MENU" ) @ LIN_INICIA, COL_MENU CLEAR TO AL_TURA + LIN_INICIA - 1, COL_MENU + LAR_GURA + 3 @ LIN_INICIA, COL_MENU + 1 TO AL_TURA + LIN_INICIA - 1,COL_MENU + LAR_GURA + 2 IF AL_TURA < 15 FOR CONTAR = 1 TO AL_TURA - 2 IF SUBS( OPCOES_MENU[ CONTAR ], 1, 1 ) = "─" @ CONTAR + LIN_INICIA, COL_MENU + 1 SAY "├" @ CONTAR + LIN_INICIA, COL_MENU + LAR_GURA + 2 SAY "┤" ENDIF NEXT ENDIF // // -> Imprime setas para cima e para baixo indicando que o menu ultrapassa // o tamanho da janela IF LEN( OPCOES_MENU ) > AL_TURA - 2 @ LIN_INICIA + 1, COL_MENU + LAR_GURA + 3 SAY CHR( 24 ) @ LIN_INICIA + AL_TURA - 2, COL_MENU + LAR_GURA + 3 SAY CHR( 25 ) ENDIF // // -> Faz a edicao efetiva do menu ES_COLHA := MIROMENU( LIN_INICIA + 1, COL_MENU + 2,; LIN_INICIA + AL_TURA - 2, COL_MENU + LAR_GURA + 1,; OPCOES_MENU, DESTAQUE_MENU ) // // -> Verifica se a tecla ESC foi pressicionada e se a edicao e' referente // a um menu principal para entao ativar a janela de saida IF ES_COLHA = 0 .AND. TIPO_MENU = MENU_PRINCIPAL .AND. BUFFER = CHR( T_ENTER ) // // -> Ativa a janela de saida BUFFER := "S" + CHR( T_ENTER ) ENDIF IF ES_COLHA > 0 .AND. ES_COLHA < 999 // // -> Verfica se sera ativado um sub-menu IF !( TIPO_MENU = MENU_PRINCIPAL .AND. SUBS( OPCOES_MENU[ ES_COLHA ],; LEN( OPCOES_MENU[ ES_COLHA ] ) - 1, 1 ) = CHR( 16 ) ) MOUSE( DESLIGA ) RESTSCREEN( LIN_MENU + 1, 00, 23, 79, TELA_PRI ) MOUSE( LIGA ) ELSE SOMBRA( L_SOM, C_SOM, .T. ) IF LEN( OPCOES_MENU ) <= AL_TURA COR( "DESTAQUE DO MENU" ) @ LIN_MENU + ES_COLHA + 1, COL() SAY OPCOES_MENU[ ES_COLHA ] ENDIF ENDIF IF TIPO_MENU = MENU_PRINCIPAL POS_ULT_MENU := ES_COLHA ENDIF ELSE MOUSE( DESLIGA ) RESTSCREEN( LIN_MENU + 1, 00, 23, 79, TELA_PRI ) MOUSE( LIGA ) ENDIF menu:LIMPA() IF TIPO_MENU = SUB_MENU .AND. ES_COLHA = 999 ES_COLHA := 0 ENDIF IF ES_COLHA > 0 .AND. ES_COLHA < 999 EVAL( ROTINAS_MENU[ ES_COLHA ] ) ENDIF RETURN IIF( ES_COLHA = -1, 0, ES_COLHA ) FUNCTION MIROMENU( LIN_SUP, COL_ESQ, LIN_INF, COL_DIR, DADOS_MENU, DESTAQUE_MENU ) LOCAL CONTAR, ULT_CURSOR := SETCURSOR(), TECLA := 0, OP_CAO := 1,; OBJ_MENU := TBROWSENEW( LIN_SUP, COL_ESQ, LIN_INF, COL_DIR ),; ULT_OPCAO := 1, ULT_LINHA := LIN_SUP, POS_DESTAQUE, CONTADOR,; BO_TAO := 0, LIN := 0, COL := 0, DADO_CUR, LE_TRA // // -> Define os dados principais do BROWSE OBJ_MENU:ADDCOLUMN( TBCOLUMNNEW( , { || DADOS_MENU[ OP_CAO ] } ) ) OBJ_MENU:GOTOPBLOCK := { || OP_CAO := 1 } OBJ_MENU:GOBOTTOMBLOCK := { || OP_CAO := LEN( DADOS_MENU ) } OBJ_MENU:SKIPBLOCK := { | SALTO | SKIPMENU( SALTO, LEN( DADOS_MENU ), @OP_CAO ) } CURSOR( DESLIGA ) WHILE .T. MOUSE( DESLIGA ) IF ( POS_DESTAQUE := AT( "~", DESTAQUE_MENU[ ULT_OPCAO ] ) ) != 0 @ ULT_LINHA, COL_ESQ + POS_DESTAQUE SAY SUBS( DESTAQUE_MENU[ ULT_OPCAO ],; POS_DESTAQUE + 1, 1 ) COLOR CONTECOR[ 7 ] ENDIF // // -> Estabiliza o BROWSE WHILE ( !OBJ_MENU:STABILIZE() ) IF ( POS_DESTAQUE := AT( "~", DESTAQUE_MENU[ OP_CAO ] ) ) != 0 @ ROW(), COL_ESQ + POS_DESTAQUE SAY SUBS( DESTAQUE_MENU[ OP_CAO ],; POS_DESTAQUE + 1, 1 ) COLOR CONTECOR[ 7 ] ENDIF ENDDO MOUSE( LIGA ) // // -> Verifica se a opcao corrente e' editavel ou nao para saltar // as nao editaveis IF SUBS( DADOS_MENU[ OP_CAO ], 1, 1 ) = "─" IF TECLA = T_CIMA .OR. TECLA = T_HOME .OR. TECLA = T_PGUP IF OP_CAO = 1 OBJ_MENU:GOBOTTOM() ELSE OBJ_MENU:UP() ENDIF ELSE IF OP_CAO = LEN( DADOS_MENU ) OBJ_MENU:GOTOP() ELSE OBJ_MENU:DOWN() ENDIF ENDIF LOOP ENDIF ULT_LINHA := LIN_SUP + OBJ_MENU:ROWPOS - 1 ULT_OPCAO := OP_CAO // // -> Verifica se o BROWSE esta estavel IF OBJ_MENU:STABLE // // -> Verfica se foi pressionado uma tecla WHILE( TECLA := INKEY() ) == 0 IF TECLA = 0 // // -> Lê buffer do mouse MOUSE( @BO_TAO, @LIN, @COL ) ENDIF // // -> Verifica se os botoes do mouse foram pressionados para ativar // a acao equivalente a posicao do cursor do mouse IF BO_TAO = M_ESQUERDO .OR. BO_TAO = M_OS_DOIS DADO_CUR := SUBS( SAVESCREEN( LIN, COL, LIN, COL ), 1, 1 ) IF DADO_CUR = CHR( 254 ) .OR. BO_TAO = M_OS_DOIS TECLA := T_ESC ELSEIF LIN = 24 .AND. ( COL >= 71 .AND. COL <= 78 ) TECLA := T_F1 ELSEIF ( LIN = LIN_SUP - 1 .AND. ( COL >= COL_ESQ .AND.; COL <= COL_DIR ) ) .OR. DADO_CUR = CHR( 24 ) TECLA := T_CIMA ELSEIF ( LIN = LIN_INF + 1 .AND. ( COL >= COL_ESQ .AND.; COL <= COL_DIR ) ) .OR. DADO_CUR = CHR( 25 ) TECLA := T_BAIXO ELSEIF ( COL >= COL_ESQ .AND. COL <= COL_DIR ) .AND.; ( LIN >= LIN_SUP .AND. LIN <= LIN_INF ) OBJ_MENU:ROWPOS := ( LIN - LIN_SUP ) + 1 OBJ_MENU:REFRESHALL() MOUSE( DESLIGA ) WHILE ( !OBJ_MENU:STABILIZE() ) IF ( POS_DESTAQUE := AT( "~", DESTAQUE_MENU[ OP_CAO ] ) ) != 0 @ ROW(), COL_ESQ + POS_DESTAQUE SAY SUBS(; DESTAQUE_MENU[ OP_CAO ], POS_DESTAQUE + 1, 1 ); COLOR CONTECOR[ 7 ] ENDIF ENDDO MOUSE( LIGA ) TECLA := T_ENTER ELSEIF LIN = LIN_MENU FOR CONTAR = 1 TO LEN( MENU_PRI ) IF COL >= MENU_POS[ CONTAR ] + 1 .AND.; COL <= LEN( MENU_PRI[ CONTAR ] ) + MENU_POS[ CONTAR ] MENU_P := CONTAR OP_CAO := -1 EXIT ENDIF NEXT ELSE BEEP_MOUSE() LOOP ENDIF EXIT ELSEIF BO_TAO = M_DIREITO TECLA := T_ENTER EXIT ENDIF ENDDO IF OP_CAO = -1 EXIT ENDIF ENDIF // // -> Verifica se foi pressionamento uma tecla marcada com o caracter " ~ " FOR CONTADOR := 1 TO LEN( DESTAQUE_MENU ) IF ( POS_DESTAQUE := AT( "~", DESTAQUE_MENU[ CONTADOR ] ) ) != 0 LE_TRA := SUBS( DESTAQUE_MENU[ CONTADOR ], POS_DESTAQUE + 1, 1 ) IF UPPER( LE_TRA ) = UPPER( CHR( TECLA ) ) ULT_OPCAO := CONTADOR CONTADOR = ( CONTADOR - OP_CAO ) IF CONTADOR < 0 CONTADOR *= ( -1 ) TECLA = T_CIMA ELSE TECLA = T_BAIXO ENDIF FOR CONTAR := 1 TO CONTADOR IF TECLA = T_CIMA OBJ_MENU:UP() ELSE OBJ_MENU:DOWN() ENDIF NEXT MOUSE( DESLIGA ) OBJ_MENU:REFRESHALL() WHILE ( !OBJ_MENU:STABILIZE() ) IF ( POS_DESTAQUE := AT( "~", DESTAQUE_MENU[ OP_CAO ] ) ) != 0 @ ROW(), COL_ESQ + POS_DESTAQUE SAY SUBS(; DESTAQUE_MENU[ OP_CAO ], POS_DESTAQUE + 1, 1 ); COLOR CONTECOR[ 7 ] ENDIF IF OP_CAO = ULT_OPCAO OBJ_MENU:ROWPOS := ( ROW() - LIN_SUP ) + 1 ENDIF ENDDO MOUSE( LIGA ) TECLA := T_ENTER EXIT ENDIF ENDIF NEXT // // -> Verifica a tecla pressionada e executa a acao indicada IF TECLA = T_ESC OP_CAO := 0 EXIT ELSEIF TECLA = T_ENTER EXIT ELSEIF TECLA == T_F1 HELP( "MENU" ) ELSEIF TECLA == T_F3 CALEN() ELSEIF TECLA == T_F4 CALCU() ELSEIF TECLA == T_F6 SET_CONF() ELSEIF TECLA = T_DIREITA BUFFER := CHR( T_DIREITA ) + CHR( T_ENTER ) OP_CAO := 0 EXIT ELSEIF TECLA = T_ESQUERDA BUFFER := CHR( T_ESQUERDA ) + CHR( T_ENTER ) OP_CAO := 0 EXIT ELSEIF TECLA = T_CIMA IF OP_CAO = 1 OBJ_MENU:GOBOTTOM() ELSE OBJ_MENU:UP() ENDIF ELSEIF TECLA = T_BAIXO IF OP_CAO = LEN( DADOS_MENU ) OBJ_MENU:GOTOP() ELSE OBJ_MENU:DOWN() ENDIF ELSEIF TECLA = T_HOME OBJ_MENU:GOTOP() ELSEIF TECLA = T_END OBJ_MENU:GOBOTTOM() ELSEIF TECLA = T_PGUP OBJ_MENU:PAGEUP() ELSEIF TECLA = T_PGDN OBJ_MENU:PAGEDOWN() ENDIF ENDDO SETCURSOR( ULT_CURSOR ) RETURN OP_CAO FUNCTION SKIPMENU( SALTO, ULT_OPCAO, OP_CAO ) LOCAL TOT_SALTO := 0 IF SALTO + OP_CAO < 1 TOT_SALTO := ( OP_CAO - 1 ) * ( -1 ) OP_CAO := 1 ELSEIF SALTO + OP_CAO > ULT_OPCAO TOT_SALTO := ULT_OPCAO - OP_CAO OP_CAO := ULT_OPCAO ELSE TOT_SALTO := SALTO OP_CAO += SALTO ENDIF RETURN TOT_SALTO FUNCTION SOMBRA( LIN_SUP, COL_SUP, LIN_INF, COL_INF ) MOUSE( DESLIGA ) IF PCOUNT() = 2 .OR. PCOUNT() = 3 C_SOM := COL_SUP; L_SOM := LIN_SUP LIN_SUP := VAL( SUBS( C_SOM, 1, 2 ) ) COL_SUP := VAL( SUBS( C_SOM, 3, 2 ) ) LIN_INF := VAL( SUBS( C_SOM, 5, 2 ) ) COL_INF := VAL( SUBS( C_SOM, 7, 2 ) ) COL_SOM := SUBS( C_SOM, 9 ) LIN_SOM := L_SOM ENDIF IF COL_SUP < 2 .OR. LIN_INF > 22 C_SOM := ""; L_SOM := "" MOUSE( LIGA ) RETURN .F. ENDIF IF PCOUNT() = 3 RESTSCREEN( LIN_SUP + 1, COL_SUP - 2, LIN_INF + 1, COL_SUP - 1, COL_SOM ) RESTSCREEN( LIN_INF + 1, COL_SUP - 2, LIN_INF + 2, COL_INF - 2, LIN_SOM ) MOUSE( LIGA ) RETURN .F. ENDIF IF PCOUNT() != 2 COL_SOM := SAVESCREEN( LIN_SUP + 1, COL_SUP - 2, LIN_INF + 1, COL_SUP - 1 ) LIN_SOM := SAVESCREEN( LIN_INF + 1, COL_SUP - 2, LIN_INF + 2, COL_INF - 2 ) ENDIF IF SUBS( COL_SOM, 2, 1 ) != CHR( 8 ) C_SOM := STR( LIN_SUP, 2 ) + STR( COL_SUP, 2 ) + STR( LIN_INF, 2 ) +; STR( COL_INF, 2 ) + COL_SOM L_SOM := LIN_SOM ENDIF FOR I = 2 TO LEN( COL_SOM ) STEP 2 COL_SOM := STUFF( COL_SOM, I, 1, CHR( 8 ) ) NEXT FOR I = 2 TO LEN( LIN_SOM ) / 2 STEP 2 LIN_SOM := STUFF( LIN_SOM, I, 1, CHR( 8 ) ) NEXT RESTSCREEN( LIN_SUP + 1, COL_SUP - 2, LIN_INF + 1, COL_SUP - 1, COL_SOM ) RESTSCREEN( LIN_INF + 1, COL_SUP - 2, LIN_INF + 2, COL_INF - 2, LIN_SOM ) MOUSE( LIGA ) RETURN .T. FUNCTION CONFCOR menu:TIPO_MENU := SUB_MENU menu:ADD( "~Papel de parede" ) menu:ADD( "~Menu" ) menu:ADD( "~Destaque do menu" ) menu:ADD( "~Janela de dialogo" ) menu:ADD( "~Box da janela de dialogo" ) menu:ADD( "B~otoes" ) menu:ADD( "Bo~tao em destaque" ) menu:ADD( "~Get's" ) menu:ADD( "G~et em destaque" ) menu:ADD( "Te~la de apresentacao" ) menu:ADD( "~Caracteres avulsos" ) menu:ADD( "Ce~rcaduras" ) menu:ADD( "T~itulo" ) ME_NU := menu:CONTEUDO() OPC_COR := menu:RODA() IF OPC_COR = 0 RETURN.T. ENDIF SETCOLOR( "W" ) MOUSE( DESLIGA ) RESTSCREEN( LIN_MENU + 1, 00, 23, 79, TELA_PRI ) MOUSE( LIGA ) COR( "MENU" ) @ LIN_MENU, 00 @ LIN_MENU, 01 SAY "Configuraçäo de cores │ "+ME_NU[ _OPCOES_MENU ][ OPC_COR ] COR( "FUNDO DA TELA" ) IF FUNDO = 10 FUN_DO := "░░░░" ELSE FUN_DO := "└┐└┐" ENDIF MENSAGEM( "Utilize as setas para configurar as cores" ) IF OPC_COR != 10 SOMBRA( 03, 20, 21, 79 ) FOR F = 1 + LIN_MENU TO 17 @ F + 3, 20 SAY REPL( SUBS( FUN_DO, 1, 2 ), 30 ) FUN_DO := SUBS( FUN_DO, 3 ) + SUBS( FUN_DO, 1, 2 ) NEXT FUN_DO := SUBS( FUN_DO, 3 ) + SUBS( FUN_DO, 1, 2 ) COR( "TITULO" ) @ 03, 20 SAY " Titulo do aplicativo " COR( "MENU" ) @ LIN_MENU + 3, 20 SAY " Cadastros Manutençöes Relatórios Utilitários Sair " @ 21, 20 SAY SPACE( 60 ) @ 21, 21 SAY DTOC( M->DAT_HOJE ) + " │" @ 21, 38 SAY "Escolha a opçäo desejada" @ 21, 69 SAY "│ F1-Ajuda" ENDIF IF OPC_COR = 3 @ LIN_MENU + 4,22 SAY " ┌─────────────────────┐ " @ LIN_MENU + 5,22 SAY " │ Opçäo um │ " @ LIN_MENU + 6,22 SAY " ├─────────────────────┤ " @ LIN_MENU + 7,22 SAY " │ Opçäo dois │ " @ LIN_MENU + 8,22 SAY " │ Opçäo tres │ " @ LIN_MENU + 9,22 SAY " └─────────────────────┘ " ENDIF IF OPC_COR = 4 .OR. OPC_COR = 5 .OR. OPC_COR = 6 .OR. OPC_COR = 7 JANELA( 08, 28, 16, 71 ) @ 11, 38 SAY "Confirma o encerramento ?" botao:ADD( 13, 36, "Sim " ) botao:ADD( 13, 53, "Näo " ) botao:MOSTRA() COR( "BOTAO EM DESTAQUE" ) @ 13, 37 SAY "Sim" ENDIF IF OPC_COR = 8 .OR. OPC_COR = 9 .OR. OPC_COR = 11 .OR. OPC_COR = 12 JANELA( 06, 23, 18, 76, "Cadastro de clientes" ) COR( "CERCADURAS" ) @ 11, 27 TO 11, 48 @ 11, 52 TO 11, 72 @ 15, 27 TO 15, 48 @ 15, 52 TO 15, 63 @ 15, 66 TO 15, 72 COR( "CARACTERES AVULSOS" ) @ 10, 27 SAY "Nome" @ 10, 52 SAY "Empresa" @ 14, 27 SAY "Endereço" @ 14, 52 SAY "Bairro" @ 14, 66 SAY "Cep" COR( "GET EM DESTAQUE" ) @ 12, 27 SAY "TESTE" + SPACE( 17 ) SETCOLOR( CONTECOR[ 8 ] ) @ 12, 52 SAY "TESTE" + SPACE( 16 ) @ 16, 27 SAY "TESTE" + SPACE( 17 ) @ 16, 52 SAY "TESTE" + SPACE( 7 ) @ 16, 66 SAY "9999999" ENDIF X_COR := 07; Y_COR := 0 CURSOR( DESLIGA ) SETCOLOR( "BG/RB" ) @ X_COR, Y_COR, X_COR + 9, Y_COR + 17 BOX "█" FOR F_COR = 0 TO 7 FOR C_COR = 0 TO 15 SETCOLOR( ALLTRIM( STR( C_COR, 2 ) ) + "/" + ALLTRIM( STR( F_COR, 2 ) ) ) @ F_COR + X_COR + 1, C_COR + Y_COR + 1 SAY "■" NEXT NEXT C_COR := VAL( SUBS( CONTECOR[ OPC_COR ], 1, 2 ) ) F_COR := VAL( SUBS( CONTECOR[ OPC_COR ], 4 ) ) OK := .T. WHILE .T. SETCOLOR( "N/BG" ) @ X_COR, Y_COR, X_COR + 9, Y_COR + 17 BOX " " @ F_COR + X_COR + 1, Y_COR + 17 SAY CHR( 17 ) @ X_COR, Y_COR + C_COR + 1 SAY CHR( 31 ) SETCOLOR( ALLTRIM( STR( C_COR, 3 ) ) + "/" + ALLTRIM( STR( F_COR, 3 ) ) ) CONTECOR[ OPC_COR ] := STRZERO( C_COR, 2 ) + "/" + STRZERO( F_COR, 2 ) IF OPC_COR = 1 FOR F= 1 + LIN_MENU TO 17 @ F + 3, 20 SAY REPL( SUBS( FUN_DO, 1, 2 ), 30 ) FUN_DO := SUBS( FUN_DO, 3 ) + SUBS( FUN_DO, 1, 2 ) NEXT FUN_DO := SUBS( FUN_DO, 3 ) + SUBS( FUN_DO, 1, 2 ) ELSEIF OPC_COR = 2 @ LIN_MENU + 3, 20 SAY " Cadastros Manutençöes Relatórios Utilitários Sair " @ 21, 20 SAY SPACE( 60 ) @ 21, 21 SAY DTOC( M->DAT_HOJE ) + " │" @ 21, 38 SAY "Escolha a opçäo desejada" @ 21, 69 SAY "│ F1-Ajuda" IF OPC_COR = 2 @ LIN_MENU + 4,22 SAY " ┌─────────────────────┐ " @ LIN_MENU + 5,22 SAY " │ Opçäo um │ " @ LIN_MENU + 6,22 SAY " ├─────────────────────┤ " @ LIN_MENU + 7,22 SAY " │ Opçäo dois │ " @ LIN_MENU + 8,22 SAY " │ Opçäo tres │ " @ LIN_MENU + 9,22 SAY " └─────────────────────┘ " COR( "DESTAQUE DO MENU" ) @ LIN_MENU + 3, 22 SAY " Cadastros " @ LIN_MENU + 5, 24 SAY " Opçäo um " ENDIF ELSEIF OPC_COR = 3 @ LIN_MENU + 3, 22 SAY " Cadastros " @ LIN_MENU + 5, 24 SAY " Opçäo um " ELSEIF OPC_COR = 5 @ 08, 28, 16, 71 BOX " " @ 08, 28 SAY "■" ELSEIF OPC_COR = 4 @ 09, 29 CLEAR TO 15, 70 @ 11, 38 SAY "Confirma o encerramento ?" botao:ADD( 13, 36, "Sim " ) botao:ADD( 13, 53, "Näo " ) botao:MOSTRA() COR( "BOTAO EM DESTAQUE" ) @ 13, 37 SAY "Sim " ELSEIF OPC_COR = 6 botao:ADD( 13, 53, "Näo " ) botao:MOSTRA() ELSEIF OPC_COR = 7 botao:ADD( 13, 36, "Sim " ) botao:MOSTRA() COR( "BOTAO EM DESTAQUE" ) @ 13, 36 SAY " Sim " ELSEIF OPC_COR = 12 @ 11, 27 TO 11, 48 @ 11, 52 TO 11, 72 @ 15, 27 TO 15, 48 @ 15, 52 TO 15, 63 @ 15, 66 TO 15, 72 ELSEIF OPC_COR = 11 @ 10, 27 SAY "Nome" @ 10, 52 SAY "Empresa" @ 14, 27 SAY "Endereço" @ 14, 52 SAY "Bairro" @ 14, 66 SAY "Cep" ELSEIF OPC_COR = 9 @ 12, 27 SAY "TESTE" + SPACE( 17 ) ELSEIF OPC_COR = 8 @ 12, 52 SAY "TESTE" + SPACE( 16 ) @ 16, 27 SAY "TESTE" + SPACE( 17 ) @ 16, 52 SAY "TESTE" + SPACE( 7 ) @ 16, 66 SAY "9999999" ELSEIF OPC_COR = 10 COR( "TELA DE APRESENTACAO" ) @ 03, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 04, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 05, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 06, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 07, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 08, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 09, 20 SAY "░░░░░░░░░░░███████░███████░███████░███████░███████░░░░░░░░░░" @ 10, 20 SAY "░░░░░░░░░ █ ░ █ ░ █ ░█ █ ░ █ ░░░░░░░░░░░░" @ 11, 20 SAY "░░░░░░░░░░░░ ░█░░ ░█░░░░░ ░█░░░ ░░░░ ░█░░ ░█░░░░░░░░░░░░░░░░" @ 12, 20 SAY "░░░░░░░░░░░░ ░██░ ░███████░███████░░ ░██░ ░███████░░░░░░░░░░" @ 13, 20 SAY "░░░░░░░░░░░░ ██░ ██░░░░ ██░░ ██░ ██ ░░░░░░░░░░░░" @ 14, 20 SAY "░░░░░░░░░░░░ ██░ ██░░░░░░█░░ ██░░ ██░ ██░░░░░░░░░░░░░░░" @ 15, 20 SAY "░░░░░░░░░░░░ ██░ ███████ ███████░░ ██░ ███████░░░░░░░░░░" @ 16, 20 SAY "░░░░░░░░░░░░ ░░░ ░ ░░░░ ░░░ ░░░░░░░░░░░░" @ 17, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 18, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 19, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 20, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" @ 21, 20 SAY "░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" IF OK OK := .F. SOMBRA( 03, 20, 21, 79 ) ENDIF ELSEIF OPC_COR = 13 @ 03, 20 SAY " Titulo do aplicativo " ENDIF TECLA := INKEY( 0 ) SETCOLOR( "W/BG" ) @ X_COR + F_COR + 1, Y_COR + 17 SAY " " @ X_COR, C_COR + Y_COR + 1 SAY " " F_COR += IIF( TECLA = T_CIMA, -1, IIF( TECLA = T_BAIXO, 1, 0 ) ) C_COR += IIF( TECLA = T_ESQUERDA, -1, IIF( TECLA = T_DIREITA, 1, 0 ) ) F_COR = IIF( F_COR < 0, 7, IIF( F_COR > 7, 0, F_COR ) ) C_COR = IIF( C_COR < 0, 15, IIF( C_COR > 15, 0, C_COR ) ) IF TECLA = T_ESC .OR. TECLA = T_ENTER EXIT ENDIF ENDDO CONTECOR[ OPC_COR ] := STRZERO( C_COR, 2 ) + "/" + STRZERO( F_COR, 2 ) COR( "TITULO" ) @ 00, 00 @ 00, ( 80 - LEN( TITU_LO ) ) / 2 SAY TITU_LO FUNDO() COR( "MENU" ) @ LIN_MENU, 00 FOR F_MENU = 1 TO LEN( MENU_PRI ) @ LIN_MENU, MENU_POS[ F_MENU ] + 1 SAY MENU_PRI[ F_MENU ] NEXT @ 24, 00 @ 24, 01 SAY M->DAT_HOJE @ 24, 10 SAY "│" @ 24, 69 SAY "│" @ 24, 71 SAY "F1-Ajuda" MOUSE( DESLIGA ) TELA_PRI := SAVESCREEN( LIN_MENU + 1, 00, 23, 79 ) MOUSE( LIGA ) BUFFER := CHR( T_ENTER ) + "C" RETURN .T. FUNCTION FUNDO( EDITA_FUNDO ) // // -> Monta papel de parede LOCAL CONTAR, MONTA_TELA IF EDITA_FUNDO = NIL EDITA_FUNDO := 0 ENDIF menu:LIMPA() menu:TIPO_MENU := SUB_MENU menu:ADD( "[~1] titio.info" ) menu:ADD( "[~2] ░░░░░░░░░░▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒" ) menu:ADD( "[~3] ░░░░░░░░░░▒▒▒▒▒▒▒▒▒░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓" ) menu:ADD( "[~4] ▓▓▓▓▓▓▓▓▓▓░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒" ) menu:ADD( "[~5] ▓▓▓▓▓▓▓▓▓▓ ░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒" ) menu:ADD( "[~6] ░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" ) menu:ADD( "[~7] ░░░░░░░░░░▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒" ) menu:ADD( "[~8] ░░░░░░░░░░▒▒▒▒▒▒▒▒▒░░░░░░░░░░▓▓▓▓▓▓▓▓▓" ) menu:ADD( "[~9] ▓▓▓▓▓▓▓▓▓▓░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒" ) menu:ADD( "[~A] ▓▓▓▓▓▓▓▓▓▓ ░░░░░░░░░░▒▒▒▒▒▒▒▒▒" ) menu:ADD( "[~B] ░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" ) menu:ADD( "[~C] ░" ) menu:ADD( "[~D] ▒" ) menu:ADD( "[~E] ▓" ) menu:ADD( "[~F] " ) menu:ADD( "[~G] └┐└┐" ) menu:ADD( "[~H] ╩╦╦╩" ) menu:ADD( "[~I] ┴┬┬┴" ) menu:ADD( "[~J] ├┤┤├" ) menu:ADD( "[~K] ╣╠╠╣" ) menu:ADD( "[~L] ░░░░░▒▒▒▒▒░░░░░▓▓▓▓▓" ) menu:ADD( "[~M] ═╩═╦═╦═╩" ) menu:ADD( "[~N] ─┴─┬─┬─┴" ) menu:ADD( "[~O] Tela de apresentaçäo" ) ME_NU := menu:CONTEUDO() IF EDITA_FUNDO = 1 S_MENU := menu:RODA() IF S_MENU = 0 RETURN .F. ENDIF FUNDO := S_MENU ELSE menu:LIMPA() ENDIF COR( "FUNDO DA TELA" ) IF FUNDO = LEN( ME_NU[ _OPCOES_MENU ] ) TELA_ENT( 1 ) MOUSE( DESLIGA ) TELA_PRI := SAVESCREEN( LIN_MENU + 1, 00, 23, 79 ) MOUSE( LIGA ) RETURN .T. ENDIF IF FUNDO = 21 MONTA_TELA := 0 FOR CONTAR = LIN_MENU + 1 TO 23 MONTA_TELA++ IF MONTA_TELA < 3 @ CONTAR, 00 SAY REPL( "░░░░░▒▒▒▒▒", 8 ) ELSE @ CONTAR, 00 SAY REPL( "▓▓▓▓▓░░░░░", 8 ) IF MONTA_TELA=4; MONTA_TELA := 0; ENDIF ENDIF NEXT MOUSE( DESLIGA ) TELA_PRI := SAVESCREEN( LIN_MENU + 1, 00, 23, 79 ) MOUSE( LIGA ) RETURN .T. ENDIF IF FUNDO = 1 FUN_DO := "titio.info " ELSEIF FUNDO = 15 FUN_DO := SPACE( 1 ) ELSE FUN_DO := TRIM( SUBS( ME_NU[ _OPCOES_MENU ][ FUNDO ], 7 ) ) ENDIF IF FUNDO < 16 FUN_DO := SUBS( FUN_DO + REPL( FUN_DO, 1840 / LEN( FUN_DO ) ), 1, 1840 ) ENDIF FOR CONTAR := LIN_MENU + 1 TO 23 IF FUNDO < 16 @ CONTAR, 00 SAY SUBS( FUN_DO, CONTAR * 80 - 79, 80 ) ELSEIF FUNDO = 22 .OR. FUNDO = 23 @ CONTAR, 00 SAY REPL( SUBS( FUN_DO, 1, 4 ), 20 ) FUN_DO := SUBS( FUN_DO, 5 ) + SUBS( FUN_DO, 1, 4 ) ELSE @ CONTAR, 00 SAY REPL( SUBS( FUN_DO, 1, 2 ), 40 ) FUN_DO := SUBS( FUN_DO, 3 ) + SUBS( FUN_DO, 1, 2 ) ENDIF NEXT IF EDITA_FUNDO = 1 MOUSE( DESLIGA ) TELA_PRI := SAVESCREEN( LIN_MENU + 1, 00, 23, 79 ) MOUSE( LIGA ) ENDIF RETURN .T. FUNCTION COR( NOM_COR ) QUAL_COR := ASCAN( NOMECOR, UPPER( NOM_COR ) ) IF QUAL_COR != 0 IF QUAL_COR = 2 SETCOLOR( CONTECOR[ 2 ] + "," + CONTECOR[ 3 ] + ",,," + CONTECOR[ 2 ] ) ELSEIF QUAL_COR = 8 SETCOLOR( CONTECOR[ 11 ] + "," + CONTECOR[ 9 ] + ",,," + CONTECOR[ 8 ] ) ELSE SETCOLOR( CONTECOR[ QUAL_COR ] ) ENDIF ENDIF RETURN .T. FUNCTION FUN_CFG( PAR1 ) IF LASTKEY() = T_ENTER RETURN 1 ELSEIF LASTKEY() = T_ESC RETURN 0 ELSEIF AT( UPPER( CHR( LASTKEY() ) ), "IFRSC" ) > 0 .OR.; LASTKEY() = T_TAB .OR. LASTKEY() = T_SH_TAB RETURN 0 ELSEIF PAR1 = 1 KEYBOARD CHR( T_CTRL_PGDN ) ELSEIF PAR1 = 2 KEYBOARD CHR( T_CTRL_PGUP ) ENDIF CFG_COR := SETCOLOR() COR( "MENU" ) FOR F_CFG = 1 TO LEN( MENU_CFG ) @ 09 + F_CFG, 34 SAY " " NEXT SETCOLOR( CFG_COR ) RETURN 2 FUNCTION CALCU // // -> Funçäo que ativa a calculadora LOCAL ULT_CURSOR := SETCURSOR(), ULT_COR := SETCOLOR(), LINHA := ROW(),; COLUNA := COL(), TELA, RESULTADO := 0, CONTADOR, CONTAR, LIN, COL,; ALGARISMOS := SPACE( 14 ), DECIMAIS := "", TECLA := CHR( 0 ),; MOV_TELA, ALG_OU_DEC := "A", PERCENTAGEM := " ", ULT_OPERADOR := "",; OK_OPERADOR := .F., CALCULO, TRANSPORTE, BO_TAO, TELA_CALCU,; L_CALCU, C_CALCU, TIPO_SAIDA := NIL, BOTOES := {; { 6, 4, " 7 ", { "7", CHR( T_HOME ) } },; { 6, 9, " 8 ", { "8", CHR( T_CIMA ) } },; { 6, 14, " 9 ", { "9", CHR( T_PGUP ) } },; { 6, 20, " - ", { "-" } },; { 6, 25, " + ", { "+" } },; { 8, 4, " 4 ", { "4", CHR( T_ESQUERDA ) } },; { 8, 9, " 5 ", { "5", CHR( 76 ) } },; { 8, 14, " 6 ", { "6", CHR( T_DIREITA ) } },; { 8, 20, " / ", { "/" } },; { 8, 25, " * ", { "*" } },; { 10, 4, " 1 ", { "1", CHR( T_END ) } },; { 10, 9, " 2 ", { "2", CHR( T_BAIXO ) } },; { 10, 14, " 3 ", { "3", CHR( T_PGDN ) } },; { 10, 20, " = ", { "=", CHR( T_ENTER ) } },; { 10, 25, " % ", { "%" } },; { 12, 4, " 0 ", { "0", CHR( T_INSERT ) } },; { 12, 9, " . ", { ".", CHR( T_DEL ) } },; { 12, 14, "Get", { "G" } },; { 12, 20, " C ", { "C", " " } },; { 12, 25, "cE ", { "E" } },; { 12, 41, " Imprime ", { "I" } } } DADOS_CALCU := {} MOUSE( LIGA ) SOMBRA( L_CALCU := L_SOM, C_CALCU := C_SOM, .T. ) MOUSE( DESLIGA ) TELA := SAVESCREEN( 00, 00, MAXROW(), MAXCOL() ) MOUSE( LIGA ) CURSOR( DESLIGA ) JANELA( MOV_LINHA, MOV_COLUNA, MOV_LINHA + 15, MOV_COLUNA + 61, "Calculadora" ) COR( "BOX DA JANELA DE DIALOGO" ) @ MOV_LINHA + 1, MOV_COLUNA + 30, MOV_LINHA + 14, MOV_COLUNA + 30 BOX SPACE( 8 ) COR( "MENU" ) @ MOV_LINHA + 2, MOV_COLUNA + 33 CLEAR TO MOV_LINHA + 10, MOV_COLUNA + 58 SETCOLOR( ALLTRIM( SUBS( CONTECOR[ 5 ], 4 ) ) + "/" + ALLTRIM( SUBS( CONTECOR[ 4 ], 4 ) ) ) @ MOV_LINHA + 2, MOV_COLUNA + 4, MOV_LINHA + 4, MOV_COLUNA + 26 BOX "▄▄▄█▀▀▀█" FOR CONTAR := 1 TO LEN( BOTOES ) BOT_CALC( MOV_LINHA + BOTOES[ CONTAR ][ 1 ],; MOV_COLUNA + BOTOES[ CONTAR ][ 2 ], BOTOES[ CONTAR ][ 3 ] ) NEXT @ MOV_LINHA + 3, MOV_COLUNA + 5 SAY " " + STR( RESULTADO, 19, 4 ) + " " COLOR "W" WHILE TECLA != CHR( T_ESC ) TECLA := CHR( 0 ) WHILE TECLA = CHR( 0 ) TECLA := CHR( INKEY() ) MOUSE( @BO_TAO, @LIN, @COL ) IF BO_TAO = M_ESQUERDO DADO_CUR := SUBS( SAVESCREEN( LIN, COL, LIN, COL ), 1, 1 ) IF DADO_CUR = CHR( 254 ) TECLA := CHR( T_ESC ) EXIT ELSEIF LIN = 24 .AND. ( COL >= 71 .AND. COL <= 78 ) TECLA := CHR( T_F1 ) EXIT ENDIF FOR CONTAR = 1 TO LEN( BOTOES ) IF LIN = BOTOES[ CONTAR ][ 1 ] + MOV_LINHA .AND.; ( COL >= BOTOES[ CONTAR ][ 2 ] + MOV_COLUNA .AND.; COL <= MOV_COLUNA + BOTOES[ CONTAR ][ 2 ] +; LEN( BOTOES[ CONTAR ][ 3 ] ) - 1 ) TECLA := BOTOES[ CONTAR ][ 4 ][ 1 ] EXIT ENDIF NEXT IF TECLA = CHR( 0 ); BEEP_MOUSE(); ENDIF ELSEIF BO_TAO = M_OS_DOIS TECLA := CHR( T_ESC ) ELSEIF BO_TAO = M_DIREITO TECLA := CHR( T_ENTER ) ENDIF ENDDO TECLA := UPPER( TECLA ) FOR CONTAR := 1 TO LEN( BOTOES ) FOR CONTADOR := 1 TO LEN( BOTOES[ CONTAR ][ 4 ] ) IF TECLA = BOTOES[ CONTAR ][ 4 ][ CONTADOR ] EXIT ENDIF NEXT IF CONTADOR <= LEN( BOTOES[ CONTAR ][ 4 ] ) BOT_CALC( MOV_LINHA + BOTOES[ CONTAR ][ 1 ],; MOV_COLUNA + BOTOES[ CONTAR ][ 2 ], BOTOES[ CONTAR ][ 3 ],; .T. ) TECLA := BOTOES[ CONTAR ][ 4 ][ 1 ] EXIT ENDIF NEXT SETCOLOR( "W" ) IF AT( TECLA, CHR( 26 ) + CHR( 2 ) + CHR( 141 ) + CHR( 145 ) ) != 0 MOUSE( DESLIGA ) MOV_TELA := SAVESCREEN( MOV_LINHA, MOV_COLUNA, MOV_LINHA + 15, MOV_COLUNA + 61 ) RESTSCREEN( 00, 00, MAXROW(), MAXCOL(), TELA ) MOUSE( LIGA ) IF TECLA = CHR( 26 ) MOV_COLUNA-- ELSEIF TECLA = CHR( 2 ) MOV_COLUNA++ ELSEIF TECLA = CHR( 141 ) MOV_LINHA-- ELSEIF TECLA = CHR( 145 ) MOV_LINHA++ ENDIF IF MOV_LINHA < 0 MOV_LINHA := 0 ELSEIF MOV_LINHA > 9 MOV_LINHA := 9 ELSEIF MOV_COLUNA < 0 MOV_COLUNA := 0 ELSEIF MOV_COLUNA > 20 MOV_COLUNA := 20 ENDIF MOUSE( DESLIGA ) SOMBRA( MOV_LINHA, MOV_COLUNA, MOV_LINHA + 15, MOV_COLUNA + 61 ) RESTSCREEN( MOV_LINHA, MOV_COLUNA, MOV_LINHA + 15, MOV_COLUNA + 61, MOV_TELA ) MOUSE( LIGA ) ENDIF IF TECLA = CHR( T_F1 ) HELP( "CALCULADORA" ) ENDIF IF TECLA = CHR( T_ESC ) EXIT ENDIF IF TECLA = "."; ALG_OU_DEC := "D"; ENDIF ALGARISMOS := IIF( TECLA = "." .AND. ALGARISMOS = SPACE( 14 ),; SPACE( 13 ) + "0", ALGARISMOS ) IF TECLA = "%" IF RESULTADO != 0 .AND. ULT_OPERADOR $ "+-/*" PERCENTAGEM := IIF( PERCENTAGEM = "%", " ", "%" ) SETCOLOR( ALLTRIM( SUBS( CONTECOR[ 6 ], 1, 2 ) ) + "/" +; ALLTRIM( SUBS( CONTECOR[ 5 ], 4 ) ) ) @ MOV_LINHA + 3, MOV_COLUNA + 26 SAY PERCENTAGEM IMP_CALCU( ALGARISMOS + "." + SUBS( DECIMAIS + "00000", 1, 4 ) + "%" ) ELSE @ MOV_LINHA + 3, MOV_COLUNA + 5 SAY SPACE( 13 ) + "0.0000" COLOR "W" RESULTADO := 0; ALGARISMOS := SPACE( 14 ); DECIMAIS := "" ENDIF ELSEIF TECLA $ "0123456789" .AND.; IIF( ALG_OU_DEC = "A", LEN( LTRIM( ALGARISMOS ) ) != 14,; LEN( LTRIM( DECIMAIS ) ) != 4 ) OK_OPERADOR := .T. IF ULT_OPERADOR = "=" ULT_OPERADOR = " " RESULTADO = 0 ENDIF IF ALG_OU_DEC = "A" ALGARISMOS = SUBS( ALGARISMOS + TECLA, 2 ) ELSE DECIMAIS += TECLA ENDIF @ MOV_LINHA + 3, MOV_COLUNA + 6 SAY ALGARISMOS + "." + SUBS( DECIMAIS +; "00000", 1, 4 ) COLOR "W" ELSEIF TECLA $ "+-/*=" IF TECLA != "=" IF !OK_OPERADOR LOOP ENDIF OK_OPERADOR := .F. ENDIF IF RESULTADO != 0 IF VAL( ALGARISMOS + "." + DECIMAIS ) != 0 IF ULT_OPERADOR != "=" IF PERCENTAGEM = "%" CALCULO := STR( RESULTADO, 19, 4 ) + ULT_OPERADOR + "(" +; STR( RESULTADO, 19, 4 ) + "*" + ALGARISMOS +; "." + SUBS( DECIMAIS + "00000" , 1, 4 ) + ")/100.000" ELSE CALCULO := STR( RESULTADO, 19, 4 ) + ULT_OPERADOR +; ALGARISMOS + "." + SUBS( DECIMAIS + "00000", 1, 4 ) ENDIF RESULTADO := &CALCULO IF STR( RESULTADO, 19, 4 ) = REPL( "*", 19 ) @ MOV_LINHA + 3, MOV_COLUNA + 6 SAY " * E R R O * " COLOR "W" RESULTADO := 0 SETCOLOR( ALLTRIM( SUBS( CONTECOR[ 6 ], 1, 2 ) ) + "/" +; ALLTRIM( SUBS( CONTECOR[ 5 ], 4 ) ) ) @ MOV_LINHA + 3, MOV_COLUNA + 4 SAY " " @ MOV_LINHA + 3, MOV_COLUNA + 26 SAY " " IMP_CALCU() IMP_CALCU( "E R R O " ) IMP_CALCU() ELSE @ MOV_LINHA + 3, MOV_COLUNA + 6 SAY STR( RESULTADO, 19, 4 ) COLOR "W" IF TECLA != "=" .AND. PERCENTAGEM != "%" IMP_CALCU( TRAN( VAL( ALGARISMOS + "." + SUBS( DECIMAIS +; "00000", 1, 4 ) ), "@E 99,999,999,999,999.9999" ) + TECLA ) ENDIF ENDIF ENDIF ELSE IF TECLA != "=" IMP_CALCU( TRAN( RESULTADO, "@E 99,999,999,999,999.9999" ) +; TECLA ) ENDIF ENDIF ELSEIF TECLA $ "+-/*" RESULTADO := VAL( ALGARISMOS + "." + DECIMAIS ) IMP_CALCU( TRAN( VAL( ALGARISMOS + "." + SUBS( DECIMAIS + "00000", 1,; 4 ) ), "@E 99,999,999,999,999.9999" ) + TECLA ) ENDIF SETCOLOR( ALLTRIM( SUBS( CONTECOR[ 6 ], 1 , 2 ) ) + "/" +; ALLTRIM( SUBS( CONTECOR[ 5 ], 4 ) ) ) @ MOV_LINHA + 3, MOV_COLUNA + 4 SAY IIF( TECLA $ "+-/*", TECLA, " " ) @ MOV_LINHA + 3, MOV_COLUNA + 26 SAY " " IF TECLA = "=" IF VAL( ALGARISMOS + "." + DECIMAIS ) != 0 .AND. PERCENTAGEM != "%" IMP_CALCU( TRAN( VAL( ALGARISMOS + "." + SUBS( DECIMAIS + "00000",; 1, 4 ) ), "@E 99,999,999,999,999.9999" ) + " " ) ENDIF IMP_CALCU( "=" ) IMP_CALCU( TRAN( RESULTADO, "@E 99,999,999,999,999.9999" ) +; " " ) IMP_CALCU() ENDIF ALG_OU_DEC := "A" ALGARISMOS := SPACE( 14 ) DECIMAIS := "" ULT_OPERADOR := TECLA PERCENTAGEM := " " ELSEIF TECLA $ "EC" ALG_OU_DEC := "A" ALGARISMOS := SPACE( 14 ) DECIMAIS := "" PERCENTAGEM := " " IF TECLA $ "C" RESULTADO := 0 SETCOLOR( ALLTRIM( SUBS( CONTECOR[ 6 ], 1, 2 ) ) + "/" +; ALLTRIM( SUBS( CONTECOR[ 5 ], 4 ) ) ) @ MOV_LINHA + 3, MOV_COLUNA + 4 SAY " " @ MOV_LINHA + 3, MOV_COLUNA + 26 SAY " " IMP_CALCU() IMP_CALCU( REPL( "─", 24 ) ) IMP_CALCU() ENDIF @ MOV_LINHA + 3, MOV_COLUNA + 6 SAY SPACE( 13 ) + "0.0000" COLOR "W" ELSEIF TECLA = "G" IF RESULTADO != 0 TRANSPORTE := ALLTRIM( STR( RESULTADO ) ) ELSE TRANSPORTE := ALLTRIM( STR( VAL( ALGARISMOS + "." + DECIMAIS ) ) ) ENDIF IF "." $ TRANSPORTE FOR CONTADOR := LEN( TRANSPORTE ) TO 1 STEP -1 IF SUBS( TRANSPORTE, CONTADOR, 1 ) != "0" TRANSPORTE := SUBS( TRANSPORTE, 1, CONTADOR ) EXIT ENDIF NEXT IF SUBS( TRANSPORTE, LEN( TRANSPORTE ), 1 ) = "." TRANSPORTE := SUBS( TRANSPORTE, 1, LEN( TRANSPORTE ) - 1 ) ENDIF ENDIF KEYBOARD TRANSPORTE EXIT ELSEIF TECLA = "I" MOUSE( DESLIGA ) TELA_CALCU := SAVESCREEN( 00, 00, MAXROW(), MAXCOL() ) MOUSE( LIGA ) COR( "MENU" ) @ LIN_MENU, 00 @ LIN_MENU, 01 SAY "Calculadora │ Impressäo do conteudo da fita" NUM_RELATORIO := 0 TIPO_SAIDA := MENU_PRN() IF TIPO_SAIDA = NIL MOUSE( DESLIGA ) RESTSCREEN( 00, 00, MAXROW(), MAXCOL(), TELA_CALCU ) MOUSE( LIGA ) LOOP ENDIF SET DEVI TO PRINT @ 00, 00 SAY "" FOR CONTADOR := 1 TO LEN( DADOS_CALCU ) @ PROW() + 1, 00 SAY DADOS_CALCU[ CONTADOR ] IF PROW() > 62 @ 00, 00 SAY "" ENDIF NEXT EJECT SET DEVI TO SCREEN IF TIPO_SAIDA = "A" SET PRINTER TO ELSEIF TIPO_SAIDA = "T" SET PRINTER TO IMP_TELA( 30 ) ENDIF MOUSE( DESLIGA ) RESTSCREEN( 00, 00, MAXROW(), MAXCOL(), TELA_CALCU ) MOUSE( LIGA ) ENDIF ENDDO SETCOLOR( ULT_COR ) MOUSE( DESLIGA ) RESTSCREEN( 00, 00, MAXROW(), MAXCOL(), TELA ) MOUSE( LIGA ) SETCURSOR( ULT_CURSOR ) SOMBRA( L_CALCU, C_CALCU ) SETPOS( LINHA, COLUNA ) FUNCTION IMP_CALCU( CONTEUDO ) IF CONTEUDO = NIL; CONTEUDO := ""; ENDIF COR( "MENU" ) SCROLL( MOV_LINHA + 2, MOV_COLUNA + 33, MOV_LINHA + 10, MOV_COLUNA + 58, 1 ) @ MOV_LINHA + 10, MOV_COLUNA + 33 SAY PADL( CONTEUDO, 25 ) IF CONTEUDO = REPL( "─", 24 ) AADD( DADOS_CALCU, REPL( "-", 24 ) ) ELSEIF CONTEUDO = "=" AADD( DADOS_CALCU, SPACE( 23 ) + "=" ) ELSE AADD( DADOS_CALCU, CONTEUDO ) ENDIF RETURN NIL FUNCTIO BOT_CALC( BOT_X, BOT_Y, BOT_N ) LOCAL TEMPO := SECONDS() IF PCOUNT() = 4 SETCOLOR( "N/" + ALLTRIM( SUBS( CONTECOR[ 4 ], 4 ) ) ) @ BOT_X, BOT_Y + LEN( BOT_N ) - 1 SAY " " @ BOT_X + 1, BOT_Y - 1 SAY REPL( " ", LEN( BOT_N ) ) IF BOT_Y = 20 + MOV_COLUNA .OR. BOT_Y = 25 + MOV_COLUNA COR( "BOTAO EM DESTAQUE" ) ELSE COR( "BOTOES" ) ENDIF @ BOT_X, BOT_Y - 1 SAY BOT_N WHILE ( SECONDS() - TEMPO ) < .1; ENDDO SETCOLOR( "N/" + ALLTRIM( SUBS( CONTECOR[ 4 ], 4 ) ) ) @ BOT_X, BOT_Y - 1 SAY "▄" @ BOT_X + 1, BOT_Y - 1 SAY REPL( "▀", LEN( BOT_N ) ) ENDIF IF BOT_Y = 20 + MOV_COLUNA .OR. BOT_Y = 25 + MOV_COLUNA COR( "BOTAO EM DESTAQUE" ) ELSE COR( "BOTOES" ) ENDIF @ BOT_X, BOT_Y SAY BOT_N SETCOLOR( "N/" + ALLTRIM( SUBS( CONTECOR[ 4 ], 4 ) ) ) @ BOT_X, BOT_Y - 1 SAY "▄" @ BOT_X + 1, BOT_Y - 1 SAY REPL( "▀", LEN( BOT_N ) ) RETURN .T. FUNCTION MENU_PRN // // -> Menu de direcionamento de impressao ARQ_PRN := "REPORT" FUNDO() JANELA( 06, 21, 19, 59, TRIM( SUBS( NOME_IMP, 1, 33 ) ) ) COR( "MENU" ) @ 09, 26 CLEAR TO 13, 54 IF NUM_RELATORIO = 0 TIPO_FORMULARIO := "0" ELSE TIPO_FORMULARIO := FOR_MULARIO[ NUM_RELATORIO ] ENDIF WHILE .T. @ 06, 23 SAY PADC( TRIM( SUBS( NOME_IMP, 1, 33 ) ), 35 ) COLOR CONTECOR[ 5 ] botao:ADD( 15, 33, "Impressoras " ) botao:ADD( 17, 33, "Formulario " + IIF( TIPO_FORMULARIO = "1",; "132", "080" ) ) botao:MOSTRA() MENU_CFG := { " (" + CHR( 7 ) + ") Impressora",; " (" + CHR( 7 ) + ") Tela ",; " (" + CHR( 7 ) + ") Arquivo " } SETCOLOR( CONTECOR[ 2 ] + "," + CONTECOR[ 7 ] ) KEYBOARD CHR( 32 ) OPC_PRN := ACHOICE( 10, 28, 12, 52, MENU_CFG, .T., "FUN_CFG" ) IF LASTKEY() = T_TAB .OR. LASTKEY() = T_SH_TAB botao:ADD( 15, 33, "Impressoras " ) botao:ADD( 17, 33, "Formulario " + IIF( TIPO_FORMULARIO = "1",; "132", "080" ) ) IF LASTKEY() = T_TAB OPCAO_BOTAO := 1 ELSE OPCAO_BOTAO := 2 ENDIF OPCAO_BOTAO := botao:RODA( OPCAO_BOTAO ) IF OPCAO_BOTAO = 0 LOOP ELSEIF OPCAO_BOTAO = 1 KEYBOARD "I" ELSE KEYBOARD "F" ENDIF INKEY( 0 ) ENDIF IF LASTKEY() = ASC( "I" ) .OR. LASTKEY() = ASC( "i" ) botao:MOVIMENTA( 15, 33, "Impressoras " ) TELA_PRN := SAVESCREEN( 00, 00, 24, 79 ) IF LEN( IMP_ARQ ) != 0 ME_NU := {} FOR CONTADOR := 1 TO LEN( IMP_ARQ ) AADD( ME_NU, " " + TRIM( IMP_ARQ[ CONTADOR ][ 1 ] ) ) NEXT JANELA( 03, 08, 21, 72, "Seleçäo de impressora" ) botao:ADD( 19, 28, "Enter " ) botao:ADD( 19, 44, "Esc " ) botao:MOSTRA() COR( "MENU" ) @ 05, 12 CLEAR TO 17, 68 KEYBOARD CHR( T_CIMA ) SELECAO_IMP := 1 SELECAO_IMP := ACHOICE( 06, 13, 16, 67, ME_NU ) IF SELECAO_IMP = 0 botao:MOVIMENTA( 19, 44, "Esc " ) RESTSCREEN( 00, 00, 24, 79, TELA_PRN ) LOOP ENDIF botao:MOVIMENTA( 19, 44, "Enter " ) CON_ARQ := IMP_ARQ[ SELECAO_IMP ][ 2 ] LER_IMP( CON_ARQ ) ENDIF RESTSCREEN( 00, 00, 24, 79, TELA_PRN ) LOOP ENDIF IF LASTKEY() = ASC( "F" ) .OR. LASTKEY() = ASC( "f" ) botao:MOVIMENTA( 17, 33, "Formulario " +; IIF( TIPO_FORMULARIO = "1", "132", "080" ) ) TIPO_FORMULARIO := IIF( TIPO_FORMULARIO = "1", "0", "1" ) IF NUM_RELATORIO > 0 FOR_MULARIO[ NUM_RELATORIO ] := TIPO_FORMULARIO ENDIF LOOP ENDIF IF AT( UPPER( CHR( LASTKEY() ) ), "SCR" ) > 0 LOOP ENDIF IF OPC_PRN = 0 RETURN NIL ELSEIF OPC_PRN = 1 TIPO_PRN := "I" IF !ISPRINTER() BEEP() MENSAGEM( "Impressora desligada ou desconectada", 3 ) LOOP ENDIF ELSEIF OPC_PRN = 2 TIPO_PRN := "T" EX_T := ( VAL( SUBS( TIME(), 4, 2 ) ) * 10 ) + VAL( SUBS( TIME(), 7, 2 ) ) ARQ_PRN += "." + STRZERO( EX_T, 3 ) SET PRINTER TO &ARQ_PRN ELSEIF OPC_PRN = 3 MOUSE( DESLIGA ) RESTSCREEN( LIN_MENU + 1, 00, 23, 79, TELA_PRI ) MOUSE( LIGA ) JANELA( 07, 16, 17, 62, "Saidas" ) COR( "MENU" ) @ 10, 20 CLEAR TO 14, 58 @ 11, 23 SAY "Digite o nome do arquivo de saida" ARQ_PRN := SPACE( 20 ) WHILE .T. @ 13,29 GET ARQ_PRN PICT "@!" VALID ISALPHA( ARQ_PRN ) CURSOR( LIGA ) READ CURSOR( DESLIGA ) IF LASTKEY() = T_ESC RETURN NIL ENDIF IF AT(".",ARQ_PRN) != 0 BEEP() MENSAGEM( "Digite o nome do arquivo sem extensäo", 3 ) LOOP ENDIF EXIT ENDDO ARQ_PRN := ALLTRIM( ARQ_PRN ) + ".PRN" TIPO_PRN := "A" SET PRINTER TO &ARQ_PRN ENDIF MENSAGEM( "Tecle para pausa ou interrupçäo" ) RETURN TIPO_PRN ENDDO FUNCTION IMP_TELA PARA TAM_LIN MARG_ESQ := 1 IF MARG_ESQ = NIL MARG_ESQ := 0 ENDIF ARQ_PRN := "REPORT" MARG_ESQ++ MENSAGEM( "Aguarde processamento" ) SELE 100 PUBL QUAN_REG, ULT_POS ARQ_PRN1 := ARQ_PRN + "." + STRZERO( EX_T, 3 ) ARQ_PRN2 := ARQ_PRN + "." + STRZERO( EX_T + 100, 3 ) DBCREATE( ARQ_PRN2, { { "LI_NHA", "C", TAM_LIN + 1, 0 } } ) IF !USEREDE(ARQ_PRN2,.T.,10) BEEP() MENSAGEM( "Nao foi possivel acesso, tente novamente", 5 ) RETURN .F. ENDIF APPEND FROM &ARQ_PRN1 SDF QUAN_REG := LASTREC() IF QUAN_REG = 0 QUAN_REG := 1 ENDIF GOTO TOP JANELA( LIN_MENU + 3, 02, 21, 77 ) @ LIN_MENU + 4, 77 SAY CHR( 30 ) @ 20, 77 SAY CHR( 31 ) IF TAM_LIN < 72 EDI_TAR := { "SUBS( LI_NHA, MARG_ESQ )" } ELSE IF INT( TAM_LIN / 36 ) = TAM_LIN / 36 NUM_COL := TAM_LIN / 36 ELSE NUM_COL := INT( TAM_LIN / 36 ) + 1 ENDIF X=1 EDI_TAR := {} FOR CONTAR = 1 TO NUM_COL - 1 NUM_MAT := ( CONTAR * 36 ) - 34 AADD( EDI_TAR, "SUBS( LI_NHA, "+STR(NUM_MAT,3)+", 36 )" ) NEXT NUM_MAT := ( CONTAR * 36 ) - 34 AADD( EDI_TAR, "SUBS( LI_NHA, " + STR( NUM_MAT, 3 ) + ") + SPACE(" + STR( ( NUM_COL * 36 ) - TAM_LIN, 2 ) + ")" ) ENDIF KEYBOARD CHR( 65 ) ULT_POS := LIN_MENU + 5 MENSAGEM( "Tecle para sair" ) SOS_MENU := "RELATORIO" SETCOLOR( CONTECOR[ 4 ] + "," + CONTECOR[ 7 ] ) DBEDIT( LIN_MENU + 4, 04, 20, 75, EDI_TAR, "FUN_IMP", "", "", "", "" ) SOS_MENU := " " USE FERASE( ARQ_PRN1 ) FERASE( ARQ_PRN2 ) RELEASE QUAN_REG, ULT_POS FUNCTION FUN_IMP IF LASTKEY() = T_ESC RETURN 0 ELSEIF LASTKEY() = T_HOME GOTO TOP ELSEIF LASTKEY() = T_END GOTO BOTT ENDIF COR( "BOX DA JANELA DE DIALOGO" ) @ ULT_POS, 77 SAY " " ULT_POS := LIN_MENU + 5 + ( ( ( RECN() * 100 ) / QUAN_REG ) /; ( 100 / ( 19 - ( LIN_MENU + 5 ) ) ) ) IF RECN() = 1 ULT_POS := LIN_MENU + 5 ENDIF @ ULT_POS, 77 SAY CHR( 4 ) SETCOLOR( CONTECOR[ 4 ] + "," + CONTECOR[ 7 ] ) RETURN 1 FUNCTION USEREDE( ARQ, EXUSE, TEMPO ) // // -> Efetua tentativas para abrir o arquivo durante um determinado tempo en- // viado atraves do parametro tempo ou indefinidamente, caso tempo=0. Se a // tecla for precionada pela usuario, as tentaivas sao interrompidas. // PRIVATE SEMPRE SEMPRE := ( TEMPO = 0 ) MENSAGEM( "Aguarde tentativa de acesso aos arquivos" ) WHILE ( SEMPRE .OR. TEMPO > 0 ) IF EXUSE USE &ARQ EXCLUSIVE // // -> Uso exclusivo ELSE USE &ARQ // // -> Uso compartilhado ENDIF IF !NETERR() RETURN .T. ENDIF IF INKEY( 1 ) = T_ESC EXIT ENDIF TEMPO-- ENDDO RETURN .F. FUNCTION REGLOCK( TEMPO ) // // -> Efetua tentativas para bloquear o registro durante um determinado tempo // enviado atraves do parametro tempo ou indefinidamente caso, tyempo=0. // Se a tecla for pressionada pelo usuario, as tentativas sao interrom- // pidas. // PRIVATE SEMPRE IF RLOCK() RETURN .T. ENDIF MOUSE( DESLIGA ) SAVE SCREEN MOUSE( LIGA ) MENSAGEM( "Aguarde tentativa de acesso ao arquivo" ) SEMPRE := ( TEMPO = 0 ) WHILE ( SEMPRE .OR. TEMPO > 0 ) IF RLOCK() MOUSE( DESLIGA ) RESTORE SCREEN MOUSE( LIGA ) RETURN .T. ENDIF IF INKEY( 0.5 ) = T_ESC EXIT ENDIF TEMPO -= 0.5 ENDDO MOUSE( DESLIGA ) RESTORE SCREEN MOUSE( LIGA ) RETURN .F. FUNCTION ADIREG( TEMPO ) // // -> Efetua tentaivas para adicionar o registro durante um determinado tempo // enviando atraves do paramentro tempo ou indefinidamente, caso tempo=0. // Se a tecla for pressionada pelo usuario, as tentativas sao interrom- // pidas. // PRIVATE SEMPRE APPEND BLANK IF !NETERR() RETURN .T. ENDIF MOUSE( DESLIGA ) SAVE SCREEN MOUSE( LIGA ) MENSAGEM( "Aguarde tentativa de acesso ao arquivo" ) SEMPRE := ( TEMPO = 0 ) WHILE ( SEMPRE .OR. TEMPO > 0 ) APPEND BLANK IF !NETERR() MOUSE( DESLIGA ) RESTORE SCREEN MOUSE( LIGA ) RETURN .T. ENDIF IF INKEY( 0.5 ) = T_ESC EXIT ENDIF TEMPO -= 0.5 ENDDO MOUSE( DESLIGA ) RESTORE SCREEN MOUSE( LIGA ) RETURN .F. ** **BI [INI] FUN.B05 **BI [FIM] FUN.B05 ** /* Final do programa DIARYFU2.PRG */