Tarde!
Não utilizou nenhum bat para compilar!
hbmk2 menunew.hbp
fiz o mesmo teste usando o hb30 funciona e neste o problema q não gera os erros, e consigo compilar os exemplos demos e coisa tipo "alo mundo"
Esse codigo fonte faz parte do teste para eu mudar o meu erp.
Frazato
# ---------------------------
# Nome do Executável
# ---------------------------
-omenunew
#-w0 -es2
-mt
# ---------------------------
# Bibliotecas
# ---------------------------
-gtwvw
-lhbct
#-lrddleto
-lhbwin
-lxhb
-lhbmisc
#----------------------------
-lhbziparc
-lhbmzip
-lminizip
#----------------------------
# LINKAGEM INCREMENTAL
#----------------------------
#-Lc:\minigui\lib
#-gtgui
#-inc
#-trace
#-rebuild
#-strip
#-run
#-jobs=%NUMBER_OF_PROCESSORS%
-workdir=c:\tmp\compilacao
#-ldebug
#----------------------------
# COMPACTAÇAO TEM QUE TER UPX
#----------------------------
#-compr=yes
# ---------------------------
# PRG PRINCIPAL
# ---------------------------
menunew.prg
#include "icbrasil.ch"
#include "cxwin.ch"
#include "inkey.ch"
#include "common.ch"
#include "setcurs.ch"
#include "winuser.ch" // from what32 contrib
#include "hbgtinfo.ch"
//---------------------------------------------
Function Main()
local ch, hMenu, hMenuItem, hSubMenuItem
public p_aListObjects := {}, p_nNormalMaxrow := wvw_maxmaxrow()+1 , p_nNormalMaxcol := wvw_maxmaxcol()+1
set defa to C:\SERVIDOR\BKP-130520\
Alert(version())
mAcesso := Repli('S',1000)
mTemporal := 'c:\temp\'
musr := 'teste menus'
Iniciar()
HB_GtInfo( HB_GTI_MAXIMIZED, .F. )
SET( _SET_EVENTMASK, INKEY_ALL )
CarregaMenuNovo() // jafmenu.prg
GERAMENU_NOVO() // jafmenu.prg
while .T.
if ( ch := inkey(0) ) == K_ESC
//If Alerta("Confirma SaÃda do Sistema",MB_YESNO,MB_ICONQUESTION) == IDYES
If MSGCONF("Confirma SaÃda do Sistema ?","1") == .T.
exit
Endif
Endif
enddo
Close All
Return nil
//---------------------------------------------
Function CarregaMenuNovo()
Close all
Public wMenus := {}, wModulos := {}
Sele 1
Use Modusys Alias Modu
go top
Go top
Do While ! Eof()
If Modu->ENABLE==.t.
If ValidaUserModulo(Modu->VALIDACAO)==.t.
Aadd(wModulos,{Hb_OemToAnsi(Alltrim(Modu->Titulo)),Modu->MenuUsado})
Endif
Endif
Skip+1
Enddo
Sele 2
Use menusys alias menu
Index on Menu->idmenu to (mTemporal+'menus')
Go top
nPosMenu := 0
Do while ! Eof()
If Menu->Enable== .t.
If ValidaUserModulo(Menu->VALIDACAO)==.t.
nPosMenu++
nIdmenu := Val(Menu->idmenu)+nPosMenu
OpcaoMenu := 'OpcaoMenu_'+alltrim(Str(nIdmenu))
lAcesso := Menu->Enable
Aadd(wMenus,{OpcaoMenu,; //1
Hb_OemToAnsi(Upper(Menu->BarraPromp)),; //2
nIdmenu,; //3
'{||'+Alltrim(Menu->Commando)+'}',; //4
lAcesso,; //5
Menu->idmenu }) //6
Endif
Endif
Skip+1
Enddo
* Retirado 07-04-2016 Ver melhor
*Cria_Menu_Pasta_Padrao()
*Carrega_Menu_Pasta()
Close All
Return Nil
*********************
FUNCTION GERAMENU_NOVO()
*********************
#define OPC_FIM 2851
#define OPC_LOGOFF 2852
#define OPC_LOGOFF_FRAZATO 2854
#define OPC_MENU_ATUALIZACAO 2855
Local hMenu
hb_gtInfo( HB_GTI_INKEYFILTER, {|nkey| PROCESSAKEY(nkey) } )
*hb_gtInfo( , {|nkey| PROCESSAKEY(nkey) } )
CREATEMENU hMenu
For n:= 1 to Len(wModulos)
MENUITEM hMenuItem OF hMenu PROMPT "~"+wModulos[n,1]
cIdMenu := StrZero(Val(wModulos[n,2]),3)
For i:= 1 to Len(wMenus)
If StrZero(val(wMenus[i,6]),3) == cIdMenu
cAcao := wMenus[i,1]
cMenu := wMenus[i,2]
Public &cAcao := wMenus[i,3]
SUBMENUITEM hMenuItem PROMPT cMenu ACTION &(cAcao) FLAGS PERMITE(wMenus[i,5])
Endif
Next
Next
*If Len(wFuncoes_Hrp_pasta) > 0
* MENUITEM hMenuItem OF hMenu PROMPT "~ATUALIZACAO"
* SUBMENUITEM hMenuItem PROMPT 'Atualizacoes' ACTION OPC_MENU_ATUALIZACAO FLAGS MF_ENABLED + MF_STRING
*Endif
MENUITEM hMenuItem OF hMenu PROMPT Upper("S~air")
*SUBMENUITEM hMenuItem PROMPT "~LogOff - Destrava terminal Bloqueado" ACTION OPC_LOGOFF FLAGS MF_ENABLED + MF_STRING
*SUBMENUITEM hMenuItem PROMPT "~LogOff - Lista Terminal a Bloqueado" ACTION OPC_LOGOFF_FRAZATO FLAGS MF_ENABLED + MF_STRING
SUBMENUITEM hMenuItem PROMPT "~Sair" ACTION OPC_FIM FLAGS MF_ENABLED + MF_STRING
WVW_SetMenu(, hMenu )
* PROCESSAKEY(nKey)
RETURN NIL
********************
Static FUNCTION PERMITE(lOk)
********************
If lOk==.t.
RETURN ( MF_ENABLED + MF_STRING )
Else
RETURN ( MF_DISABLED +MF_STRING )
Endif
// FUNCAO : ProcessaKey()
// PARAMETROS : nKey - Codigo da tecla pressionada
// DESCRICAO : Funcao chamada apos o pressionamento de uma tecla ou clique do
// mouse e antes da funcao inkey(). Usada para acessar os menus
// do sistema.
// RETORNO : Acao configurada na funcao PROCESSAMENU() ou passa o codigo da
// tecla para inkey()
//
****************************
FUNCTION PROCESSAKEY( nkey )
****************************
local bAction
if nkey == WVW_DEFAULT_MENUKEYEVENT
return ProcessaMenu( WVW_GetLastMenuEvent() )
elseif ( bAction := setkey(nKey) ) # NIL
eval( bAction, Procname(), Procline(), Readvar() )
return 0
endif
RETURN nkey
//
// FUNCAO : ProcessaMenu()
// PARAMETROS : cEvento - Evento gerado pela selecao de uma opcao do menu
// DESCRICAO : Verifica se a acao selecionada tem um evento relacionado. Se
// sim "dispara" essa chamada, caso contrario apresenta mensagem
// padrao.
// RETORNO : Se pressionada opcao de sair, retorna K_ESC para terminar a
// execucao, caso contrario, limpa a tecla para nao re-chamar a
// funcao.
//
********************************
static FUNCTION PROCESSAMENU( nEvento )
********************************
local nKey := 0
local cPesq
do case
case nEvento == OPC_FIM
nKey := K_ESC
Case nEvento == OPC_LOGOFF
*FUNCAO_LOGOFF('')
Case nEvento == OPC_LOGOFF_FRAZATO
*FUNCAO_LOGOFF_GERAL()
Case nEvento == OPC_MENU_ATUALIZACAO
*CHAMAROTINAATUALIZACAO()
otherwise
cPesq:= nEvento
nPos := Ascan(wMenus,{|x|x[3]==cPesq})
If nPos == 0
Alerta("Em Construção"+Str(cPesq,11),MB_OK)
Else
//Alerta('Evento '+Str(nEvento)+Chr(10)+wMenus[nPos,1]+chr(10)+wMenus[nPos,4])
//Colocar a Funcao pra Gravar se permite ou n'ao!
If wMenus[nPos,4]#Nil
PROGRA := &(wMenus[nPos,4])
If ValType(PROGRA)=='B'
EVAL(PROGRA)
Endif
Endif
*SetInkeyAfterBlock({|nkey| ProcessaKey( nkey ) }) // jafmenu.prg
Endif
endcase
RETURN nKey
//---------------------------------------------------
Static Function ValidaUserModulo(cVerAcesso)
Local Permite := Val(cVerAcesso)
Local lOk := .f.
Local Acesso := MACESSO // Variavel Public Inicial no Login
IF SUBSTR(ACESSO,PERMITE,1) == "S"
lOk:= .t.
Endif
Return lOk
*>----------------------------------------------------------------
FUNCTION MSGCONF(TEXTO,BOTAO)
Local nRet :=.F. //Iif(BOTAO==2,.F.,.T.)
Local cTitle := Alltrim(mUsr) //Lerparam("NOME_EMPRESA")
//If Alerta(TEXTO,MB_YESNO,MB_ICONQUESTION) == IDYES
If win_messagebox(WVW_GETWINDOWHANDLE(), TEXTO, cTitle, MB_YESNO + MB_ICONQUESTION + MB_SYSTEMMODAL)==IDYES
nRet := .T.
Endif
RETURN (nRet)
//----------------------------------------------------------------------------
FUNCTION MSGALERT(TEXTO,ACAO)
LOCAL TELA01 := SAVESCREEN(00,00,24,79)
CORES()
CAIXATEXTO(12,20,16,55,"Aten‡Æo","BG+/NB+","NN/NN","N")
@ 14,21 SAY PADC(TEXTO,33) COLOR("WW+*/BB+")
IF ACAO!= NIL
INKEY(0)
ENDIF
RESTSCREEN(00,00,24,79, TELA01 )
//
// FUNCAO : Alerta()
// PARAMETROS : cMessage - Mensagem para exibir
// nNumButtons - N§ de botoes para exibir
// DESCRICAO : Apresenta mensagem no centro da tela e um n§ de botoes para o
// usuario escolher a acao.
// RETORNO : Codigo numerico ( em winuser.ch ) : IDYES, IDNO, etc.
//
************************************************
FUNCTION Alerta( cMessage, nNumButtons, nStyle )
************************************************
local nCurButton, cmsg := Hb_OemToAnsi(cMessage)
Local cTitle := Alltrim(mUsr)//Lerparam("NOME_EMPRESA")
default nNumButtons to MB_OK ,;
nStyle to MB_ICONHAND
//nCurButton := wvw_messagebox( 0, Hb_OemToAnsi(cMessage), "ATENÇÃO", nStyle + nNumButtons+MB_TASKMODAL )
win_messagebox(WVW_GETWINDOWHANDLE(), cMsg, cTitle, MB_OK + MB_SYSTEMMODAL)
VoltaFoco()
RETURN nCurButton
//------
FUNCTION CAIXATEXTO(LIN1,COL1,LIN2,COL2,TEXTO,COR,FUNDO,DEGRADE,CTITULO,lMenu)
Local hMenu, hMenuItem, nJanela
Local cCor := setcolor(), nWidth, nCol, nRow
local lMainCoord := WVW_SetMainCoord( .t. )
local nMaxRow := maxrow()-3, nMaxCol := maxcol()
Default lMenu to .t. // JANELA_COM_BOTAO
If xViaWts==.f.
*nofoto := "Fundo.jpg"
*nMaxRow := maxrow(); nMaxCol := maxcol()
*Wvw_drawimage(0,00,00,nMaxRow,nMaxCol,nOfoto,.f.)
Endif
wQuantESCAntesF12 := 0 // Funcao Kill_System2()
nWLogin := AbreJanela( Hb_OemToAnsi(cArq_syssgerf+TEXTO) ,LIN1,COL1 , LIN2, COL2)
If lMenu == .t.
* BuildMenu( @hMenu, @hMenuItem )
Endif
set confirm on
RETURN nWLogin
********************
FUNCTION VoltaFoco()
********************
RETURN WVW_xReposWindow()
function fRLock()
return nil
#pragma BEGINDUMP
#include "hbapi.h"
HB_FUNC( WVW_SIZE_READY )
{
BOOL bIsReady;
static BOOL s_bIsReady = FALSE;
bIsReady = s_bIsReady;
if (ISLOG(1))
{
s_bIsReady = hb_parl(1);
}
hb_retl(bIsReady);
}
#pragma ENDDUMP
*>----------------------------------------------------------------------------------
FUNCTION CORES()
setcolor("n/w,w+/b,n,n,n/w")
Return Nil //(SETCOLOR("I/b,N/GR,,,I/WW+"))
*********************************************************
FUNCTION AbreJanela( cTitulo, nLI, nCI, nLF, nCF, nTipo )
*********************************************************
local nWin
default nTipo to WS_CAPTION
if ( nWin := WVW_nOpenWindow( cTitulo, nLI, nCI, nLF, nCF, nTipo ) ) == 0
Alerta("Erro na criacao da janela " + cTitulo+;
'Favor verificar o tamanho da resolucao da Tela!'+;
'Linha Final:'+str(nLF,11))
return 0
endif
RETURN nWin
//
// FUNCAO : FechaJanela()
// PARAMETROS : -
// DESCRICAO : Jeito diferente de chamar WVW_lCloseWindow()
// RETORNO : .T. se conseguiu fechar janela, caso contrario .F.
//
**********************
FUNCTION FechaJanela()
**********************
RETURN WVW_lCloseWindow()
//
// FUNCAO : DbfToArray()
// PARAMETROS : aCampos - Matriz com nomes dos campos da area atual
// DESCRICAO : Cria matriz com a mesma estrutura do arquivo da area atual e
// preenche com o conteudo do registro atual
// RETORNO : matriz com o registro atual
//
******************
FUNCTION Iniciar()
******************
local lRet := .T.
* dbsetdriver("DBFCDX")
lRefreshTelaProduto := .t.
wObj_Itens := {}
set confirm on
set deleted on
set bell off
set scoreboard off
set eventmask to INKEY_ALL
set date british
set epoch to 1950
Set date format to "DD/MM/YYYY"
set exclusive off
* Set background Tasks On
SET WRAP ON
lRet := WVW_SetFont(,'Ms Sans Serif', 20, 10 ) // Nova teste melhor nos windows
*If GetEnv("WINDOWS98")=='S'
* cTipoFonte := Lerparam("TIPODEFONTE")
* lRet := WVW_SetFont(,cTipoFonte)
*Endif
If !lRet
wvw_messagebox(0, "Fonte não carregada", "JAF Desenv.", 0)
lRet := WVW_SetFont(,'Ms Sans Serif', 16, 8 ) // LABORATORIO
wvw_messagebox(0, "Fonte não carregada", "JAF Desenv.", 0)
Endif
Set(39,159)
wvw_noclose()
wvw_seticon(, "Jaf_xh.ico" )
wvw_size_ready(.T.)
wvw_setmaincoord(.T.)
wvw_SetPaintRefresh(1) // 1
WVW_SetCodePage(,255) // 250
wvw_SetVertCaret(.T.)
wvw_enableshortcuts(0,.T.)
wvw_maximize(0)
*COR_NORMAL
*Toolbar(0)
*Jta(0)
cls
lRet := .t.
//Win_OsNetRegOk(.t.,.t.)
* Cria_Scrip_padrao() //
RETURN lRet