Modo gráfico Tutor Plug and Play - Hwgui
Moderador: Moderadores
Modo gráfico Tutor Plug and Play - Hwgui
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Modo gráfico Tutor Plug and Play - Hwgui
Ola!
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.
Qual é a resolução ai da sua tela no windows ?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.
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.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Modo gráfico Tutor Plug and Play - Hwgui
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()?
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Modo gráfico Tutor Plug and Play - Hwgui
Ola!
Então são 100% dependentes do Harbour. São feitas para uso com o Harbour.
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).
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. Olhe na pasta "Get System" que tem o que vc perguntou.
Saudações,
Itamar M. Lins Jr.
A Hwgui, Minigui, FiveWin, HBQT, Xailer... São feitas usando também o Harbour, compiladas com o Harbour e LINKADAS com GCC/BCC/MSVC...o Harbour trabalha com linhas/colunas, e a Hwgui trabalha com pontos, que são muito menores que uma linha/coluna. É isso?
Então são 100% dependentes do Harbour. São feitas para uso com o Harbour.
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.trabalha com linhas/colunas,
Não! a Hwgui usa os recursos de outro ambiente que é o windows.(gráfico).Hwgui seja mais precisa e detalhada, além de se adaptar melhor aos diversos tamanhos de monitores, correto?
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).
Cadê seu código ? Mostre algo para poder ensinar o que tem dúvida.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()?
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. Olhe na pasta "Get System" que tem o que vc perguntou.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Modo gráfico Tutor Plug and Play - Hwgui
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:
Veja no anexo como está aparecendo.
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:
Código: Selecionar todos
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
Inacio de Carvalho Neto
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Modo gráfico Tutor Plug and Play - Hwgui
Ola!
Você nem baixou o tutor novo que postei, mais acima.
Esse tem 3 exemplos. Mostre seu código todo.
Está fazendo uma coisa e perguntando outra.
Saudações,
Itamar M. Lins Jr.
Você nem baixou o tutor novo que postei, mais acima.
Esse tem 3 exemplos. Mostre seu código todo.
Está fazendo uma coisa e perguntando outra.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Modo gráfico Tutor Plug and Play - Hwgui
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:
Segue o código inteiro:
Código: Selecionar todos
* -----------------------------------------------------------------
* 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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Modo gráfico Tutor Plug and Play - Hwgui
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á. 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.
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.
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á.
Código: Selecionar todos
@ 1087,384 say alltrim(str(nCotMin)) size 100,45Vai 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.
Código: Selecionar todos
#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
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.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Modo gráfico Tutor Plug and Play - Hwgui
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:
Tem:
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.
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:
Código: Selecionar todos
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
Código: Selecionar todos
INIT DIALOG oModDlg CLIPPER TITLE "Graph" ;
AT 38,5 SIZE 1310,800 ;
FONT oFont
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Modo gráfico Tutor Plug and Play - Hwgui
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.
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.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Modo gráfico Tutor Plug and Play - Hwgui
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?
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Modo gráfico Tutor Plug and Play - Hwgui
Ola!
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.
Inkey() é para DOS.Uma outra dúvida, por favor: inkey(x) não funciona na Hwgui?
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.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Modo gráfico Tutor Plug and Play - Hwgui
Estou tentando começar por algo mais simples, pra tentar entender algumas coisas.
Fiz um programinha bem simples:
Tem uma coisa que não está funcionando, não sei porquê:
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ê:
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.
Fiz um programinha bem simples:
Código: Selecionar todos
#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
Código: Selecionar todos
@ 15,115 SAY e5 SIZE 150, 26
Da mesma forma este também não aparece, não sei porquê:
Código: Selecionar todos
@ 20,150 SAY nTp SIZE 180, 28
Inacio de Carvalho Neto
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Modo gráfico Tutor Plug and Play - Hwgui
Ola!
Saudações,
Itamar M. Lins Jr.
Código: Selecionar todos
//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
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Modo gráfico Tutor Plug and Play - Hwgui
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.
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
