Jump to content
Fivewin Brasil

Preciso driblar uma falha do xHarbour


oribeiro

Recommended Posts

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

#Include "FiveWin.Ch"

STATIC Tela := .T.

STATIC oWnd1, oWnd2 //-> Janelas


Function Main()

LOCAL oDlg1, oBtn1, oGet1

MEMVAR cVar1

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

@ 02, 05 GET oGet1 VAR cVar1 SIZE 150, 12 PICT '@!' OF oDlg1

@ 03, 10 BUTTON oBtn1 PROMPT "Fechar" SIZE 100, 50 OF oDlg1 ;

ACTION( oDlg1:End() ) CANCEL

ACTIVATE DIALOG oDlg1 NOWAIT ;

VALID ( oWnd2:End() )

ACTIVATE WINDOW oWnd2 ;

VALID ( PASSOU(), .T. )

ACTIVATE WINDOW oWnd1 MAXIMIZED

RELEASE ALL

Return Nil

Function Passou()

MsgInfo( OemToAnsi( "PASSOU " ), ;

OemToAnsi( "Informa‡Æo" ) )

TELA:=.F.

Return( .T. )

id=code>id=code>

//-> FIM DO PROGRAMA

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

Link to comment
Share on other sites

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

Link to comment
Share on other sites

citação:

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


id=quote>id=quote>

Aqui, nem por decreto do PRESIDENTE LULA, passa uma vez só e cai fora.

Como Você Compilou com o BUILDX.BAT ???

Experimente trocar a Versão do seu XHARBOUR para 0.99.61

Keres a minha FIVEHX.LIB Para testar??

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

Editado por - kapiaba on 15/03/2007 15:20:01

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites


#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 FechaOdlg()

ACTIVATE WINDOW oWnd2 VALID ( passou(), .T. )

ACTIVATE WINDOW oWnd1 MAXIMIZED

return nil

********************

function passou()

********************

msginfo(tela,"PASSOU")

tela:=.F.

return (.t.)

********************

function FechaoDlg()

********************

oWnd2:bValid:={||.t.}

oWnd2:End()

id=code>id=code>

return .t.

Isso deve Resolver

Marcelo Michels

celo.michels@ibestvip.com.br

celo.michels@hotmail.com

marcelo@lorenzi.com.br

-> Lorenzi Soluções Têxteis <-

Criciuma - SC

xHarbour build 0.99.2 + WS

Editado por - kbelo on 15/03/2007 17:41:33

Link to comment
Share on other sites

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

Link to comment
Share on other sites

bom ai voce pode controlar eu te passei o caminhos das pedras agora é só atravessa

hehe

tipo faça uma jogada mais ou menos assim.


FunçãoValid()

If oque eu quero é verdade

oWnd2:bValid:={||.t.}

return .t.

else

return .f.

endif

id=code>id=code>

Marcelo Michels

celo.michels@ibestvip.com.br

celo.michels@hotmail.com

marcelo@lorenzi.com.br

-> Lorenzi Soluções Têxteis <-

Criciuma - SC

xHarbour build 0.99.2 + WS

Link to comment
Share on other sites

João,

Estou com o problema resolvido (usando o seu fivehx.lib) mas estou querendo aprender o caminho das pedras. Então, baixei o xHarbour 0.99.70, usei o Harb2Lib.Exe para criar um novo lib (ele criou o FiveH.Lib e eu renomeei para FiveHx.Lib e coloquei na pasta c:\fwh\lib). Daí, compilei o meu sistema e o problema do ESC que pasa duas vezes no VALID da Window voltou. Só funciona com a sua Fivehx.lib. Qual é o segredo?

(OASyS) Oscar Ribeiro

Fwh2.7+xHb0.99.60+BCC551

Link to comment
Share on other sites

citação:

João,

Estou com o problema resolvido (usando o seu fivehx.lib) mas estou querendo aprender o caminho das pedras. Então, baixei o xHarbour 0.99.70, usei o Harb2Lib.Exe para criar um novo lib (ele criou o FiveH.Lib e eu renomeei para FiveHx.Lib e coloquei na pasta c:\fwh\lib). Daí, compilei o meu sistema e o problema do ESC que pasa duas vezes no VALID da Window voltou. Só funciona com a sua Fivehx.lib. Qual é o segredo?

(OASyS) Oscar Ribeiro

Fwh2.7+xHb0.99.60+BCC551


id=quote>id=quote>

NAO LEMBRO. PROVAVELMENTE, MODIFIQUEI ALGUMA CLASSE.

SE O SEU FIVEWIN PARA 32 BITS FOR ORIGINAL, ENTRE EM CONTACTO COM O REVENDEDOR DO PRODUTO.

VIRTUAL OBJECTS INFORMATICA - TELEFONE NA PAGINA PRINCIPAL.

ou

vendas@fivewin.com.br

suporte@fivewin.com.br

João Santos - São Paulo.

kmt_karinha@pop.com.br

kapiaba@brfree.com.br

FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe

Link to comment
Share on other sites

Anulei a instrução da classe (Window.prg) e o BUG foi corrigido:

if nKey == VK_ESCAPE .and. ::oWnd != nil

::oWnd:KeyChar( nKey, nFlags )

endif

Fica aqui registrado para quem tiver esse mesmo problema.

Obrigado a todos.

(OASyS) Oscar Ribeiro

Fwh2.7+xHb0.99.60+BCC551

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...