Caros Colegas
Me parece que o tema atual do forum é melhorar o visual de nossos sistemas.
Também passo por este dilema e estou tentando utilizar a FGLIB para tal.
Na primeira tentativa já encontrei dificuldade e estou postando aqui um exemplo de minha rotina para que vocês possam me ajudar.
Os arquivo teste.bat, teste.rmk e teste.lnk são utilizados para gerar o EXE.
A Lib MMENU consegui aqui no forum na seção de download.
A menagem de erro é a seguinte: argument error INT, e esta ocorrendo
na seguinte linha:
Resp := mMenu(1,1,vList,vList2,'w/n','n/w','b/g',2)
Através do DBUG verifiquei que tem relação com a função RESTSCREEN.
OBRIGADO
================================
#teste.bat
@ECHO OFF
RMAKE TESTE.RMK
BLINKER @TESTE.LNK
#teste.rmk
.PRG.OBJ:
CLIPPER $** /b /w /n
TESTE.OBJ: TESTE.PRG
#teste.lnk
NOBELL
BLI INC OFF
BLI OVE OPS 32
BLI OVE PAGEFRAME ON
BLI CAC XMS 256
BLI CAC EMS 256
BLI OVE UMB ON
BLI EXE COMPRESS 1
BLI EXE CLIPPER //F:150 //DYNF:8 //SWAPK:65535 //TEMPPATH:"C:\TEMP" //SWAPPATH:"C:\TEMP"
BEGIN
FI TESTE
ENDAREA
LIB fglib30,mmenu
/NOE;
FILE CLD.LIB
@CL520MID.LNK
#teste.prg
#include "INKEY.CH"
#include "fgl.ch" // General include
FUNCTION PRINCIPAL(nFONTES)
LOCAL Font,YMAX,XMAX,Length,Xpos,RESP
LOCAL vList:={'&Cadastros','&Movimentos','&Relatorios','&Opcoes','&Ajuda'}
LOCAL vList2:={{'&Clientes F2','Fornece&dores F3','&Funcionarios F4','&Empresas F5','&Transportadoras F6','Depe&ndentes F7','SEPARADOR','&Produtos {(&Definir novo produto)(&Acrescentar produto no estoque)}','SEPARADOR','Sai&r ALT+F4'},;
{'&Vendas {(&Iniciar uma nova venda)(&Reabrir venda)}','&Pagamentos {(&Cartao)(Che&que)(Em &especie)}'},;
{'&Clientes','Fornece&dores','&Funcionarios','&Empresas','&Transportadoras','SEPARADOR','&Produtos {(&No estoque)(&Fora do estoque)}'},;
{'Calcula&dora','&Cores','&Fontes','&Reindexar','SEPARADOR','Protecao de &tela','Backup do &sistema','&Papel de parede','Sen&has {(Nova &senha)(Novo &usuario)(&Configurar)}'},;
{'&Configuracoes','Sis&tema','&Sobre...'}}
FGLSetMode(FGL_GRAPHICS_640_480_16)
FGLMShow()
Gradient(3)
Font := FGLFontLoad("font\door.fnt")
FGLFontSet(Font)
FGLSetColor(clWhite)
YMAX := FGLSetMode()[FGL_MODE_GRAPH_MAXY]
XMAX := FGLSetMode()[FGL_MODE_GRAPH_MAXX]
Length := FGLWriteAt("Teste")
Xpos := INT((XMAX/2) - (Length/2))
FGLWriteAt(Xpos,0,,,"Teste")
Length := FGLWriteAt("Version 2004")
Xpos := INT((XMAX/2) - (Length/2))
FGLWriteAt(Xpos,YMAX-30,,,"Version 2004")
FGLFontErase(Font)
FGLMShow()
FGLSetMode(FGL_TEXT_NORMAL)
//esta e a nova versao da funcao mMenu....
ajFont(48) // esta funcao nao tem nada a ver com a mMenu!
// ela apenas muda a letra para que o resultado fique
// bem melhor! vale a pena Usar!!!
// OBS: esta funcao (ajfont) pode receber numeros de 1 a 60.
// cada numero corresponde a uma letra diferente.confira!!
// Obs: esta funcao (ajfont) aumenta muito e Tamanho do '.EXE'
// se Vc quiser a Funcao mMenu sem ajfont() e so entrar
// em contato!
Setcolor('w+/b')
Scroll() //Limpa a Tela
// Vetor Com as opcoes
// do TOP-BAR
SetColor('n/w')
Scroll(24,0,24,79) // Pinta a ultima linha de branco...
@ 24,2 say 'Demonstracao de uso da funcao mMenu...' color 'r/w'
@ 24,68 say 'Versao 2.3' color 'n/w'
While .t.
// Variavel recebendo a funcao Para poder retornar algum Valor...
Resp := mMenu(1,1,vList,vList2,'w/n','n/w','b/g',2)
// para usar tecla de atalho (F2,F3,F4...) , basta fazer com o exemplo abaixo verificando o
// LastKey()
If Resp = '1/10' .or. lastKey() = K_ALT_F4 //o retorno '1/10' equivale a Sair... Verificacao Para Usar a funcao...
SetColor('')
Scroll()
Mens2('Contatos...','Programado e analisado por :Thiago Porto, t_porto@bol.com.br/')
ajFont(0) // desliga a fonte.(volta para o Normal)
Return nil
Else
If LastKey() # 27 .and. resp # '0'
Mens2('Demontracao da funcao mMenu...','Voce escolheu a opcao '+Alltrim(Resp)+'...')
Endif
Endif
End
/*
INSTRUCOES DE USO
Para compilar :
Clipper Demo
- Blinker Fi demo lib mMenu - OU - Rtlink fi demo lib mMenu -
Exemplo :
xResp:=mMenu(0,0,vet1,vet2,'w/n','n/w','n/w',2,'r/w')
Uma variavel recebe a funcao para poder existir retorno da funcao e vc
poder trabalhar com a funcao.
1-o primeiro parametro e a linha em que vai se formar o TOPBAR.
2-o segundo e a Coluna...Nao tem muita utilidade, o normal e se usar sempre a coluna 0.
3- o terceiro parametro e o vetor com as opcoes do TOPBAR...(Cadastro,Movimento...)
OBS : se Vc Quiser Tecla Quente Nas Opcoes Do TOP-BAR , Basta colocar em frente
da Letra desejada o simbolo '&' - & Comercial
4-o quarto e a matriz que deve ser preenchida como o exemplo acima.
OBS: a matriz deve ser preenchida na ordem, de acordo com o TOPBAR.
OBS:se voce quiser incluir Linhas(SEPARADOR) entre os elementos da matriz, basta
que Vc escreva, tambem entre aspas, a palavra 'SEPARADOR' sendo obrigatorio
ser toda MAIUSCULA!
OBS : se Vc Quiser Tecla Quente Nos elementos da matriz, Basta colocar em frente
da Letra desejada o simbolo '&' - & Comercial
OBS: se Vc Quiser Incluir SUB-MENUS Nos elementos da matriz Vc deve logo Apos
o caracter '' Abrir sem espacos uma Chave seguida de parenteses'{(' e colocar as opcoes
fechando os parenteses para diferenciar as opcoes do SubMenu e fechar a chave no final.
EXEMPLO:
'&Clientes {(&Novo)(&Consultar)(&Excluir)}'
OBS: Sem Espacos ...
5- o quinto parametro e a cor da opcao selecionada do menu(TOP-BAR).
6- o Sexto e a cor das opcoes nao selecionadas de todo o MENU (TOPBAR,ELEMENTOS DA MATRIZ)
7- o setimo parametro e a cor do elemento selecionado da matriz.
8- o oitavo parametro e a escolha de '1'(linha normal) ou '2'(linha dupla).
9 -o ultimo parametro e a cor das teclas quentes, se vc colocou '&' Nas
Opcoes do TOP-BAR e Dos elementos da MATRIZ.
*/
return nil
PROCEDURE Gradient(Welke)
Local Ytotaal,i,Xtotaal,Ystap
Ytotaal := FGLSetMode()[FGL_MODE_GRAPH_MAXY]
Xtotaal := FGLSetMode()[FGL_MODE_GRAPH_MAXX]
Ystap := Ytotaal/255
FGLMHide()
FOR i := 0 TO 255 STEP 4
DO CASE
CASE Welke == 1
FGLSetColor(RGB(i,0,0))
CASE Welke == 2
FGLSetColor(RGB(0,i,0))
CASE Welke == 3
FGLSetColor(RGB(0,0,i))
ENDCASE
FGLFillRectangle(0,INT(Ystap*i),Xtotaal,INT(Ystap*(i+4)))
NEXT
FGLMShow()
RETURN
FGLIB - Dúvida
Moderador: Moderadores
