Clipper On Line • Ver Tópico - Modo gráfico Tutor Plug and Play - Hwgui

Modo gráfico Tutor Plug and Play - Hwgui

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor cjp » 13 Set 2020 00:40

Poderia, por favor, me explicar como funciona o @ say? Vi nos exemplos números bem maiores do que os usados no modo console, mas não entendi bem qual a lógica desses dados.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor Itamar M. Lins Jr. » 13 Set 2020 11:40

Ola!
Vi nos exemplos números bem maiores do que os usados no modo console, mas não entendi bem qual a lógica desses dados.

Qual é a resolução ai da sua tela no windows ?
Pode usar como era antigamente 80x25.
Uma tela 80x25 dentro de uma tela 1280x720 que tamanho fica ? Qual é a resolução de tela do seu celular ?
Monitores antigos trabalhavam com LINHAS e COLUNAS agora os monitores trabalham com PONTOS(pixel) É possível acender(ativar) um pontinho desse no monitor e trocar de cor... Antes agente acendia( @ 1,1 say chr(255) ) uma LINHA em uma coluna do monitor.
A MALHA(REDE) da TELA antes tinha apenas 80x25, agora tem (minimamente falando hoje em dia) 1280x720.
A resolução mais baixa 640x480, a mais alta não sabemos varia de acordo com as novas tecnologias.
Quando vc desenhar sua tela deverá levar isso em consideração.
Se fizer(desenhar) seu aplicativo em tela 1280x720, não irá aparecer em monitores 1024x620 vai cortar alguns objetos da tela.
Quanto MENOR resolução usarmos MENOR fica em resoluções maiores.
Por isso a confusão(difícil entender) que possivelmente podemos fazer usando os GTs pois não é possível usar LETRAS(Fonts) diferentes na mesma tela.
GTs são os antigos métodos, herança do DOS. Porque ele LIMITA o desenvolvedor usar APENAS 1(uma) FONTE de letra no aplicativo todo.
No Hwgui, Minigui, podemos colocar qualquer tamanho, estilo, cor de fonte com total liberdade, basta apenas escolher nossa DIAGRAMAÇÃO da tela, que acharmos melhor.
@ 1,1 say "X" // No windows é a mesma coisa, PORÉM qual será o último ? Vai depender da resolução de cada TELA que irá cessar o sistema.
@ 1280,720 say "X" seria no caso a ultima, no DOS seria, @ 24,79 say "X" isso em uma tela (gráfica) windows é bem pequeno.

Qual quadro seria melhor para colocar mais elementos ?
Um quadro de 1,0m X 1,0m metro para desenhar ? ou um quadro 100,0m X 100,0m ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor cjp » 13 Set 2020 22:01

Vamos ver se eu entendi o que vc disse: o Harbour trabalha com linhas/colunas, e a Hwgui trabalha com pontos, que são muito menores que uma linha/coluna. É isso?
Isso permite que a Hwgui seja mais precisa e detalhada, além de se adaptar melhor aos diversos tamanhos de monitores, correto?
Meu computador está com resolução de tela de 1366 X 768. No celular eu não uso meu sistema.
Mas o que eu ainda não entendi: como faço para desenhar a tela com textos comuns, do tipo @ say? Qual é o parâmetro? Quanto seria o maxrow() X maxcol()?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor Itamar M. Lins Jr. » 13 Set 2020 22:31

Ola!
o Harbour trabalha com linhas/colunas, e a Hwgui trabalha com pontos, que são muito menores que uma linha/coluna. É isso?

A Hwgui, Minigui, FiveWin, HBQT, Xailer... São feitas usando também o Harbour, compiladas com o Harbour e LINKADAS com GCC/BCC/MSVC...
Então são 100% dependentes do Harbour. São feitas para uso com o Harbour.
trabalha com linhas/colunas,
Quem trabalha com linhas/colunas é o ambiente que vai ser executado nosso aplicativo. No caso a linha de comando do win10(CMD/prompt de comando). Que vai passar a ser igual ao LINUX ( terminal de comando ) em breve.
Hwgui seja mais precisa e detalhada, além de se adaptar melhor aos diversos tamanhos de monitores, correto?

Não! a Hwgui usa os recursos de outro ambiente que é o windows.(gráfico).
São DOIS ambientes que vc tem. O do PROMPT/CMD limitado que está dentro de um maior, o windows (sistema operacional).
A Hwgui usa recursos do Windows e as GTs(GTWVG/GTWIN/GTWVW) usam recursos limitados pelo CMD/Prompt(ambiente limitado dentro de um maior).
Mas o que eu ainda não entendi: como faço para desenhar a tela com textos comuns, do tipo @ say? Qual é o parâmetro? Quanto seria o maxrow() X maxcol()?

Cadê seu código ? Mostre algo para poder ensinar o que tem dúvida.
No tutor tem vários exemplos escolha algum para podermos trabalhar em cima de suas dúvidas.
Da forma que está no tutor é forma normal que usamos fora do tutor.
tutorial.rar
Tutorial compilado atualizado e corrigido
(2.29 MiB) Baixado 94 vezes


Olhe na pasta "Get System" que tem o que vc perguntou.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor cjp » 13 Set 2020 23:44

Estou fazendo com base no tutorial.
Vi a seção Get System, que tem dois exemplos. O primeiro está dando erro na compilação (vide anexo).
Mas o segundo exemplo deu certo e eu entendi. Mas acho que não é bem isso que preciso.
Estou querendo apenas colocar dados na tela, o que faria com @ say no modo console.
Ainda não fiz quase nada, mas o início que fiz não deu certo.
Veja o princípio do código:

   IF ADOconecta( nProvAcoes, 5 )
      cProc=conexao:execute("select dtcotacao,cotacao,quemcad,compvenda,conta from acoes where codigo='"+cod+"' AND status='M' order by dtcotacao")
     if cProc:recordcount()>0
        @ 22,5 say "Ordens marcadas:" size 500,45
       a=34
       do while !cProc:Eof()
           @ a,5 say cProc:Fields("dtcotacao"):Value size 500,45
           @ a+10,5 say cProc:Fields("quemcad"):Value size 500,45
         @ a+20,5 say cProc:Fields("compvenda"):Value size 500,45
         @ a+30,5 say cProc:Fields("cotacao"):Value size 500,45
         @ a+40,5 say cProc:Fields("conta"):Value size 500,45
         a=a+50
         cProc:MoveNext()
         enddo
     endif
   endif


Veja no anexo como está aparecendo.
Anexos
tela.png
telagui.png
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor Itamar M. Lins Jr. » 14 Set 2020 08:10

Ola!
Você nem baixou o tutor novo que postei, mais acima.
Esse tem 3 exemplos.
Sem título.png

Mostre seu código todo.
Está fazendo uma coisa e perguntando outra.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor cjp » 15 Set 2020 14:17

De fato, eu não tinha baixado o último tutorial, pois não sabia que ele tinha sido atualizado. Baixei agora.

Segue o código inteiro:

