-
Posts
1,291 -
Joined
-
Last visited
-
Days Won
35
Posts posted by oribeiro
-
-
Testei aqui com todas as releases do Fhw desde a Fhw2.7 de Fevereiro até a Fhw2.8 com os seus respectivos xHarbour´s e em todas elas a tecla ESCAPE faz com que o VALID execute duas vezes.
Onde está o problema?
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
João,
Acha possÃvel você me enviar esses arquivos por MSN?
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
Sim, pode ser problema na minha versão do Fwh 2.7 ou do xHarbour. Você pode me passar a lib do Fhw para xHb 0.99.61 e também me indicar onde é que eu baixo o .61? Quero testar aqui usando o que você tem aÃ.
Obrigado.
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
João,
Compilei o seu exemplo e quando fecho o sistema com a tecla ainda passa duas vezes no VALID da Window.
Como faço para driblar isso? Se compilar esse mesmo exemplo com Fivewin 16bits não dá esse erro.
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
Vejam no exemplo abaixo, que quando se fecha a janela com a tecla , apenas no xHarbour, ele processa duas vezes o VALID da Window. Como faço para driblar essa situação? Tentei criar uma variável Static e atualizá-la para tratar a segunda vez que o comando é processado mas não está dando certo.
#include "fivewin.ch"
Static tela:=.T.
function main()
local oWnd1, oWnd2, oDlg1, oBtn1, oGet1
Public cVar1:=PadR("APARTE A TECLA E VEJA O RESULTADO",100)
DEFINE WINDOW oWnd1 TITLE "WINDOW PRINCIPAL" FROM 0,0 TO 20,60 MDI
DEFINE WINDOW oWnd2 TITLE "TECLA " FROM 0,0 TO 20,60 MDICHILD OF oWnd1
oWnd2:bGotFocus = {||oDlg1:SetFocus()} // Sempre coloca o foco no Dialog
oWnd2:SetColor(GetSysColor(8),GetSysColor(15)) // faz Cor da oWnd2 = oDlg1
DEFINE DIALOG oDlg1 OF oWnd2 STYLE WS_CHILD FROM 0,0 TO 20,60
@ 2,05 GET oGet1 VAR cVar1 SIZE 150,12 PICT '@!'
@ 3,10 BUTTON oBtn1 PROMPT "Fechar" SIZE 100,50 ACTION oDlg1:End()
ACTIVATE DIALOG oDlg1 NOWAIT VALID oWnd2:End()
ACTIVATE WINDOW oWnd2 VALID ( passou(), .T. )
ACTIVATE WINDOW oWnd1 MAXIMIZED
return nil
function passou()
msginfo(tela,"PASSOU")
tela:=.F.
return (.t.)
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
Vejam no exemplo abaixo, que quando se fecha a janela com a tecla , apenas no xHarbour, ele processa duas vezes o VALID da Window. Como faço para driblar essa situação? Tentei criar uma variável Static e atualizá-la para tratar a segunda vez que o comando é processado mas não está dando certo.
#include "fivewin.ch"
Static tela:=.T.
function main()
local oWnd1, oWnd2, oDlg1, oBtn1, oGet1
Public cVar1:=PadR("APARTE A TECLA E VEJA O RESULTADO",100)
DEFINE WINDOW oWnd1 TITLE "WINDOW PRINCIPAL" FROM 0,0 TO 20,60 MDI
DEFINE WINDOW oWnd2 TITLE "TECLA " FROM 0,0 TO 20,60 MDICHILD OF oWnd1
oWnd2:bGotFocus = {||oDlg1:SetFocus()} // Sempre coloca o foco no Dialog
oWnd2:SetColor(GetSysColor(8),GetSysColor(15)) // faz Cor da oWnd2 = oDlg1
DEFINE DIALOG oDlg1 OF oWnd2 STYLE WS_CHILD FROM 0,0 TO 20,60
@ 2,05 GET oGet1 VAR cVar1 SIZE 150,12 PICT '@!'
@ 3,10 BUTTON oBtn1 PROMPT "Fechar" SIZE 100,50 ACTION oDlg1:End()
ACTIVATE DIALOG oDlg1 NOWAIT VALID oWnd2:End()
ACTIVATE WINDOW oWnd2 VALID ( passou(), .T. )
ACTIVATE WINDOW oWnd1 MAXIMIZED
return nil
function passou()
msginfo(tela,"PASSOU")
tela:=.F.
return (.t.)
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
Essa situação de fechar com o e ele executar o VALID da Window duas vezes não acontece se compilado com Fivewin puro.
Estranho né???
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
Vejam no exemplo abaixo, acho que estou próximo de descobrir o motivo do erro: Se você fechar com o botão [Fechar] ele passa no VALID do Window apenas uma vez, mas se você fechar usando a tecla ele passa "duas" vezes. Isso é bug???
#include "fivewin.ch"
function main()
local oWnd1, oWnd2, oDlg1, oBtn1, oGet1, i:=0
Cria_Campos()
DEFINE WINDOW oWnd1 TITLE "WINDOW PRINCIPAL" FROM 0,0 TO 20,60 MDI
DEFINE WINDOW oWnd2 TITLE "TECLA " FROM 0,0 TO 20,60 MDICHILD OF oWnd1
oWnd2:bGotFocus = {||oDlg1:SetFocus()} // Sempre coloca o foco no Dialog
oWnd2:SetColor(GetSysColor(8),GetSysColor(15)) // faz Cor da oWnd2 = oDlg1
DEFINE DIALOG oDlg1 OF oWnd2 STYLE WS_CHILD FROM 0,0 TO 20,60
@ 2,05 GET oGet1 VAR cVar1 SIZE 150,12 PICT '@!'
@ 3,10 BUTTON oBtn1 PROMPT "Fechar" SIZE 100,50 ACTION oDlg1:End()
ACTIVATE DIALOG oDlg1 NOWAIT VALID oWnd2:End()
ACTIVATE WINDOW oWnd2 VALID ( msginfo("passou "+str(i++)),.T. ) // , oBtn1:SetFocus(), IIF(Atualizou(oDlg1),Grava(),.T.), Destroi_Campos() )
ACTIVATE WINDOW oWnd1 MAXIMIZED
return nil
Function Cria_Campos()
Public cVar1:=PadR("APARTE A TECLA E VEJA O RESULTADO",100)
Return NIl
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
Nesse meu exemplo abaixo, se eu fecho a dialog com o enquanto o sistema pargunta se eu desejo gravar ele já fechou a dialog e já matou a variavel. Se eu fecho com o botão [Fechar] isso não acontece. Digite alguma coisa no campo get e faça o teste, por favor.
#include "fivewin.ch"
function main()
local oWnd1, oWnd2, oDlg1, oBtn1, oGet1
Cria_Campos()
DEFINE WINDOW oWnd1 TITLE "WINDOW PRINCIPAL" FROM 0,0 TO 20,60 MDI
DEFINE WINDOW oWnd2 TITLE "TECLA " FROM 0,0 TO 20,60 MDICHILD OF oWnd1
oWnd2:bGotFocus = {||oDlg1:SetFocus()} // Sempre coloca o foco no Dialog
oWnd2:SetColor(GetSysColor(8),GetSysColor(15)) // faz Cor da oWnd2 = oDlg1
DEFINE DIALOG oDlg1 OF oWnd2 STYLE WS_CHILD FROM 0,0 TO 20,60
@ 2,05 GET oGet1 VAR cVar1 SIZE 150,12 PICT '@!'
@ 3,10 BUTTON oBtn1 PROMPT "Fechar" SIZE 100,50 ACTION oDlg1:End()
ACTIVATE DIALOG oDlg1 NOWAIT VALID oWnd2:End()
ACTIVATE WINDOW oWnd2 VALID ( oBtn1:SetFocus(), IIF(Atualizou(oDlg1),Grava(),.T.), Destroi_Campos() )
ACTIVATE WINDOW oWnd1 MAXIMIZED
return nil
Function Cria_Campos()
Public cVar1:=PadR("APARTE A TECLA E VEJA O RESULTADO",100)
Return NIl
Function Destroi_Campos()
cVar1 := NIL
RELEASE cVar1
Return (.t.)
Function Grava()
if msgyesno("O registro foi atualizado, deseja gravar?")
campo1 := cVar1 // aqui dá erro, ele já destruiu os campos.
msginfo( cVar1 )
endif
Return (.T.)
Function Atualizou(oDlg,lGravou)
Local f:=1
local g:=1
local h:=1
local Contador:=0
lGravou := iif(lGravou=nil,.F.,lGravou) // Verifica se houve a gravacao
While f<=Len(oDlg:aControls) //acontrols é uma propriedade de todas as dialogs e é criada automaticamente
if oDlg:aControls[f]:ClassName()="TGET" .or. oDlg:aControls[f]:ClassName()="TMULTIGET"
if oDlg:aControls[f]:cCaption<>; // Gets Antes
oDlg:aControls[f]:cText // Gets Depois
oDlg:aControls[f]:cCaption:=; // Atualiza cCaption
oDlg:aControls[f]:cText
if !lGravou // Se nao gravou
Contador++
endif
endif
elseif oDlg:aControls[f]:ClassName()="TFOLDER"
g := 1
While g<=Len(oDlg:aControls[f]:aDialogs) // Checa todos os Dialogs da Folder
h := 1
While h<=Len(oDlg:aControls[f]:aDialogs[g]:aControls)
if oDlg:aControls[f]:aDialogs[g]:aControls[h]:ClassName()="TGET" .or. oDlg:aControls[f]:aDialogs[g]:aControls[h]:ClassName()="TMULTIGET"
if oDlg:aControls[f]:aDialogs[g]:aControls[h]:cCaption<>; // Gets Antes
oDlg:aControls[f]:aDialogs[g]:aControls[h]:cText // Gets Depois
oDlg:aControls[f]:aDialogs[g]:aControls[h]:cCaption:=; // Atualiza cCaption
oDlg:aControls[f]:aDialogs[g]:aControls[h]:cText
if !lGravou // Se nao gravou
Contador++
endif
endif
endif
h++
enddo
g++
end
endif
f++
End
if !lGravou .and. !Empty(Contador)
Return(.T.)
Endif
Return(.F.)
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
João,
No meu programa eu crio variáveis publicas para os campos dos arquivos e depois eu destruo essas variáveis no comando ACTIVATE...VALID.
Acontece que no Fivewin ele fecha a janela numa boa e no FhW ele destroi as variáveis, fecha a janela e aparece um erro de variável inexistente.
Estranho né?
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
Percebi que o FW trata o ESC de um modo diferente do FWH.
Tem como cancelar a tecla ESC para que o usuário não feche a janela usando essa tecla?
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
Percebi que o FW trata o ESC de um modo diferente do FWH.
Tem como cancelar a tecla ESC para que o usuário não feche a janela usando essa tecla?
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551
-
Quando fecho minhas janelas com dá erro de variável não existe no fwh e no fw não dá. A variável está criada!
Ativo minhas janelas assim:
ACTIVATE DIALOG oDlgP NOWAIT VALID oWndC:End()
ACTIVATE WINDOW oWndC ;
VALID ( tBtPrinc[9]:SetFocus() ,iif(Atualizou(oDlgP),(Grava(.T.)),.T.),oScb:SetFocus(),Destroi_Campos(),oLbx:Disable(),Fecha_Formulario(oWndC,oDlgP,oLbx,cFrm,cPrg))
Fwh2.7+xHb0.99.60+BCC551
-
Quando fecho minhas janelas com dá erro de variável não existe no fwh e no fw não dá. A variável está criada!
Ativo minhas janelas assim:
ACTIVATE DIALOG oDlgP NOWAIT VALID oWndC:End()
ACTIVATE WINDOW oWndC ;
VALID ( tBtPrinc[9]:SetFocus() ,iif(Atualizou(oDlgP),(Grava(.T.)),.T.),oScb:SetFocus(),Destroi_Campos(),oLbx:Disable(),Fecha_Formulario(oWndC,oDlgP,oLbx,cFrm,cPrg))
Fwh2.7+xHb0.99.60+BCC551
Preciso driblar uma falha do xHarbour
in Programação
Posted
Marcelo,
Com essa função o sistema cancelou completamente os parâmetros definidos no VALID da Windows. Assim também não dá. (risos) - O que o xHarbour precisa fazer é executar o VALID apenas uma vez (como o seu antecessor Fw).
E agora? Será que os desenvolvedores do FwH não tem a correção desse bug?
(OASyS) Oscar Ribeiro
Fwh2.7+xHb0.99.60+BCC551