Página 1 de 1

Multithread e multiplas janelas

Enviado: 22 Jun 2012 14:52
por JoséQuintas
Encontrei o exemplo gtwin,mostrando o uso de múltiplas janelas, mas sem funcionamento independente.
Fechou uma janela fecha todas.
Tem como deixar o código independente?

Obs. No VB cada módulo tem sua própria janela, pode até ser duplicado, cada um com sua janela e funcionamento independente.
Variavel1 = New FormP060
Variavel2 = New FormP060
Variavel1.Show
Variavel2.Show

Código: Selecionar todos

/*
 * $Id: gtwin.prg 14676 2010-06-03 16:23:36Z vszakats $
 */

/*
 * Harbour Project source code:
 *    demonstration/test code for using more then one console window.
 *    It needs GT driver which supports such functionality, i.e.
 *    GTWVT in MS-Windows or GTXWC in XWindow.
 *
 * Copyright 2008 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
 * www - http://harbour-project.org
 *
 */

#include "box.ch"

#ifdef __PLATFORM__WINDOWS
   REQUEST HB_GT_WVT_DEFAULT
   #define THREAD_GT "WVT"
#else
   REQUEST HB_GT_STD_DEFAULT
   #define THREAD_GT "XWC"
#endif

proc main()
   local pGT, pGT1, pGT2

   ? "This is small test for using more then one console window."
   ? "It needs GT which supports such functionality i.e. GTWVT in"
   ? "MS-Windows or GTXWC in XWindow"
   wait

   ? "Create two new GTs:"
   pGT1 := hb_gtCreate( THREAD_GT )
   ? "1 =>", pGT1
   pGT2 := hb_gtCreate( THREAD_GT )
   ? "2 =>", pGT1

   pGT := hb_gtSelect( pGT1 )
   SetColor( "W+/R" )
   dispBox( 10, 10, 20, 50, B_DOUBLE + " " )
   ?? "This test is shown in 1-st GT window"

   hb_gtSelect( pGT2 )
   SetColor( "W+/B" )
   dispBox( 15, 30, 20, 70, B_DOUBLE + " " )
   ?? "This test is shown in 2-nd GT window"

   hb_gtSelect( pGT )
   ? "New console window should be visible now"
   wait

   ? "Destroy 1-st window..."
   pGT1 := NIL
   ?? "done"
   wait

   ? "Destroy 2-nd window..."
   pGT2 := NIL
   ?? "done"

   wait "Press any key to exit"

return


Multithread e multiplas janelas

Enviado: 26 Jun 2012 20:04
por fladimir
E aí José conseguiu algo de novo?

[]´s

Multithread e multiplas janelas

Enviado: 27 Jun 2012 01:49
por JoséQuintas
Por coincidência fiz uns testes hoje.
Como console as janelas abrem uma sobre a outra. Mas podem ser movidas, e com funcionamento independente, a ponto de dar erro em uma e em outra não ao fechar. (fechando uma janela, dá erro no inkey() dela, mas as outras continuam rodando).
Pra não permitir fechar a janela principal (na verdade pra não existir), compilei com a gtnul.
Só que dessa forma o programa principal fica zumbi, e precisa ser fechado no gerenciador de tarefas. (lógico, o programa está rodando, só não tem tela).

compilei com hbmk2 -mt -gtnul

Código: Selecionar todos

#ifdef __PLATFORM__WINDOWS
   REQUEST HB_GT_WVT_DEFAULT
   #define THREAD_GT "WVT"
#else
   REQUEST HB_GT_STD_DEFAULT
   #define THREAD_GT "XWC"
#endif

proc main()

HB_ThreadStart({||OneGt()})

   For nCont = 1 To 3
      Hb_ThreadStart( {||AnotherGt()} )
   Next
Inkey(1000)   
return

Function OneGt()

   ? "This is small test for using more then one console window."
   ? "It needs GT which supports such functionality i.e. GTWVT in"
   ? "MS-Windows or GTXWC in XWindow"
   wait "Main Window. Press any key to exit"
Return NIL

Function AnotherGT()
Local pGT, nCont
pGt := hb_gtCreate(THREAD_GT)
hb_gtSelect(pGt)
For nCont = 1 To 10
   ? pGt, nCont
Next
wait "Child. Press any key to exit"
Return NIL   
Talvez no programa principal criar um array de janelas abertas, e fechar quando o array estiver vazio.
Tô achando que a GTWVW seria a melhor de todas, mas não teve atualização nem ajuste pra Harbour.

Multithread e multiplas janelas

Enviado: 27 Jun 2012 15:07
por JoséQuintas
Agora que me dei conta....
Alterando meu preview de relatórios usando multithread, vou ter o que tinha antes: opção de vários relatórios abertos.
Depois vou brincar com isso....

Multithread e multiplas janelas

Enviado: 29 Jun 2012 12:17
por sygecom
Apenas para lembrar, isso só é possível com Harbour hoje, o xHarbour para MT é uma negação total.

Multithread e multiplas janelas

Enviado: 18 Set 2012 21:46
por Abel
Ola, estava tentando abrir a nova janela exibir o texto dentro dela mas manter a janela principal ativa e nao paralisada.

exemplo de uso.
o cara pede um help eu abro nova janela com as instrucoes e ele minimiza ou arrasta a nova janela e faz uso das funcoes q estao no help. Quando ele desejar fechar o HELP ele clica no X e a janela principal continua ativa.

fiz o seguinte:

procedure help()
local ntnovo, ntantigo

ntnovo := hb_gtcreate("WVT")
ntnantigo := hb_gtselect(ntnovo)

exibe_help()

hb_gtselect(ntantigo)
return nil


problemas que ocorrem:
- ele abre a segunda janela, mas a janela principal fica paralizada.
- quando fecho no X a segunda janela ele fecha a principal tambem.

sera que alguem sabe a solucao ?

Valeu,
ABEL

Multithread e multiplas janelas

Enviado: 19 Set 2012 02:08
por JoséQuintas
A opção é usar multithread nessa janela de help, aí o help roda igual um EXE separado, pode até dar erro que não fecha o programa principal.

Multithread e multiplas janelas

Enviado: 19 Set 2012 16:09
por Abel
sem querer abusar,
como eu faco isso ?

"usar multithead"

Abracos,
ABEL

Multithread e multiplas janelas

Enviado: 19 Set 2012 16:27
por JoséQuintas
Lembrando: vai funcionar como se fosse um EXE separado. A vantagem é não exigir uns 400kb para EXE separado.

No hbmk2 precisa acrescentar -mt

hb_ThreadStart( @FuncaoHelp(), cParametro)

Function FuncaoHelp(cParametro)