Página 1 de 1
Rodar Programa Em BackGround
Enviado: 10 Jan 2007 12:35
por mdaweb
Ola pessoall, preciso de um programa exemplo que rode em background e mostre na lela uma mensagem sem usar o msgbox, so aparece a mensagem por um instante e some logo em seguida, em varios pontos da tela randomicamente, alguem tem alguma sujestão para esse codigo?
grato,
Mauro.
Enviado: 12 Jan 2007 17:54
por Stanis Luksys
Olá,
Com a biblioteca MiniGUI pode ser simples de se fazer o que você pretende.
Basta vc chamar sua aplicação escondida, e depois carregar uma mesma janela na tela em posições randômicas.
Agora se o fundo do texto tiver que ser 'transparente', vai dar um trabalhinho a mais... Neste caso, como é um programinha simples, sugiro que faça em VB mesmo.
Falou...
Enviado: 12 Jan 2007 20:48
por rochinha
Amiguinho
Tente usar a minha função e adapta-la ao seu mundo. Ela foi feita pra ser usada com Fivewin+Harbour.
Código: Selecionar todos
#define GWL_EXSTYLE (-20)
#define WS_EX_LAYERED 0x00080000
#define LWA_ALPHA 0x00000002
#define LWA_COLORKEY 0x00000001
Function Ballon(cBallonMsg,nBallonTime)
local oDlgBallon
default cBallonMsg := "Nova mensagem chegando..."
DEFINE WINDOW oDlgBallon FROM GetSysMetrics(1),GetSysMetrics(0)-300 TO 200,200 PIXEL COLOR nRGB(255,255,255),nRGB(255,255,230) NO CAPTION BORDER NONE
@ 5, 5 GET cBallonMsg MEMO OF oDlgBallon SIZE 195,195 PIXEL COLOR nRGB(000,000,000),nRGB(255,255,230) NOBORDER NO MODIFY
ACTIVATE WINDOW oDlgBallon ON INIT ( LayeredWindow( oDlgBallon, 070 ), MoveDLG(oDlgBallon,nBallonTime) )
return nil
Function MoveDLG(oDlgBallon,oDlgTime)
oDlgAltura := GetSysMetrics(1)
for i = 1 to 20
oDlgAltura := oDlgAltura - i
oDlgBallon:Move( oDlgAltura, 100, 200, 200, .t. )
SysWait(.02)
next
SysWait(oDlgTime)
for i = 1 to 20
oDlgAltura := oDlgAltura + i
oDlgBallon:Move( oDlgAltura, 100, 200, 200, .t. )
SysWait(.02)
next
oDlgBallon:end()
return
Function LayeredWindow( oWnd, nLay )
//SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, GetWindowLong( oWnd:hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED )
SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_BORDER )
SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_EX_LAYERED )
SetLayeredWindowAttributes( oWnd:hWnd, 0, ( 255 * nLay ) / 100, LWA_ALPHA )
Return NIL
Use assim Ballon( "Coloque aqui a sua mensagem", 5 ) onde 5 é o tempo que ficará vizivel. Caso a função LayeredWindow() de problemas isole-a pois a inteção é criar uma janela que sobe da barra de tarefas e apresenta a mensagem para o usuario.
Enviado: 16 Jan 2007 17:43
por MARCELOG
O Vagner já deu a dica para isso, veja:
Vc pode colocar suas rotinas rodando em back ground usando o seguinte
ROTINA=HB_IDLEADD({||TESTE()})
inkey(0)
HB_IDLEDEL(ROTINA)
PROCEDURE teste
@ 10,10 SAY TIME()
Ps: não consegui usar com a hwgui
MarceloG
Enviado: 17 Jan 2007 09:28
por Luiz
Pode user tambem a HB_BACKGROUNDADD
exemplo:
Código: Selecionar todos
nTask := HB_BACKGROUNDADD( {|| DisplayTime()}, <tempo> ) // tempo em milisegundos
SET BACKGROUND TASKS ON
function DisplayTime
if <alguma condição>
HB_BACKGROUNDACTIVE( nTask, .F. ) // desativar o timer
<montar a janela>
<esperar>
HB_BACKGROUNDACTIVE( nTask, .T. ) // reativar o timer
endif
return .t.
Enviado: 17 Jan 2007 13:20
por momente
Pessoal,
Uma dúvida, aonde eu consigo encontrar os comandos e funções do xharbour , Qual pasta que acompanha o xharbour possui estas informações?
Valeu!
:)Pos
Enviado: 17 Jan 2007 16:07
por Luiz
Na pasta Doc
Mas é preciso gerar os arquivos com genhtm.bat ou gendoc.bat
Enviado: 18 Jan 2007 09:00
por vagucs
Eu crio serviços para Linux com as rotinas HB_STARTSERVICE e HB_PUSHSIGNALHANDLER, acredito que estas rotinas funcionem com o Windows, com a segunda rotina citada, eu coloco uma rotina minha para poder responder as mensagens do SO e parar o serviço de forma devida. No windows, eu tambem indico o uso da Minigui, eu uso ela para o PRWIN e funciona muito bem para isto e ainda tem exemplos.
Enviado: 19 Jun 2007 12:18
por benyfilho
vagucs
Vc pode me enviar um exemplo que como colocar a aplicação como serviço no Windows, Existe alguma regra para se programar visando a aplicação como serviço?
Enviado: 19 Jun 2007 14:27
por vagucs
Na verdade a unica coisa que vc precisa é que seu programa identifique as mensagens do SO para poder finalizar quando o windows for encerrado, acredito que seja o mesmo processo do linux, no linux uso o exemplo abaixo e funciona muito bem.
Código: Selecionar todos
#include "hbserv.ch"
global continua
continua=.t.
hb_startservice(.t.)
hb_pushsignalhandler(HB_SIGNAL_ALL,"ler_evento")
do while continua
// SEU CODIGO
enddo
// SERVICO ENCERRADO
procedure ler_evento(sinal,para)
if sinal=HB_SIGNAL_QUIT .or. sinal=HB_SIGNAL_INTERRUPT
continua=.f.
end if
return HB_SERVICE_HANDLED
Enviado: 19 Jun 2007 15:28
por benyfilho
Quando eu coloco para iniciar o serviço no Windows dá um erro:
O Serviço não respondeu a requisição de inicio ou controle em tempo hábil
Código: Selecionar todos
#include "FiveWin.ch"
#include "hbserv.ch"
#define GWL_EXSTYLE (-20)
#define WS_EX_LAYERED 0x00080000
#define LWA_ALPHA 0x00000002
#define LWA_COLORKEY 0x00000001
GLOBAL continua:=.T.
STATIC oWnd, oTimer
FUNCTION Main()
hb_startservice(.t.)
hb_pushsignalhandler(HB_SIGNAL_ALL,"ler_evento")
LOCALINTERVALO=60
Do While continua
Ballon( "Teste por 10 segundos com ballon tip, modificado pelo bene", 10 )
ENDDO
RETURN
procedure ler_evento(sinal,para)
if sinal=HB_SIGNAL_QUIT .or. sinal=HB_SIGNAL_INTERRUPT
continua=.f.
end if
return HB_SERVICE_HANDLED
Function Ballon(cBallonMsg,nBallonTime)
local oDlgBallon, oFontsayB
DEFINE FONT oFontsayB NAME "Verdana" SIZE 0,-11
default cBallonMsg := "Nova mensagem chegando..."
DEFINE WINDOW oDlgBallon FROM GetSysMetrics(1),GetSysMetrics(0) TO 200,200 PIXEL COLOR nRGB(000,000,000),nRGB(000,000,000) STYLE WS_POPUP
@ 1, 1 SAY cBallonMsg OF oDlgBallon SIZE 198,198 PIXEL FONT oFontSayB COLOR CLR_BLACK,CLR_GRAY
ACTIVATE WINDOW oDlgBallon ON INIT ( LayeredWindow( oDlgBallon, 090 ), MoveDLG(oDlgBallon,nBallonTime))
return nil
Function MoveDLG(oDlgBallon,oDlgTime)
oDlgAltura := GetSysMetrics(1)
for i = 1 to 15
oDlgAltura := oDlgAltura - i
oDlgBallon:Move( oDlgAltura, GetSysMetrics(1)+55, 200, 100, .t. )
SysWait(.02)
next
SysWait(oDlgTime)
for i = 1 to 15
oDlgAltura := oDlgAltura + i
oDlgBallon:Move( oDlgAltura, GetSysMetrics(1)+55, 200, 100, .t. )
SysWait(.02)
next
oDlgBallon:end()
return
Function LayeredWindow( oWnd, nLay )
//SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, GetWindowLong( oWnd:hWnd, GWL_EXSTYLE ) | WS_EX_LAYERED )
SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_BORDER )
SetWindowLong( oWnd:hWnd, GWL_EXSTYLE, WS_EX_LAYERED )
SetLayeredWindowAttributes( oWnd:hWnd, 0, ( 255 * nLay ) / 100, LWA_ALPHA )
Return NIL
Enviado: 19 Jun 2007 15:34
por vagucs
Como disse, nunca usei no windows, mas no linux é apenas isto.
Enviado: 20 Jun 2007 09:43
por vagucs
No seu caso, como o programa vai exibir alguma mensagem, vc precisa é de uma rotina para seu sistema rodar no tray, a minigui ja tem rotinas para isto, veja nos exemplos dela.
Enviado: 21 Jun 2007 09:39
por Stanis Luksys
Olá,
Com a MiniGUI também dá pra vc criar um message box "temporizado", fica faltando apenas a questão do posicionamento na tela. O melhor messmo é fazer a caixa de diálogo na mão.
Tem um exemplo na pasta samples do mgsbox temporizado, da uma olhadinha lá.
Falou!