Controlar fechamento de Tela em Modo Texto

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Controlar fechamento de Tela em Modo Texto

Mensagem por Cavalo Marinho »

Bom dia pessoal, estou migrando meus sistemas para harbour, até agora está ficando uma maravilha, correções aqui e ali mas faz parte do processo, como sou novato, então tenho dúvidas, gostaria de saber se é possível controlar o fechamento do sistemas em modo texto quando o usuário clicar no X para fechar janelas, ou seja se ele clicar no X fechamento da janela eu conseguir capturar este evento, pois assim poderia fechar meus arquivos dbf que estão em uso, sei que no modo gráfico isso é perfeitamente possível pois usaria o onRelease do form.
Agradeço a atenção.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Controlar fechamento de Tela em Modo Texto

Mensagem por Toledo »

Amigo, veja um exemplo:

Código: Selecionar todos

*****************************************************
* Compile: hbmk2 demo.prg -gtwvg -lhbwin
*****************************************************

#include "hbgtinfo.ch"
#include "wvtwin.ch"
#include "inkey.ch"

Proc Main()
Cls
WVT_SetTitle('Demo Fechar Sistema')

hb_gtInfo( HB_GTI_FONTNAME , "Lucida Console" )
nFontWidth:=Int(hb_gtinfo(HB_GTI_DESKTOPWIDTH)/80)
nFontSize:=Int(hb_gtinfo(HB_GTI_DESKTOPHEIGHT)/25)
hb_gtinfo(HB_GTI_FONTWIDTH, nFontWidth)
hb_gtinfo(HB_GTI_FONTSIZE, nFontSize)

SetMode( MaxRow() + 1, MaxCol() + 1 )

hb_gtinfo( HB_GTI_CLOSABLE, .T. )
hb_gtinfo( HB_GTI_NOTIFIERBLOCK, {|nEvent| FecharSis(nEvent)})

@ 10,10 say "Tente fechar esta janela pelo botão X"

DO WHILE .T.
  tk:=inkey(0)
  If tk=27
    Exit
  Endif
ENDDO

Retu

Func FecharSis(eSai)
If eSai==HB_GTE_CLOSE
  cMsg := "Deseja Sair do Programa?"
  aOpc := { "Sim", "Nao" }
  nOp := Alert( cMsg, aOpc)
  If nOp==1
    Quit
  Endif
Endif
Retu Nil
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Controlar fechamento de Tela em Modo Texto

Mensagem por Cavalo Marinho »

Obrigado Toledo, vou testar na primeira oportunidade. :{
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Controlar fechamento de Tela em Modo Texto

Mensagem por Cavalo Marinho »

Bom dia Toledo
Fui fazer o teste conforme suas instruções e infelizmente não funcionou, primeiro renomeei o arquivo par janela.prg (normal), quando compilei faltou o arquivo WVTWIN.CH, conseguir numa pasta que tenho do xHarbour, mas mesmo assim falta umas funções que nao conseguir resolver conforme o arquivo de erros em anexo, eu utilizo o harbour da minigui extend versão 3.2.0. Por favor me dá uma luz onde conseguir o arquivo GTWVG, acho que deve ser um .obj ou .c.
Obrigado
Anexos
compilacao.txt
(1.36 KiB) Baixado 85 vezes
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Controlar fechamento de Tela em Modo Texto

Mensagem por Toledo »

Cavalo Marinho escreveu:eu utilizo o harbour da minigui extend
Amigo, não tenho nada contra usar a HMG ou MiniGui Extended para compilar programas Harbour em modo CONSOLE, mas acho que elas foram feitas para desenvolver programas em modo GRÁFICO. A versão do Harbour que vem junto com a HMG/MiniGui Extended tem apenas os arquivos básicos, inclusive muitas pastas do Harbour original não é encontrada, por exemplo a pasta Contrib, onde tem a gtwvg.
Se você observar a pasta LIB do Harbour da MiniGui Extended, você não vai encontrar a gtwvg.lib, então provavelmente esta GTWVG.LIB que você está tentando usar na compilação deste demo deve ser de outra versão do Harbour ou xHarbour.
Tentei compilar aqui a GTWVG para o Harbour + Borland BCC, e deu algumas mensagens de atenção, mas criou a LIB. Ai tentei compilar este demo usando o Harbour da MiniGui Extended e Borland BCC, usando também a GTWVG.LIB que acabei de compilar, não ocorreu nenhum erro na compilação do demo e gerou o EXE, mas quando tento executar não acontece nada, simplesmente volta para o prompt.

Aqui, para compilar programas em modo console, eu sempre uso o Harbour 3.2 junto com a MingW, eu não uso o Borland BCC, então não tenho certeza se a GTWVG vai funcionar corretamente com o Borland BCC.

A compilação de programas Harbour CONSOLE, eu faço sempre conforme este tutorial:

Migrar Clipper para Harbour

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Controlar fechamento de Tela em Modo Texto

Mensagem por Cavalo Marinho »

Boa Tarde Toledo
Conseguir fazer funcionar o meu sistemas com as alterações sugeridas por você, funciona 100%. compilei com gcc, agora tem um porem qualquer coisa que se vai fazer com o arquivo, ou seja executar, copiar, enviar por email etc o avast detecta como um item suspeito (win:32 Evo-gen), você tem alguma informação sobre este problema?
O interessante é que escaneio o arquivo e o avast informa que não encontrou nenhuma ameaça, agradeço a atenção.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Controlar fechamento de Tela em Modo Texto

Mensagem por Jairo Maia »

Olá,

Provavelmente você está com algum MalWare que não está sendo dectado pelo antivírus. Exclua seu executável, e antes de compilar novamente, baixe deste link o ADWCleaner e rode em seu computador e tente novamente.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Controlar fechamento de Tela em Modo Texto

Mensagem por Cavalo Marinho »

Olá Jairo boa note
passei o ADWCleaner, realmente encontrou malWare, mas continua do mesmo jeito, sempre que compilo o sistema o avast suspeita do arquivo, tenho que colocar na lista de exclusões para poder executar, isso aconteceu depois que comecei a utilizar o gcc com umas modificações que o Toledo me orientou a fazer para controlar o fechamento da janela clicando no X, estou compilando em modo console, quanto as estas modificações estão uma beleza, 100% e quero agradecer ao Colega Toledo pela dica. de qualquer forma eu vou me virando, adiciono na lista do avast e pronto.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Controlar fechamento de Tela em Modo Texto

Mensagem por Jairo Maia »

Olá Cavalo Marinho,
Cavalo Marinho escreveu:tenho que colocar na lista de exclusões para poder executar
Particularmente, eu não uso e não indico o Avast. Não questiono sua competência, mas acho que ele tem exageros demais. Por exemplo, tive problemas em clientes que ele bloqueava meu sistema quando ia abrir uma porta COM. Ora, se estou tentanto abrir uma porta COM, existe a possibilidade do aplicativo danificar um equipamento? Acho muito estranho.

Tenho para mim que ele tem excessos de acusar falso positivo, e jogo a responsabilidade para o usuário, tipo colocando por sua conta e risco na lista de exclusões.

Se aceita uma sugestão, troque pelo AVG.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Controlar fechamento de Tela em Modo Texto

Mensagem por Itamar M. Lins Jr. »

Antivius mal feito é assim mesmo.
Fora as doidices dele com o firewall.
É porque ele não reconhece a sintaxe do EXE, assinatura do EXE com MingW.
Em alguns clientes aqui o avast apagou em mais de 8 maquinas o sistema de emissão de ECF, feito em Delphi, e o meu com Mingw.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Controlar fechamento de Tela em Modo Texto

Mensagem por Cavalo Marinho »

Pessoal a titulo de informação
Descobrir onde está o problema, só nao sei porque.
Estava utilizando a função Wvt_SetTitle() para setar um titulo na janela e também a função Wvt_SetIcon(), fazendo os teste quando retirei o sistema passou sem problema pelo anti-vírus, assim se alguém passar por isso já vai saber, agora não sei se é a lib que está infectada, já escaneei com avast todas as libs da mingw e não foi encontrado nada.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Controlar fechamento de Tela em Modo Texto

Mensagem por asimoes »

Caros,

Estou testando a função:
Está acontecendo um problema que eu não estou conseguindo saber como resolver, quando eu uso a função: HB_GTSYS()
O evento de fechar a janela funciona mas não chama a função MyEvent, se eu não usar HB_GTSYS funciona.

Código: Selecionar todos

FUNCTION HB_GTSYS()
   REQUEST HB_GT_WVG_DEFAULT
   REQUEST HB_GT_WVT
   REQUEST HB_GT_WGU
   REQUEST HB_GT_WVG
RETURN Nil

Código: Selecionar todos

hb_gtInfo(HB_GTI_CLOSABLE, .T. )
hb_gtinfo(HB_GTI_NOTIFIERBLOCK, {|nEvent| MyEvent(nEvent)})

FUNCTION MyEvent(eSai)
   If eSai==HB_GTE_CLOSE
     cMsg := "Deseja Sair do Programa?"
     aOpc := { "Sim", "Nao" }
     nOp := hb_Alert( cMsg, aOpc)
     If nOp==1
       Quit
     Endif
   Endif
A minha função de janela:

Código: Selecionar todos

FUNCTION IniciaJanela
 
   cName:=Upper(hb_GetEnv("temp"))
   
   wapi_GetLongPathName(cName, @cName)
   
   cTituloJanela:="Testar criação de pasta em "+cName
   
   HB_gtInfo(HB_GTI_FONTNAME, "Lucida Console")
   HB_gtInfo(HB_GTI_WINTITLE, cTituloJanela)
   HB_gtInfo(HB_GTI_ICONFILE, "P:\GERAL\HARBOUR\HARB_WIN.ICO" )
   HB_gtInfo(HB_GTI_CLOSABLE, .T. )
   hb_gtinfo(HB_GTI_NOTIFIERBLOCK, {|nEvent| MyEvent(nEvent)})
   HB_gtInfo(HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )
   HB_GtInfo( HB_GTI_MAXIMIZED, .T. )
   
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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Controlar fechamento de Tela em Modo Texto

Mensagem por asimoes »

Eu identifiquei o seguinte quando eu uso REQUEST HB_GT_WVT o evento MyEvent não funciona.
A aplicação precisa deste request para expandir a tela do sistema para as deimensões da área do desktop
►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)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Controlar fechamento de Tela em Modo Texto

