fivewin xbrowse array

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

fivewin xbrowse array

Mensagem por JoséQuintas »

O que tá errado nisso.
Não é automático ?
É um browse simples de array.

Código: Selecionar todos

#include "fivewin.ch"

PROCEDURE ze_fwTextMsg

   LOCAL oVar, nCont // , oDialog

   hb_ThreadStart( { || oVar := DlgTextMsgClass():New(), oVar:Execute() } )
   Altd()
   Inkey(2)
   FOR nCont = 1 TO 50
      oVar:ShowText( "Test " + Ltrim( Str( nCont ) ) )
      Inkey(2)
   NEXT
   oVar:End()

   RETURN

CREATE CLASS DlgTextMsgClass

   VAR xDlg
   VAR xControl
   VAR cText
   VAR aText    INIT {}
   VAR nMaxRow  INIT 10
   VAR nStyle   INIT 2

   METHOD Execute()
   METHOD ShowText( cText )
   METHOD End() INLINE ::xDlg:End()

   ENDCLASS

METHOD Execute() CLASS DlgTextMsgClass

   LOCAL nDlgWidth, nDlgHeight, oFont // xStatusbar,
   LOCAL nFontSize

   nDlgWidth  := AppWindowInfo()[1]
   nDlgHeight := AppWindowInfo()[2]
   nFontSize  := Int( AppWindowInfo()[ 3 ] * 0.8 )
   ::nMaxRow  := Int( nDlgHeight / ( nFontSize + 2 ) - 2 )

   DEFINE FONT oFont NAME "ARIAL" SIZE 0, -nFontSize
   DEFINE DIALOG ::xDlg FROM 0, 0 TO nDlgHeight, nDlgWidth PIXEL ;
      FONT oFont ;
      TITLE "TextScroll" // COLOR COLOR_WHITE, CLR_JPA
   ::xDlg:SetIcon( TIcon():New(,,"APPICON" ) )
   ::xDlg:bValid := .F.

   IF ::nStyle == 1
      @ 10, 10 GET ::xControl VAR ::cText MEMO OF ::xDlg PIXEL ;
         SIZE nDlgWidth  - nFontSize, nDlgHeight - nFontSize FONT oFont COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
   ENDIF
   //::xGet:Disable()
   //Don't works for GET MEMO
   //::xGet:lDisColors := .F.
   //::xGet:nClrTextDis := RGB2N(20,20,20)
   IF ::nStyle == 2
      @ 10, 10 XBROWSE ::xControl ;
         Array Array(10) ;
         SIZE nDlgWidth  - nFontSize, nDlgHeight - nFontSize FONT oFont
         ::xControl:SetArray( ::aText )
   ENDIF

   ACTIVATE DIALOG ::xDlg CENTERED
      //ON INIT ( (Self), guistatusBarCreate( ::xDlg, @xStatusbar, "" ) )

   RETURN Nil

METHOD ShowText( cText ) CLASS DlgTextMsgClass

   LOCAL cItem

      IF Len( ::aText ) = ::nMaxRow
         ADel( ::aText, 1 )
         ::aText[ Len( ::aText ) ] := cText
      ELSE
         AAdd( ::aText, cText )
      ENDIF
      ::cText := ""
      FOR EACH cItem IN ::aText
         ::cText += cItem + hb_Eol()
      NEXT
   IF ::nStyle == 1
      ::xControl:VarPut( ::cText )
      ::xControl:Refresh()
   ELSE
      ::xControl:SetArray( ::aText )
      ::xControl:nArrayAt := Len( ::aText )
      ::xControl:Refresh()
   ENDIF

   RETURN Nil

//STATIC FUNCTION guiStatusBarCreate( xDlg, xStatusbar, cText )

   //DEFINE STATUSBAR xStatusBar PROMPT cText OF xDlg
   //xDlg:Refresh()

   //RETURN xStatusBar
xbrowse.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

fivewin xbrowse array

Mensagem por JoséQuintas »

Esqueci do CreateFromCode()

Senão o fivewin não sabe que o fonte é pra ser usado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

fivewin xbrowse array

Mensagem por JoséQuintas »

debug.png
Pois é....
Enquanto o restante do aplicativo roda de fundo...
Debug do harbour na dialog FIVEWIN.

