O problema era: ao retornar para o menu, perdia a imagem.
Mas é um menu chamando sub-menu, que pode chamar sub-menus, que depois chama o módulo.
Save Screen/Restore Screen não salva parte gráfica, janela Windows só redesenhando.
Situação anterior:
- Redesenhando tela, perdia-se o texto
- Restaurando texto, perdia-se o desenho, e faltava redesenhar (A rotina Paint() que quem mexe com GUI conhece).
Esse é o comportamento normal da GT.
O desenho entra como imagem de fundo, e apaga o texto da GT.
O harbour mostra o texto da GT como imagem de fundo, o que apaga a imagem do desenho.
O que GUI faz ? redesenha tudo.
O primeiro pensamento foi modificar as rotinas pra desenhar cada um dos menus e também os de nível anterior.
Muito complicado... muito trabalho pra pouca coisa....
Mas veio uma luz, algo relativamente simples.
O que GUI faz ? usa JANELAS !!!
Quais janelas existem aí: a do menu horizontal, e a de cada menu vertical.
etapa 1: salvar janela do menu horizontal ATUALIZADO
Acrescentei a última linha
Código: Selecionar todos
DO WHILE .T.
SetColor( SetColorNormal() )
Scroll( 1, 0, 1, MaxCol(), 0 )
FOR mCont = 1 TO Len( mMenuOpt )
@ 1, mColIni[ mCont ] SAY mMenuOpt[ mCont, 1 ] COLOR iif( mCont == mOpc, SetColorFocus(), SetColorNormal() )
NEXT
aTela := { 1, 0, 1, MaxCol(), SaveScreen( 1, 0, 1, MaxCol() ) }
Passei uma lista de telas, contendo esse menu horizontal
Acrescentei o último parâmetro, que de início vai receber apenas o menu horizontal
Código: Selecionar todos
BoxMenu( 3, mColIni[ mOpc ] - 20 + Int( Len( mMenuOpt[ mOpc, 1 ] ) / 2 ), mMenuOpt[ mOpc, 2 ], @mMenuOpt[ mOpc, 5 ], mMenuOpt[ mOpc, 1 ], .T., .T., aMouseMenu, 1, 1, { aTela } )
Se fosse fazer análise de tamanho, acrescentar vazio, testar se tá vazio, etc, ia ser muito fonte, mais simples adicionar um elemento inútil.
Código: Selecionar todos
AAdd( aTelas, { mLini, mColi, mLini + nHeight - 1, mColi + nWidth - 1, SaveScreen( mLini, mColi, mLini + nHeight - 1, mColi + nWidth - 1 ) } )
Desenhar, e restaurar as janelas de todos os menus
Código: Selecionar todos
DO WHILE .T.
wvt_DrawImage( 2, 0, MaxRow() - 3, MaxCol(), "d:\temp\rio.jpg" )
FOR EACH aTela IN aTelas
RestScreen( aTela[1], aTela[2], aTela[3], aTela[4], aTela[5] )
NEXT
FOR EACH oElement IN mMenuOpt
(pensando bem, acho que nem precisava, porque vai ser reescrito sempre)
Código: Selecionar todos
Atail( aTelas )[ 5 ] := SaveScreen( mLini, mColi, mLini + nHeight - 1, mColi + nWidth - 1 )
Código: Selecionar todos
aSize( aTelas, Len( aTelas ) - 1 )
Parece até que são janelas....