Mensagem por JoséQuintas »

Tem um detalhe aí que foi esquecido.
O comportamento do Inkey() depende de configuração

Código: Selecionar todos

/* Input event masks */

#define INKEY_MOVE              1
#define INKEY_LDOWN             2
#define INKEY_LUP               4
#define INKEY_RDOWN             8
#define INKEY_RUP               16
#define INKEY_MMIDDLE           32  /* Harbour extension middle button mask */
#define INKEY_MWHEEL            64  /* Harbour extension mouse wheel mask */
#define INKEY_KEYBOARD          128
#define INKEY_ALL               ( INKEY_KEYBOARD + INKEY_MOVE + INKEY_LDOWN + INKEY_LUP + INKEY_RDOWN + INKEY_RUP + INKEY_MMIDDLE + INKEY_MWHEEL )

#define HB_INKEY_RAW            256 /* Harbour extension */
#define HB_INKEY_GTEVENT        1024 /* Harbour extension */
#define HB_INKEY_EXT            2048 /* Harbour extension */

#define HB_INKEY_ALL            ( INKEY_ALL + HB_INKEY_GTEVENT )
Se não me engano a WVT e WVG convertem o fechar janela pra ESC.

Não sei se janela console é considerada uma GT, ou se tem os eventos de uma GT.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

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

Controlar fechamento de Tela em Modo Texto

Mensagem por asimoes »

Quintas,

Eu não uso os eventos

Set( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE )

Me parece que quando é feito o REQUEST HB_GT_WVT os eventos são controlados por esta GT e não deve ter o método ou controle para o HB_GTI_NOTIFIERBLOCK
►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)
Responder