* -----------------------------------------------------------------
* Programa...: ASAPREV.PRG
* Finalidade.: Controlar o Menu de Op??es do Sistema da ASAPREV
* Autor......: Alexandre Sim?es
* Data.......: 09/2010 at? presente data
* -----------------------------------------------------------------
* Manuten??o atual por: Alexandre Sim?es (SET/2010 A PRESENTE DATA)
* C?digo migrado para Harbour 32Bit
* -----------------------------------------------------------------
* Harbour    : 3.4 FORK
* Compilador : LLVM/CLANG 9.0 (32-bit)
* Lib Gr?fica: HwGui 2.17 (FORK)
* -----------------------------------------------------------------
THREAD STATIC ThisFormMain

#include "hwgui.ch"
#include "inkey.ch"
#include "dbinfo.ch"
#include "fileio.ch"
#include "hbclass.ch"
#include "hbver.ch"
#include "hbdyn.ch"
#include "hbthread.ch"

//#define WM_QUERYENDSESSION          0x0011
//#define WM_ENDSESSION               0x0016
//#define WM_ENDSESSION                   22

#define NIIF_INFO               0x00000001
#define NIIF_WARNING            0x00000002
#define NIIF_ERROR              0x00000003
#define NIIF_USER               0x00000004

#define HB_SYMBOL_UNUSED( symbol )  ( symbol := ( symbol ) )

FUNCTION MAIN()
PUBLIC oDEMO

   WITH OBJECT oDEMO := ClDEMO():New()
      :DEMO()
   END
ANNOUNCE Errors2
   
RETURN Nil

CREATE CLASS ClDEMO

   PROTECTED :
   
   EXPORTED :   
   
   VAR nWidth           AS INTEGER INIT Nil PROPERTY
   VAR nHeight          AS INTEGER INIT Nil PROPERTY
   VAR nOpcao           AS INTEGER INIT 1   PROPERTY
   VAR nTmpSistema      AS INTEGER INIT 60  PROPERTY
   VAR nLoop            AS INTEGER INIT 1   PROPERTY
   VAR nTimeOut         AS INTEGER INIT -1  PROPERTY
   VAR aOpcao           AS ARRAY   INIT {}  PROPERTY
   VAR aCompDateTime    AS ARRAY   INIT {}  PROPERTY
   VAR aEstacaoFoto     AS ARRAY   INIT {"PC2"} PROPERTY
                       
   VAR oIcon001         AS OBJECT  INIT Nil PROPERTY
   VAR oIcon002         AS OBJECT  INIT Nil PROPERTY
   VAR oIcon003         AS OBJECT  INIT Nil PROPERTY
   VAR oIcon004         AS OBJECT  INIT Nil PROPERTY
   VAR oIcon005         AS OBJECT  INIT Nil PROPERTY
   VAR oIcon006         AS OBJECT  INIT Nil PROPERTY
   VAR oIconCEP         AS OBJECT  INIT Nil PROPERTY
   VAR oIconOpe         AS OBJECT  INIT Nil PROPERTY
   VAR oOpcoes          AS OBJECT  INIT Nil PROPERTY
   VAR ThisFormInit     AS OBJECT  INIT Nil PROPERTY
   
   METHOD DEMO()
   METHOD AppSetup()
   METHOD SaidaSistema()
   METHOD ChamaRotina( cRotina, lGui )
     
ENDCLASS

METHOD DEMO()
LOCAL  oStatus1, oMenu1, oToolbar1, oToolbutton1, oToolbutton2, oToolbutton3, oToolbutton4 ;
       , oToolbutton5
LOCAL oIcon, oFont1, oFont2, oFont3, oFont4
LOCAL nIconIndex
LOCAL nHandleFile, nWidthW, nHeightH, nWidth, nHeight, aListBox:={}, oElemento

PUBLIC oWin
PUBLIC cDirSis          := Hb_DirBase() + [NETIO\SERVER5\DB\], ;
       cDirTMP          := Hb_GetEnv("TEMP") + Hb_Ps()
PUBLIC cVersao
PUBLIC Tecla
PUBLIC cUsuSis
PUBLIC cSenSis
PUBLIC cCor_0101
PUBLIC cCor_2424
PUBLIC iGiro            := 1
PUBLIC cArqPrint       
PUBLIC aTexto           := {}, oEdit
PUBLIC nRed             := Round(212 / 255, 2), ;
       nGreen           := Round(255 / 255, 2), ;
       nBlue            := Round(255 / 255, 2)
PUBLIC lPaint           := .F.
PUBLIC aAzul            := {0, 0, Round(255/255, 2)}
PUBLIC aVermelho        := {Round(255/255, 2), 0, 0}
PUBLIC aVerde           := {0, Round(255/255, 2), 0}
PUBLIC aPreto           := {0, 0, 0}
PUBLIC AzulHTML         := '<span style="color:#0000FF">'
PUBLIC VermelhoHTML     := '<span style="color:#FF0000">'
PUBLIC QuebraHTML       := "<br>"
PUBLIC cAlineL          := '<td align="left">'
PUBLIC cAlineC          := '<td align="center">'
PUBLIC cAlineR          := '<td align="right">'
PUBLIC oThisForm
PUBLIC cEstacaoCobranca := Hb_GetEnv( "COMPUTERNAME" )
PUBLIC cMens_, ;
       cCor__, ;
       nLin__, ;
       nCol__   
PUBLIC xMedia
PUBLIC oAchoice, ;
       oEditor, ;
       oMemo, ;
       oBrowse, ;
       oGuiProc, ;
       oClRede, ;
       oClShow, ;
       oClJustificaTexto       
PUBLIC pWindowGTI
PUBLIC N_BLUE           := 16711680
PUBLIC N_DARKBLUE       := 10027008
PUBLIC N_WHITE          := 16777215
PUBLIC N_CYAN           := 16776960
PUBLIC N_BLACK          :=        0
PUBLIC N_RED            :=      255
PUBLIC N_GREEN          :=    32768
PUBLIC N_GRAY           :=  8421504
PUBLIC N_YELLOW         :=    65535
PUBLIC N_CLEANBLUE      := 16771276
PUBLIC N_CLEANGRAY      := 12632256
PUBLIC N_BLUE001        := 16777172
*
PRIVATE cUserName       := Hb_GetEnv("USERNAME")
PRIVATE aPrn            := Win_PrinterList()
PRIVATE oSayMsg0
PRIVATE oSayMsg1
PRIVATE oSayMsg2
PRIVATE oSayMsg3
PRIVATE oBar
PRIVATE nTempoInicio
   
   ::AppSetup()
     
   nIconIndex := NIIF_USER
   
   hwg_SetColorInFocus( .T., 16711680, 8388607 )
   
   hwg_SetTooltipBalloon( .T. )
   
   oFont1     := HFont():Add( "Georgia", 15, -30, , 0 )
             
   oFont2     := HFont():Add( "Tahoma", 8, -20, , 0 )
             
   oFont3     := HFont():Add( "Tahoma", 6, -20, , 0 )
             
   oFont4     := HFont():Add( "Tahoma", 6 )

   oIcon      := HIcon():AddResource("ICON_A", 24, 24)
   
   nWidth      := hwg_GetDesktopWidth()
   
   nHeight     := hwg_GetDesktopHeight()
   
   ::nWidth    := hwg_GetDesktopWidth()
   
   ::nHeight   := hwg_GetDesktopHeight()
     
   lErro := .F.
   
   cCor_0101 := "B/W*"
   cCor_0202 := "W+/B*"
   cCor_0322 := "W+/B,B/GR*,,,N/W"
   cCor_2424 := "W+/B*"
   
   ::aOpcao := {}

   INIT WINDOW oWin ;
               MAIN ;
               TITLE       "Agenda" ;
               AT          0, 0 ;
               SIZE        hwg_GetDesktopWidth() , hwg_GetDesktopHeight() ;
               FONT        HFont():Add( 'Tahoma', 0 , -13, 400 ) ;
               ICON        oIcon ;
               STYLE       WS_CAPTION + WS_SYSMENU + WS_MAXIMIZEBOX ;
               ON INIT     {|this| hwg_Keyb_Event( VK_UP ), ;
                                   _CONTROLPOS_C_SETSTYLE_( oWin:handle, WS_SIZEBOX, .T. ) ;
                           } ;
               ON EXIT     {|this| ::SaidaSistema() }

   ThisFormMain           := oWin

   @ 0,0  BITMAP        Bitmap1 ;
          SHOW          "\lixo\WALLPAPER.JPG" ;
          OF            ThisFormMain ;
          STRETCH       0 ;
          SIZE          nWidth, nHeight - 65
       
