gtwvw

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

gtwvw

Mensagem por MARCELOG »

Olá fórum,
sabe aqueles prg´s que acompanham os sources da gtwvw.
Especialmente o wvwtest9.prg.
Estou tentando compilá-lo para estudar os recursos.
Todavia está ocorrendo o erro 9003 (too many recursive...)
Alguém pode me ajudar.

MarceloG
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Olá pessoal,
consegui resolver o problema e vi que o pontecial da gtwvw é grande.

É que estava faltando o arquivo Winuser.ch no meu include.

Agora é o seguinte:

1) A função appendmenu adiciona um item criado com createmenu, mas no exemplo não vi um bloco de código ou indicação para a ação do menu.

2) As constantes definidas são analizadas numa função nMenuCheck, que contém as ações.

3) Então pergunta-se:

a) Qual a função que ativa o menu na gtwvw ?

b) São, de fato, necessárias todas aquelas funções de suporte para funcionamento do menu?

MarceloG
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

Mensagem por carlos_dornelas »

Olá Marcelo!

Navegando pelo forum xharbour notei que você já quebrou bastante a cabeça com a WVW. Estou começando agora a fazer alguns testes com ela, mas estou quase careca e a coisa não anda. Quero apenas converter um programa clipper e gostaria de alterar, a principio, apenas o menu, mantendo as demais rotinas. Será que isso é possível? Você teria um pequeno exemplo de como implantar um menu e a invocação da respectiva ação? Desde já, muito obrigado!


{}s

Antonio Carlos - Curitiba
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Mensagem por luiz antonio da silva »

copie esse código e faça suas alterações ok...

#include "inkey.ch"
#include "common.ch"
#include "setcurs.ch"
#include "c:\xharbour\contrib\what32\include\winuser.ch"

#DEFINE ID_MENU_1 101
#DEFINE ID_MENU_2 102
#DEFINE WVW_DEFAULT_MENUKEYEVENT 1024

FUNC MAIN()
PUBLIC nTELA:=0
SET SCOREBOARD OFF
SET ESCAPE OFF
SET(_SET_EVENTMASK, INKEY_ALL )
SETINKEYAFTERBLOCK({|nkey| nAfterInkey(nkey)})
WVW_SETTITLE(,"MEU MENU")
WVW_SETVERTCARET(.t.)
WVW_SIZE_READY(.T.)
WVW_ENABLEMAXIMIZE(0,.T.)
WVW_ENABLESHORTCUTS(,.T.)
WVW_MAXIMIZE(0)
WVW_SETMOUSEMOVE(,.T.)
SETCOLOR("N/W")
CLS

hMenu = WVW_CreateMenu( )
hPopupMenu = WVW_CreateMenu( )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, ID_MENU_1, "~EXECUTAR FUNÇÃO")
WVW_AppendMenu( hMenu , MF_ENABLED + MF_POPUP , hPopupMenu, "~CADASTRO", )
hPopupMenu = WVW_CreateMenu( )
WVW_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, ID_MENU_2, "~SAIR")
WVW_AppendMenu( hMenu , MF_ENABLED + MF_POPUP , hPopupMenu, "~SAIDA DO MENU", )

WVW_SETMENU(, hMENU )

WHILE .T.
CH:=INKEY(0)
IF CH=K_ESC; quit; ENDIF
ENDDO
RETURN

**** Captura movimento de teclado ou mouse
function nAfterInkey(nkey)
* check if nkey is:
* (1) menu command, or
* (2) mouse button action
local bAction
if nkey==WVW_DEFAULT_MENUKEYEVENT
* MenuKeyEvent
return nMenuChecker(WVW_GETLASTMENUEVENT())
//was: elseif ASCAN({K_LBUTTONDOWN, K_LBUTTONUP, K_MOUSEMOVE}, nKey) > 0
elseif ASCAN({K_LBUTTONDOWN, K_LBUTTONUP, K_MOUSEMOVE, K_MMLEFTDOWN,;
K_LDBLCLK}, nKey) > 0
* MouseEvent
return //wvwm_nMouseChecker(nkey)
elseif (bAction := SETKEY(nKey)) != NIL
eval(bAction, PROCNAME(), PROCLINE(), READVAR())
return 0
endif
return nkey //nAfterInkey(nkey)

** testa evento capturado
FUNCTION nMenuChecker(nMenuEvent)
local nkey := 0
do case
case nMenuEvent==ID_MENU_1
messageBox(ntela, "FUNCIONA", "OK", MB_OK,,MB_SYSTEMMODAL)
case nMenuEvent==ID_MENU_2
QUIT
otherwise
messagebOX(nTELA,"ERRO","ERRO", MB_OK,,MB_SYSTEMMODAL)
endcase
return nkey

** para trablhar com tela inteira (wvw_set_size_ready)
#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


Espero que ajude...
HMG 3.4.4 - SQL SERVER - ORACLE
Responder