JoséQuintas escreveu:TALVEZ, apenas talvez, ainda possa ter problema com multithread, mas pode ser resolvido.
bom, não é simplesmente colocar no .HBC = MT=YES, precisa de algo mais... mas como fazer?
o módulo console, quando é acionado de dentro da HMG chamo assim, por exemplo no action de um BUTTON ou MENU ITEM:
[codeACTION {|| EXECUTA_PROGRAMA ({|| VENDAS ()})}[/code]
Jà dentro da MONTA_VETOR, NÃO temos nada significante, mas, em EXECUTA_PROGRAMA:
static function EXECUTA_PROGRAMA (PROGRAMA)
eval (PROGRAMA)
return
já o módulo "VENDAS" ou qualquer outro, começa assim:
function VENDAS()
* Programa : VENDAS
#include 'GCI10000.CH'
...
[VARIÁVEIS ... DECLARAÇÕES #DEFINEs etc}
...
TELA_CRT_wvg (procname (),'VENDAS WvgCrt',COR_PADRAO, chr (176), .t. , 1 )
...
a função TELA_crt_wvg, simplesmente padroniza para todas as chamadas aos módulos CONSOLE a funcionalidade de ser o WVGCRT
o objeto:destroy() da wvgcrt() está no final do módulo, antes do retorno:
wvg_DelPaint()
TELA_CRT_wvg:Destroy()
BringWindowBackToTop ( "Form_Main" )
a função BringWindoBackToTop, simplesmente foi acrescentada para garantir o retorno ao FORM_MAIN...
é isso...
o erro, só começa a existir, após chamar a instância CONSOLE, que até então, o sistema não existia tela preta alguma.
Após acionar, a tela é fechada, mas, abre outra preta que não dá pra maximizar, fechar e o "prompt" do cursor do teclado aparece no topo esquerdo paralisado e outro no topo inferior direito e pisca (blink) por 5x e desaparece.
Após essa tela preta/console abrir sozinha, é que se movimentar o mouse no FORM_MAIN é que aparece o travamento do sistema.
Mas, isso não é imediato, pode demorar 5 segundos, como também pode demorar 5 minutos, mas, em algum momento, o sistema irá fechar e acontecerá o erro.
Talvez, se a gente conseguir eliminar o rastro do mouse que quando passa por cima de um objeto ele não fique em evidência, poderia ser uma tentativa/solução...
mas, nem tenho ideia de como fazer...
por falar na função WVGCRT, dei uma pesquisada dentro do gtihub do Viktor e encontrei o seguinte no CRT.PRG:
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD destroy()
o new, create e destroy, mais ou menos a gente sabe usar... mas, o configure() pra que serve?
os objetos oParente, oOwner e a matriz aPressParams talvez, sejam a solução, pois pela minha "leiguice" o oParent já diz que deve estar aparentado a algum outro objeto ou janela, quem sabe se colocarmos "form_main" ou algo do tipo não seja a solução?
tem também os demais objetos e funções:
/* Methods */
METHOD currentPos()
METHOD currentSize()
METHOD captureMouse()
METHOD disable()
METHOD enable()
METHOD getFrameState()
METHOD getHWND()
METHOD getModalState()
METHOD hasInputFocus()
METHOD hide()
METHOD invalidateRect( nTop, nLeft, nBottom, nRight )
METHOD isEnabled()
METHOD isVisible()
METHOD lockPS()
METHOD lockUpdate()
METHOD menuBar()
METHOD setColorBG()
METHOD setColorFG()
METHOD setFont()
METHOD setFontCompoundName()
METHOD setFrameState( nState )
METHOD setPresParam()
METHOD setModalState()
METHOD setPointer()
METHOD setTrackPointer()
METHOD setPos()
METHOD setPosAndSize()
METHOD setSize( aSize, lPaint )
METHOD showModal()
METHOD show()
METHOD toBack()
METHOD toFront()
METHOD unlockPS()
METHOD winDevice()
como usá-los? claro que deve-se excluir dessa pergunta o MENUBAR, SHOW e alguns dos quais nos familiarizamos...
quer mais dúvidas que temos dessa tão preciosa LIB WVG?
/* MESSAGES */
METHOD enter( xParam ) SETGET
METHOD leave( xParam ) SETGET
METHOD lbClick( xParam ) SETGET
METHOD lbDblClick( xParam ) SETGET
METHOD lbDown( xParam ) SETGET
METHOD lbUp( xParam ) SETGET
METHOD mbClick( xParam ) SETGET
METHOD mbDblClick( xParam ) SETGET
METHOD mbDown( xParam ) SETGET
METHOD mbUp( xParam ) SETGET
METHOD motion( xParam ) SETGET
METHOD rbClick( xParam ) SETGET
METHOD rbDblClick( xParam ) SETGET
METHOD rbDown( xParam ) SETGET
METHOD rbUp( xParam ) SETGET
METHOD wheel( xParam ) SETGET
METHOD close( xParam ) SETGET
METHOD helpRequest( xParam ) SETGET
METHOD keyboard( xParam ) SETGET
METHOD killDisplayFocus( xParam ) SETGET
METHOD killInputFocus( xParam ) SETGET
METHOD move( xParam ) SETGET
METHOD paint( xParam ) SETGET
METHOD quit( xParam, xParam1 ) SETGET
METHOD resize( xParam ) SETGET
METHOD setDisplayFocus( xParam ) SETGET
METHOD setInputFocus( xParam ) SETGET
METHOD dragEnter( xParam, xParam1 ) SETGET
METHOD dragMotion( xParam ) SETGET
METHOD dragLeave( xParam ) SETGET
METHOD dragDrop( xParam, xParam1 ) SETGET
como usá-las?
tudo pode estar relacionado a estas preciosas funções que ninguém entende, nem mesmo o JQuintas, somente o Bedi e o Viktor, que não fizeram manuais ou guias rápidos, somente, exemplos, que não usam nada disso aí...
então fica a pergunta:
pra que inventaram/criaram essa LIB?
Pra nadar e nadar e morrer na praia?