X da janela é um Evento?
Moderador: Moderadores
-
Maurício Elias
- Usuário Nível 3

- Mensagens: 304
- Registrado em: 12 Mai 2005 08:48
X da janela é um Evento?
Olá, boa tarde pessoal.
Tem como tratar o X da janela do Sistema (HB32 Console) um Evento e fazer com que ele execute o "Close Data" ao clicarem ?
Obrigado.
Tem como tratar o X da janela do Sistema (HB32 Console) um Evento e fazer com que ele execute o "Close Data" ao clicarem ?
Obrigado.
Abraços.
_______
Maurício
_______
Maurício
X da janela é um Evento?
se vc nao usa nenhum modo grafico gtwvw ou gtwvh nao vai conseguir tratar isso
-
Maurício Elias
- Usuário Nível 3

- Mensagens: 304
- Registrado em: 12 Mai 2005 08:48
X da janela é um Evento?
... é, ainda não uso não.
O jeito vai ser esperar a vez então !!!
Valew colega.
O jeito vai ser esperar a vez então !!!
Valew colega.
Abraços.
_______
Maurício
_______
Maurício
X da janela é um Evento?
Bom, é possivel sim, como a idéa principal do windows é, ser sempre orientado a eventos... entao, é simplesmente possivel, e não é complexo de se fazer...
bastando conhecer algumas coisas basicas da API do windows teremos algumas funções como:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
http://msdn.microsoft.com/query/dev10.q ... 29&rd=true
Bastando implementar as funções, da forma correta no do seu codigo em hb, e pronto, tudo vai funcionar como vc deseja!
http://www.codeproject.com/Articles/235 ... t-Handling
--------------------------------------------------
Veja este código de exemplo:
--------------------------------------------------------------------------------------------------
Uma implementação aproximada no Harbour
bastando conhecer algumas coisas basicas da API do windows teremos algumas funções como:
Código: Selecionar todos
HandlerRoutineCódigo: Selecionar todos
SetConsoleCtrlHandlerhttp://msdn.microsoft.com/query/dev10.q ... 29&rd=true
Bastando implementar as funções, da forma correta no
Código: Selecionar todos
#pragmahttp://www.codeproject.com/Articles/235 ... t-Handling
--------------------------------------------------
Veja este código de exemplo:
Código: Selecionar todos
#include <stdio.h>
#include <windows.h>
BOOL WINAPI closeHandler(DWORD Evento)
{
switch (Evento)
{
case CTRL_CLOSE_EVENT:
MessageBox(NULL, "Vc clicou no X", "Eba Oba!!", MB_OK);
break;
}
return TRUE;
}
int main()
{
int counter = 0;
SetConsoleCtrlHandler(closeHandler, true);
for (;;)
{
printf("oi %d\n", counter);
counter++;
}
}
Uma implementação aproximada no Harbour
Código: Selecionar todos
function start()
CTRL_HANDLE_CONSOLE()
for i:=1 to 1000000000
? "oi"
next
return nil
#pragma BEGINDUMP
#include "hbapi.h"
#include <windows.h>
int WINAPI closeHandler(DWORD Evento)
{
switch (Evento)
{
case CTRL_CLOSE_EVENT:
MessageBox(NULL, "Vc clicou no X", "Eba Oba!!", MB_OK);
return 0;
break;
}
return 1;
}
HB_FUNC( CTRL_HANDLE_CONSOLE )
{
SetConsoleCtrlHandler(closeHandler, 1);
}
#pragma ENDDUMP
-
Maurício Elias
- Usuário Nível 3

