Página 1 de 2
hprogres e NewBox()
Enviado: 27 Out 2021 21:05
por Itamar M. Lins Jr.
Olá!
Vou precisar verificar isso:
Código: Selecionar todos
oBar := HProgressBar():NewBox( "Ordenando, "+lTrim(str(nRec,9))+" De "+lTrim(str(nTRec,9))+" Registro(s)",,,350,,nTRec)
index on ticket tag mo99 for &cQuery temporary eval {||oBar:Step(),.t.}
mo->(dbGoTop())
oBar:Close()
Código: Selecionar todos
Error BASE/1072 Erro nos parƒmetros: <>
Called from source\winapi\hdialog.prg->HWG_ENDDIALOG(551)
Called from source\winapi\hprogres.prg->HPROGRESSBAR:CLOSE(190)
Called from prg\FecharMovimento.prg->PROCESSADIAS(164)
Amanhã vou tentar isolar o BUG e avisar lá para alguém corrigir.
Saudações,
Itamar M. Lins Jr.
Erro em hwg_EndDialog()
Enviado: 27 Out 2021 21:13
por Itamar M. Lins Jr.
Olá!
No fonte a classe hDialog está assim:
Código: Selecionar todos
CLASS HDialog INHERIT HWindow
...
METHOD Close() INLINE hwg_EndDialog( ::handle )
Saudações,
Itamar M. Lins Jr.
Erro em hwg_EndDialog()
Enviado: 27 Out 2021 21:16
por Itamar M. Lins Jr.
Olá!
Método close() da hprogress.prg
Código: Selecionar todos
METHOD CLOSE()
hwg_Destroywindow( ::handle )
IF ::lNewBox
hwg_EndDialog( ::oParent:handle )
ENDIF
RETURN Nil
Suadações,
Itamar M. Lins Jr.
Erro em hwg_EndDialog()
Enviado: 27 Out 2021 21:48
por JoséQuintas
Só me chamou a atenção o NewBox() criar uma dialog NOMODAL, não sei se deveria ser assim.
Erro em hwg_EndDialog()
Enviado: 27 Out 2021 22:23
por JoséQuintas
A parte que comentou está correta:
Código: Selecionar todos
METHOD NewBox( cTitle, nLeft, nTop, nWidth, nHeight, maxPos, nRange, bExit, lPercent ) CLASS HProgressBar
...
INIT DIALOG ::oParent TITLE cTitle ;
At nLeft, nTop SIZE nWidth, nHeight ;
STYLE WS_POPUP + WS_VISIBLE + WS_CAPTION + WS_SYSMENU + WS_SIZEBOX + iif( nTop == 0, DS_CENTER, 0 ) + DS_SYSMODAL + MB_USERICON
...
IF bExit != Nil
::oParent:bDestroy := bExit
ENDIF
ACTIVATE DIALOG ::oParent NOMODAL
::id := ::NewId()
::Activate()
::oParent:AddControl( Self )
RETURN Self
Quando usa NewBox() é criada uma janela Dialog com o progressbar dentro.
::oParent do NewBox() contém essa Dialog.
Código: Selecionar todos
METHOD CLOSE()
hwg_Destroywindow( ::handle )
IF ::lNewBox
hwg_EndDialog( ::oParent:handle )
ENDIF
RETURN Nil
o close() do progressbar destrói primeiro a janela da progressbar, e depois, se foi newbox criando dialog, destrói a dialog criada.
só estranhei o nomodal, porque teoricamente se não tem parada, fecha sozinho.
hprogres e NewBox()
Enviado: 28 Out 2021 08:19
por JoséQuintas
Apesar do erro ser no mesmo lugar do outro, a causa parece diferente, por isso separei as mensagens do outro tópico.
hprogres e NewBox()
Enviado: 28 Out 2021 08:22
por JoséQuintas
Código: Selecionar todos
METHOD CLOSE()
hwg_Destroywindow( ::handle )
IF ::lNewBox
hwg_EndDialog( ::oParent:handle )
ENDIF
RETURN Nil
Faça um teste aonde envia o Close(), antes do close, testando o que tem em ::oParent:Handle
É pra ter uma variável do tipo pointer - valtype( variavelprogressbar::oParent:Handle ) == "P"
hprogres e NewBox()
Enviado: 28 Out 2021 08:26
por JoséQuintas
Aproveitando...
Então... não tenho como testar.
Pra simular esse progressbar eu teria que fazer outras coisas que ainda não cheguei lá.
hprogres e NewBox()
Enviado: 28 Out 2021 08:35
por JoséQuintas
achei um exemplo nos samples, mas nele vai normal
Código: Selecionar todos
Function Test()
Local cMsgErr := "Bar doesn't exist"
PREPARE FONT oFont NAME "Courier New" WIDTH 0 HEIGHT -11
INIT DIALOG oForm CLIPPER NOEXIT TITLE "Progress Bar Demo";
FONT oFont ;
AT 0, 0 SIZE 700, 425 ;
STYLE DS_CENTER + WS_VISIBLE + WS_POPUP + WS_VISIBLE + WS_CAPTION + WS_SYSMENU ;
ON EXIT {||Iif(oBar==Nil,.T.,(oBar:Close(),.T.))}
@ 300, 395 BUTTON 'Reset Bar' SIZE 75,25 ;
ON CLICK {|| Iif(oBar==Nil,hwg_Msgstop(cMsgErr),oBar:Reset()) }
@ 380, 395 BUTTON 'Step Bar' SIZE 75,25 ;
ON CLICK {|| Iif(oBar==Nil,hwg_Msgstop(cMsgErr),oBar:Step()) }
@ 460, 395 BUTTON 'Create Bar' SIZE 75,25 ;
ON CLICK {|| oBar := HProgressBar():NewBox( "Testing ...",,,,, 10, 100 ) }
@ 540, 395 BUTTON 'Close Bar' SIZE 75,25 ;
ON CLICK {|| Iif(oBar==Nil,hwg_Msgstop(cMsgErr),(oBar:Close(),oBar:=Nil)) }
@ 620, 395 BUTTON 'Close' SIZE 75,25 ;
ON CLICK {|| oForm:Close() }
ACTIVATE DIALOG oForm
Return Nil
hprogres e NewBox()
Enviado: 28 Out 2021 08:54
por JoséQuintas
Mas é muito feia, qual a vantagem dessa?
hprogres e NewBox()
Enviado: 28 Out 2021 09:23
por Itamar M. Lins Jr.
Olá!
Com tema dos windows "gafanhoto". Ai está sem os temas.
Aqui não aconteceu o erro.
Acho que ele está fechando a progress tem que ficar sem esse X ai no canto.
Nisso o CLOSE vai fechar mais o quê ?
Esse é o mesmo erro lá da DIALOG. No mesmo local -> oDlg:handle != handle.
Saudações,
Itamar M. Lins Jr.
hprogres e NewBox()
Enviado: 28 Out 2021 09:54
por JoséQuintas
Nesse fonte tem os testes se a janela existe.
Se fechar no X, os testes evitam erro.
Esse X não deveria existir.
A janela deveria ser trocada pela outra que não tem X.
hprogres e NewBox()
Enviado: 28 Out 2021 10:05
por JoséQuintas
Código: Selecionar todos
STYLE WS_POPUP + WS_VISIBLE + WS_CAPTION + /* WS_SYSMENU + */ WS_SIZEBOX + iif( nTop == 0, DS_CENTER, 0 ) + DS_SYSMODAL + MB_USERICON
Mas.... falta confirmar se este comportamento foi depois da alteração:
hprogres e NewBox()
Enviado: 28 Out 2021 10:10
por JoséQuintas
O "problema" já existia antes.
A janela da barra de progresso fica por cima de tudo.
hprogres e NewBox()
Enviado: 28 Out 2021 10:12
por JoséQuintas
DS_SYSMODAL
This style is obsolete and is included for compatibility with 16-bit versions of Windows. If you specify this style, the system creates the dialog box with the WS_EX_TOPMOST style. This style does not prevent the user from accessing other windows on the desktop.
Do not combine this style with the DS_CONTROL style.
O estilo usado é pra isso mesmo, precisamos verificar qual a alternativa.
https://docs.microsoft.com/en-us/window ... box-styles