public vers :="17/06/20"
sh="S"
snh=654
*#require "rddsql"
*#require "sddodbc"
*#include "dbinfo.ch"
*#include "hbcompat.ch"
*#include "inkey.ch"
*#include "hbgtinfo.ch"
*         #define RDDI_CONNECT     1001
*         #define RDDI_DISCONNECT   1002
*         #define RDDI_EXECUTE     1003
         REQUEST SQLMIX, SDDODBC, DBFNTX
*         ANNOUNCE RDDSYS

pargerais()
save scre to tl0                                                                                                                                                                                                                                                                                                                                             
         
   MENU OF ThisFormMain 
         MENUITEM 'Sair do Sistema' ID 32129  ACTION {|| ::SaidaSistema() }
         MENUITEM 'Agenda financeira' ID 32001                                     ACTION {|| ::ChamaRotina( "CONTAGEN34()", .F. ) }
*         MENUITEM 'Contas bancrias' ID 32002                                     ACTION {|| ::ChamaRotina( "BANCOS34()", .F. ) }
         MENUITEM 'Compromissos' ID 32003                                     ACTION {|| ::ChamaRotina( "AGCOM34()", .F. ) }
*         MENUITEM '&Graph1' ID 32004 ACTION Graph1()
         MENUITEM 'Cotacoes' ID 32005 ACTION Cotacoes34()
         MENUITEM '&Graph2' ID 32006 ACTION Graph2()
   ENDMENU
     
   ACTIVATE WINDOW oWin MAXIMIZED CENTER ON ACTIVATE {|| .T. }
   
RETURN Nil

METHOD SaidaSistema()
LOCAL lSair := .F.
   
   hwg_ExitProcess()
   
RETURN lSair

Static Function Graph1
Local oModDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oGraph
Local i, aGraph[1]

   aGraph[1] := {}
*   FOR i := -40 TO 40
*      Aadd( aGraph[1], { i, hwg_cos(i/10) } )
      Aadd( aGraph[1], { day(date()-6), 5 } )
      Aadd( aGraph[1], { day(date()-5), 6 } )
      Aadd( aGraph[1], { day(date()-4), 7 } )
      Aadd( aGraph[1], { day(date()-3), 8 } )
      Aadd( aGraph[1], { day(date()-2), 9 } )
      Aadd( aGraph[1], { day(date()-1), 10 } )
      Aadd( aGraph[1], { day(date()), 11 } )
*   NEXT

   INIT DIALOG oModDlg CLIPPER TITLE "Gr?fico"        ;
           AT 410,30  SIZE 300,300                  ;
           FONT oFont

   @ 50,30 GRAPH oGraph DATA aGraph SIZE 200,100 COLOR 65280
   // oGraph:oPen := HPen():Add( PS_SOLID,2,oGraph:tcolor )

   @ 90,250 BUTTON "Close"  ;
       SIZE 120,30          ;
       ON CLICK {||EndDialog()}

   ACTIVATE DIALOG oModDlg

Return Nil

Function Graph2(cod)
       Local oModDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oGraph
       Local i, aGraph[1]
      local cProc, nCotMax, dDtMax, nCotMin,dDtMin, nCotMax30d, dDtMax30d, nCotMin30d, dDtMin30d, nCotAgora, dDtAgora
      private conexao
      
       IF ADOconecta( nProvAcoes, 5 )
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND cotacao<9999 AND compvenda=0 order by cotacao DESC limit 1")
        nCotMax=cProc:Fields("cotacao"):Value
        dDtMax=cProc:Fields("dtcotacao"):Value
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND cotacao>0 AND compvenda=0 order by cotacao limit 1")
        nCotMin=cProc:Fields("cotacao"):Value
        dDtMin=cProc:Fields("dtcotacao"):Value
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND cotacao<9999 AND dtcotacao>'"+dtsql(date()-30)+"' AND compvenda=0 order by cotacao DESC limit 1")
        nCotMax30d=cProc:Fields("cotacao"):Value
        dDtMax30d=cProc:Fields("dtcotacao"):Value
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND dtcotacao>'"+dtsql(date()-30)+"' AND cotacao>0 AND compvenda=0 order by cotacao limit 1")
        nCotMin30d=cProc:Fields("cotacao"):Value
        dDtMin30d=cProc:Fields("dtcotacao"):Value
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND dtcotacao>'"+dtsql(date()-30)+"' AND cotacao>0 AND cotacao<9999 AND compvenda=0 order by dtcotacao DESC limit 1")
        nCotAgora=cProc:Fields("cotacao"):Value
        dDtAgora=cProc:Fields("dtcotacao"):Value
          cProc:Close()
        conexao:close()
      Endif
      

       aGraph[1] := {}
       Aadd( aGraph[1], { day(dDtMin), nCotMin } )
       Aadd( aGraph[1], { day(dDtMax), nCotMax } )
       Aadd( aGraph[1], { day(dDtMin30d), nCotMin30d } )
       Aadd( aGraph[1], { day(dDtMax30d), nCotMax30d } )
       Aadd( aGraph[1], { day(dDtAgora), nCotAgora } )

       INIT DIALOG oModDlg CLIPPER TITLE "Graph"        ;
       AT 38,5  SIZE 1310,800                  ;
       FONT oFont
         
        @ 9,15 say cod size 500,45
       
        @ 1087,384 say alltrim(str(nCotMin)) size 100,45
        @ 1127,384 say alltrim(str(nCotMax)) size 100,45
        @ 1166,384 say alltrim(str(nCotMin30d)) size 100,45
        @ 1207,384 say alltrim(str(nCotMax30d)) size 100,45
        @ 1250,384 say alltrim(str(nCotAgora)) size 100,45
       
        @ 1090,647 say substr(dtoc(dDtMin),1,2) size 100,45
        @ 1090,666 say substr(dtoc(dDtMin),4,2) size 100,45
        @ 1090,684 say substr(dtoc(dDtMin),9,2) size 100,45
       
        @ 1130,647 say substr(dtoc(dDtMax),1,2) size 100,45
        @ 1130,666 say substr(dtoc(dDtMax),4,2) size 100,45
        @ 1130,684 say substr(dtoc(dDtMax),9,2) size 100,45
       
        @ 1170,647 say substr(dtoc(dDtMin30d),1,2) size 100,45
        @ 1170,666 say substr(dtoc(dDtMin30d),4,2) size 100,45
        @ 1170,684 say substr(dtoc(dDtMin30d),9,2) size 100,45
       
        @ 1212,647 say substr(dtoc(dDtMax30d),1,2) size 100,45
        @ 1212,666 say substr(dtoc(dDtMax30d),4,2) size 100,45
        @ 1212,684 say substr(dtoc(dDtMax30d),9,2) size 100,45
       
        @ 1255,647 say substr(dtoc(dDtAgora),1,2) size 100,45
        @ 1255,666 say substr(dtoc(dDtAgora),4,2) size 100,45
        @ 1255,684 say substr(dtoc(dDtAgora),9,2) size 100,45

   @ 1070,410 GRAPH oGraph DATA aGraph SIZE 230,230 COLOR 65280
   oGraph:nType := 2
   
   IF ADOconecta( nProvAcoes, 5 )
      cProc=conexao:execute("select dtcotacao,cotacao,quemcad,compvenda,conta from acoes where codigo='"+cod+"' AND status='M' order by dtcotacao")
     if cProc:recordcount()>0
        @ 22,5 say "Ordens marcadas:" size 500,45
       a=34
       do while !cProc:Eof()
           @ a,5 say cProc:Fields("dtcotacao"):Value size 500,45
           @ a+10,5 say cProc:Fields("quemcad"):Value size 500,45
         @ a+20,5 say cProc:Fields("compvenda"):Value size 500,45
         @ a+30,5 say cProc:Fields("cotacao"):Value size 500,45
         @ a+40,5 say cProc:Fields("conta"):Value size 500,45
         a=a+50
         cProc:MoveNext()
         enddo
     endif
   endif