- Mensagens: 304
- Registrado em: 12 Mai 2005 08:48
X da janela é um Evento?
Olá Bencz, boa tarde. Obrigado pela ajuda.
Estou saindo agora do Dosão, nunca tive contato com uma API. Olhei os Links, entendi que HandlerRoutine e SetConsoleCtrlHandler seriam 2 APIs, certo ?
#pragma
Não consegui entender.
BOOL WINAPI closeHandler () executa a API, é isso ?
Depois vem Int Main(). Seria meu Function Main ?
Vou tentar, mas sei não se dou conta... E tudo em inglês!
Valew...
Estou saindo agora do Dosão, nunca tive contato com uma API. Olhei os Links, entendi que HandlerRoutine e SetConsoleCtrlHandler seriam 2 APIs, certo ?
#pragma
BOOL WINAPI closeHandler () executa a API, é isso ?
Depois vem Int Main(). Seria meu Function Main ?
Vou tentar, mas sei não se dou conta... E tudo em inglês!
Valew...
Abraços.
_______
Maurício
_______
Maurício
X da janela é um Evento?
Sim, eles pertencem a API( application programming interface ) do windows.andlerRoutine e SetConsoleCtrlHandler seriam 2 APIs, certo ?
No caso, utilizo o comando de pre-processamento, #pragma, para dizer ao compilador que daquele ponto, #pragma begindump até o #pragma enddump vai ser código nativo CO comando #pragma permite que o programador diga ao compilador para fazer certas coisas. Uma vez que o comando #pragma é específico da implementação, os seus usos variam de compilador para compilador. Uma opção possível é traçar a execução do programa.
http://pt.cppreference.com/w/cpp/preprocessor/pragma
está é uma função que é executada a cada evento que ocorrer no console, eu poderia ter dado qualquer nome a ela...BOOL WINAPI closeHandler () executa a API, é isso ?
Sim, essa é a entrada do programa.Depois vem Int Main(). Seria meu Function Main ?
-
Maurício Elias
- Usuário Nível 3

- Mensagens: 304
- Registrado em: 12 Mai 2005 08:48
X da janela é um Evento?
Cara, que loucura, C nativo no HB32
Vou tentar implementar a noite.
Mas em qual linha é acionada qual função no Clique do X do Windows?
Vou tentar implementar a noite.
Mas em qual linha é acionada qual função no Clique do X do Windows?
Abraços.
_______
Maurício
_______
Maurício
X da janela é um Evento?
Utilizar C com Hb não é nada de mais, pois o processo de compilação do harbour, simplesmente converte o seu código xBase em C, e depois chama um compilador em C para compilar o código gerado pelo compilador Harbour.
Neste trecho do código, dentro do case...Mas em qual linha é acionada qual função no Clique do X do Windows?
Código: Selecionar todos
04 BOOL WINAPI closeHandler(DWORD Evento)
05 {
06 switch (Evento)
07 {
08 case CTRL_CLOSE_EVENT:
09 MessageBox(NULL, "Vc clicou no X", "Eba Oba!!", MB_OK);
10 break;
11 }
12 return TRUE;
13 }X da janela é um Evento?
Que excelente solução. Meus parabéns.
Faço duas perguntas:
1) É possível também impedir o fechamento no X? Sei de função que desabilita o X da janela, mas ela não impede que o usuário clique na opção de fechar a janela na própria barra de tarefas.
2) Tem como executar uma função normal do Harbour de dentro da função C compilada junto? Estou tentando simplesmente chamar a função assim: minha_função(), mas dá erro na compilação
Faço duas perguntas:
1) É possível também impedir o fechamento no X? Sei de função que desabilita o X da janela, mas ela não impede que o usuário clique na opção de fechar a janela na própria barra de tarefas.
2) Tem como executar uma função normal do Harbour de dentro da função C compilada junto? Estou tentando simplesmente chamar a função assim: minha_função(), mas dá erro na compilação
Inacio de Carvalho Neto
X da janela é um Evento?
Até onde eu saiba, não tem como....1) É possível também impedir o fechamento no X? Sei de função que desabilita o X da janela, mas ela não impede que o usuário clique na opção de fechar a janela na própria barra de tarefas.
Tem sim, é muito simples, veja o anexo.2) Tem como executar uma função normal do Harbour de dentro da função C compilada junto? Estou tentando simplesmente chamar a função assim: minha_função(), mas dá erro na compilação
- Anexos
-
Desktop.zip- (733 Bytes) Baixado 117 vezes
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
X da janela é um Evento?
amiguinho a pergunta
1º se for em modo console faz facilmente com a gtwvt
1º se for em modo console faz facilmente com a gtwvt
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
X da janela é um Evento?
para esclarecer melhor...
Veja o código abaixo...
Veja o código abaixo...
Código: Selecionar todos
function start()
CTRL_HANDLE_CONSOLE()
inkey(10)
for i:=1 to 1000000000
? "oi"
next
return nil
function minha_funcao()
QOut("Ola mundo, da minha funcao")
return nil
#pragma BEGINDUMP
#include "hbapi.h"
#include "hbinit.h"
#include "hbvm.h"
#include <windows.h>
HB_FUNC_EXTERN( MINHA_FUNCAO ); // define como função externa
int WINAPI closeHandler(DWORD Evento)
{
switch (Evento)
{
case CTRL_CLOSE_EVENT:
MessageBox(NULL, "Vc clicou no X", "Eba Oba!!", MB_OK);
return 0;
}
return 1;
}
HB_FUNC( CTRL_HANDLE_CONSOLE )
{
HB_FUNC_EXEC( MINHA_FUNCAO ); // chamada da função HARBOUR
SetConsoleCtrlHandler(closeHandler, 1);
}
#pragma ENDDUMP
X da janela é um Evento?
Bencz, salvo se eu estiver fazendo algo errado, creio que não funcionou como eu imaginava. Ele está executando a minha_funcao no início do programa, mas não quando clico no X.
Josivan, sim, eu uso apenas modo console. Como fazer isso com gtwvt?
Josivan, sim, eu uso apenas modo console. Como fazer isso com gtwvt?
Inacio de Carvalho Neto
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
X da janela é um Evento?
Fiz um mini exemplo mais da pra vc entender
segue o codigo abaixo
segue o codigo abaixo
Código: Selecionar todos
/*
TESTE DE USO SIMPLES DE ATIVAR OU DESATIVAR O X DA JANELA
COMPILAR COM HBMK2 DEMO.PRG -GUI -GTWVT
*/
#include 'inkey.ch'
#include 'hbgtinfo.ch'
function main()
hb_gtInfo( HB_GTI_CLOSABLE,.f.) // inibe o fechamento no X da janela
setcursor(0)
cls
?'TESTE PARA FECHAMENTO DE JANELA'
while .t.
tk:= inkey(0,128 + HB_INKEY_GTEVENT)
if (lastkey() == HB_K_CLOSE)
if alert('Deseja fechar o sistema ? ',{'Sim','Nao'}) == 1
exit
endif
endif
end A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
X da janela é um Evento?
vc está fazendo errado, preste mais atenção no meu código...., veja o meu exemplo...
Código: Selecionar todos
#include "inkey.ch"
function main()
CTRL_HANDLE_CONSOLE()
IF FILE("cliente.dbf") == .F.
aDB := { { "Codigo", "N", 3, 0 }, { "Nome", "C", 50, 0 } }
DbCreate( "clientes", aDB )
ENDIF
USE Clientes EXCLUSIVE NEW
while .t.
tk := inkey(0,INKEY_ALL)
if tk==27 .and. nextkey()==0
minha_funcao()
endif
end
return nil
function minha_funcao()
? "Fechando tudoooo!!!"
CLOSE ALL
QUIT
return nil
#pragma BEGINDUMP
#include "hbapi.h"
#include "hbinit.h"
#include "hbvm.h"
#include <windows.h>
HB_FUNC_EXTERN( MINHA_FUNCAO ); // define como função externa
int WINAPI closeHandler(DWORD Evento)
{
switch (Evento)
{
case CTRL_CLOSE_EVENT:
MessageBox(NULL, "Vc clicou no X", "Eba Oba!!", MB_OK);
HB_FUNC_EXEC( MINHA_FUNCAO ); // chamada da função HARBOUR
return 0;
}
return 1;
}
HB_FUNC( CTRL_HANDLE_CONSOLE )
{
SetConsoleCtrlHandler(closeHandler, 1);
}
#pragma ENDDUMP