Lembrando: fivewin 25.01 oficial, o mesmo de todo mundo, deixou de ser versão diferente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
developer
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 09 Nov 2024 23:45
Localização: Londrina/PR

fivewin xbrowse array

Mensagem por developer »

Pois é....
Enquanto o restante do aplicativo roda de fundo...
Debug do harbour na dialog FIVEWIN.
Ficou bem interessante, poder ver o debug separado assim.
Eu tenho tentado fazer o debug funcionar em uma janela separada sem precisar do fivewin, hwgui, etc... somente usando gtwvg ou gtwvt mas não tenho conseguido acertar, tenho feito alguns testes, com modificações no código até que saiu alguma coisa, mas ainda não está bom, está faltando acertar varios detalhes importantes.
Screenshot_2.jpg
Screenshot_1.jpg
Screenshot_3.jpg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

fivewin xbrowse array

Mensagem por JoséQuintas »

Aí estào rodando vários test.exe

No meu caso é um único EXE multithread.
O aplicativo continua executando, mesmo com uma janela em debug.

O aplicativo é assim mesmo: abre janelas à vontade, independentes, e pode ou não fazer debug em cada uma de forma isolada.
Somente a janela em debug fica em pausa, as demais continuam funcionando normalmente.
Multithread é isso, só não costuma ficar visível desse jeito.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

fivewin xbrowse array

Mensagem por alxsts »

Olá!
developer
Estava olhando teu código em uma das janelas e tem algo que pode ser otimizado.

Não precisa fazer:

Código: Selecionar todos

cColor := SetColor()
SetColor( "...." )
Sabendo-se que SetColor() sempre retorna as configurações de cor atuais, basta fazer:

Código: Selecionar todos

cColor := SetColor( "..." )
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
developer
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 09 Nov 2024 23:45
Localização: Londrina/PR

fivewin xbrowse array

Mensagem por developer »

Aí estào rodando vários test.exe
É somente um EXE e está rodando em multithread, quando fecha o principal, fecha tudo.
De qualquer maneira não ficou bom e não está funcionando como eu quero, como acontece com hwgui ou fivewin, procuro independência destas bibliotecas. Depois vou tentar um pouco mais.

Código: Selecionar todos

cColor := SetColor( "..." )
O código não é meu, só peguei um exemplo para um teste, mas você está certo.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

fivewin xbrowse array

Mensagem por JoséQuintas »

O que uso pra deixar independente é um módulo invisível.
Atenção, que pode começar a experimentar módulos zumbis, vai ser normal, já que tudo vira independente.
Nesse caso vai precisar fechar no gerenciador de tarefas.
Pode configurar antes de chamar a thread, senão todas começam sem configuração (RDD,SET DATE, etc)
Descobri esta parte só neste último ano.

Código: Selecionar todos

PROCEDURE Main

   hb_ThreadStart( { || principal() } )
   hb_ThreadWaitForAll()
   RETURN

PROCEDURE HB_GTSYS
   REQUEST HB_GT_WVG_DEFAULT
   RETURN
O módulo principal vai ficar sem tela, e aguardando todas threads fecharem.

Uso GTWVG, mas tem a GTWVT, e outra em Linux, não são todas as LIBs que aceitam multithread, GTWIN não aceita.
Só posso dizer sobre GTWVG, que é meu uso normal, as outras só testando.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
developer
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 09 Nov 2024 23:45
Localização: Londrina/PR

fivewin xbrowse array

Mensagem por developer »

José, obrigado pelo exemplo e explicações, isto eu até estou conseguindo fazer, bem semelhante ao que você faz, inclusive vou mostrar um exemplo abaixo, seguindo suas orientações para você conseguir acompanhar (o código de 'Main2' é só para ter algum conteúdo...):

Código: Selecionar todos

// ISO 8859-1 

// hbmk2: -mt -b 

#include 'box.ch'
#include 'inkey.ch'
#include 'hbgtinfo.ch'
#include 'hbthread.ch'

REQUEST HB_CODEPAGE_PTISO

///////////////////////////////////////
PROCEDURE Main
   SETMODE( 30, 100 )
   AltD(1)
   AltD()

   hb_ThreadStart( { || Main2() } )