*   @ 130,250 BUTTON "Close"  ;
*       SIZE 130,30          ;
*       ON CLICK {||EndDialog()}

   ACTIVATE DIALOG oModDlg

Return Nil

Function velhaCotacoes
        local opcotvar
        private oRs, conexao
       private dti := date()
       private dtf := date()

         GetDt()      

/*      
        if seconds()<30000
           dt=date()-1
        else
           dt=date()
        endif
        dtf=date()
*/
      
        opcotvar=2
*?procline(0)
*?"Conferir:"
*inkey(11)      
*                          @ 11,29 say "Data inicial:"get dt
*                        @ 12,29 say "Data final:"get dtf
*                        read
*?procline(0)
*inkey(11)      

         IF ADOconecta( nProvAcoes, 5 )
            oRs=conexao:execute("SELECT codigo,dtcotacao,hrcotacao,cotacao,quemcad,dtvisto,hrvisto,dtver from acoes WHERE dtcotacao>='"+dtsql(dt-3)+"' AND dtcotacao<'"+dtsql(dtf+1)+"' AND compvenda=0"+if(opcotvar=2," AND quemcad like 'var-%'","")+if(opcotvar=3," ORDER by dtvisto,hrvisto"," ORDER by dtcotacao,hrcotacao"))
          browseado()
            oRs:Close()
          conexao:close()
        Endif

Return .t.

function enddialog
return

METHOD ChamaRotina( cRotina, lGui )
THREAD STATIC lInicio := .F., lContinua := .T., oErro

   Hb_Default(@lGui, .F.)
   
         If ! lGui
            If ! lInicio
               lInicio := .T.
               nThread  :=  Hb_ThreadStart( Hb_BitOr( HB_THREAD_INHERIT_PUBLIC, HB_THREAD_INHERIT_PRIVATE, HB_THREAD_INHERIT_MEMVARS ), {|| &cRotina.} )
               
//               DO WHILE .T.
//                  IF Hb_ThreadWait( nThread, 0.1, .T. ) == 1
//                     Exit
//                  ENDIF
//                  hwg_DoEvents()
//               ENDDO
               //Eval( {|| &cRotina. } )
               If pWindowGTI != Nil
                  wapi_DestroyWindow( pWindowGTI )
               Endif
               lInicio := .F.
            Endif
         Endif
                               
RETURN Nil

/*
function logerro
return

function sendmessage
return

*function enddialog
*return
*/

function cotacoes34
         oJanela := Janela():New():IniciaJanelaRotina( "Cotacoes" )
       cotacoes()
return .t.

function agcom34
         oJanela := Janela():New():IniciaJanelaRotina( "Compromissos" )
       agcom()
?procline(0)
inkey(11)      
return .t.

function bancos34
         oJanela := Janela():New():IniciaJanelaRotina( "Bancos" )
       bancos()
return .t.

function contagen34
         oJanela := Janela():New():IniciaJanelaRotina( "Agenda financeira" )
       contagen()
return .t.

function envmailkativ(dstmail,arqmand,contmail,arqanx,inc)
         local ret :="S"

*return .f.
      
*if "RODRIGO"$upper(netname()) .or. "CAMYLLA"$upper(netname()) .or. "INACIO"$upper(netname()) .or. "VANESSA"$upper(netname()) .or. "LUIZ"$upper(netname()) .or. "MVAZ"$upper(netname())
*   return .f.
*else
*?"Entrou no envmailkativ; ver se vai dar erro:"
*?netname()
*inkey(11)   
*endif   
         bError := ErrorBlock( {|e| Break(e) } )
         begin sequence
if inc=4 .and. us="I"
?dstmail
?arqmand
?contmail
?arqanx
?procline(0)
?"Ver se vai mandar pelo envmailkativ"
inkey(5)
endif
*             if hb_sendmail("smtp"+if(upper(netname())="LUIZ" .or. "MVAZ"$upper(netname()),"i","")+".kinghost.net",587,"programa@inacio.kinghost.net",{dstmail},,,memoread(arqmand)+ansi(contmail),assuntomail,{arqanx},"programa@inacio.kinghost.net","piuma2018","pop.kinghost.net",,,.T.,.t.,,,)=.f.
             if tip_mailsend("smtp"+if(upper(netname())="LUIZ" .or. "MVAZ"$upper(netname()),"i","")+".kinghost.net",587,"programa@inacio.kinghost.net",{dstmail},,,memoread(arqmand)+ansi(contmail),assuntomail,{arqanx},"programa@inacio.kinghost.net","piuma2018","pop.kinghost.net",,,.T.,.t.,,,)=.f.
if inc=4 .and. us="I"
?dstmail
?arqmand
?contmail
?arqanx
?procline(0)
?"N?o mandou pelo envmailkativ"
inkey(5)
endif
*?"Retornou falso"
*inkey(11)
*inkey(11)            
                ret="F"
                if us="I" .and. inc#4
                   @ maxrow()-1,1 say "Aguarde... (mandmail n?o enviou pelo programa@inacio.kinghost.net)"
                 endif
*else
*?"Enviou"
*inkey(11)
*inkey(11)             
            endif
         
         recover using e
                 cMessage := ErrorMessage(e)
                 logerro()
                 mandmail1("error.log","Erro na fun??o envmailkativ contornado com o recover do begin sequence")
             ret="F"
         endsequence
         ErrorBlock( bError )

         if ret="F"
            return .f.
         endif

return .t.

function envmailking(dstmail,arqmand,contmail,arqanx,inc)
         local ret :="S"
*if "RODRIGO"$upper(netname()) .or. "CAMYLLA"$upper(netname()) .or. "VANESSA"$upper(netname()) .or. "LUIZ"$upper(netname()) .or. "MVAZ"$upper(netname())
*   return .f.
*else
*if us="I"
*?upper(netname())
*inkey(1)
*endif   
*endif   
         bError := ErrorBlock( {|e| Break(e) } )
         begin sequence
if inc=4 .and. us="I"
?dstmail
?arqmand
?contmail
?arqanx
?procline(0)
?"Ver se vai mandar pelo envmailking"
inkey(5)
endif
             if tip_mailsend("smtp"+if(netname()="INACIO" .or. netname()="inaciocarvalho","i","")+".kinghost.net",587,"programa@inaciocarvalho.com.br",{dstmail},,,memoread(arqmand)+ansi(contmail),assuntomail,if(!empty({arqanx}),arqanx,""),"programa@inaciocarvalho.com.br","Rfvv2015","pop.kinghost.net",,,.T.,.t.,,,)=.f.
*             if hb_sendmail("smtp"+if(netname()="INACIO" .or. netname()="inaciocarvalho","i","")+".kinghost.net",587,"programa@inaciocarvalho.com.br",{dstmail},,,memoread(arqmand)+ansi(contmail),assuntomail,if(!empty({arqanx}),arqanx,""),"programa@inaciocarvalho.com.br","Rfvv2015","pop.kinghost.net",,,.T.,.t.,,,)=.f.
if inc=4 .and. us="I"
?dstmail
?arqmand
?contmail
?arqanx
?procline(0)
?"N?o mandou pelo envmailking"
inkey(5)
endif
                ret="F"
                if us="I" //.and. inc#4
                   @ maxrow()-1,1 say "Aguarde... (mandmail n?o enviou pelo programa@inaciocarvalho.com.br)"
                 endif
            endif
         
         recover using e
                 cMessage := ErrorMessage(e)
                 logerro()
                 mandmail1("error.log","Erro na fun??o envmailking contornado com o recover do begin sequence")
             ret="F"
         endsequence
         ErrorBlock( bError )

         if ret="F"
            return .f.
         endif
      
if us="I"
?procline(0)
inkey(11)
endif
      
return .t.

METHOD AppSetup()

PUBLIC cEstacaoCobranca := Hb_GetEnv( "COMPUTERNAME" )

PUBLIC cTaskMens1 := Hb_Eol() + ;
                     Hb_Eol() + ;
                     Hb_Eol() + ;
                     Hb_Eol() + ;
                     Hb_Eol() + ;
                     Hb_Version() + ;
                     Hb_Eol() + ;
                     Hb_Eol() + ;
                     Hb_Compiler()
                     
PUBLIC cTaskMens2 := "Constru?do por: Alexandre Sim?es" + ;
                     Hb_Eol() + ;
                     Hb_Eol() + ;
                     "Email: asimoesluz@gmail.com"
                   
  * Verificar portas no windows 7: netstat -an

PUBLIC hWnd, ;
       oSayMsg, ;
       oDlgHabla, ;
       cTituloJanela, ;
       oTimer, ;
       cPrinter, ;
       nJanelaAsaPrev, ;
       cBuild, ;
       OldHandler     

   //ANNOUNCE hwg_ErrSys
   
   //ErrorSistema()
   
   *
   
   cPrinter := Win_PrinterGetDefault()
   
   REQUEST DBFCDX
   
   REQUEST SIXCDX
   
   REQUEST HB_MEMIO
   
   RddSetDefault('DBFCDX')
   
   REQUEST HB_LANG_PT
 
   REQUEST HB_CODEPAGE_PT850
 
   REQUEST HB_CODEPAGE_PTISO
   
   Hb_LangSelect("PT")
 
   Hb_SetCodePage( "PTISO" )
 
   Hb_CdpSelect("PTISO")
 
   Set( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE )
   
   SET TYPEAHEAD TO 0
   SET INTENSITY ON
   SET DELETED ON
   SET DATE ANSI
   SET DATE FORMAT "DD/MM/YY"
   SET DELIMITERS TO
   SET EXCLUSIVE OFF
   SET EPOCH TO 1965
   SET CENTURY ON
   SET OPTIMIZE ON
   SET AUTOPEN OFF
   SET DBFLOCKSCHEME TO DB_DBFLOCK_CLIPPER
   
   Set( _SET_FORCEOPT, .T. )
     
RETURN Self
 
#pragma BEGINDUMP

#include <windows.h>

#include "hbapi.h"

HB_FUNC( HB_GTI_DESTROY_WINDOW )
{
   DestroyWindow( (HWND) hb_parnl( 1 ) );
}

#pragma ENDDUMP

#pragma BEGINDUMP

#if defined ( __MINGW32__ )
   #define _WIN32_WINNT 0x0500
#endif

#include <windows.h>
#include "hbapi.h"

HB_FUNC( SETTRANSPARENT )
{

   typedef BOOL (__stdcall *PFN_SETLAYEREDWINDOWATTRIBUTES) (HWND, COLORREF, BYTE, DWORD);

   PFN_SETLAYEREDWINDOWATTRIBUTES pfnSetLayeredWindowAttributes = NULL;

   HINSTANCE hLib = LoadLibrary("user32.dll");

   if (hLib != NULL)
   {
      pfnSetLayeredWindowAttributes = (PFN_SETLAYEREDWINDOWATTRIBUTES) GetProcAddress(hLib, "SetLayeredWindowAttributes");
   }

   if (pfnSetLayeredWindowAttributes)
   {
      SetWindowLong((HWND) hb_parnl (1), GWL_EXSTYLE, GetWindowLong((HWND) hb_parnl (1), GWL_EXSTYLE) | WS_EX_LAYERED);
      pfnSetLayeredWindowAttributes((HWND) hb_parnl (1), 0, hb_parni (2), LWA_ALPHA);
   }

   if (!hLib)
   {
      FreeLibrary(hLib);
   }

}

#pragma ENDDUMP

Function GetDt()
Local oDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oTimer
*Local e1 := Date()-1
*Local e2 := Date()

   INIT DIALOG oDlg CLIPPER NOEXIT TITLE "Datas inicial e final"  ;
         AT 210,10  SIZE 300,320 FONT oFont

   SET KEY FSHIFT,VK_F3 TO hwg_Msginfo("Shift-F3")
   SET KEY FCONTROL,VK_F3 TO hwg_Msginfo("Ctrl-F3")
   SET KEY 0,VK_F3 TO hwg_Msginfo("F3")
   SET KEY 0,VK_RETURN TO hwg_Msginfo("Return")
   
   @ 20,10 SAY "Datas:" SIZE 260, 22

   @ 20,35 GET dti  SIZE 260, 26
   
   @ 20,95 GET dtf  SIZE 260, 26

   @  20,250  BUTTON "Ok" SIZE 100, 32 ON CLICK {||oDlg:lResult:=.T.,hwg_EndDialog()}
   @ 180,250 BUTTON "Cancel" ID IDCANCEL SIZE 100, 32

   ACTIVATE DIALOG oDlg

*   IF oDlg:lResult
*      hwg_Msginfo( Dtoc(e1) + chr(10) + chr(13) +   ;
*               Dtoc(e2) + chr(10) + chr(13)  ;
*               ,"Results:" )
*   ENDIF

Return Nil
     
Function Cotacoes
        local opcotvar
         Local oDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oTimer
        private oRs, conexao
       private dti := date()
       private dtf := date()

         INIT DIALOG oDlg CLIPPER NOEXIT TITLE "Datas inicial e final"  ;
         AT 210,10  SIZE 300,320 FONT oFont

   SET KEY FSHIFT,VK_F3 TO hwg_Msginfo("Shift-F3")
   SET KEY FCONTROL,VK_F3 TO hwg_Msginfo("Ctrl-F3")
   SET KEY 0,VK_F3 TO hwg_Msginfo("F3")
   SET KEY 0,VK_RETURN TO hwg_Msginfo("Return")
   
   @ 20,10 SAY "Datas:" SIZE 260, 22

   @ 20,35 GET dti  SIZE 260, 26
   
   @ 20,95 GET dtf  SIZE 260, 26

   @  20,250  BUTTON "Ok" SIZE 100, 32 ON CLICK {||oDlg:lResult:=.T.,hwg_EndDialog()}
   @ 180,250 BUTTON "Cancel" ID IDCANCEL SIZE 100, 32

   ACTIVATE DIALOG oDlg

      
        opcotvar=2

         IF ADOconecta( nProvAcoes, 5 )
            oRs=conexao:execute("SELECT codigo,dtcotacao,hrcotacao,cotacao,quemcad,dtvisto,hrvisto,dtver from acoes WHERE dtcotacao>='"+dtsql(dti)+"' AND dtcotacao<'"+dtsql(dtf)+"' AND compvenda=0"+if(opcotvar=2," AND quemcad like 'var-%'","")+if(opcotvar=3," ORDER by dtvisto,hrvisto"," ORDER by dtcotacao,hrcotacao"))
         if oRs:recordcount()=0
               @ 30,10 SAY "Não há cotações cadastradas neste período" SIZE 260, 22
               oRs:Close()
             conexao:close()
         endif
          browseado()
            oRs:Close()
          conexao:close()
        Endif

Return .t.
    
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor Itamar M. Lins Jr. » 15 Set 2020 16:35

Ola!
Para vc ver como é...
O tutorial tem exemplos pequenos, simples, que usa GCC, Hwgui 2.22.
Vc colocou um programa enorme todo diferente da proposta do tutorial. Usando Hwgui 2.17, CLANG..., Harbour 3.4...
Dentro desse texto, que é complexo cheio "coisas" diferente dos comandos da Hwgui, tem lá.
        @ 1087,384 say alltrim(str(nCotMin)) size 100,45
Linha 320!
Vai ver que tem uma DIALOG, ANTES! Então o @ SAY está escrevendo nessa DIALOG(Janela) do windows.
Simplifica, não pega uma coisa assim para aprender q só faz complicar mais, sem necessidade.
#include "hwgui.ch"
Function main
LOCAL oDlg

INIT DIALOG oDlg AT 100,100 SIZE 500,160
   
@ 10,10 say "ALO MUNDO" size 100,25
 
oDlg:Activate()

Return Nil

Tá ai o que vc pediu. Uma janela(DIALOG) com um SAY na Hwgui.
Primeira coisa é entender que no windows precisa de uma JANELA para COLOCAR ALGO.

As janelas são WINDOW e DIALOG(Na Hwgui). Ai tem mais explicações... Mas por ora tá bom.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor cjp » 15 Set 2020 23:07

Eu entendo e peço desculpas, mas é a ânsia fazer algo útil.
Vi todos os exemplos e entendi todos eles.
Só estou tentando aplicá-los ao que eu preciso.
No caso que vc citou, tem sim um dialog antes. Veja especificamente esta função:

Function Graph2(cod)
       Local oModDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oGraph
       Local i, aGraph[1]
      local cProc, nCotMax, dDtMax, nCotMin,dDtMin, nCotMax30d, dDtMax30d, nCotMin30d, dDtMin30d, nCotAgora, dDtAgora
      private conexao
      
       IF ADOconecta( nProvAcoes, 5 )
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND cotacao<9999 AND compvenda=0 order by cotacao DESC limit 1")
        nCotMax=cProc:Fields("cotacao"):Value
        dDtMax=cProc:Fields("dtcotacao"):Value
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND cotacao>0 AND compvenda=0 order by cotacao limit 1")
        nCotMin=cProc:Fields("cotacao"):Value
        dDtMin=cProc:Fields("dtcotacao"):Value
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND cotacao<9999 AND dtcotacao>'"+dtsql(date()-30)+"' AND compvenda=0 order by cotacao DESC limit 1")
        nCotMax30d=cProc:Fields("cotacao"):Value
        dDtMax30d=cProc:Fields("dtcotacao"):Value
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND dtcotacao>'"+dtsql(date()-30)+"' AND cotacao>0 AND compvenda=0 order by cotacao limit 1")
        nCotMin30d=cProc:Fields("cotacao"):Value
        dDtMin30d=cProc:Fields("dtcotacao"):Value
          cProc=conexao:execute("select dtcotacao,cotacao from acoes where codigo='"+cod+"' AND dtcotacao>'"+dtsql(date()-30)+"' AND cotacao>0 AND cotacao<9999 AND compvenda=0 order by dtcotacao DESC limit 1")
        nCotAgora=cProc:Fields("cotacao"):Value
        dDtAgora=cProc:Fields("dtcotacao"):Value
          cProc:Close()
        conexao:close()
      Endif
      

       aGraph[1] := {}
       Aadd( aGraph[1], { day(dDtMin), nCotMin } )
       Aadd( aGraph[1], { day(dDtMax), nCotMax } )
       Aadd( aGraph[1], { day(dDtMin30d), nCotMin30d } )
       Aadd( aGraph[1], { day(dDtMax30d), nCotMax30d } )
       Aadd( aGraph[1], { day(dDtAgora), nCotAgora } )

       INIT DIALOG oModDlg CLIPPER TITLE "Graph"        ;
       AT 38,5  SIZE 1310,800                  ;
       FONT oFont
         
        @ 9,15 say cod size 500,45
       
        @ 1087,384 say alltrim(str(nCotMin)) size 100,45
        @ 1127,384 say alltrim(str(nCotMax)) size 100,45
        @ 1166,384 say alltrim(str(nCotMin30d)) size 100,45
        @ 1207,384 say alltrim(str(nCotMax30d)) size 100,45
        @ 1250,384 say alltrim(str(nCotAgora)) size 100,45
       
        @ 1090,647 say substr(dtoc(dDtMin),1,2) size 100,45
        @ 1090,666 say substr(dtoc(dDtMin),4,2) size 100,45
        @ 1090,684 say substr(dtoc(dDtMin),9,2) size 100,45
       
        @ 1130,647 say substr(dtoc(dDtMax),1,2) size 100,45
        @ 1130,666 say substr(dtoc(dDtMax),4,2) size 100,45
        @ 1130,684 say substr(dtoc(dDtMax),9,2) size 100,45
       
        @ 1170,647 say substr(dtoc(dDtMin30d),1,2) size 100,45
        @ 1170,666 say substr(dtoc(dDtMin30d),4,2) size 100,45
        @ 1170,684 say substr(dtoc(dDtMin30d),9,2) size 100,45
       
        @ 1212,647 say substr(dtoc(dDtMax30d),1,2) size 100,45
        @ 1212,666 say substr(dtoc(dDtMax30d),4,2) size 100,45
        @ 1212,684 say substr(dtoc(dDtMax30d),9,2) size 100,45
       
        @ 1255,647 say substr(dtoc(dDtAgora),1,2) size 100,45
        @ 1255,666 say substr(dtoc(dDtAgora),4,2) size 100,45
        @ 1255,684 say substr(dtoc(dDtAgora),9,2) size 100,45

   @ 1070,410 GRAPH oGraph DATA aGraph SIZE 230,230 COLOR 65280
   oGraph:nType := 2
   
   IF ADOconecta( nProvAcoes, 5 )
      cProc=conexao:execute("select dtcotacao,cotacao,quemcad,compvenda,conta from acoes where codigo='"+cod+"' AND status='M' order by dtcotacao")
     if cProc:recordcount()>0
        @ 22,5 say "Ordens marcadas:" size 500,45
       a=34
       do while !cProc:Eof()
           @ a,5 say cProc:Fields("dtcotacao"):Value size 500,45
           @ a+10,5 say cProc:Fields("quemcad"):Value size 500,45
         @ a+20,5 say cProc:Fields("compvenda"):Value size 500,45
         @ a+30,5 say cProc:Fields("cotacao"):Value size 500,45
         @ a+40,5 say cProc:Fields("conta"):Value size 500,45
         a=a+50
         cProc:MoveNext()
         enddo
     endif
   endif

*   @ 130,250 BUTTON "Close"  ;
*       SIZE 130,30          ;
*       ON CLICK {||EndDialog()}

   ACTIVATE DIALOG oModDlg

Return Nil



Tem:
       INIT DIALOG oModDlg CLIPPER TITLE "Graph"        ;
       AT 38,5  SIZE 1310,800                  ;
       FONT oFont


antes da linha que vc citou.

E, de fato, está criando a janela normalmente.

O problema é que as escritas na tela com o @ say estão truncadas.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor Itamar M. Lins Jr. » 15 Set 2020 23:53

Ola!
Sim, e vc não sabe pq está saindo truncada.

@ coluna,linha say "XXXXXXXXXXXXXX" size comprimento,largura (do seu texto)

INIT DIALOG oModDlg CLIPPER TITLE "Graph" AT 38,5 SIZE 1310,800 FONT oFont

Aqui vc abriu uma janela de 1320 por 800.
O "@ say" está escrevendo ai dentro.

@ a,5 say cProc:Fields("dtcotacao"):Value size 500,45

A tela tem 1310 de comprimento vc tá usando METADE dela só com SIZE 500

Se colocar grande demais 500 ai não vai dar mesmo, vai ficar com uma área reservada de QUINHENTOS ESPAÇOS!
E escrevendo tudo na mesma linha! No caso LINHA := 5 tá escrevendo por cima do outro.

DTCOTACAO sai na linha a:=34 + 500(quinhentos) espaços! O próximo na mesma linha será igual a 34+8(data)+500 será @ a+543! Entendeu ?

@ a,5 say cProc:Fields("dtcotacao"):Value size 500,45
@ a+10,5 say cProc:Fields("quemcad"):Value size 500,45
Seria @ a+543,5 say cProc:Fields("quemcad"):Value size 500,45
O terceiro nem cabe mais na janela(dialog)

Lembrando que HWGUI/Minigui DATA tem oito(8) caracteres, mas o SIZE deverá ser maior 70(size) e largura 30 "SIZE 70,30" dependendo da sua FONTE de letra.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor cjp » 17 Set 2020 00:50

Entendi o que vc disse.
Mas testei com vários outros tamanhos, e em todas as tentativas as escritas continuam truncadas.
Uma outra dúvida, por favor: inkey(x) não funciona na Hwgui?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor Itamar M. Lins Jr. » 17 Set 2020 12:55

Ola!
Uma outra dúvida, por favor: inkey(x) não funciona na Hwgui?

Inkey() é para DOS.
Temos
HWG_LASTKEY(), OnkeyDown, OnKeyUp..., HWG_GETKEYSTATE().
Lembre-se que no windows trabalhamos com FOCO, e não com cursor. O usuário pode clicar/colocar a seta do mouse onde desejar.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor cjp » 22 Set 2020 00:01

Estou tentando começar por algo mais simples, pra tentar entender algumas coisas.

Fiz um programinha bem simples:

#include "hwgui.ch"
Function Tempo
   Local oDlg, oFont, oFontSay, oFontC
   Local nTp :=0
   private nInicio :=0

   PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
   PREPARE FONT oFontSay NAME "MS Sans Serif" WIDTH 0 HEIGHT -13 WEIGHT 700
   PREPARE FONT oFontC NAME "Georgia" WIDTH 0 HEIGHT -15

   INIT DIALOG oDlg TITLE "Standard dialogs" AT 100, 100 SIZE 340, 300 FONT oFont

   @ 20,12 SAY "Escolha:" SIZE 260, 24 ;
         FONT oFontSay COLOR 8404992

   @ 20,50 BUTTON "Iniciar contagem" SIZE 180,28 ;
      ON CLICK {||iniciacontagem()}

   @ 20,100 BUTTON "Ver contagem" SIZE 180,28 ;
      ON CLICK {||vercontagem()}
    
   nTp=seconds()-nInicio

   @ 20,150 SAY nTp SIZE 180, 28
*   @ 20,185 GET nTp PICTURE "@e 999,999,999.9999" SIZE 260, 26
   
   @ 20, 250 LINE LENGTH 300
   @ 120,258 BUTTON "Close" SIZE 100,30 ON CLICK {||oDlg:Close()}

   ACTIVATE DIALOG oDlg
 
Return Nil
     
function iniciacontagem
         Local oDlg, oFont
         
       nInicio=seconds()
      
         PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
      
         INIT DIALOG oDlg TITLE "Inicia contagem" AT 280, 210 SIZE 250, 250 FONT oFont
      
         @ 10,40 SAY "Contagem iniciada" SIZE 360, 36
      
         @  10,190  BUTTON "Ok" SIZE 100, 32 ON CLICK {||oDlg:lResult:=.T.,hwg_EndDialog()}
      
         ACTIVATE DIALOG oDlg

return Nil    

Function vercontagem()
         Local oDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oTimer
         Local e5 := 0

         INIT DIALOG oDlg CLIPPER NOEXIT TITLE "Contagem" AT 250,20 SIZE 250,350 FONT oFont

         hwg_SetColorinFocus( oDlg,, 13172680 )
   
         @ 15,20 SAY "Contagem:" SIZE 260, 22

         e5=seconds()-nInicio
   
         @ 15,65 GET e5 PICTURE "@e 999,999,999.9999" SIZE 150, 26
         @ 15,115 SAY e5 SIZE 150, 26

         @  15,250  BUTTON "Ok" SIZE 80, 32 ON CLICK {||oDlg:lResult:=.T.,hwg_EndDialog()}

         ACTIVATE DIALOG oDlg

Return Nil
     


Tem uma coisa que não está funcionando, não sei porquê:

      @ 15,115 SAY e5 SIZE 150, 26


Note que o get antes disso funciona, com o mesmo dado. Mas o Say não aparece.

Da mesma forma este também não aparece, não sei porquê:

   @ 20,150 SAY nTp SIZE 180, 28


Também gostaria de saber como fazer para a contagem em questão aparecer em tempo real, já na tela inicial. Pensei em colocar um do while e ficar atualizando, mas daí não sei se o button funcionaria.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor Itamar M. Lins Jr. » 22 Set 2020 06:35

Ola!
//Qualquer coisa que vc usa, colocando na DIALOG precisa do objeto! (botões, says, gets...)
//Um say tem objeto, o get tem objeto, o button tem objeto, não esqueça disso!
//Vc não está colocando nada disso. Tem a VARIAVEL no caso dos GET e o OBJETO!

//@ 20,50 BUTTON oBotao_01 CAPTION "Iniciar contagem" size 180,28 on CLICK...
//@ 20,100 BUTTON oBotao_02 CAPTION "Ver contagem" size 180,28 on CLICK...

//E o ACTIVATE DIALO oDLG //é a mesma coisa do READ

//Em clipper @ x,y say "x"
//Na Hwgui @ x,y SAY OBJETO_SAY CAPTION "X" ...
//Em clipper @ x,y GET cNome
//Na Hwgui @ x,y GET OBJETO_GET VAR cNome ...
//Todos os controles tem um objeto.(controles são "coisas, SAY,GET,Button, etc" que colocamos dentro da DIALOG/Window)
//Porquê tem esses OBJETOS ????
//Exatamente é usando o OBJETO que vc VERIFICA os EVENTOS no caso dos BOTÕES se foi pressionado, se passou o mouse por cima, se recebeu foco...
//Um GET na HWGUI RECEBE e PERDE o FOCO, ninguém sabe ONDE o usuário vai CLICAR com o MOUSE!
//Pelo FOCO vc vai saber ONDE o usuário está na DIALOG(Em qual controle ele está!) o antigo CURSOR do CLIPPER.
//ComboBox, CheckBox, RadioButton é para ESCOLHER! não é para escrever nada(normalmente) então pelo FOCO vc fica sabendo ONDE está.

#include "hwgui.ch"
Function Main
   Local oDlg, oFont, oFontSay, oFontC
   Local nTp :=0, oSAY1, oSAY2
   private nInicio :=0

   PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
   PREPARE FONT oFontSay NAME "MS Sans Serif" WIDTH 0 HEIGHT -13 WEIGHT 700
   PREPARE FONT oFontC NAME "Georgia" WIDTH 0 HEIGHT -15

   INIT DIALOG oDlg TITLE "Standard dialogs" AT 100, 100 SIZE 340, 300 FONT oFont

   @ 20,12 SAY oSAY1 CAPTION "Escolha:" SIZE 260, 24 ;
         FONT oFontSay COLOR 8404992 //esqueceu de colocar o nome dos objetos! oSAY1

   @ 20,50 BUTTON "Iniciar contagem" SIZE 180,28 ;
      ON CLICK {||iniciacontagem()}

   @ 20,100 BUTTON "Ver contagem" SIZE 180,28 ;
      ON CLICK {||vercontagem()}
     
   nTp=seconds()-nInicio

   @ 20,150 SAY oSAY2 CAPTION str(nTp) SIZE 180, 28 //esqueceu de colocar o nome dos objetos! o SAY2
   
   @ 20, 250 LINE LENGTH 300
   @ 120,258 BUTTON "Close" SIZE 100,30 ON CLICK {||oDlg:Close()}

   ACTIVATE DIALOG oDlg
 
Return Nil
     
function iniciacontagem
         Local oDlg, oFont, oSAY1
         
         nInicio:=seconds()
       
         PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
       
         INIT DIALOG oDlg TITLE "Inicia contagem" AT 280, 210 SIZE 250, 250 FONT oFont
       
         @ 10,40 SAY oSAY1 CAPTION "Contagem iniciada" SIZE 360, 36 //Precisa do OBJETO oSAY1
       
         @  10,190  BUTTON "Ok" SIZE 100, 32 ON CLICK {||oDlg:lResult:=.T.,hwg_EndDialog()}
       
         ACTIVATE DIALOG oDlg

return Nil     

Function vercontagem()
         Local oDlg, oFont := HFont():Add( "MS Sans Serif",0,-13 ), oTimer, oSAY1, oSAY5
         Local oE5, e5 := 0

         INIT DIALOG oDlg CLIPPER NOEXIT TITLE "Contagem" AT 250,20 SIZE 250,350 FONT oFont

         hwg_SetColorinFocus( oDlg,, 13172680 )
   
         @ 15,20 SAY oSAY1 CAPTION "Contagem:" SIZE 260, 22

         //e5=seconds()-nInicio
   
         @ 15,65 GET oE5 VAR e5 PICTURE "@e 999,999,999.9999" SIZE 150, 26 //Precisa do objeto GET oE5
         @ 15,115 SAY oSAY5 CAPTION str(e5) SIZE 150, 26

         @  15,250  BUTTON "Ok" SIZE 80, 32 ON CLICK {||oDlg:lResult:=.T.,hwg_EndDialog()}

         oDlg:bActivate:={||oDlg:Show(),CONTA(oSay5,e5)}

         ACTIVATE DIALOG oDlg

Return Nil

Function CONTA(oSay5,e5)
Local nX:=0
FOR nX := 1 to 50
  e5 := seconds() - nInicio
  oSay5:SetText(str(e5))
  inkey(.1)
NEXT
hwg_msginfo("Ok")
Return Nil


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modo gráfico Tutor Plug and Play - Hwgui

Mensagempor cjp » 23 Set 2020 09:22

Entendido. Muito obrigado. Funcionou.
Quanto à minha segunda questão: seria possível fazer a contagem em questão aparecer em tempo real, já na tela inicial? Pensei em colocar um do while e ficar atualizando, mas daí não sei se o button funcionaria.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Anterior Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 19 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro