Mensagem Processamento

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem Processamento

Mensagem por asimoes »

Amigos,

Eu fiz uma rotina para exibir mensagens de processamento baseado nos exemplos postados aqui no forum, mas estou com um problema.

A função é a seguinte:

MsgIni é para mostrar a mensagem.

Código: Selecionar todos

FUNCTION MsgIni( cMensagem, cTitulo, nTempo )
   LOCAL oFonte := HFont():Add( "Courier New" , 0 ,-15,500,255 ), oSayMsg
   LOCAL nLenMensagem:=0
   DEFAULT cTitulo   To "Aviso do Sistema",;
           cMensagem To "Aguarde, em Processamento.",;
           nTempo    To 0 
   nLenMensagem:=(Len(cMensagem) * 15) + 20
   INIT DIALOG oDlgHabla       ;
   TITLE HB_OemToAnsi(cTitulo) ;
   SIZE nLenMensagem, 80       ;
   STYLE DS_CENTER + WS_VISIBLE
   @ 0,16  SAY oSayMsg Caption HB_OemToAnsi(cMensagem) Of oDlgHabla SIZE nLenMensagem, 20 STYLE SS_CENTER FONT HFont():Add( 'Lucida Console',0,-19,700,,,) COLOR "N+/W"
   oSayMsg:Name := 'oSayMsg' 
   IF nTempo > 0
      SET TIMER oTimer OF oDlgHabla VALUE nTempo ACTION {|| MsgFim(.T.) } //{|| oDlgHabla:CLOSE() }
   ENDIF
   ACTIVATE DIALOG oDlgHabla NOMODAL
RETURN .T.
MsgFim é para fechar a dialog:

Código: Selecionar todos

FUNCTION MsgFim(lTime)
DEFAULT lTime TO .F.
IF oDlgHabla#Nil
   IF lTime
      oDlgHabla:oTimer:End()
   ENDIF
   EndDialog()
   oDlgHabla:Close()
   hwg_SetForegroundWindow(hWnd)
ENDIF
RETURN Nil
O código onde estou com problema:
A dialog é exibida com o titulo sem a mensagem que é passada para o parâmetro.
MsgIni("Criando indice para Cliente.")

Código: Selecionar todos

FUNCTION MONT_ARQ
CLOSE ALL
if adir('clie*.ntx')<5
   MsgIni("Criando indice para Cliente.")
   netuse('cliente',.t.,0,'')
   pack
   index on cnpj       to clieA 
   index on nom        to clieB
   index on bairro     to clieC
   index on cid+bairro to clieD
   index on cod_vend   to clieE
   MsgFim()
endif
//Existem outros indices além deste, este primeiro é só para exemplificar.
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Mensagem Processamento

Mensagem por esbasso »

coloque isso
ACTIVATE DIALOG oDlgHabla NOMODAL
--> UPDATEWINDOW( oDlgHabla:handle )
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Mensagem Processamento

Mensagem por asimoes »

Esbasso,

Resolvido pela sua dica.

Tenho uma pergunta: Tem como alterar o SIZE da dialog de forma dianamica?

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Mensagem Processamento

Mensagem por esbasso »

odlg:move( left,top,width,height)

em relação a resposta acima se atualizar do CVS verá que nem precisa por aquela linha a mais updatewindow
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Mensagem Processamento

Mensagem por asimoes »

Esbasso,

Tem como somente alterar o valor da width para deixar a dialog centralizada dinamicamente na tela, conforme o len(mensagem) que é passada para a função?

INIT DIALOG oDlgHabla ;
TITLE HB_OemToAnsi(cTitulo) ;
SIZE 40, 80 ;
STYLE DS_CENTER + WS_VISIBLE

Eu atualizo a mensagem usando a função:

Código: Selecionar todos

FUNCTION MsgTroca(cMensagem)
   oDlgHabla:aControls[1]:SetText(HB_OemToAnsi(cMensagem))
RETURN Nil 
A ideia é atualizar o tamanho da dialog (horizontal) com o tamanho da string de forma que fique centralizada.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Mensagem Processamento

Mensagem por esbasso »

tenta assim

FUNCTION MsgTroca(cMensagem)
local ASize := TxtRect( cMensagem, oDlgHabla:aControls[1] )
oDlgHabla:aControls[1]:nWidth := asize[ 1 ] + 2
oDlgHabla:aControls[1]:SetText(HB_OemToAnsi(cMensagem))
oDlgHabla:aControls[1]:move( , , This:oMsg:nWidth + 2 , )
oDlgHabla:center()
RETURN Nil
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Mensagem Processamento

Mensagem por esbasso »

faltou
-->oDlgHabla:move( , , This:oMsg:nWidth + 2 , )
oDlgHabla:aControls[1]:move( , , This:oMsg:nWidth + 2 , )
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Mensagem Processamento

Mensagem por asimoes »

Olá Esbasso,

Está dando erro em This:oMsg:nWidth + 2, informa que a variável this não existe.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Mensagem Processamento

Mensagem por esbasso »

bah esqueci de alterar
This:oMsg: = oDlgHabla:aControls[1]
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Mensagem Processamento

Mensagem por asimoes »

Olá Esbasso,

Em primeiro lugar, obrigado pelas dicas que você me passou e que resolveram o problema.
Eu ainda não tinha atualizado a hwgui pela cvs, quando eu baixei, quando fui compilar apareceu isto:

source\hdialog.prg(339) Warning W0001 Ambiguous reference 'WM_QUERYUISTATE'
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Mensagem Processamento

Mensagem por esbasso »

adicione no windows.ch
linha 65
#define WM_QUERYUISTATE 297 // 0x0129

maos tarde irei colocar no cvs a linha que faltou
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Responder