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. :x