// hb_ThreadWaitForAll()

   @ 1,1 say 'Hello World!'
   Inkey(0)

RETURN

///////////////////////////////////////
PROCEDURE Main2
   
   hb_gtReload( 'WVT' )
   SETMODE(25,80)
   
   HB_CDPSELECT('PTISO')
   
   HB_GTINFO(HB_GTI_FONTNAME, 'Lucida Console')
   hb_gtInfo( HB_GTI_COMPATBUFFER, .F. )
   hb_gtInfo( HB_GTI_MSGBOX, .t. )
   
   Set Century On
   Set Date BRITISH
   Set ScoreBoard Off
   Set Wrap On
   
   Tela()
   SetCursor(0)
   
   SetColor( 'W/N*')
   @ 04, 04, MaxRow()-3, MaxCol()-5 BOX B_DOUBLE 
      
   clear typeahead
   Do While .T.  
      If InKey(1) == 27
         If Confirma('Abandonar o sistema ?')==1
            Return
        EndIf
      EndIf  
   EndDo
   
RETURN
   
  
///////////////////////////////////////
Function Tela()
   SetColor('N/N*')
   @ 02,00 CLEAR TO 23,79
   SetColor('W+/N')
   @ 00,01  Say SubStr('EMPRESA ABC',1,27)
   @ 00,27 Say '|'
   @ 00,28 Say PadC('SISTEMA TESTE',30)
   @ 00,57 Say '|'
   @ 00,59 Say Date()
   @ 00,70 Say '|'
   @ 01,00 Say Replicate( ' ', 80 ) Color 'N/W*'
   @ 24,00 Say Replicate( ' ', 80 ) Color 'N/W*'

   
Return(Nil)
   
///////////////////////////////////////
Function Confirma(cTexto)

   Local cOldTela:= SaveScreen(24,00,24,79)
   cColor:= SetColor('N/W*,W+/N')
   nCol:= (80-Len(cTexto))/2-6
   @24,00 Clear To 24,79
   @24,nCol Say cTexto
   @24,nCol+Len(cTexto)+2 Prompt 'Sim'
   @24,nCol+Len(cTexto)+7 Prompt 'Não'
   Menu To Confirm
   SetColor(cColor)
   RestScreen(24,00,24,79,cOldTela)

Return(Confirm)

///////////////////////////////////////
FUNCTION hb_GTSys()
   REQUEST HB_GT_WVT_DEFAULT
RETURN NIL
O meu problema é que eu quero acompanhar o andamento do código no DEBUG (usando "Step F8") que está rodando na outra thread (janela), porém o DEBUG vai mostrar o andamento da thread atual (janela principal). Não preciso que apenas mostre o conteúdo do código (isso faço com qualquer editor de código fonte).

Não sei se entendeu o meu objetivo: Programa rodando em uma janela e o DEBUG rodando em outra - porém seguindo os passos (pointer) da janela do programa.

Você sabe como obter este resultado? O problema é que o DEBUG mostra o conteúdo e PROGRESSO (Pointer) da janela (thread) que ele está mas não da outra janela (thread). Estou tentando fazer isso em GTWVT ou GTWVG (não importa), sem precisar de outras libs (HWGUI, FIVEWIN, etc...).

No seu exemplo parece que funciona mais ou menos como estou querendo, apesar que também não mostra no DEBUG o andamento do que acontece na 'CLASS DlgTextMsgClass', nem no programa principal (no background) - não testei aqui (não uso Fivewin).
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

fivewin xbrowse array

Mensagem por JoséQuintas »

Cada thread é independente.
Altd() na outra thread.

Veja no vídeo deste post

https://pctoledo.org/forum/viewto ... ad#p167278
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
developer
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 09 Nov 2024 23:45
Localização: Londrina/PR

fivewin xbrowse array

Mensagem por developer »

Cada thread é independente.
Altd() na outra thread.
Creio que é este o problema, não tem como fazer o que eu quero por meio de outra thread pois são independentes.
Parece que eu quero é duas janelas na mesma thread, sendo janela-1 o programa e janela-2 o debug, mas isso não é possível.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

fivewin xbrowse array

Mensagem por JoséQuintas »

F4 pra olhar a tela.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder