Clipper On Line • Ver Tópico - Multijanelas, qualquer que seja a LIB

Multijanelas, qualquer que seja a LIB

Outras bibliotecas visuais e IDEs para Harbour/xHarbour (xHGTK/HbWxW/GtWvT/GtWvW/WvWtools.etc)

Moderador: Moderadores

 

Multijanelas, qualquer que seja a LIB

Mensagempor JoséQuintas » 10 Fev 2017 12:35

Qual a forma para ter as duas janelas funcionando corretamente.
Uma é por código e a outra é por nome.
No momento nenhuma funciona direito por causa de índice, e de posicionamento.
Alguém poderia ajudar?

Neste exemplo, baseado num do Itamar, é HWGUI.
No momento pra mim, tanto faz, poderia ser HWGUI, HMG, HMG Extended ou OOHG.
Só estou tentando entender o comportamento disso em GUI.
- Aonde abrir arquivos
- O que esperar de posicionamento de SELECT, RecNo(), IndexOrd(), etc.

#include "hwgui.ch"

PROCEDURE main

   LOCAL aDbS := {}, oDlg, aDataLst := {}, oElement

   aDataLst := { ;
      { 1, "QUINTAS" }, ;
      { 2, "JOSE" }, ;
      { 3, "ITAMAR" }, ;
      { 4, "TOLEDO" }, ;
      { 5, "RUBENS" }, ;
      { 6, "ASIMOES" }, ;
      { 7, "FLADIMIR" }, ;
      { 8, "DR CLAUDIO SOTO" }, ;
      { 9, "MAIS" } }

   SET EXCLUSIVE OFF

   AADD( aDbS, { "CODIGO", "C", 4, 0 } )
   AADD( aDbs, { "NOME", "C", 30, 0 } )

   dbCreate( "_test.dbf", aDbS )
   USE _test
   FOR EACH oElement IN aDataLst
      APPEND BLANK
      REPLACE CODIGO WITH StrZero( oElement[ 1 ], 4 ), NOME WITH oElement[ 2 ]
   NEXT
   INDEX ON CODIGO TAG INDCOD
   INDEX ON NOME TAG INDNOME
   INIT WINDOW oDlg MAIN AT 0, 0 SIZE 800, 600 STYLE WS_VISIBLE + WS_OVERLAPPEDWINDOW
   SET ORDER TO 1
   GOTO TOP
   J_A( "CODIGO" )
   SET ORDER TO 2
   GOTO TOP
   J_A( "NOME" )
   oDlg:Activate( ,.F.,, .F. )

   RETURN NIL

FUNCTION J_A( cOrdem )

   LOCAL oDlg, oBrw

   INIT DIALOG oDlg CLIPPER NOEXIT AT 0, 0 SIZE 300,200

   @ 10, 10 BROWSE oBrw DATABASE OF oDlg SIZE 200,150 APPEND

   ADD COLUMN FieldBlock( "CODIGO" ) TO oBrw EDITABLE Header "CODIGO" LENGTH 4
   ADD COLUMN FieldBlock( "NOME" )   TO oBrw EDITABLE HEADER "NOME"   LENGTH 30

   oDlg:Activate(.T.)

   RETURN NIL


A navegação de uma janela afeta a navegação da outra, no que diz respeito ao registro atual e ordem.

Não está relacionado a uma LIB específica, apesar deste exemplo inicial ser HWGUI.
Acho que interessa a qualquer um que esteja pensando em trocar de ambiente console pra ambiente GUI.
E também é uma referência de como a programação GUI não tem nada a ver com programação console.

Multithread é diferente de tudo, só é aceita em GTWVG, GTWVT e poucas LIBs Linux (talvez 2).
Além disso, elas tem um comportamento estilo console, então não servem como referência.
Pra curiosidade, em lib multithread basta usar, não precisa se preocupar com nada.

PROCEDURE Main

   hb_ThreadStart( { || tela( 1 ) } )
   hb_ThreadStart( { || tela( 2 ) } )
   hb_ThreadStart( { || tela( 1 ) } )
   hb_ThreadStart( { || tela( 2 ) } )
   hb_ThreadWaitForAll()

   RETURN

FUNCTION HB_GTSYS()
   REQUEST HB_GT_WVG_DEFAULT
   RETURN NIL

FUNCTION Tela( nOrdem )

   SET EXCLUSIVE OFF
   hb_gtReload( "WVG" )
   SetMode( 15, 60 )
   CLS
   USE _test INDEX _test
   IF nOrdem == 1
      SET ORDER TO 1
   ELSE
      SET ORDER TO 2
   ENDIF
   Browse()
   CLOSE DATABASES

   RETURN NIL


Acho incrível, mas nenhuma LIB tem exemplo disso.
A sensação é que dá pra fazer tudo, menos aplicativo.... rs

Notas:

Já ouvi comentários de que multithread é pra algo mais avançado que isso, não pra coisas simples desse tipo. Mas funciona, uso assim faz tempo.

LIBs GUI não se dão bem com multithread, ou pelo controle interno da LIB, ou pelo funcionamento de ambiente GUI, senão poderia ser usado o mesmo recurso de multithread.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind your eyes and steal your dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 8101
Data de registro: 26 Fev 2007 12:59
Cidade/Estado: São Paulo-SP
Curtiu: 4 vezes
Mens.Curtidas: 475 vezes

Multijanelas, qualquer que seja a LIB

Mensagempor JoséQuintas » 10 Fev 2017 13:06

Tela hwgui, mas browse nas janelas fica "maluco", pois uma janela interfere no posicionamento do DBF da outra, e a ordem também interfere.
Só achei curioso mostrar que usa mais de uma thread.

teste.png


Tela GTWVG com multithread, tudo funcionando normalmente.
Só esqueci do GOTO TOP no fonte, pro posicionamento inicial.

teste3.png


Falta descobrir como fazer a mesma coisa em ambiente GUI, sem usar multithread.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind your eyes and steal your dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 8101
Data de registro: 26 Fev 2007 12:59
Cidade/Estado: São Paulo-SP
Curtiu: 4 vezes
Mens.Curtidas: 475 vezes

Multijanelas, qualquer que seja a LIB

Mensagempor JoséQuintas » 10 Fev 2017 13:17

Faltou dizer:

Pra compilar o exemplo da gtwvg
hbmk2 test -mt gtwvg.hbc

Pra compilar o exemplo da hwgui (uso meu bat, mas colocar aqui detalhado)
hbmk2 test -lhwgui -lprocmisc -lxml-mt -gui -L\hwgui\lib\win\msvc -I\hwgui\include
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind your eyes and steal your dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 8101
Data de registro: 26 Fev 2007 12:59
Cidade/Estado: São Paulo-SP
Curtiu: 4 vezes
Mens.Curtidas: 475 vezes

Multijanelas, qualquer que seja a LIB

Mensagempor JoséQuintas » 15 Abr 2017 20:57

Só atualizando, agora funciona.
Parece que GTWVG vai bem com tudo, com ou sem tela.

Atenção ao detalhe do #include "hwgui.ch".
Ele atrapalha GTWVG, porque modifica @say/@get, mas é só fazer em fonte separado, ou dessa forma quando possível.

PROCEDURE main

   LOCAL cCodigo := Space(10)

   SetMode( 25, 80 )
   CLS
   hb_ThreadStart( { || testHWGui() } )
   hb_ThreadStart( { || testHWGui() } )
   @ 1, 5 SAY "Codigo:" GET cCodigo
   READ

   RETURN

#include "hwgui.ch"

FUNCTION TestHWGui()

   LOCAL aDbS := {}, aDataLst, oElement //, oDlg

   aDataLst := { ;
      { 1, "QUINTAS" }, ;
      { 2, "JOSE" }, ;
      { 3, "ITAMAR" }, ;
      { 4, "TOLEDO" }, ;
      { 5, "RUBENS" }, ;
      { 6, "ASIMOES" }, ;
      { 7, "FLADIMIR" }, ;
      { 8, "DR CLAUDIO SOTO" }, ;
      { 9, "MAIS" } }

   SET EXCLUSIVE OFF

   IF ! File( "_test.dbf" )
      AADD( aDbS, { "CODIGO", "C", 4, 0 } )
      AADD( aDbs, { "NOME", "C", 30, 0 } )
      dbCreate( "_test.dbf", aDbS )
      USE _test
      FOR EACH oElement IN aDataLst
         APPEND BLANK
         REPLACE _test->CODIGO WITH StrZero( oElement[ 1 ], 4 ), _test->NOME WITH oElement[ 2 ]
      NEXT
      INDEX ON _test->CODIGO TAG INDCOD
      INDEX ON _test->NOME TAG INDNOME
   ENDIF
   USE _test SHARED
   SET INDEX TO _test
   //INIT WINDOW oDlg MAIN AT 0, 0 SIZE 800, 600 STYLE WS_VISIBLE + WS_OVERLAPPEDWINDOW
   SET ORDER TO 1
   GOTO TOP
   J_A( "CODIGO" )
//   SET ORDER TO 2
//   GOTO TOP
//   J_A( "NOME" )
   //oDlg:Activate( ,.F.,, .F. )

   Inkey(0)
   RETURN NIL

FUNCTION J_A( ... )

   LOCAL oDlg, oBrw

   //OpenAll()

   INIT DIALOG oDlg CLIPPER NOEXIT AT 0, 0 SIZE 300,200

   @ 10, 10 BROWSE oBrw DATABASE OF oDlg SIZE 200,150 APPEND

   ADD COLUMN FieldBlock( "CODIGO" ) TO oBrw EDITABLE Header "CODIGO" LENGTH 4
   ADD COLUMN FieldBlock( "NOME" )   TO oBrw EDITABLE HEADER "NOME"   LENGTH 30

   oDlg:Activate(.T.)

   RETURN NIL


hwgui.png
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind your eyes and steal your dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 8101
Data de registro: 26 Fev 2007 12:59
Cidade/Estado: São Paulo-SP
Curtiu: 4 vezes
Mens.Curtidas: 475 vezes




Retornar para Outras Bibliotecas Visuais e IDEs

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro