Página 1 de 1
foco wvw
Enviado: 12 Jun 2012 08:19
por Adelson.p
Olá, gostaria de saber, como posso fazer para que o meu programa, que utilizo o wvw, nao perca o foco, por exemplo, abro uma nova janela, dentro do meu programa, e quando eu abro um outro programa, eu tenho que clicar naquela janela que foi aberta, para voltar o foco nela, como posso fazer, para que isso nao aconteça ?
foco wvw
Enviado: 12 Jun 2012 10:17
por Pablo César
Isso é inevitável, pois o SO comporta-se assim, a medida que abre novas janelas. O que você poderia, tentar definir a janela ontop, mas mesmo assim terá que clicar nela para o foco voltar após chamada de nova abertura de sessão.
foco wvw
Enviado: 12 Jun 2012 10:32
por Adelson.p
a função padrão do wvw WVW_SETFOCUS nao funciona, logo, criei uma função nova para fazer isso, com o mesmo nome, mas dai, nao consigo minimizar a janela principal, nem fechar, nem maximizar, nem nada :/
foco wvw
Enviado: 12 Jun 2012 10:50
por Adelson.p
resolvi o problema do nao conseguir minimizar e fechar, mas tipo, caso eu de um alt+tab, e quando eu voltar p/ o programa, tem como voltar o foco p/ a janela que estava antes ?
foco wvw
Enviado: 12 Jun 2012 11:19
por Pablo César
Não sei se irá funcionar, pois o SO é que manda nessa questão de abrir janelas e priorizar o focus. Mas tente pegar o handle da janela antes de chamar outra aplicação e chame o Restore ou SetForeGroundWindow senão estiver minimizado. No
STRU tem um exemplo de uso. Mas mostre o seu código-exemplo como você solucionou... para compartilhar com todos aqui.
foco wvw
Enviado: 12 Jun 2012 12:35
por Adelson.p
encontrei na internet, e apenas removi do código o parametro HWND
Código: Selecionar todos
function WVW_SetFocus(nWinNum)
local nTopWin := WVW_nNumWindows()-1
If nWinNum <> nTopWin
win_SetFocus( wvw_GetWindowHandle( nTopWin ))
endif
return nil
Bom, eu vi o exemplo ali, mas você pode me explicar melhor, como ele funciona ?
Com um exemplo pequeno...
foco wvw
Enviado: 12 Jun 2012 13:48
por Adelson.p
esse comando SetForeGroundWindow, é do minigui ?
foco wvw
Enviado: 12 Jun 2012 14:21
por Pablo César
Faz parte do Harbour. Viu o meu exemplo do STRU então ? Só que deve haver uma diferença entre conseguir o handle da sua janela, pois ela é do tipo console, não é ? Você obtendo o handle você condiciona a recuperar o foco conforme estiver: minimizada ou não.
Código: Selecionar todos
nElement := 0
aTitles := GetTitles( GetForegroundWindow() )
nElement := aScan( aTitles, {|e| "Clipper On Line" $ e[1] } )
If nElement > 0 // (remover o que vem a direita).and. MsgYesNo("Copiar em modo tabela com BBCodes ?")
cTexto := Tabelar(cTexto)
hWnd := aTitles[nElement,2]
IF IsIconic( hWnd )
Restore( hWnd )
ELSE
SetForeGroundWindow( hWnd )
ENDIF
Endif
Aqui está sendo pesquisado a janela pelo título. Só que em WVW teria que ver se comporta-se como janela do tipo console. Tem que fazer testes, mas eu não trabalho com WVW...
foco wvw
Enviado: 13 Jun 2012 08:21
por Adelson.p
Bom, oque eu tentei fazer foi isso:
Código: Selecionar todos
lala(wvw_GetWindowHandle(b))
hWnd := wvw_FindWindow("Meu")
if hWnd == .t.
if IsIconic( wvw_GetWindowHandle(b) )
? "aqui"
WVW_MAXIMIZE( hWnd )
else
? "la"
WVW_MAXIMIZE( hWnd )
LALA( hWnd )
endif
endif
#pragma BEGINDUMP
#include <windows.h>
#include "hbapi.h"
HB_FUNC ( LALA )
{
hb_retl(SetForegroundWindow((HWND) hb_parnl(1)));
}
HB_FUNC ( ISICONIC )
{
hb_retl(IsIconic((HWND)hb_parnl(1)));
}
HB_FUNC ( FINDWINDOW )
{
hb_retl((LONG) FindWindow(0, hb_parc(1)));
}
#pragma ENDDUMP
Mas, nao funcionou

foco wvw
Enviado: 13 Jun 2012 09:26
por Adelson.p
Bom, eu estava aqui pensando, se tem alguma forma com que eu possa verificar se foi minimizado o programa, caso alguem me fale, ou me diga uma função em C, que possa fazer isso, já vai ajudar, pois eu posso utilizar uma função do proprio xHarbour, HB_BackGroundRun, onde ele fica executando uma outra função, assim,acredito que eu consiga verificar se o programa foi maximizado novamente, ou se ele foi minimizado, chamando uma função q faça isso, então, quando o programa for minimizado, ele executa uma função, que fica verificando se o programa foi maximizado, utilizando esse HB_BackGroundRun.
foco wvw
Enviado: 13 Jun 2012 10:15
por Pablo César
Adelson, você viu ou não viu os fontes do STRU

? Pois está em código C, não sei porque você está alterando, pois deveria funcionar ! A função ISICONIC é pra ver se está minimizado. A função GetTitles serve para localizar o handle de acordo o título de cada janela, você testou ?
Código: Selecionar todos
#pragma BEGINDUMP
#define HB_OS_WIN_USED
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include "hbapi.h"
#include "hbapiitm.h"
HB_FUNC( ISICONIC )
{
hb_retl( IsIconic( ( HWND ) hb_parnl( 1 ) ) );
}
#pragma ENDDUMP
Você não está conseguindo porque não deve ter analisado o código. Aí tem um exemplo muito útil, as demais funções interna do Harbour em C como:
GetWindowText, IsWindowVisible, GetWindow, GetForegroundWindow portanto não tem como não dar certo. Se está dando algum erro, coloque a mensagem do erro, poh...
foco wvw
Enviado: 13 Jun 2012 10:16
por Pablo César
pois eu posso utilizar uma função do proprio xHarbour
Mas você quer usar isso em xHarbour

?
foco wvw
Enviado: 13 Jun 2012 10:20
por Adelson.p
Sim sim
foco wvw
Enviado: 13 Jun 2012 10:26
por Pablo César
Teoricamente teria que funcionar, mas reveja tais funções em C se tiverem equivalente, pegue uma a uma e pesquise na internet. xHarbour, não uso mais...
foco wvw
Enviado: 13 Jun 2012 10:50
por Adelson.p
bom, oque acontece é que eu nao estou sabendo como resolver isso, bom, eu jah consegui fazer ver se tá minimizado ou nao.
