Clipper On Line • Ver Tópico - Exemplos tudo-em-um
Página 1 de 12

Exemplos tudo-em-um

MensagemEnviado: 11 Fev 2014 01:09
por JoséQuintas
A partir de agora estarei centralizando meus exemplos, com menu.
Depois vou olhar no fórum se esqueci de algum que possa ser incluso nele.

- Controle de tarefas em multithread
- Calculadora wvg ou console
- Calendário simples wvg
- Classe pra telas de cadastro wvg ou console
- menu estilo clipper com mouse
- menu wvg
- classe pra pdf
- barra de progresso com cálculo de tempo
- errorsys.prg pra modo gui (como eu precisava dela pra testar exemplos, já deixei junto)

Exemplos são exemplos, podem estar prontos pra uso ou não.
Junto tem o "messenger-like" mas ainda não alterei pra dbf, e por isso não está na compilação.

Tudo junto ficou com 34kb, e o resultado é um único EXE.
em wvg: hbmk2 test
sem ser wvg: hbmk2 testnowvg

se for uma GT sem suporte a multiwindow, precisa alterar a função AppMultiWindow(). Por enquanto só deixei a GTWIN como sem suporte.

Não se limitem a chamar uma opção. Abram janelas à vontade e depois podem até fechar o menu, que todas se mantém abertas.

Nota: para fundo de tela usei uma imagem pequena, por isso a imagem fica ruim, mas qualquer imagem triplicaria o tamanho do projeto. Além disso, o fundo de tela não é possível em WVG, então é só pra brincar mesmo. Ele acaba sumindo na maioria das vezes.

Apesar de relativamente simples, me faltaram exemplos como esses quando comecei a tentar algo além do Clipper normal.
Espero que ajude.
Divirtam-se.

Exemplos tudo-em-um

MensagemEnviado: 11 Fev 2014 01:19
por JoséQuintas
Seguindo a tela:
calendário, calculadora, relatório no bloco de notas
barra de progresso, relatório em pdf no foxit reader
cadastro estilo console, cadastro estilo wvg, menu wvg, menu clipper - fundo de tela apenas pra brincar, about
Tudo isso é um único EXE rodando, acrescentado ao bloco de notas e foxit reader.
É exatamente este projeto rodando.***
*** Aumentei o contador da barra de progresso pra facilitar o print-screen mais completo

Exemplos tudo-em-um

MensagemEnviado: 11 Fev 2014 11:09
por JoséQuintas
Não sei se vou complicar de vez.
Acrescentei minha classe do SPED.
Por enquanto acrescentei consulta a status de NFE, que é a mais simples por não depender de assinatura.
Na hora de testar...... que droga digitar tanta coisa....
Então acrescentei a parte de copiar/colar, e como tava junto, o mouse wheel (rodinha do mouse)

Como vai dar pra perceber, depois vou acrescentar também consulta a CTE.

Pausa... vou acrescentar agora, só confirmar aonde define se é NFE ou CTE...

Exemplos tudo-em-um

MensagemEnviado: 11 Fev 2014 11:33
por JoséQuintas
A pausa foi verdadeira.
Agora também tem consulta a CTE.

Foi proposital. É que gosto da minha classe, então foi pra dar uma idéia do tempo que iria levar pra modificar.
Já pra consultar MDFE vai ser bem mais demorada, porque a classe está preparada pra qualquer coisa, mas não tem nada sobre ele.

só digitar a chave de acesso, a rotina já identifica do que se trata, e faz a consulta relacionada.

Pra dar uma idéia, a rotina:

   DO WHILE .T.
      @ 4, 0 SAY "Chave:" GET cChave PICTURE "@9"
      @ 6, 0 SAY "Nome do certificado:"
      @ 7, 0 GET cCertificado
      READ
      IF Lastkey() == K_ESC
         EXIT
      ENDIF
      oSefaz := SefazClass():New()
      IF Substr( cChave, 21, 2 ) == "55" // NFE
         MsgExclamation( oSefaz:NfeConsulta( cChave, Trim( cCertificado ) ) )
      ELSEIF Substr( cChave, 21, 2 ) == "57" // CTE
         oSefaz:cProjeto := "cte"
         MsgExclamation( oSefaz:CteConsulta( cChave, Trim( cCertificado ) ) )
      ELSE
         MsgExclamation( "Documento nao identificado" )
      ENDIF
   ENDDO


Só não lembro se essa parte depende de instalar a capicom e/ou o XML 5.0 da Microsoft.
Favor avisar se for o caso.

Capicom tem na Microsoft.
A DLL do XML, o Windows tem todas da 1.0 até 6.0, menos a 5.0.
Por algum motivo, essa versão 5.0 só tem no Office, então tem que baixar não oficialmente o XML 5.0.
Provavelmente tem no ACBR, na hbnfe, e em outros lugares.
A versão 5.0 contém a parte de usar certificado.
Testem e avisem, mas deixei só no teste.hbp. Por se tratar de componentes Windows, WVG aceita.

Agora é pensar em como adicionar todo restante do sped, e rotinas de teste, lembrando que a parte pra emitir NFE está toda aí.

Exemplos tudo-em-um

MensagemEnviado: 11 Fev 2014 11:36
por asimoes
José,

Parabéns e obrigado por compartilhar seus exemplos!

Exemplos tudo-em-um

MensagemEnviado: 11 Fev 2014 11:44
por JoséQuintas
Faltou avisar:
o nome do certificado é só olhar no explorer
ferramentas, opções de internet, conteúdo, certificados
pra facilitar, clica no certificado, detalhes, requerente (ou cn), e aí dá pra usar o copiar/colar.

Exemplos tudo-em-um

MensagemEnviado: 11 Fev 2014 16:05
por JoséQuintas
Estava sem paciência de ler manual, e fui fazendo no chute - como é a operação mais simples do projeto, até dá pra tentar chutar.
A consulta a mdfe está funcionando.
Isso mostra porque gosto da minha classe.

Exatamente as alterações que fiz nos fontes:

na tela de consulta (que usa a classe), o IF:
      oSefaz := SefazClass():New()
      IF Substr( cChave, 21, 2 ) == "55" // NFE
         MsgExclamation( oSefaz:NfeConsulta( cChave, Trim( cCertificado ) ) )
      ELSEIF Substr( cChave, 21, 2 ) == "57" // CTE
         oSefaz:cProjeto := "cte"
         MsgExclamation( oSefaz:CteConsulta( cChave, Trim( cCertificado ) ) )
      ELSEIF Substr( cChave, 21, 2 ) == "58" // MDFE
         oSefaz:cProjeto := "mdfe"
         MsgExclamation( oSefaz:MdfeConsulta( cChave, Trim( cCertificado ) ) )
      ELSE


No início da classe, a operação nova:

#define WSMDFECONSULTAPROTOCOLO    17


o método de consulta - este requer manual da Fazenda, e consulta direta no site do webservice pra confirmar parâmetros, e uma chave de acesso, que peguei no grupo uninfe:

METHOD MdfeConsulta( cChave, cCertificado ) CLASS SefazClass
   ::cCertificado := cCertificado
   ::cVersao     := "1.00"
   ::cUf         := Substr( cChave, 1, 2 )
   ::cServico    := "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta"
   ::cSoapAction := "http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeConsulta/MDFeConsultaMDF"
   ::cWebService := ::GetWebService( UfCodigo( ::cUf ), WSMDFECONSULTAPROTOCOLO )
   ::cXmlDados   := ""
   ::cXmlDados += [<consSitMDFe versao="] + ::cVersao + [" xmlns="http://www.portalfiscal.inf.br/mdfe">]
   ::cXmlDados += [<tpAmb>] + ::cAmbiente + [</tpAmb>]
   ::cXmlDados += [<xServ>CONSULTAR</xServ>]
   ::cXmlDados += [<chMDFe>] + cChave + [</chMDFe>]
   ::cXmlDados += [</consSitMDFe>]
   ::XmlSoapPost()
   RETURN ::cXmlRetorno


A rotina que pega o webservice, como é todo mundo no RS:

   ELSEIF ::cProjeto == "mdfe" // mdfe esta no RS
      cTexto := UrlWebService( "RS", ::cAmbiente, cServico )


e por último, o webservice:

   CASE cUf == "RS" .AND. cAmbiente == WSPRODUCAO
      DO CASE
      CASE nWsService == WSMDFECONSULTAPROTOCOLO ;     cUrlWs := "https://mdfe.sefaz.rs.gov.br/ws/MDFeConsulta/MDFeConsulta.asmx"


Não foi de primeira, tive que fazer ajustes e testes, mas o resultado foi este, direto no ambiente de produção:
respostamdfe.png
tudo bem, justamente a chave estava lá no grupo uninfe por ter o retorno de chave inválida


Pra quem não percebeu ainda: nenhum arquivo temporário, nada de escolher pasta ou nome de arquivo a enviar ou nome de arquivo de retorno. Só enviar uma variável e receber outra.
O projeto inteiro está assim, mas não se empolguem. Isso também depende de rotinas pra checar se o retorno está correto, ou o que aconteceu em cada etapa. É aí que ter arquivos temporários ajudam a decidir o que fazer.

Mas está lançada a classe.
Eu mostrar os detalhes é porque no caso de precisar ajuda, tem o caminho das pedras.
Imaginem procurar endereço de todos os webservices, entrar em cada webservice pra confirmar alguns parâmetros, sem falar nos próprios XMLs. Isso vai dar umas 300 variações, que se cada uma levar 1 hora... vai muito longe pra uma pessoa só.
Mas se cada pessoa fizer uma parte... o tempo pode ser bem reduzido.

Tempos atrás comentei isso: é relativamente simples, mas é trabalhoso.
A parte que demorei pra conseguir, só consegui através da hbnfe, foi a de assinatura, onde todo o resto depende dela, e sem ela não poderia fazer mais nada.
Ao mesmo tempo, como podem ver, o funcionamento não tem nada a ver com hbnfe. Não sei como poderia incluir isso lá sem dar uma reformulada geral, e sacrificar toda compatibilidade.

É tudo meio que padrão. Consegui definir as partes comuns de nfe e cte, e ficou preparada pra qualquer coisa.
o mdfe mostra isso. Agora falta a parte mais demorada, que é pegar listas de webservices, incluir na classe, e fazer os métodos que faltam.

Exemplos tudo-em-um

MensagemEnviado: 11 Fev 2014 16:08
por JoséQuintas
Pior que essa tela mostrou uma nova necessidade ao tudo-em-um:
usar a codepage Português-Brasil.

Exemplos tudo-em-um

MensagemEnviado: 14 Fev 2014 12:25
por Duda 'Sgluber'
JoséQuintas escreveu:...
em wvg: hbmk2 test
sem ser wvg: hbmk2 testnowvg
...

Quintas,

acho que vale registrar que a compilação deve ser feita com o Harbour 3.2. Eu uso o 3.0 e apresenta erro ao compilar em ambos os casos.

E usando o 3.2, o TESTNOWVG compila perfeitamente. Já o TEST, apresenta erro no FRMCLASS.prg:
Compiling 'frmclass.prg'...
frmclass.prg(209) Warning W0001  Ambiguous reference 'WVG_IMAGE_BITMAPRESOURCE'
Confesso que não fui buscar solução para o erro (talvez seja de fácil identificação), estou postando apenas para informar e saber se você identifica o problema de "bate-pronto".

Obrigado! Imagem

Exemplos tudo-em-um

MensagemEnviado: 14 Fev 2014 12:46
por JoséQuintas
Pelo nome, é o parâmetro que indica que o bitmap está nos arquivos de resource, embutido no EXE.

A única coisa que me veio à cabeça foi justamente quando comecei a usar botões da WVG: o Pritpal fez uma alteração pra permitir ICO de resource.Acho que isso foi há um ano atrás.
Então teria que ser o Harbour 3.2 depois dessa época.

Aqui está em: wvgparts.ch, neste bloco:

#define WVG_IMAGE_ICONFILE                        1
#define WVG_IMAGE_ICONRESOURCE                    2
#define WVG_IMAGE_BITMAPFILE                      3
#define WVG_IMAGE_BITMAPRESOURCE                  4


Mas se não tem o bloco, é possível que a gtwvg desse Harbour também não tenha a alteração.
Como opção, mas vai perder a identificação dos botões, seria desativar a linha da imagem - mas vai ter ainda o tooltip.

Outra opção é alterar a rotina pra pegar diretamente a imagem do arquivo em disco.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2014 13:17
por JoséQuintas
Faltou um exemplo mais completo da nfe.
Vou fazer aqui durante o post, apenas como referência. No tudo-em-um não tem a assinatura ainda.

cXml :=  "seu xml da nota"
AssinaXml( @cXml, "nomecertificado" )
oSefaz := SefazClass():New()
cXmlRecibo := oSefaz:NfeLoteEnvia( cXml, "numlote", "UF", "nome certificado" )
IF ReciboOk( cXmlRecibo ) // rotina pra checar se ok
   cRecibo := PegaRecibo( cXmlRecibo ) // rotina pega num. recibo
   cXmlRetornoLote := oSefaz:NfeConsultaRecibo( cRecibo, "UF", "nome certificado" )
   IF RetornoOk( cXmlRetornoLote ) // rotina pra checar se ok
      SalvaAutorizado( cXml, cXmlRetornoLote ) // rotina pra montar autorizado
   ENDIF
ENDIF


As rotinas ReciboOk(), RetornoOk() e SalvaAutorizado() provavelmente os ERPs já tem, porque seria a análise dos arquivos recebidos.
Os arquivos temporários que o uninfe, acbrnfe e hbnfe utilizam, seriam os equivalentes às variáveis cXmlRecibo, cXmlRetorno.

Então no geral ficou assim:
- Os Xmls tem o modelo nos manuais da Fazenda
- Os Xmls de comunicação tem nos manuais da Fazenda, e também dá pra olhar pelos webservices
- Os webservices tem nos sites da Fazenda
- A Assinatura e SOAP são padrão

Então, tudo que precisa pra qualquer projeto de NFE, CTE, MDFE, e até nota de serviço tem na classe do tudo-em-um.
A parte a mais é sobre os xmls/webservices, que tem nos manuais oficiais ou webservices.
A análise de retornos, mesmo com produtos de terceiros tem que ser feita em separado, então não dá pra dizer que está faltando na classe.

Também estranhei quando criei. Parece simples demais pra ser verdade.
No meu uso, deixo todos esses XMLs de envio/retorno no MySql. O cliente salva lá, e meu servidor trabalha aqui.
Em caso de problema, acesso aqui comigo pra ver o que aconteceu.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2014 17:51
por JoséQuintas
Aproveitando....

O tudo-em-um representa praticamente tudo que uso em meu aplicativo.
Ao contrário do que eu pensava, mais recursos da GTWVG dependem do Pritpal, porque dependem de parte em linguagem C.

Então, se possível, gostaria de ver as opções do tudo-em-um em outras GTs.
É pouca coisa, botões e menu, então não usa muitos recursos extras.
Tem horas que ficar testando GTs é desanimador.
Por enquanto continuo com a WVG, pouca novidade gráfica mas funcionando.

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2014 12:44
por JoséQuintas
Uma coisa embutida no tudo-em-um que não chama atenção:

FUNCTION AppUserName( xValue )
   STATIC AppUserName := ""
   IF xValue != NIL
      AppUserName := xValue
   ENDIF
   RETURN AppUserName


Tinha lá minhas variáveis públicas, criadas no tradicional: PUBLIC AppUserName

Ok, funciona, mas não pra multithread.

Cheguei a criar como uma classe App(), e dentro da classe as variáveis pra usuário, empresa, etc.
Isso facilitava uma única variável a declarar nos fontes.

Mas...
Se digitar errado o nome na classe, não se percebe. App():UserName
Se usar o nome da variável pública errado, não se percebe.
Pra tolerância zero (-w3 -es2) precisa declarar em tudo que é fonte que usa a variável.
Pra multithread, precisa gambiarra....
Do jeito acima, se errar o nome já aparece na compilação, e também já funciona em multithread.
Concordo: Dá trabalho transformar as variáveis públicas em funções usando variáveis estáticas, e é muito mais fonte do que um simples PUBLIC.
Mas o compilador avisar sobre qualquer nome errado, isso é ótimo, evita surpresas.
E elimina MEMVAR nos módulos pra variáveis públicas (o que pode até reduzir código ao invés de aumentar).
No uso é só AppUserName( "NOME" ) pra salvar, ou AppUserName() pra usar o que está salvo.
O APP é do tempo do VB6, onde App se referia ao aplicativo. App.Path era o path do EXE.
Então AppUserName, nome do usuário logado no aplicativo. Acho que tá adequado.

Outra coisa que tem lá é:

THREAD STATIC wTelaSalva := {}


a diferença com THREAD é que essa variável vai se multiplicar: cada thread tem a sua.
Usei pra salvar/restaurar telas. Porque: simples, threads é como programas diferentes rodando, um em cada janela. Então cada thread tem suas próprias telas pra salvar/restaurar, não se pode misturar a tela de um programa/thread com a tela do outro. Ao invés de criar um controle doido, mais fácil adicionar THREAD na declaração, e nem se preocupar com isso depois.

Em tela GUI/Windows nem precisa ficar salvando/restaurando telas. Isso é coisa de console ou de mixto gui/console como GTWVG.

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2014 12:55
por JoséQuintas
Por falar nisso, também tem isso:
wSave() salva a tela e wRestore() retorna.
Com a diferença que podem ser várias, que vão entrando no array.
Também bom pra evitar ficar criando variáveis temporárias pra salvar tela.

Se não me engano, isso tem na ctools, que seria a hbct.
No meu uso completo, wSave() tem a opção de salvar apenas um pedaço da tela, pra economizar memória.
Com Harbour memória não é problema, e a não ser que salve muitas telas, do jeito que está é suficiente.

Mas pra quem precisar, já sabe que poderia criar essa opção.
Seria necessário salvar junto também as posições/tamanho, pra restaurar no lugar certo.

Nota:
O tudo-em-um é um conjunto de exemplos. Não sei se é o melhor jeito de se fazer, mas sei que são exemplos interessantes e que uso no dia a dia.
Até peguei ele como base para um projeto de conversão que comecei.

Exemplos tudo-em-um

MensagemEnviado: 19 Fev 2014 12:40
por marcos.gurupi
Caso Jose, primeiramente parabens pela iniciativa. Gostaria de saber se nestes exemplos vc tem algo relacionado a DOWNLOAD de XML NFe. Obrigado!

Exemplos tudo-em-um

MensagemEnviado: 19 Fev 2014 19:30
por JoséQuintas
Não, porque os truques usados pra puxar do html são totalmente dependentes do html, se uma única letra mudar de lugar, já não serve.
Mesmo assim, pegar do html não garante que esteja ok.

Com a parte do Sped (webservices), se não depender de manifestação do destinatário, poderia ter.

Lembro que no início do projeto, em 1998, havia a opção de um certificado especial pra servidor, que podia baixar qualquer XML de qualquer empresa. De repente os webservices ainda existem.

Nunca procurei.
Cada vez mais acho que tudo isso é um grande erro.
O governo nunca vai admitir isso, porque senão o país inteiro cai encima dele.

Exemplos tudo-em-um

MensagemEnviado: 01 Mar 2014 19:39
por JoséQuintas
O tudo-em-um tem a rotina pra "colar", usada no filtro de inkey.
Rolou uma pergunta mostrando que no xHarbour tem a opção copiar/colar de/para GETs.
Então fiz e acrescentei a opção de "copiar", limitada ao GET, mas já é alguma coisa. (e diferente do exemplo postado, não precisa GETSYS especial).
É só acrescentar na rotina de inkeyfilter o trecho referente à tecla ctrl-C
Com isso, o ctrl-c vai copiar o conteúdo do get ativo para a área de transferência.

Então, na rotina de iniciar o comando completo ficou assim:

   hb_gtInfo( HB_GTI_INKEYFILTER, { ;
      | nKey |
      LOCAL nBits, lIsKeyCtrl
      nBits := hb_GtInfo( HB_GTI_KBDSHIFTS )
      lIsKeyCtrl := ( nBits == hb_BitOr( nBits, HB_GTI_KBD_CTRL ) )
      SWITCH nKey
      CASE K_MWBACKWARD
         RETURN K_DOWN
      CASE K_MWFORWARD
         RETURN K_UP
      CASE K_RBUTTONDOWN
         RETURN K_ESC
      CASE K_RDBLCLK
         RETURN K_ESC
      CASE K_CTRL_V
         IF lIsKeyCtrl
            hb_GtInfo( HB_GTI_CLIPBOARDPASTE )
            RETURN 0
         ENDIF
      CASE K_CTRL_C
         IF lIsKeyCtrl
            IF GetActive() != NIL
               hb_gtInfo( HB_GTI_CLIPBOARDDATA, Transform( GetActive():VarGet(), "" ) )
               RETURN 0
            ENDIF
         ENDIF
      ENDSWITCH
      RETURN nKey
       } )

Exemplos tudo-em-um

MensagemEnviado: 18 Mar 2014 14:17
por JoséQuintas
Só pra ficar atualizado.

Exemplos tudo-em-um

MensagemEnviado: 19 Mar 2014 12:05
por zazibr
parabens ....vc nao testou nada de qt ?

Exemplos tudo-em-um

MensagemEnviado: 19 Mar 2014 19:42
por JoséQuintas
Ainda não. Isso de projeto separado atrapalha muito.

Exemplos tudo-em-um

MensagemEnviado: 24 Mar 2014 23:45
por Alexandre Silva
Parabens, estou querendo fazer tudo no harbour.
Desculpe se a pergunta é basica, mas pelo que vi, tudo funciona para o certificado A1, nao para o A3 ?

Vi que em PHP é uma pedreira nao resolvida
https://groups.google.com/forum/?hl=pt-BR#!searchin/nfephp/A3/nfephp/eCj15-q6t3M/fsS2yOawha0J

e no projeto ABCR o pessoal tem que ficar fazendo 2 versoes..
http://www.projetoacbr.com.br/forum/index.php?/files/

Exemplos tudo-em-um

MensagemEnviado: 25 Mar 2014 09:39
por JoséQuintas
O A3 é pra mais segurança, mas segurança demais atrapalha.
E faz parte da segurança alertas a cada uso, o que impediria o automático.

A coisa curiosa é a seguinte:
A diferença do A3 não é apenas a segurança, ele tem muito mais poderes que o A1.
O A3 é acesso total à Receita Federal, pra qualquer coisa.
Já o A1 é basicamente NFE.

O pessoal costuma pegar o A3 não pela segurança, mas porque vale por 3 anos.

Exemplos tudo-em-um

MensagemEnviado: 25 Mar 2014 21:44
por Alexandre Silva
é bem isso,
o problema basicamente é para nao ficar renovando...todo ano
Mas meus clientes que usam cte e Nfe, daqui a pouco vao começar com o MDFE (manifesto)
Queria fazer pelo harbou e nao pelos emissores do SEFAZ, nem pelo ACBR

E vc nao ve uma alternativa (para poder usar o A3) que poderia ser usada no harbour ?
chamar um programa externo ? conhece algum ?

Exemplos tudo-em-um

MensagemEnviado: 25 Mar 2014 23:45
por JoséQuintas
Vou testar isso qualquer hora.
O problema é a Microsoft inventando seguranças cada vez mais inseguras.
No Windows 8 complica até pra baixar o programa oficial da Fazenda.

Exemplos tudo-em-um

MensagemEnviado: 22 Mai 2014 20:33
por JoséQuintas
Só pra constar:
Embuti algumas coisas do tudo em um no www.harbourdoc.com.br
Apesar de misturado, fica em separado, já que classifiquei como library harbourdoc.com.br
Por exemplo:

Ao abrir a categoria PDF, a library harbourdoc.com.br contém PDFClass
Ao abrir a categoria User Interface, a library harbourdoc.com.br contém GrafTime()
Ao abrir a categoria Miscelaneous, a library harbourdoc.com.br contém ReturnValue()

Ainda não sei aonde encaixar as outras, além de muitas do harbour.

Exemplos tudo-em-um

MensagemEnviado: 06 Set 2014 02:04
por Alexandre Silva
Entao Zé...
Vc colocou ai essa funcao assinaxml() como ela funciona ?

Tenho a funcao hbNFeAssina() mas nao sei como se passa os parametros e se executa o objeto..

E o nome do Certificado é aquele CN= XXXX (normalmente o nome da empresa)
ou é uma Chave ou outra coisa ??

Quando estou gerando o XML, linha a linha, numa String cXml, chego no final antes da assinatura com o tag
cXml+='</infCte>'

Nesse ponto deve ser assinado, como fazer ?

PS: Atualmente coloco uma assinatura falsa para poder ser importado no Emissor.

Exemplos tudo-em-um

MensagemEnviado: 06 Set 2014 08:34
por JoséQuintas
É praticamente a mesma rotina da hbnfe.

A estrutura dos arquivos NFE, CTE, MDFe, etc. é parecida na formação.

a) Todas são a informação do documento <infNFe></infNFe> ou <infCTe></infCTe> ou <infMDFe></infMDFe>.
b) Dentro desse bloco, todas tem o bloco do documento e o bloco da assinatura <NFe>...</NFe><signature></signature>
c) No bloco do documento tem o bloco chave <id...>

Pra assinatura, insere só o básico do bloco da assinatura pra identificar aonde vai ficar, e utiliza o bloco Id, que pode ser diferente conforme o tipo de documento. É isso que a rotina de assinatura identifica.
Depois de assinado, o bloco de assinatura completo substitui o bloco vazio antes da assinatura <signature></signature>

Se for lote, vai conter vários blocos de NFe, e cada bloco é tratado como um XML de NFE diferente, cada um com a sua assinatura.

Lembrando: a assinatura é como um dígito de controle, para o documento mais o certificado. (um grande dígito de controle com muitos dígitos)

Então basicamente é isso: a rotina de assinatura identifica qual o tipo de documento pra saber como separar a identificação, calcula a assinatura, e depois inclui a assinatura no bloco da assinatura.
A rotina só precisa saber qual é o XML, e qual o certificado.

Exemplos tudo-em-um

MensagemEnviado: 06 Set 2014 15:48
por Alexandre Silva
Oi. desculpe,
sou iniciante nisso. Sua explicacao é muito boa, preciso do exemplo prático/real.

1=O que preciso é: tendo um XML de Cte, como faço para assinar ??

2=Qual função voce usa ?? Porque essa hbnfeassina() pelo que vi nao faz referencia a Cte.
Ou nesta funcao vc mudou as referencias a NFe>para CTe> ??

3-Nos prg da compilacao tenho ze_sefaz.prg, hhNfeAssina.prg e hbnfe.prg que peguei em:
precisa mais alguma coisa ??
[url]
http://hbnfe.googlecode.com/svn/trunk/source/
[/url]

4-O que vai como parametro do certificado ?? quais desses Metodos devo usar ??
METHOD escolheCertificado(lTentaRegistrar)
METHOD pegaObjetoCertificado(cSerialCert)
METHOD pegaCNCertificado()
METHOD pegaPropriedadesCertificado(cSerialCert)

5-Abaixo o trecho que tento assinar , dá erro varialvel nao existe SELF
  
       HB_MemoWrit(varqs,cXml)  // salvo o string do xml que estou montado
       oAssina := hbNFeAssina(vcertificado,varqs)

      // Objeto ohbNfe  de onde vem isso ? que objeto é esse ?
      //  aqui da erro variavel nao existe SELF 

       oAssina:ohbNFe := ::ohbNfe   
       oAssina:cXMLFile := cXML
       oAssina:lMemFile := .T.
       aRetornoAss := oAssina:execute()
       oAssina := Nil
       IF aRetornoAss['OK'] == .F.
          aRetorno['OK']       := .F.
          aRetorno['MsgErro']  := aRetornoAss['MsgErro']
          RETURN(aRetorno)
       ENDIF
       cXML:= aRetornoAss['XMLAssinado']



Obrigado

Exemplos tudo-em-um

MensagemEnviado: 06 Set 2014 21:44
por JoséQuintas
No meu tudo em um, o assinatura está apenas observado, mas não é usado.
Aqui vai minha função de assinatura baseada na hbnfe. Pelo que percebi, tem partes sem uso que não retirei.

Importante:
A rotina não faz tudo sozinha, precisa da CAPICOM, e do Microsoft XML 5.0 (a única versão que faz assinatura).
A rotina recebe o conteúdo do XML, e o conteúdo fica assinado (ou não), sem usar arquivo temporário.
Se for usar arquivo, só fazer uma função intermediária, algo do tipo:

cXml := MemoRead( "arquivo.xml" )
cRetorno := AssinaXml( @cXml, "NOME DO CERTIFICADO" )
IF cRetorno != "OK"
    ? cRetorno
ELSE
   hb_MemoWrit( "assinado.xml", cXml )
ENDIF



#define _CAPICOM_STORE_OPEN_READ_ONLY                 0           // Somente Smart Card em Modo de Leitura

#define _CAPICOM_MEMORY_STORE                         0
#define _CAPICOM_LOCAL_MACHINE_STORE                  1
#define _CAPICOM_CURRENT_USER_STORE                   2
#define _CAPICOM_ACTIVE_DIRECTORY_USER_STORE          3
#define _CAPICOM_SMART_CARD_USER_STORE                4

#define _CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED           2
#define _CAPICOM_CERTIFICATE_FIND_SHA1_HASH           0           // Retorna os Dados Criptografados com Hash SH1
#define _CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY   6
#define _CAPICOM_CERTIFICATE_FIND_TIME_VALID          9           // Retorna Certificados Válidos
#define _CAPICOM_CERTIFICATE_FIND_KEY_USAGE           12          // Retorna Certificados que contém dados.
#define _CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE          0x00000080  // Permitir o uso da Chave Privada para assinatura Digital
#define _CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME 0           // Este atributo contém o tempo em que a assinatura foi criada.
#define _CAPICOM_INFO_SUBJECT_SIMPLE_NAME             0           // Retorna o nome de exibição do certificado.
#define _CAPICOM_ENCODE_BASE64                        0           // Os dados são guardados como uma string base64-codificado.
#define _CAPICOM_E_CANCELLED                          -2138568446 // A operação foi cancelada pelo usuário.
#define _CERT_KEY_SPEC_PROP_ID                        6
#define _CAPICOM_CERT_INFO_ISSUER_EMAIL_NAME          0
#define _SIG_KEYINFO                                  2

#define XMLNFE          1
#define XMLCTE          2
#define XMLCANCELAMENTO 3
#define XMLINUTILIZACAO 4
#define XMLDEPEC        5
#define XMLEVENTO       6

#include "common.ch"
#include "hbclass.ch"

FUNCTION AssinaXml( cTxtXml, cCertCN )
   LOCAL oDOMDoc, nPosIni, nPosFim, xmlHeaderAntes, xmldsig, dsigns, oCert, oStoreMem, oError, xmlHeaderDepois
   LOCAL XMLAssinado, ParseError, oSchema, SIGNEDKEY, DSIGKEY, SCONTAINER, SPROVIDER, ETYPE, nTipo, cURI, cRetorno, nP, nResult
   LOCAL aDelimitadores, nCont

// atenção a ordem é importante
   aDelimitadores := { { "<infMDFe", "</MDFe>" }, { "<infCte", "</CTe>" }, { "<infNFe", "</NFe>" }, ;
      { "<infCanc", "</cancNFe>" }, { "<infInut",  "</inutNFe>" }, { "<infEvento", "</evento>" }, ;
      { "<inf????", "</envDPEC>" } }

   // Define Tipo de Documento

   IF AT( [<Signature], cTxtXml) <= 0
      nTipo := 0
      FOR nCont = 1 TO Len( aDelimitadores )
         IF aDelimitadores[ nCont, 1 ] $ cTxtXml
            nTipo := nCont
            EXIT
         ENDIF
      NEXT

      // Pega URI
      nPosIni := At( [Id=], cTxtXml )
      IF nPosIni = 0
         cRetorno := "Não encontrado início do URI: Id="
         RETURN cRetorno
      ENDIF
      nPosIni := HB_AT( ["], cTxtXml, nPosIni + 2 )
      IF nPosIni = 0
         cRetorno := "Não encontrado início do URI: aspas inicial"
         RETURN cRetorno
      ENDIF
      nPosFim := HB_AT( ["], cTxtXml, nPosIni + 1 )
      IF nPosFim = 0
         cRetorno := "Não encontrado início do URI: aspas final"
         RETURN cRetorno
      ENDIF
      cURI := Substr( cTxtXml, nPosIni + 1, nPosFim - nPosIni - 1 )

      // Adiciona bloco de assinatura no local apropriado
      IF nTipo != 0
         IF aDelimitadores[ nTipo, 2 ] $ cTxtXml
            cTxtXml := Substr( cTxtXml, 1, At( aDelimitadores[ nTipo, 2 ], cTxtXml ) - 1 ) + SignatureNode( cURI ) + aDelimitadores[ nTipo, 2 ]
         ENDIF
      ENDIF
   ENDIF

//   HB_MemoWrit( "NFE\Ultimo-1.XML", cTxtXml )
   // Lendo Header antes de assinar //
   xmlHeaderAntes := ''
   nPosIni := AT( [?>], cTxtXml )
   IF nPosIni > 0
      xmlHeaderAntes := Substr( cTxtXml, 1, nPosIni + 1 )
   ENDIF

   BEGIN SEQUENCE
      oDOMDoc := Win_OleCreateObject( "MSXML2.DOMDocument.5.0" )
   RECOVER
      cRetorno := "Não carregado MSXML2.DOMDocument.5.0"
      RETURN cRetorno
   END SEQUENCE

   oDOMDoc:async = .F.
   oDOMDoc:resolveExternals := .F.
   oDOMDoc:validateOnParse  = .T.
   oDOMDoc:preserveWhiteSpace = .T.

   BEGIN SEQUENCE
      xmldsig := Win_OleCreateObject( "MSXML2.MXDigitalSignature.5.0")
   RECOVER
      cRetorno := "Não carregado MSXML2.MXDigitalSignature.5.0"
      RETURN cRetorno
   END SEQUENCE

   oDOMDoc:LoadXML( cTxtXml )
   IF oDOMDoc:parseError:errorCode <> 0 // XML não carregado
      cRetorno := "Assinar: Não foi possivel carregar o documento pois ele não corresponde ao seu Schema" + HB_EOL()
      cRetorno += " Linha: " + Str(oDOMDoc:parseError:line)+HB_EOL()
      cRetorno += " Caractere na linha: " + Str(oDOMDoc:parseError:linepos)+HB_EOL()
      cRetorno += " Causa do erro: " + oDOMDoc:parseError:reason+HB_EOL()
      cRetorno += "code: "+STR(oDOMDoc:parseError:errorCode)
      RETURN cRetorno
   ENDIF

   DSIGNS = "xmlns:ds='http://www.w3.org/2000/09/xmldsig#'"
   oDOMDoc:setProperty('SelectionNamespaces', DSIGNS)

   IF .NOT. "</Signature>" $ cTxtXml
      RETURN "ERRO: Bloco Assinatura não encontrado"
   ENDIF
   BEGIN SEQUENCE
      xmldsig:signature := oDOMDoc:selectSingleNode(".//ds:Signature")
   RECOVER
      cRetorno := "Template de assinatura não encontrado"
      RETURN cRetorno
   END SEQUENCE

   oCert:= pegaObjetoCertificado( cCertCn )
   IF oCert == NIL
      cRetorno := "Certificado não encontrado"
      RETURN cRetorno
   ENDIF

   oStoreMem := Win_OleCreateObject( "CAPICOM.Store" )
   BEGIN SEQUENCE WITH { | oError | Break( oError ) }
      oStoreMem:open( _CAPICOM_MEMORY_STORE, 'Memoria', _CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED )
   RECOVER USING oError
      cRetorno := "Falha ao criar espaço certificado na memoria " + HB_EOL()
      cRetorno += "Error: "  + Transform( oError:GenCode, NIL ) + ";" + HB_EOL()
      cRetorno += "SubC: "   + Transform( oError:SubCode, NIL ) + ";" + HB_EOL()
      cRetorno += "OSCode: "  + Transform( oError:OsCode,  NIL ) + ";" + HB_EOL()
      cRetorno += "SubSystem: " + Transform( oError:SubSystem, NIL ) + ";" +HB_EOL()
      cRetorno += "Mensagem: " + oError:Description
      RETURN cRetorno
   END SEQUENCE

   BEGIN SEQUENCE WITH { | oError | Break( oError ) }
      oStoreMem:Add( oCert )
   RECOVER USING oError
      cRetorno := "Falha ao adicionar certificado na memoria " + HB_EOL()
      cRetorno += "Error: "  + Transform( oError:GenCode, NIL) + ";" + HB_EOL()
      cRetorno += "SubC: "   + Transform( oError:SubCode, NIL) + ";" + HB_EOL()
      cRetorno += "OSCode: "  + Transform( oError:OsCode,  NIL) + ";" + HB_EOL()
      cRetorno += "SubSystem: " + Transform( oError:SubSystem, NIL) + ";" + HB_EOL()
      cRetorno += "Mensagem: " + oError:Description
      RETURN cRetorno
   END SEQUENCE

   xmldsig:store := oStoreMem

   //---> Dados necessários para gerar a assinatura
   eType := oCert:PrivateKey:ProviderType
   sProvider := oCert:PrivateKey:ProviderName
   sContainer := oCert:PrivateKey:ContainerName
   dsigKey := xmldsig:CreateKeyFromCSP(eType, sProvider, sContainer, 0)
   IF ( dsigKey = NIL )
      cRetorno := "Erro ao criar a chave do CSP."
      RETURN cRetorno
   ENDIF

   SignedKey := XmlDSig:Sign( DSigKey, 2 )

   IF ( signedKey <> NIL )
      XMLAssinado := oDOMDoc:xml
      XMLAssinado := StrTran( XMLAssinado, Chr(10), "" )
      XMLAssinado := StrTran( XMLAssinado, Chr(13), "" )
      nPosIni := At( [<SignatureValue>], XMLAssinado ) + Len( [<SignatureValue>] )
      XMLAssinado := Substr( XMLAssinado, 1, nPosIni - 1 ) + StrTran( Substr( XMLAssinado, nPosIni, Len( XMLAssinado ) ), " ", "" )
      nPosIni := At( [<X509Certificate>], XMLAssinado ) - 1
      nP = At( [<X509Certificate>], XMLAssinado )
      nResult := 0
      DO WHILE nP<>0
         nResult := nP
         nP = HB_AT( [<X509Certificate>], XMLAssinado, nP + 1 )
      ENDDO
      nPosFim := nResult
      XMLAssinado := Substr( XMLAssinado, 1, nPosIni ) + Substr( XMLAssinado, nPosFim, Len( XMLAssinado ) )
   ELSE
      cRetorno := "Assinatura Falhou."
      RETURN cRetorno
   ENDIF

   IF xmlHeaderAntes <> ""
      nPosIni := At( XMLAssinado, [?>] )
      IF nPosIni > 0
         xmlHeaderDepois := Substr( XMLAssinado, 1, nPosIni + 1 )
         IF xmlHeaderAntes <> xmlHeaderDepois
            * ? "entrou stuff"
            * XMLAssinado := StuffString( XMLAssinado, 1, Length( xmlHeaderDepois ), xmlHeaderAntes )
         ENDIF
      ELSE
         XMLAssinado := xmlHeaderAntes + XMLAssinado
      ENDIF
   ENDIF
   cTxtXml := XmlAssinado
   cRetorno := "OK"
   oDOMDoc := NIL
   ParseError := NIL
   oSchema := NIL
   RETURN cRetorno
*----------------------------------------------------------------

STATIC FUNCTION SignatureNode( cUri )
   Local cSignatureNode := ""
   cSignatureNode += [<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">]
   cSignatureNode +=    [<SignedInfo>]
   cSignatureNode +=       [<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>]
   cSignatureNode +=       [<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />]
   cSignatureNode +=       [<Reference URI="#] + cURI + [">]
   cSignatureNode +=       [<Transforms>]
   cSignatureNode +=          [<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />]
   cSignatureNode +=          [<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />]
   cSignatureNode +=       [</Transforms>]
   cSignatureNode +=       [<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />]
   cSignatureNode +=       [<DigestValue>]
   cSignatureNode +=       [</DigestValue>]
   cSignatureNode +=       [</Reference>]
   cSignatureNode +=    [</SignedInfo>]
   cSignatureNode +=    [<SignatureValue>]
   cSignatureNode +=    [</SignatureValue>]
   cSignatureNode +=    [<KeyInfo>]
   cSignatureNode +=    [</KeyInfo>]
   cSignatureNode += [</Signature>]
   RETURN cSignatureNode
*----------------------------------------------------------------

FUNCTION PegaObjetoCertificado( cCertCn )
   LOCAL oStore, oCertificados, oResult := NIL, nCont
   oStore := Win_OleCREATEObject( "CAPICOM.Store" )
   oStore:open( _CAPICOM_CURRENT_USER_STORE, "My", _CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED )
   oCertificados := oStore:Certificates()
   FOR nCont = 1 TO oCertificados:Count()
      IF cCertCN $ oCertificados:Item( nCont ):SubjectName
         oResult := oCertificados:Item( nCont )
         EXIT
      ENDIF
   NEXT
   oCertificados := NIL
   oStore := NIL
   RETURN oResult
*----------------------------------------------------------------

Exemplos tudo-em-um

MensagemEnviado: 09 Set 2014 02:15
por Alexandre Silva
Muito muito obrigado...
finalmente consegui assinar um XML.. tando do Cte como do MDFe...
Claro isso só serve para os do repositorio do Windows certo.. ? nao assina se for cartao...

Muito obrigado

Exemplos tudo-em-um

MensagemEnviado: 09 Set 2014 08:59
por JoséQuintas
Agora que falou isso, fui procurar na rotina aonde usa a senha e não encontrei.
Talvez por isso não funcione o A3, porque nele a segurança não deixa pular a senha.

Também dá pra instalar o do cartão no repositório do Windows, mas continua exigindo o cartão.
Teria que testar se pra capicom isso é suficiente, mesmo que peça senha.

Exemplos tudo-em-um

MensagemEnviado: 09 Set 2014 12:06
por Alexandre Silva
Vi que a rotina verifica se o Certificado passado, se encontra entre os certificados instalados..
Vou ver no cliente que tem o A3, para ver qual mensagem vai retornar..

 IF cCertCN $ oCertificados:Item( nCont ):SubjectName


Vamos ver se no A3 ele consegue extrair esses dados
    //---> Dados necessários para gerar a assinatura
    eType := oCert:PrivateKey:ProviderType
    sProvider := oCert:PrivateKey:ProviderName
    sContainer := oCert:PrivateKey:ContainerName
    dsigKey := xmldsig:CreateKeyFromCSP(eType, sProvider, sContainer, 0)
    IF ( dsigKey = NIL )
       cRetorno := "Erro ao criar a chave do CSP."
       RETURN cRetorno
    ENDIF


Tem que ser possivel usar A3..
poderia até ter um aplicativo externo passando os parametros (XML e Nome do certificado)

Exemplos tudo-em-um

MensagemEnviado: 25 Set 2014 01:29
por Alexandre Silva
Instalei a assinatura do xml, tanto nos win32 e como no 64,
usando
regsvr32 msxml5.dll
regsvr32 capicom.dll

no C:\windows\system32 e no C:\Windows\SysWOW64) (para o 64)

Para o A1, beleza
para o A3 , quando foi assinar, abriu a janela para digitar a senha..

ok !!

Exemplos tudo-em-um

MensagemEnviado: 05 Fev 2015 00:25
por Alexandre Silva
Entao pessoal...
estava tudo certinho... fiz até uma rotina que mostra os Certificados instalados e a validade

Mas agora, em um cliente que já usava e funcionava...
e funciona a funcao que mostra os certificados instalados
no mesmo micro tb tem cartao A3 - e assina

Quando vai assinar via certificado A1 , recebo essa mensagem:

Error WINOLE/1007  Erro nos parametros: CREATEKEYFROMCSP
DOS Error -2147352567)
Called from WIN_OLEAUTO:CREATEKEYFROMCSP(0)


Exemplos tudo-em-um

MensagemEnviado: 05 Fev 2015 06:45
por JoséQuintas
Estava olhando essa parte.
CreateKeyFromCSP() é função do xml 5.0, mas ela está ok, já que a mensagem de erro se refere aos parâmetros.
Os parâmetros vém do certificado.

Sendo assim, duas opções: capicom ou certificado

- certificado vencido e/ou com problemas (de repente foi instalado certificado novo e não foi removido o anterior)
- nome errado do certificado
- capicom, já que é a capicom que extrai dados do certificado

Só aproveitando.
Como funciona win_OleCreateObject():

Isso adiciona as funções da DLL ao programa.
Se a DLL não existir, e não houver teste pra isso, pode acontecer de só dar erro no uso da função.
Se no uso da função houver tratamento de erro, depende de como é a sequência do programa.

BEGIN SEQUENCE
   oCertificado := capicom:PegaCertificado(x)
END SEQUENCE


Apesar de parecer algo do outro mundo, é o mesmo que aconteceria com qualquer função do Harbour.
begin sequence esconde a mensagem de erro e prossegue mesmo com erro.
Na hora de usar oCertificado, o conteúdo pode ou não estar correto, dependendo do certificado ou da existência da capicom com a função pegacertificado().
Também dá pra melhorar um pouco isso.

lOk := .F.
BEGIN SEQUENCE
   oCertificado := Capicom:PegaCertificado(x)
   lOk := .T.
END SEQUENCE
IF .NOT. lOk
   ? "Erro ao usar certificado"
ENDIF


Dessa forma, se houver erro o programa pula a linha lOk := .T., então lOk vai conter .F.

Exemplos tudo-em-um?

MensagemEnviado: 02 Jul 2015 22:41
por Ruben Dario
Jose

Descargue el test.zip y allinone.zip .

Adicione estos archivos

harupdf.ch
wvgparts.ch
wvtwin.ch

y modifique frmclass.prg y agregue esta linea #include "wvgparts.ch"

me da error en estas lineas del archivo pdfclass.prg

HPDF_SetCompressionMode( ::oPdf, HPDF_COMP_ALL )

HPDF_SetInfoAttr( ::oPDF, HPDF_INFO_AUTHOR, cAuthor )
HPDF_SetInfoAttr( ::oPDF, HPDF_INFO_CREATOR, cCreator )
HPDF_SetInfoAttr( ::oPDF, HPDF_INFO_TITLE, cTitle )
HPDF_SetInfoAttr( ::oPdf, HPDF_INFO_SUBJECT, cSubject )

como se definen HPDF_????? que son lo que generar el error

Sera factible que proporciones el test.zip completo. Gracias

este es el error

Imagem

Exemplos tudo-em-um

MensagemEnviado: 03 Jul 2015 00:23
por JoséQuintas
hbhpdf.hbc
hbwin.hbc
hbct.hbc


Ao acrescentar hbhpdf.hbc, o hbmk2 já acrescenta .CH referente a HaruPDF
Ao acrescentar hbwin.hbc, o hbmk2 já acrescenta .CH referente a hbwin
Ao acrescentar gtwvg.hbc, o hbmk2 já acrescenta .CH referente a gtwvg

Não sei qual versão de Harbour está usando, mas isso já existe há mais de um ano no Harbour.

Exemplos tudo-em-um

MensagemEnviado: 03 Jul 2015 00:31
por JoséQuintas
Baixei o allinone.zip deste post:

Harbour 3.2 + mingw

d:\temp\test\allinone>hbmk2 test
Harbour 3.2.0dev (r1505071127)
Copyright (c) 1999-2015, http://harbour-project.org/
Compiling 'test.prg'...
Lines 31, Functions/Procedures 2
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\test.c'... Done.
Compiling 'about.prg'...
Lines 226, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\about.c'... Done.
Compiling 'calendar.prg'...
Lines 666, Functions/Procedures 4
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\calendar.c'... Done.
Compiling 'calculator.prg'...
Lines 1638, Functions/Procedures 19
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\calculator.c'... Done.
Compiling 'frm1.prg'...
Lines 1409, Functions/Procedures 5
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\frm1.c'... Done.
Compiling 'menu.prg'...
Lines 921, Functions/Procedures 8
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\menu.c'... Done.
Compiling 'modalwindow.prg'...
Lines 24, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\modalwindow.c'... Done.
Compiling 'pdf.prg'...
Lines 16, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\pdf.c'... Done.
Compiling 'progressbar.prg'...
Lines 824, Functions/Procedures 3
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\progressbar.c'... Done.
Compiling 'sped.prg'...
Lines 621, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\sped.c'... Done.
Compiling 'ze_frmclass.prg'...
Lines 1343, Functions/Procedures 18
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\ze_frmclass.c'... Done.
Compiling 'ze_frmcadclass.prg'...
Lines 1220, Functions/Procedures 11
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\ze_frmcadclass.c'... Done.
Compiling 'ze_functions.prg'...
Lines 3639, Functions/Procedures 23
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\ze_functions.c'... Done.
Compiling 'ze_pdfclass.prg'...
Lines 1390, Functions/Procedures 20
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\ze_pdfclass.c'... Done.
Compiling 'ze_errorsys.prg'...
Lines 325, Functions/Procedures 4
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\ze_errorsys.c'... Done.
Compiling 'ze_sefaz.prg'...
Lines 1615, Functions/Procedures 19
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\ze_sefaz.c'... Done.
Compiling 'ze_xmlfun.prg'...
Lines 185, Functions/Procedures 8
Generating C source output to 'c:\temp\hbmk_hgcgsi.dir\ze_xmlfun.c'... Done.
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2010
UPX 3.07w       Markus Oberhumer, Laszlo Molnar & John Reiser   Sep 08th 2010

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   2682368 ->    890368   33.19%    win32/pe     test.exe

Packed 1 file.

d:\temp\test\allinone>


Harbour 3.4 + msvc

d:\temp\test\allinone>hbmk2 test
hbmk2: Processing environment options: -comp=msvc
Harbour 3.4.0dev (d51ecc5) (2015-06-28 08:59)
Copyright (c) 1999-2015, https://github.com/vszakats/harbour-core/
Harbour 3.4.0dev (d51ecc5) (2015-06-28 08:59)
Copyright (c) 1999-2015, https://github.com/vszakats/harbour-core/
Harbour 3.4.0dev (d51ecc5) (2015-06-28 08:59)
Copyright (c) 1999-2015, https://github.com/vszakats/harbour-core/

Copyright (c) 1999-2015, https://github.com/vszakats/harbour-core/
Compiling 'test.prg'...
Lines 31, Functions/Procedures 2
Done.ating C source output to 'c:\temp\hbmk_qkilw9.dir\test.c'...
Compiling 'about.prg'...
Compiling 'progressbar.prg'...
Lines 223, Functions/Procedures 1
Compiling 'frm1.prg'...
Compiling 'ze_functions.prg'...c:\temp\hbmk_qkilw9.dir\about.c'...
Done.
Compiling 'calendar.prg'...
Lines 661, Functions/Procedures 4
Done.ating C source output to 'c:\temp\hbmk_qkilw9.dir\calendar.c'...
Compiling 'calculator.prg'...
Lines 821, Functions/Procedures 3
Done.ating C source output to 'c:\temp\hbmk_qkilw9.dir\progressbar.c'...
Compiling 'sped.prg'...
Lines 2707, Functions/Procedures 23
Lines 1375, Functions/Procedures 5temp\hbmk_qkilw9.dir\ze_functions.c'...
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\frm1.c'... Done.
Compiling 'ze_pdfclass.prg'...
Done.
Lines 616, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\sped.c'... Compiling 'menu.prg'...
Done.
Compiling 'ze_frmclass.prg'...
Lines 916, Functions/Procedures 8
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\menu.c'... Done.
Compiling 'modalwindow.prg'...
Lines 24, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\modalwindow.c'... Done.
Compiling 'pdf.prg'...
Lines 16, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\pdf.c'... Done.
Lines 1604, Functions/Procedures 19
Lines 1312, Functions/Procedures 18
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\calculator.c'... Generating C sour
e output to 'c:\temp\hbmk_qkilw9.dir\ze_frmclass.c'... Done.
Done.
Compiling 'ze_frmcadclass.prg'...
Lines 1359, Functions/Procedures 20
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\ze_pdfclass.c'... Done.
Compiling 'ze_errorsys.prg'...
Lines 323, Functions/Procedures 4
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\ze_errorsys.c'... Done.
Compiling 'ze_sefaz.prg'...
Lines 1189, Functions/Procedures 11
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\ze_frmcadclass.c'... Done.
Lines 1586, Functions/Procedures 19
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\ze_sefaz.c'... Done.
Compiling 'ze_xmlfun.prg'...
Lines 185, Functions/Procedures 8
Generating C source output to 'c:\temp\hbmk_qkilw9.dir\ze_xmlfun.c'... Done.
ze_sefaz.c
ze_frmclass.c
menu.c
test.c
about.c
ze_frmcadclass.c
modalwindow.c
ze_xmlfun.c
calendar.c
ze_functions.c
pdf.c
hbmk_kb2b66.c
ze_pdfclass.c
calculator.c
Generating Code...
progressbar.c
ze_errorsys.c
frm1.c
sped.c
Generating Code...
Generating Code...
Generating Code...
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2013
UPX 3.09w       Markus Oberhumer, Laszlo Molnar & John Reiser   Feb 18th 2013

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   1512448 ->    552960   36.56%    win32/pe     test.exe

Packed 1 file.

d:\temp\test\allinone>

Exemplos tudo-em-um

MensagemEnviado: 03 Jul 2015 00:37
por JoséQuintas
Notas:

Para indicar HBC, NÃO é -harupdf.hbc
É harupdf.hbc
Não se usa o "-"

Se sua versão de Harbour ainda não trabalha com HBC, precisa indicar os arquivos .CH no fonte.

#include "\harbour\contrib\hbhpdf\hbhpdf.ch"

Exemplos tudo-em-um

MensagemEnviado: 03 Jul 2015 06:41
por Toledo
Ruben Dario escreveu:este es el error

1 - Copie novamente apenas o arquivo allinone.zip, e não faça nenhuma alteração.

2 - Copie os arquivos abaixo na mesma pasta onde está o arquivo test.hbp:

C:\hb32\contrib\hbhpdf\hbhpdf.hbc

C:\hb32\contrib\hbct\hbct.hbc

C:\hb32\contrib\gtwvg\gtwvg.hbc

Abraços,

Exemplos tudo-em-um

MensagemEnviado: 03 Jul 2015 10:30
por JoséQuintas
Não sei se isso está relacionado com o que vi em outro post, pra compilar SEM usar hbmk2.

No caso desses fontes, uma opção é compilar com checagem máxima:

d:\temp\test\allinone>hbmk2 ze_pdfclass -w3 -es2
hbmk2: Processing environment options: -comp=msvc
Harbour 3.4.0dev (3950e51) (2015-07-02 22:16)
Copyright (c) 1999-2015, https://github.com/vszakats/harbour-core/
Compiling 'ze_pdfclass.prg'...
ze_pdfclass.prg(59) Warning W0001  Ambiguous reference 'HPDF_COMP_ALL'
ze_pdfclass.prg(93) Warning W0001  Ambiguous reference 'HPDF_INFO_AUTHOR'
ze_pdfclass.prg(94) Warning W0001  Ambiguous reference 'HPDF_INFO_CREATOR'
ze_pdfclass.prg(95) Warning W0001  Ambiguous reference 'HPDF_INFO_TITLE'
ze_pdfclass.prg(96) Warning W0001  Ambiguous reference 'HPDF_INFO_SUBJECT'
ze_pdfclass.prg(110) Warning W0001  Ambiguous reference 'HPDF_PAGE_SIZE_A4'
ze_pdfclass.prg(110) Warning W0001  Ambiguous reference 'HPDF_PAGE_PORTRAIT'
ze_pdfclass.prg(110) Warning W0001  Ambiguous reference 'HPDF_PAGE_LANDSCAPE'
200
No code generated.
hbmk2: Error: Running Harbour compiler (embedded). 1


Esses erros se referem às variáveis que constam em arquivo #include.
Se seu editor de texto permite, seria pesquisar em qual CH constam essas palavras, mas pesquisando a pasta \harbour\ e subpastas.

Uma opção possível, que acredito que seja similar com a usada com hbmk2, é usar algo parecido com isto:

------------------file mystd.ch
#include "hbhpdf.ch"
#include "wvtwin.ch"
#include "wvgparts.ch"
#include "hbgtwvg.ch"
#include "hbwin.ch"


E nos fontes de trabalho, ou na linha de compilação, apenas indicar o arquivo acima mystd.ch

#include "mystd.ch"


A vantagem de indicar o arquivo .HBC é para facilitar futuras mudanças.
Exemplo que já aconteceu: moverem algumas definições de um CH da GTWVG pra dentro da HBWIN, por estar relacionado ao Windows.
Usando .HBC uma mudança dessas não faz diferença.
Já usando #include, os fontes precisariam ser modificados pra acrescentar o novo .CH.

Nota:
Geralmente os arquivos .CH ficam em \harbour\include, mas nem todos.
Os arquivos .CH relacionados à gtwvtg ficam em \harbour\contrib\gtwvg.
Os arquivos .CH relacionados à harupdf ficam em \harbour\contrib\hbhpdf
As LIBs, em alguns casos ficam em \harbour\lib, e em outros casos na mesma pasta da contribuição

Por isso simplifica usar .HBC, que já configura tudo que é necessário de uma vez: path de .CH, path de LIB, #include, etc.

Exemplos tudo-em-um

MensagemEnviado: 03 Jul 2015 13:13
por Ruben Dario
Gracias Por tu respuesta.

Bueno con hbmk2 no tengo mucha esperiencia, he usado mas los .mak

para enterder la ide del .HBC , me dices que pedo cre4ar my propio HBC y este lo coloco en la lista de .HBP.

Me puedes colocar deacuerdo al erjemplo un archivo HBC contruido.

y en lo del problema , hice tus indicaciones.

Ahora este es el error, se refiere a la libreria hbhpdf.lib

Yo estoy Usando Harbour 3.2 y BCC Version 6.8

Harbour 3.2.0dev (r1501292255)

Copyright (c) 1999-2015, http://harbour-project.org/

Compiling 'test.prg'...

Lines 31, Functions/Procedures 2

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\test.c'... Done.

Compiling 'about.prg'...

Lines 226, Functions/Procedures 1

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\about.c'... Done.

Compiling 'calendar.prg'...

Lines 666, Functions/Procedures 4

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\calendar.c'... Done.

Compiling 'calculator.prg'...

Lines 1638, Functions/Procedures 19

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\calculator.c'... Done.

Compiling 'frm1.prg'...

Lines 1409, Functions/Procedures 5

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\frm1.c'... Done.

Compiling 'menu.prg'...

Lines 921, Functions/Procedures 8

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\menu.c'... Done.

Compiling 'modalwindow.prg'...

Lines 24, Functions/Procedures 1

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\modalwindow.c'... Done.

Compiling 'pdf.prg'...

Lines 16, Functions/Procedures 1

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\pdf.c'... Done.

Compiling 'progressbar.prg'...

Lines 824, Functions/Procedures 3

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\progressbar.c'... Done.

Compiling 'sped.prg'...

Lines 621, Functions/Procedures 1

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\sped.c'... Done.

Compiling 'ze_frmclass.prg'...

Lines 1343, Functions/Procedures 18

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_frmclass.c'... Done.

Compiling 'ze_frmcadclass.prg'...

Lines 1220, Functions/Procedures 11

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_frmcadclass.c'... Done.

Compiling 'ze_functions.prg'...

Lines 3639, Functions/Procedures 23

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_functions.c'... Done.

Compiling 'ze_pdfclass.prg'...

Lines 1390, Functions/Procedures 20

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_pdfclass.c'... Done.

Compiling 'ze_errorsys.prg'...

Lines 325, Functions/Procedures 4

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_errorsys.c'... Done.

Compiling 'ze_sefaz.prg'...

Lines 1615, Functions/Procedures 19

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_sefaz.c'... Done.

Compiling 'ze_xmlfun.prg'...

Lines 185, Functions/Procedures 8

Generating C source output to 'C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_xmlfun.c'... Done.

Borland Resource Compiler  Version 5.40

Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\test.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\about.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\calendar.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\calculator.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\frm1.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\menu.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\modalwindow.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\pdf.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\progressbar.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\sped.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_frmclass.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_frmcadclass.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_functions.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_pdfclass.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_errorsys.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_sefaz.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_a53yue.dir\ze_xmlfun.c:

C:\Users\Vivian\AppData\Local\Temp\hbmk_y3fqi0.c:

hbmk2: Error: Referenced, missing, but unknown function(s): WAPI_MESSAGEBOX(),
       WAPI_GETACTIVEWINDOW(), WIN_GETOPENFILENAME(), WIN_GETSAVEFILENAME(),
       WIN_N2P(), WIN_OLECREATEOBJECT(), WAPI_SETMENU(), WAPI_DESTROYMENU()



Imagem

Exemplos tudo-em-um

MensagemEnviado: 03 Jul 2015 15:49
por JoséQuintas
Espere.
O único problema é não conhecer o hbmk2 pra usá-lo com bcc?
Mais fácil aprendê-lo.

Usando exatamente o exemplo que baixou:
hbmk2 test -comp=bcc


Como trabalhar com hbmk2:
hbmk2 programa1.prg programa2.prg programa3.prg gtwvg.hbc -comp=bcc


ou usando arquivo HBP

---------- test.hbp
programa1.prg
programa2.prg
programa3.prg
gtwvg.hbc

hbmk2 test.hbp -comp=bcc


-comp é sobre o compilador, pode ser -comp=bcc, -comp=msvc, -comp=mingw
é o único comando que não pode ser incluído dentro do hbp
No resto, é só acrescentar a lista de PRG, C, LIBs que não sejam do Harbour, ou HBC que existem no Harbour pra facilitar.

Provavelmente o linqueditor vai buscar as libs em \harbour\lib\win\bcc

Exemplos tudo-em-um

MensagemEnviado: 03 Jul 2015 16:39
por Ruben Dario
Gracias Por Tu respuesta,

En realidad no fue posible compilar tu ejemplo.

hbmk2 calculator ze_functions -DGTWVG gtwvg.hbc
o
hbmk2 calculator ze_functions -DGTWVG gtwvg.hbc -comp=bcc

Imagem

Exemplos tudo-em-um

MensagemEnviado: 03 Jul 2015 16:49
por JoséQuintas
Ok, são funções que agora fazem parte da hbwin.

Só acrescentar hbwin.hbc

Exemplos tudo-em-um

MensagemEnviado: 04 Jul 2015 00:19
por Ruben Dario
Gracias

Ya logre compilarlo y construi el ejeutable.

hbmk2 about ze_functions
hbmk2 calculator ze_functions
hbmk2 progressbar ze_functions
hbmk2 calculator ze_functions -DGTWVG gtwvg.hbc hbwin.hbc
hbmk2 calendar.prg ze_functions -DGTWVG gtwvg.hbc hbwin.hbc
hbmk2 frm1 ze_frmclass ze_frmcadclass ze_functions hbwin.hbc
hbmk2 frm1 ze_frmclass ze_frmcadclass ze_functions -DGTWVG test.rc gtwvg.hbc hbwin.hbc

Me falta este que me da error

hbmk2 pdf ze_pdfclass ze_functions hbhpdf.hbc hbct.hbc hbwin.hbc

Todos lo errores de la libreria hbhpdf.lib

Imagem

Exemplos tudo-em-um

MensagemEnviado: 04 Jul 2015 14:00
por JoséQuintas
Parece que seu Harbour está se comportando diferente do meu.
Então acrescente no fonte de PDF #include "harupdf.ch"

Só comentário: o arquivo \harbour\contrib\hbhpdf\hbhpdf.hbc contém isto:
description=libharu wrapper (PDF)
incpaths=.
headers=harupdf.ch
libs=${_HB_DYNPREF}${hb_name}${_HB_DYNSUFF}
libs=3rd/libhpdf/libhpdf.hbc


incpaths= já inclui o path do hbc na lista de pesquisa de arquivos include
headers=harupdf.ch já inclui o ch sem precisar do #include

Aqui o resultado é não precisar colocar #include no fonte, nem indicar lib adicional.
Isso já vém no próprio Harbour, pronto pra uso.

Exemplos tudo-em-um

MensagemEnviado: 25 Ago 2015 18:10
por ROBERTO SÁVIO
José Quintas
Estou pensando usar a sua PDFClass.
Funciona com o xHarbour?
Se sim, como resolver o #require "hbhpdf"?
[]'s
Roberto Sávio
xHarbour

Exemplos tudo-em-um

MensagemEnviado: 25 Ago 2015 18:54
por JoséQuintas
Bom, não mexo com xHarbour.
Esse #require é apenas pra forçar a linqueditar com a harupdf.
A princípio é apenas a biblioteca da harupdf.
Só verificar como se adiciona a harupdf no xHarbour, e pode até retirar o #require.

Exemplos tudo-em-um

MensagemEnviado: 04 Set 2015 16:30
por ROBERTO SÁVIO
José Quintas
Com a preciosa ajuda de voces do grupo, estou conseguindo usar a HARUPDF no xHarbour.
Isto vai resolver um problemão que eu estava tendo.
Porque o cFontName não aceita a fonte CALIBRI?
Obrigado
Roberto Sávio

Exemplos tudo-em-um

MensagemEnviado: 04 Set 2015 17:04
por JoséQuintas
O Windows tem seu próprio conjunto de fontes, ok.
A Harupdf tem seu próprio conjunto de fontes, ok.
Eles não são iguais.
Caso queira usar um fonte que não existe na Harupdf, vai precisar salvar esse fonte dentro do PDF, usando algumas funções pra isso.

Exemplos tudo-em-um

MensagemEnviado: 04 Set 2015 18:10
por ROBERTO SÁVIO
José Quintas
Entendi, obrigado.
Mais uma. Como imprimo negrito?
Tentei isto:
oPDF:DrawText(12,0, "HEMOGRAMA",,12,,,1)
mas deu um erro.
No método DRAWTEXT, as linhas
IF anRGB != NIL
HPDF_Page_SetRGBFill( ::Page, anRGB[ 1 ], anRGB[ 2 ], anRGB[ 3 ] )
HPDF_Page_SetRGBStroke( ::Page, anRGB[ 1 ], anRGB[ 2], anRGB[ 3] )
ENDIF
e
IF anRGB != NIL
HPDF_Page_SetRGBFill( ::Page, 0, 0, 0 )
HPDF_Page_SetRGBStroke( ::Page, 0, 0, 0 )
ENDIF
estão com o ::Page, quando deveria ser ::oPage.
Obrigado
Roberto Sávio

Exemplos tudo-em-um

MensagemEnviado: 04 Set 2015 18:17
por JoséQuintas
O negrito trata-se de outro fonte.
exemplo courier, courier bold.

aqui tem mais texto sobre harupdf, incluindo partes que não tem na classe:

https://github.com/libharu/libharu/wiki/Fonts

Exemplos tudo-em-um

MensagemEnviado: 04 Set 2015 18:25
por ROBERTO SÁVIO
Elementar, meu caro José Quintas.
Faltou pensar.
Obrigado
Roberto Sávio

Exemplos tudo-em-um

MensagemEnviado: 08 Set 2015 16:56
por ROBERTO SÁVIO
José Quintas
Fui ao link que vc passou, estudei a questão e fui usar, conforme abaixo.

nFont := HPDF_GetFont (oPDF, "Courier Bold", "CP1252")
fiz assim também
nFont := HPDF_GetFont (oPDF, "Courier-Bold", "CP1252")

Não funcionou. Não sei onde está o erro ou o que está faltando definir.
[]s
Roberto Sávio

Nota de Moderação:
por Toledo: A última mensagem postada recentemente depois desta mensagem foi excluída, pois é uma cópia desta mesma mensagem. Leia as regras do fórum (regra nº 4). Evite postar várias mensagens seguidas uma das outras com o mesmo assunto apenas porque a anterior não foi respondida.

Exemplos tudo-em-um

MensagemEnviado: 10 Set 2015 15:34
por Toledo
Amigo, o correto é o seguinte:

nFont := HPDF_GetFont (oPDF, "Courier-Bold", "CP1252")
HPDF_Page_SetFontAndSize( oPage, nFont, 10 )


Abraços,

Exemplos tudo-em-um

MensagemEnviado: 11 Set 2015 16:38
por ROBERTO SÁVIO
Ok, Toledo
Como vc sugeriu, coloquei as duas linhas no exemplo do José Quintas e está dando o erro "VARIÁVEL NÃO EXISTE oPage".
Isto não poderia acontecer, pois a variável oPage está definida na PDFClass, veja abaixo.
Não sei o que fazer para consertar isto.
Estou usando a PDFClass no xHarbour.
[]s
Roberto

STATIC FUNCTION Report2() // using own header
LOCAL oPDF
FOR nType = 1 TO 3
oPDF := PDFClass():New()
oPDF:nType := nType
oPDF:cFileName := "TEST2-" + Str( nType, 1 ) + "." + iif( nType < 3, "pdf", "lst" )
oPDF:Begin()
FOR nCont = 1 TO 1000
IF oPDF:nRow > oPDF:MaxRow()
oPDF:PageHeader()

nFont := HPDF_GetFont (oPDF, "Courier-Bold", "CP1252")
HPDF_Page_SetFontAndSize( oPage, nFont, 10 )

oPDF:DrawText( 0, 0, "REPORT TEST2-" + Str( nType, 1 ) )
oPDF:DrawText( oPDF:nRow, oPDF:nCol + 1, oPDF:nPDFPage, "999999" )
oPDF:nRow := 1
ENDIF
oPDF:DrawText( oPDF:nRow, 0, nCont, "999999" )
oPDF:nRow += 1
NEXT
oPDF:End()
NEXT
RETURN

Exemplos tudo-em-um

MensagemEnviado: 11 Set 2015 17:24
por JoséQuintas
Ok.
oPage é a página do PDF.
Como oPage é uma variável da classe, usa-se ::oPage

Obs.
Se der uma olhada no fonte na classe, ela usa isso em DrawText()
Última linha abaixo.

 METHOD DrawText( nRow, nCol, xValue, cPicture, nFontSize, cFontName, nAngle, anRGB ) CLASS PDFClass
   LOCAL nRadian , cTexto
   nFontSize := iif( nFontSize == NIL, ::nFontSize, nFontSize )
   cFontName := iif( cFontName == NIL, ::cFontName, cFontName )
   cPicture  := iif( cPicture == NIL, "", cPicture )
   nAngle    := iif( nAngle == NIL, ::nAngle, nAngle )
   cTexto    := Transform( xValue, cPicture )
   ::nCol := nCol + Len( cTexto )
   IF ::nType > 2
      @ nRow, nCol SAY cTexto
   ELSE
      nRow := ::RowToPDFRow( nRow )
      nCol := ::ColToPDFCol( nCol )
      HPDF_Page_SetFontAndSize( ::oPage, HPDF_GetFont( ::oPdf, cFontName, ::cCodePage ), nFontSize )
...


Se preferir, só passar como parâmetro ao escrever texto:
oPDF:DrawText( 5, 5, "text",,,"courier bold" )


Nota: Apenas exemplo. Confirme o nome no manual da harupdf.

Exemplos tudo-em-um

MensagemEnviado: 11 Set 2015 18:01
por ROBERTO SÁVIO
José
Fiz isto tudo que vc falou, antes de enviar a postagem.
Fiz uma analogia com oPDF que também está definido na PDFClass (VAR oPDF)
No programa usamos: oPDF := PDFClass():New(), sem problema.
Não teria que ter algo parecido para oPage?
oPage := HPDF_AddPage( oPdf ), ou algo parecido?
O método AddPage abaixo tem ::oPage := HPDF_AddPage( ::oPdf )
Posso usar ::oPage dentro do meu programa ou esta nomenclatura é só da classe?

METHOD AddPage() CLASS PDFClass
IF ::nType != PDF_TXT
::oPage := HPDF_AddPage( ::oPdf )
HPDF_Page_SetSize( ::oPage, HPDF_PAGE_SIZE_A4, iif( ::nType == 2, HPDF_PAGE_PORTRAIT, HPDF_PAGE_LANDSCAPE ) )
HPDF_Page_SetFontAndSize( ::oPage, HPDF_GetFont( ::oPdf, ::cFontName, ::cCodePage ), ::nFontSize )
ENDIF
::nRow := 0
RETURN NIL

[]s
Roberto

Exemplos tudo-em-um

MensagemEnviado: 11 Set 2015 18:13
por ROBERTO SÁVIO
José

oPDF:DrawText( 5, 5, "text",,,"Courier-Bold" )
Estranhamente agora funcionou.
Acho que já havia testado assim.
O que importa é que funcionou
Obrigado pela ajuda, mas ainda fica a questão do oPage
[]s
Roberto Sávio

Exemplos tudo-em-um

MensagemEnviado: 11 Set 2015 18:20
por JoséQuintas
Ok.
Mas aproveitando:

oPDF := PDFClass():New()


oPage é uma variável da classe.

Se for usar dentro da própria classe, num fonte da classe, usa-se ::oPage, pra indicar que é dela própria.

Se for usar no seu fonte, o comando acima colocou a classe na variável oPDF.
Então a variável oPage da classe no seu fonte é oPDF:oPage

A mesma coisa pra "funções da classe" (métodos).

Dentro da classe é ::DrawText()
No seu fonte é oPDF:DrawText()

Demora um pouco pra acostumar com isso.

Só pra lembrar: oPDF é uma variável do seu fonte.
Poderia se chamar oRelatorio, varRelatorio, qualquer nome que queira.
Mas vai ter que usar esse nome em todo fonte.

oPDF := PDFClass():New()
oPDF:DrawText( .... )

meuRelatorio := PDFClass():New()
meuRelatorio:DrawText( ... )


É difícil, mas às vezes pode querer gerar dois relatórios de uma vez, de repente um de entradas e outro de saídas.
Poderia usar duas variáveis, uma pra cada relatório.

oEntradas := PDFClass():New()
oSaidas    := PDFClass():New()
...
DO WHILE .NOT. Eof()
   IF tipo="entrada"
      oEntradas:DrawText(...)
   ELSE
      oSaidas:DrawText(...)
   ENDIF
   SKIP
ENDDO

Exemplos tudo-em-um

MensagemEnviado: 11 Set 2015 19:32
por ROBERTO SÁVIO
Fenomenal, sua explicação José;
Quando e se precisar do oPage, já sei como faço.
Aos poucos vamos aprendendo mais e mais.
Mas se tiver alguma dúvida ainda, consultaremos aos universitários do forum.
Até não precisarmos mais, a não ser por algo inédito.
Obrigado a todos, por enquanto.
Roberto Sávio

Exemplos tudo-em-um

MensagemEnviado: 14 Out 2015 15:59
por ROBERTO SÁVIO
José Quintas
Saudações
Ao tentar compilar e executar o ALLINONE.ZIP apareceu a mensagem abaixo.
Harbour 3.2.0dev (r1405061532)
Copyright (c) 1999-2014, http://harbour-project.org/
c:/hmg.3.3.0/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot open output file test.exe: Permission denied
collect2: ld returned 1 exit status
hbmk2[test]: Erro: Executando linkeditor. 1
gcc.exe C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/test.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/about.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/calculator.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/calendar.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/frm1.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/menu.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/modalwindow.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/pdf.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/progressbar.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/sped.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/ze_errorsys.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/ze_frmcadclass.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/ze_frmclass.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/ze_functions.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/ze_pdfclass.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/ze_sefaz.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/ze_xmlfun.o C:/Users/ROBERTO/AppData/Local/Temp/hbmk_e6974n.dir/hbmk_1ran6i.o C:/Users/ROBERTO/Downloads/test/_temp.o -Wl,--nxcompat -Wl,--dynamicbase -mwindows -Wl,--start-group -lhmg -lcrypt -ledit -leditex -lgraph -lini -lreport -lhfcl -lmsvfw32 -lvfw32 -lhbct -lhbwin -lhbmzip -lminizip -lhbmemio -lhbmisc -lhbmysql -lmysql -lhbtip -lsqlite3 -lhbsqlit3 -lsddodbc -lrddsql -lsddmy -lhbodbc -lodbc32 -lhbhpdf -lhbfimage -lhbpgsql -lhbnetio -lxhb -lpng -llibhpdf -lhbvpdf -lhbzebra -lhbextern -lhbdebug -lhbvmmt -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainwin -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib -Wl,--end-group -otest.exe -LC:/hmg.3.3.0/harbour/lib/win/mingw -LC:/hmg.3.3.0/lib

Tem ideia de como resolver?
Roberto Sávio
HMG 3.3.0

Exemplos tudo-em-um

MensagemEnviado: 14 Out 2015 19:55
por JoséQuintas
Sim.
O test.exe usa multithread, tarefas rodando simultaneamente.
Pra tudo dar certo, o programa principal aguarda uns poucos segundos antes de fechar.

Das duas uma:

Ou tentou compilar muito rápido, antes dele fechar.
Neste caso só aguardar alguns segundos mais.

Ou deu erro no meio do caminho, e o módulo prinicpal não detectou que era pra ser fechado.
Neste caso, fechar pelo gerenciador de tarefas e verificar o que pode ser causado isso - alguma alteração.
Em todo caso, vou verificar como deixei o controle disso nesse allinone.

Exemplos tudo-em-um

MensagemEnviado: 14 Out 2015 20:10
por JoséQuintas
Ok, tá correto nele.

Este bloco é parte do programa principal:

   RunThread( { || MainMenu( .F. ) } )
   DO WHILE RunThread()
      HB_IdleSleep(1)
   ENDDO


A função RunThread() serve pra duas coisas:

a) Acrescenta o número da nova thread ao array
b) Testa se todas as threads do array estão "rodando".

Nesse bloco do programa principal, o loop continua até que nenhum módulo esteja rodando, testando a cada 1 segundo.
Se o módulo principal fechar, encerra tudo, por isso ele roda como um "zumbi", sem tela, aguardando que os outros se encerrem.

Como ele roda igual zumbi, sem tela, em caso de erro não previsto ele continua rodando, e só dá pra fechar no gerenciador de tarefas.

Uso assim há mais de um ano, e não lembro de nenhuma vez precisar do gerenciador de tarefas.
Exceto no começo, enquanto ainda estava começando a fazer os testes.

Exemplos tudo-em-um

MensagemEnviado: 15 Out 2015 10:57
por lugab
Pessoal, bom dia....

Quintas, ta Bacana esse tópico, parabéns..

Eu gostaria de incluir alguns programinhas modo console ( compilado em Harbour 3.0 ) dentro desse TEST.PRG do Quintas, então,

precisarei reconfigurar algo no HB34 e no Mingw32 ou complio direto com HBMK2 TEST sem nehuma mudança ??

Exemplos tudo-em-um

MensagemEnviado: 15 Out 2015 12:12
por JoséQuintas
O único detalhe a considerar é o seguinte:

Todo módulo independente que for aberto, precisa ser aberto usando RunThread().

Lembre-se que a GT precisa funcionar em multithread, não serve pra qualquer GT.
GTWVG SIM
GTWVW NÃO.

Se não funcionar em multithread, chega a causar GPF.
É algo como abrir uma tela pra digitação, mas a digitação estar presa na tela anterior.
Ou abrir uma tela, mas a atualização de tela só funcionar na primeira tela, e não conseguir atualizar a segunda.

Na GTWVW, por exemplo, TUDO passa por um único programa de uma única thread.
Não adianta abrir janelas em multithread, porque a GTWVW só consegue trabalhar na primeira thread.

Já na GTWVG, ela respeita isso, e funciona perfeitamente.
Cada thread é responsável pela sua própria tela.

Exemplos tudo-em-um

MensagemEnviado: 15 Out 2015 15:41
por ROBERTO SÁVIO
José Quintas
Entendido.
Vou voltar à prancheta.
Obrigado
Roberto Sávio

Exemplos tudo-em-um

MensagemEnviado: 01 Dez 2015 10:24
por Eroni
Bom dia pessoal,

Estou desenvolvendo a integração da NFSe em xharbour, está praticamente tudo pronto, porém, o provedor que estou desenvolvendo exige duas assinaturas no xml, uma para o rps e outra para o lote, e é ai que não estou conseguindo, pois só consigo assinar o xml uma vez.

Até consigo preparar o xml certinho e assinar, mas o bloco da segunda assinatura fica vazio, acredito que o problema seja neste trecho de código aqui:

DSIGNS = "xmlns:ds='http://www.w3.org/2000/09/xmldsig#'"
oDOMDoc:setProperty( 'SelectionNamespaces', DSIGNS )
xmldsig:signature := oDOMDoc:selectSingleNode('.//ds:Signature')

Imagino que quando vai passar pela segunda assinatura, o nó localizado sempre fica no primeiro.

Alguém já passou por esta situação ?

Abraço a todos.

Obrigado

Eroni

Exemplos tudo-em-um

MensagemEnviado: 01 Dez 2015 16:50
por JoséQuintas
Apesar que o tudo em um tem algo de nota eletrônica, seria melhor ter feito em um post próprio.

Segunda assinatura?

Levando em conta o lote de NFE, não de NFSE, não sei se é igual:

No lote de NFE, há várias notas fiscais.
A assinatura é em cada nota fiscal, e não no lote.'
No caso da NFE é necessário separar cada bloco de cada nota, assinar cada um, e depois juntar todos novamente.

<lote>

<nota1 id=1111> ......
<assinatura>assinatura da id=1111</assinatura>
</nota1>

</nota2 id=2222> ...
<assinatura>assinatura da id=2222</assinatura>
</nota2>

</lote>


Não seria igual?

Nota: Caso tente assinar o arquivo com tudo junto, vai sempre pegar a primeira. (primeira id=)

Exemplos tudo-em-um

MensagemEnviado: 02 Dez 2015 07:59
por Eroni
Bom dia JoseQuintas, obrigado pelo retorno, o caso é que se exige uma assinatura para o rps e outra para o lote mesmo. Quanto a sua idéia de fazer separado e juntar tudo, não tinha pensado nisso, vou tentar implementar para ver se consigo.
Abraço.

Exemplos tudo-em-um

MensagemEnviado: 02 Dez 2015 09:05
por JoséQuintas
Então precisa ajustar sua rotina de assinatura.

No momento da assinatura a rotina usa o bloco de ID, e a assinatura é inclusa no bloco <signature>.

Veja se sua rotina de assinatura está usando os parâmetros corretos pra cada caso.

Exemplos tudo-em-um

MensagemEnviado: 03 Dez 2015 09:23
por Eroni
José Quintas, segui sua ideia e consegui fazer as duas assinaturas, obrigado.

Exemplos tudo-em-um

MensagemEnviado: 23 Dez 2015 12:40
por microvolution
prezado Jquintas, boa tarde!
Como havia dito noutro tópico, hão havia ainda testado o AllInOne. Tirei hoje para fazê-lo.

Acontece, que no momento da compilação em qualquer das opções TEST.PRG ou TETNOWVG.PRG apresentou a seguinte mensagem de erro no momento da compilação:
Compiling 'ze_xmlfun.prg'...
Lines 185, Functions/Procedures 8
Generating C source output to 'C:\Users\wal\AppData\Local\Temp\hbmk_830z24.dir\ze_xmlfun.c'... Done.
c:/mvinfo/hb34/lib/win/mingw/liblibhpdf.a(hpdfecyd.o):hpdfecyd.c:(.text+0xc4): undefined reference to `__time32'
c:/mvinfo/hb34/lib/win/mingw/liblibhpdf.a(hpdfimac.o):hpdfimac.c:(.text+0x463): undefined reference to `__wassert'
c:/mvinfo/hb34/lib/win/mingw/liblibhpdf.a(hpdfimac.o):hpdfimac.c:(.text+0xbb0): undefined reference to `__wassert'
collect2.exe: error: ld returned 1 exit status
hbmk2 [test]: Erro: Executando linkeditor. 1
gcc.exe C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/test.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/about.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/calendar.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/calculator.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/frm1.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/menu.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/modalwindow.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/pdf.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/progressbar.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/sped.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/ze_frmclass.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/ze_frmcadclass.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/ze_functions.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/ze_pdfclass.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/ze_errorsys.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/ze_sefaz.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/ze_xmlfun.o C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/hbmk_3dyots.o  C:/Users/wal/AppData/Local/Temp/hbmk_830z24.dir/test.reso  -m32 -Wl,--no-demangle -Wl,--nxcompat -Wl,--dynamicbase -mwindows -Wl,--start-group -lgtwvg -lhbhpdf -llibhpdf -lpng -lhbct -lhbwin -lhbextern -lhbdebug -lhbvmmt -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtstd -lgtpca -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainwin -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib   -Wl,--end-group -s -otest.exe  -Lc:/mvinfo/hb34/lib/win/mingw -Lc:/mvinfo/hb34/lib/3rd/win/mingw

O que vem a ser esses 3 erros referências indefinidas?
undefined reference to `__time32'
undefined reference to `__wassert'
undefined reference to `__wassert'

Vlw!

Exemplos tudo-em-um

MensagemEnviado: 23 Dez 2015 12:48
por microvolution
microvolution escreveu:O que vem a ser esses 3 erros referências indefinidas?
undefined reference to `__time32'
undefined reference to `__wassert'
undefined reference to `__wassert'
Vlw!

PS: estou usando o harbour 3.4.0. ok?

Exemplos tudo-em-um

MensagemEnviado: 23 Dez 2015 22:44
por JoséQuintas
Muito esquisito.
Nesse caso a parte importante do erro é esta, aonde aconteceu:

c:/mvinfo/hb34/lib/win/mingw/liblibhpdf.a(hpdfecyd.o):hpdfecyd.c:(.text+0xc4): undefined reference to `__time32' 
c:/mvinfo/hb34/lib/win/mingw/liblibhpdf.a(hpdfimac.o):hpdfimac.c:(.text+0x463): undefined reference to `__wassert'
c:/mvinfo/hb34/lib/win/mingw/liblibhpdf.a(hpdfimac.o):hpdfimac.c:(.text+0xbb0): undefined reference to `__wassert'


Justamente aí está a coisa esquisita: Está dando falta de funções dentro da LIB harupdf (libhpdf.a).
Também estou usando Harbour 3.4

Será que não está misturando LIBs de versões de Harbour diferentes? (ou até do xHarbour)
Difícil mas não impossível: será que baixou justo uma versão intermediária que teve correções depois?

Nota:
Tudo que está sendo usado faz parte do Harbour, inclusive a harupdf, sem precisar instalar nada adicional.

Dá uma revisada nas variáveis de ambiente, pra confirmar se tem alguma coisa a mais no PATH por exemplo.

Exemplos tudo-em-um

MensagemEnviado: 24 Dez 2015 09:33
por microvolution
veja aí meu path, por favor professor!
15-1224 - allinone - path variáveis.png

PS: win 10 64 bits!

vlw!

Exemplos tudo-em-um

MensagemEnviado: 24 Dez 2015 11:17
por JoséQuintas
É... usando pela HMG.

Lembro de que no fórum houve comentário de como acrescentar essas funções na HMG.
Mas não encontrei o post.

Ao usar HMG, ela ajusta a compilação pra necessidade dela, e algumas LIBs dela.
Nesse caso, quem utiliza HMG é que poderia dizer o que fazer.

Fora da HMG é só digitar HBMK2 test.hbp

Exemplos tudo-em-um

MensagemEnviado: 30 Dez 2015 09:27
por microvolution
JoséQuintas escreveu:Ao usar HMG, ela ajusta a compilação pra necessidade dela, e algumas LIBs dela.
prezado professor, apesar de estar ali o path, mas, foi vc mesmo quem me ensinou a compilar no braço usando: .bat, .hbp, .hbc, .rc, .manifest, etc...
não estou usando mais a HMG para compilar, pois estava difícil entender mas com sua ajuda a mente "clareou" e a coisa ficou mais fácil.

Exemplos tudo-em-um

MensagemEnviado: 30 Dez 2015 12:41
por JoséQuintas
apesar de estar ali o path


Esse pode ser um problema.
O sistema operacional sai buscando tudo pelo PATH.
Vai depender do que o sistema operacional encontrar primeiro.

Não tem a ver somente com abrir a IDE, tem a ver com estar no PATH.

E esteja certo que um atrapalha o outro. Pode resolver do Harbour 3.4, e não funcionar mais pela HMG, ou vice versa.

Se preferir, na dúvida, faça um teste:
Lógico, não é o nome que vou colocar aqui, é o nome conforme instalou na sua máquina.

SET PATH=c:\harbour\bin


Isso vai buscar automático da pasta c:\harbour\bin
Teste compilar, talvez reclame de faltar o compilador C

Se reclamar do compilador C, acrescente no path.

SET PATH=c:\harbour\bin;c:\harbour\comp\mingw32\bin


Isso vai buscar automático em qualquer das duas pastas em c:\harbour\bin e depois em c:\harbour\comp\mingw32\bin

Também interessante, verificar como está a configuração atual

SET PATH


Isso vai mostrar todas as pastas configuradas pra busca automática.
Confirme na lista se as pastas do Harbour 3.4 e compilador C vém antes das pastas da HMG, por exemplo.

Aprenda esta parte básica. Ela vai te ajudar a resolver o problema em qualquer computador, pra qualquer compilador.
Pra chamar automático tem que estar em PATH, e pra chamar a versão correta, é a versão correta que tem que vir em primeiro lugar.

Exemplos tudo-em-um

MensagemEnviado: 15 Fev 2016 23:45
por microvolution
..opa boa noite!
hoje é que fui pegar isso pra tentar novamente...
fiz o que o prezado professor sugeriu:
SET PATH=c:\mvinfo\hb34\bin;c:\mvinfo\hb34\mingW\bin

Infelizmente, continuam os mesmos 3 erros...
vlw!

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 06:09
por JoséQuintas
Digite aí na sua máquina e poste o resultado, pode ser uma de cada vez:

set path
set hb
dir c:\libhbhpdf.a /s
harbour -build

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 09:01
por microvolution
bom dia a todos!
JoséQuintas escreveu:set path

Microsoft Windows [versão 10.0.10586]
(c) 2015 Microsoft Corporation. Todos os direitos reservados.
C:\WINDOWS\system32>set path
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;c:\mvinfo\hb34\bin;C:\MVinfo\hb34\MinGW\bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
C:\WINDOWS\system32>

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 09:02
por microvolution
JoséQuintas escreveu:set hb

C:\WINDOWS\system32>set hb
Variável de ambiente hb não definida

C:\WINDOWS\system32>set hb34
Variável de ambiente hb34 não definida

C:\WINDOWS\system32>

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 09:38
por JoséQuintas
Tudo bem quanto ao último conjunto de variáveis, seriam variáveis começando com hb, mas se erradas poderiam causar problema.
A configuração está ok, é só isso mesmo.

Esse Harbour 3.4, veio de onde? é o oficial ou é um que veio com a minigui?

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 09:42
por microvolution
[b]Pesquisar em todas as pastas/subpastas da unidade c:\ :[/b]
JoséQuintas escreveu:dir c:\libhbhpdf.a /s

C:\WINDOWS\system32>dir c:\libhbhpdf.a /s
O volume na unidade C é W10
O Número de Série do Volume é 049F-B963

Pasta de c:\MVinfo\hb32\lib\win\mingw

28/02/2015  01:02           120.030 libhbhpdf.a
               1 arquivo(s)        120.030 bytes

Pasta de c:\MVinfo\hb34\contrib\hbhpdf

15/02/2016  12:50           122.000 libhbhpdf.a
               1 arquivo(s)        122.000 bytes

Pasta de c:\MVinfo\hb34\lib\win\mingw

17/12/2015  10:51           109.796 libhbhpdf.a
               1 arquivo(s)        109.796 bytes

Pasta de c:\MVinfo\hb34\lib\win\mingw64

17/12/2015  10:51           129.222 libhbhpdf.a
               1 arquivo(s)        129.222 bytes

Pasta de c:\MVinfo\hmg.3.0.35\HARBOUR\lib

22/12/2009  21:28            50.512 libhbhpdf.a
               1 arquivo(s)         50.512 bytes

Pasta de c:\MVinfo\hmg.3.0.35\HARBOUR32\lib\win\mingw

06/11/2012  07:17           114.022 libhbhpdf.a
               1 arquivo(s)        114.022 bytes

Pasta de c:\MVinfo\hmg.3.0.35-orig\HARBOUR\lib

22/12/2009  21:28            50.512 libhbhpdf.a
               1 arquivo(s)         50.512 bytes

Pasta de c:\MVinfo\hmg.3.0.46\HARBOUR\lib\win\mingw

06/11/2012  07:17           114.022 libhbhpdf.a
               1 arquivo(s)        114.022 bytes

Pasta de c:\MVinfo\hmg.3.0.46\hmg.3.0.35\HARBOUR\lib

22/12/2009  21:28            50.512 libhbhpdf.a
               1 arquivo(s)         50.512 bytes

Pasta de c:\MVinfo\hmg.3.0.46\hmg.3.0.46\HARBOUR\lib\win\mingw

06/11/2012  07:17           114.022 libhbhpdf.a
               1 arquivo(s)        114.022 bytes

Pasta de c:\MVinfo\hmg.3.0.46\hmg.3.4.0\HARBOUR\lib\win\mingw

14/01/2015  09:30           120.126 libhbhpdf.a
               1 arquivo(s)        120.126 bytes

Pasta de c:\MVinfo\hmg.3.4.0\HARBOUR\lib\win\mingw

14/01/2015  09:30           120.126 libhbhpdf.a
               1 arquivo(s)        120.126 bytes

Pasta de c:\MVinfo\Inno Setup 5\siccainst\_conversão para xHarbour\aplicativos para conversão\HMG\oohg_full_harbour_mingw_20121018\oohg\harbour\lib

17/07/2011  15:55           100.262 libhbhpdf.a
               1 arquivo(s)        100.262 bytes

Pasta de c:\MVinfo\OOHG\harbour\lib

17/07/2011  15:55           100.262 libhbhpdf.a
               1 arquivo(s)        100.262 bytes

Pasta de c:\MVinfo\OOHG\hb32\lib\win\mingw

13/03/2015  01:03           120.030 libhbhpdf.a
               1 arquivo(s)        120.030 bytes

Pasta de c:\RECYCLER\S-1-5-21-2025429265-1604221776-1801674531-1003\Dg12\aplicativos para conversão\HMG\oohg_full_harbour_mingw_20121018\oohg\harbour\lib

17/07/2011  15:55           100.262 libhbhpdf.a
               1 arquivo(s)        100.262 bytes

Pasta de c:\VTRoot\HarddiskVolume5\hb34\lib\win\mingw

17/12/2015  10:51           109.796 libhbhpdf.a
               1 arquivo(s)        109.796 bytes

Pasta de c:\VTRoot\HarddiskVolume5\hb34\lib\win\mingw64

17/12/2015  10:51           129.222 libhbhpdf.a
               1 arquivo(s)        129.222 bytes

Pasta de c:\VTRoot\HarddiskVolume5\MVinfo\hb34\lib\win\mingw

17/12/2015  10:51           109.796 libhbhpdf.a
               1 arquivo(s)        109.796 bytes

Pasta de c:\VTRoot\HarddiskVolume5\MVinfo\hb34\lib\win\mingw64

17/12/2015  10:51           129.222 libhbhpdf.a
               1 arquivo(s)        129.222 bytes

     Total de Arquivos na Lista:
              20 arquivo(s)      2.113.754 bytes
               0 pasta(s)   66.261.569.536 bytes disponíveis

C:\WINDOWS\system32>

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 09:44
por microvolution
finally... :))
JoséQuintas escreveu:harbour -build

C:\WINDOWS\system32>harbour -build
Harbour 3.4.0dev (ff74948) (2015-12-17 12:51)
Copyright (c) 1999-2016, https://github.com/vszakats/harbour-core/

Harbour Build Info
---------------------------
Version: Harbour 3.4.0dev (ff74948) (2015-12-17 12:51)
Compiler: MinGW GNU C 5.2 (32-bit)
Platform: Windows 10 10.0
PCode version: 0.3
Commit info: 2015-12-17 13:51:58 +0100
Commit ID: ff74948
Build options:
---------------------------

C:\WINDOWS\system32>


tá aí todas as solicitações que o nobre professor solicitou para ajudar a desvendar o "pó"brema 8-|

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 10:02
por asimoes
Amiguinho, você pode informar o arquivo hbhpdf.hbc que contém o caminho da lib no seu hbp

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 10:09
por JoséQuintas
Sinceramente....
Apague todos os Harbour da máquina, e comece do zero.
Deveria ter uma única lib.

E não invente de criar instalador pra ele.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 10:12
por microvolution
o local onde ele (hbhpdf.hbc) se encontra é:
c:\mvinfo\hb34\contrib\hbhpdf
o seu conteúdo é:
description=libharu wrapper (PDF)

incpaths=.

headers=harupdf.ch

libs=${_HB_DYNPREF}${hb_name}${_HB_DYNSUFF}
libs=3rd/libhpdf/libhpdf.hbc

???!!!

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 10:30
por microvolution
JoséQuintas escreveu:Apague todos os Harbour da máquina, e comece do zero.

como assim?
o prezado professor há de concordar comigo, que se tiver várias pastas, arquivos, programas instalados, cada um funciona como está programado ou setado. No caso do harbour, pelo pouco que sei e o pouco conhecimento que tenho de MSDOS e de variáveis de ambiente, o meu sistema (no caso deste windows 10 64) está buscando nas pastas/diretórios corretos. Concorda(m)?
Outra coisa, aqui nesta máquina, tenho 2 versões de windows: xp 32 bits e o win 10 64 bits... então as únicas versões do harbour que tenho neste caso aqui instalado (win 10) é o harbour 3.4.0.
Agora, quando comecei a migrar em janeiro/2015 foi no win xp e testei todas as versões da HMG (3.0.35, 3.0.46, 3.4.x etc), além de MiniGuiExtend, e dentre outras...
JoséQuintas escreveu:Deveria ter uma única lib.

Então aqui nesta máquina, o HD é comum aos 2 windows, bem como na máquina de qualquer um com dual-boot.
E não acredito que interfira nos resultados...
JoséQuintas escreveu:E não invente de criar instalador pra ele.

agora, se, pouco entendo de harbour, muito menos de "inventar instalador", nem sei como faz...
JoséQuintas escreveu:Esse Harbour 3.4, veio de onde? é o oficial ou é um que veio com a minigui?

2 respostas:
1 - no caso deste windows 10/64 só tem instalado o 3.4.0 e mais nada, e, baixei o harbour aqui das sugestões do fórum e do próprio Viktor... aliás, tive um problema com a instalação do(a) MingW que o próprio Viktor me ajudou - não lembro mais.
2 - no caso do windows xp/32 tem harbour de tudo quanto é tipo, pois há de convir comigo que na tentativa desesperada de migrar durante 6 a 9 anos, muita coisa foi instalada útil e também inútil...
Agora, estou disposto a "apagar tudo"... me passa por favor os links corretos e o procedimento correto para ré-instalar o harbour 3.4.0 ou superior e o(a) MingW mais atual... caso a re-instalação não funcione, desinstalarei com a ajuda do MVREVO UNINSTALLER e instalarei novamente...
agora, acho que o problema está nessa única lib, pois tudo está funcionando perfeitamente (acho até agora), pois isso de hpdf, já havia postado esse problema já "uns" meses atrás.

NOTA à parte:
Mudando, de assunto, estou com um problema de vírus (nesta máquina não aparece o tal vírus - KASPERSKY) mas, num cliente está sendo informado pelo AVAST.
O nome do vírus é: "TR/CRYPT.XPACK.GEN2" Devo abrir novo tópico com qual título?
estou desde ontem escaneando e só apareceu um único arquivo infectado com outro vírus (not-a-virus:HEUR:AdWare.Win32.Agent.heur)

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 10:34
por JoséQuintas
Ok, tudo bem, as variáveis setam o programa.
Mas tem certeza de que esse Harbour 3.4 está intacto, sem mistura de outros?

E se a máquina tem dual boot, o mesmo Harbour pode funcionar nos dois Windows, não precisa instalação separada.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 10:47
por JoséQuintas
Sobre criar instalação:

InnoSetup é um programa pra criar instalações.
Se você tem uma pasta chamada InnoSetup e dentro dela tem um Harbour, a primeira conclusão é de que está criando uma instalação para o Harbour.

Se não é isso, acaba sendo um motivo pra imaginar que os arquivos do Harbour 3.4 podem não ser os corretos.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 11:00
por JoséQuintas
Instalar o Harbour 3.4 está mais fácil do que nunca.

Baixe o Harbour
https://github.com/vszakats/harbour-core/releases/download/v3.4.0dev/harbour-daily-win.7z.exe


Execute e escolha a pasta pra onde ele vai.
Entre na pasta dele BIN, exemplo: harbour\bin, e digite GETMINGW

Pronto, só configurar o path pra harbour\bin;harbour\comp\mingw32\bin

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 11:02
por asimoes
Amiguinho,

Siga as instruções do Quintas, o seu "ambiente" está contaminado!
Zere todas as instalações do harbour e veja se há alguma configuração em variáveis de ambiente de usuário/sistema remova o que estiver no path referente ao harbour.

Feito isto nos informe.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 11:08
por JoséQuintas
Segundo consta no site, essa versão é atualizada a cada alteração.
Não sei o que acontece quando essa versão é atualizada.

Supondo que está baixando o arquivo... e no meio do download ele seja trocado.
Apenas imagino que no download continue sendo o mesmo arquivo, mas sinceramente não sei.

Lembrei agora:
Aqui já tive problemas com download do Harbour tempos atrás.
Imagino que tenha sido o programa de segurança do banco, mas não sei.
Talvez esteja com um problema parecido.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 11:10
por microvolution
JoséQuintas escreveu:E se a máquina tem dual boot, o mesmo Harbour pode funcionar nos dois Windows, não precisa instalação separada.
ah! bem lembrado!
esqueci de mencionar... no boot win xp/32, não instalei o harbour 3.4.0.
JoséQuintas escreveu:InnoSetup é um programa pra criar instalações.

ah sim... o nobre professor está certo... não entendo de "criar instaladores", mas, com esse InnoSetup/IsTool, aprendi a criar instalador para meu aplicativo clipper que agora está em harbour (antes eu usava um montão de .bat, etc...). Graças a Deus que isso é coisa do passado.
E também, em Delphi XE3, faço o Ativador, com vários meios de amarrar um a possível pirataria - aliás quem vai piratiar um aplicativo como o meu ?
JoséQuintas escreveu:Entre na pasta dele BIN, exemplo: harbour\bin, e digite GETMINGW

Ah! sim! muito bem lembrado amigo JQuintas:
Foi desse mesmo link que baixei o harbour 3.4.0, e tive uma enorme dificuldade com esta GETMINGW... o troço que me mordeu viu...
asimoes escreveu:Siga as instruções do Quintas, o seu "ambiente" está contaminado!

Como já disse, concordo, mas, em parte...
Agora, penso, que pode haver um meio de instalar ou recompilar somente essa HBHPDF, estou correto?

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 11:30
por asimoes
Amiguinho,

O path para o harbour tem que ser um só, se não o hbmk2 não acha as pastas para compilar o seu programa, por isso que eu disse para ver as variáveis de ambiente de usuário/sistema, o ideal é informar o path do harbour em uma bat de compialação assim você terá certeza que estará usando a versão correta.

exemplo:

@echo off
@echo Compilando o programa...
set path=\hb32fork\bin
@echo %date% %time% >> compprod.log
hbmk2 asamingwforkprod.hbp -dVERSAO_PRODUCAO -dharbourfork -jobs=1 -workdir=.\OBJMINGWPROFORK\ -rebuild > COMPLOG.TXT 2>&1
@echo %date% %time% >> compprod.log

IF NOT %ERRORLEVEL% == 0 GOTO ERRO ELSE GOTO FIM

:FIM
@echo Programa compilado.
rem @pause
copy asaprev.exe upload\
asaprev
GOTO END

:ERRO
start %windir%\System32\Notepad COMPLOG.TXT
GOTO END

:END

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 12:27
por JoséQuintas
Esquecemos de uma coisa importante:
A mistura pode ser na compilação incremental.
É uma possibilidade: a mistura ser nos arquivos do projeto.

tente isto, pra forçar recompilar completo:

hbmk2 test -rebuild

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 12:29
por JoséQuintas
Sobre recompilar somente hbhpdf:
Se algum arquivo tem problema, é possível que não seja apenas em um.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 12:42
por JoséQuintas
Só como segunda opção, tá atualizado até ontem.
Pronto pra uso, mas tem uns 240mb

http://www.jpatecnologia.com.br/arquivos/harbour.zip

Harbour 3.4.0dev (d1a7d6a) (2016-02-14 23:09)
Copyright (c) 1999-2016, https://github.com/vszakats/harbour-core/

Harbour Build Info
---------------------------
Version: Harbour 3.4.0dev (d1a7d6a) (2016-02-14 23:09)
Compiler: Microsoft Visual C++ 16.0.40219 (32-bit)
Platform: Windows 7 6.1 SP1
PCode version: 0.3
Commit info: 2016-02-14 21:09:19 -0200
Commit ID: d1a7d6a
Build options: (C++ mode)
---------------------------


- Harbour 3.4
- Compilador mingw 5.02
- Compilador msvc 2010

Use normal, igual oficial, vai usar mingw.

Depois de resolver a questão da compilação, podemos entrar na parte do msvc.
Com toda certeza, começou a usar msvc não vai querer mais mingw.

É só o Harbour, sem nada adicional a não ser os compiladores C.
Exatamente o resultado de baixar os fontes do Harbour e compilar.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 13:12
por microvolution
JoséQuintas escreveu:hbmk2 test -rebuild
ah! sim! boa opção... só que o seguinte aconteceu:
1 - as 3 mensagens de erro continuam; e
2 - acrescentou outros erros referentes à lib GTWVW que não existiam (aí voltei a compilar sem o -rebuild mas nada). vejam:
As 3 linhas (respectivamente 2817, 2023 e 635) do código contém:
2817   AEval( s_amouseobjlist[ nWinNum + 1 ], {| o | o[ 2 ]:draw( nWinNum ) } )
2023   wvwm_paint( nWinNum )
635     CLS

As linhas acima, estou compilando (nunca deu esse problema) usando os seguintes:
.bat:
@echo Compilando o projeto...

hbmk2 EXVD-v30.hbp -rebuild  > exvd-v30LOG.TXT 2>&1
@rem hbmk2 EXVD-v30.hbp > exvd-v30LOG.TXT 2>&1

@echo Projeto compilado

.hbp:
#-ldflag=-Wl,--allow-multiple-definition
exvd-v30.prg
exvd-v30.rc
#EXVDErrorSys.prg

gtwvw.hbc
#gtwvg.hbc
#hbtest.hbc
#-lxhb
#+-------------------------+
#+ LIBs para impressão PDF +
#hbhpdf.hbc
#-lhbhpdf
#libharu.hbc
#png.hbc
#hbzebra.hbc
#+ LIBs para impressão PDF +
#+-------------------------+

-strip
-compr
#-w3
#-es2
-quiet

os .ch:
#require "gtwvw" // aciona a lib gráfica
#include "error.ch"
#INCLUDE "COMMON.CH"
#include "inkey.ch"
#include "setcurs.ch"
#include "hbgtinfo.ch"
#include "hbver.ch"

Que coisa não?
No lugar de resolver um "pó" gera uma "pedreira" inteira?! :% rsrsrs

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 14:08
por JoséQuintas
E quem disse que era pra usar isso nos outros programas?

Caso não saiba, compilação incremental significa compilar apenas fontes modificados.
Ao usar -rebuild, TUDO é compilado novamente.

Vamos ao erro:
Se deu erro na linha, é porque tem erro.

Se vai postar, poste qual foi o erro, e o que a linha contém.
Isso já foi falado várias vezes.
Ninguém aqui tem bola de cristal.

Em todo caso, provavelmente tem a ver com tolerância zero.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 19:29
por JoséQuintas
Vamos ao básico: como ver um erro no Harbour/Clipper e como resolver e/ou pedir ajuda.

Data too long for column 'DESCRICAO' at row 1

Called from CAIXAGRAVAHLCAIXA(678)
Called from CAIXA_PAGAMENTORETIRADACC(762)
Called from PCXACAIXA(88)
Called from DO(0)
Called from BOXMENU(498)
Called from MAINMENU(348)
Called from MAIN(96)


É importante a mensagem pra saber qual erro foi.
A indicação de cada módulo e cada linha, indica qual o fluxo do programa quando o erro ocorreu.
É olhar o primeiro fonte da lista CAIXAGRAVAHLCAIXA linha 678, e conferir.
Se aí está tudo certo, é olhar no fonte anterior CAIXA_PAGAMENTORETIRADACC linha 762.
E por aí vai.
No caso acima, nem precisa de fonte pra saber qual o erro, e na prática a mensagem de erro nem é do Harbour, e sim do MySQL.

Na compilação, mesma coisa.

Compiling 'test.prg'...
test.prg(7) Warning W0001 Ambiguous reference 'NI'
test.prg(8) Warning W0001 Ambiguous reference 'F1'
test.prg(9) Warning W0001 Ambiguous reference 'NI'
test.prg(9) Warning W0001 Ambiguous reference 'NI'
test.prg(10) Warning W0001 Ambiguous reference 'F1'
test.prg(11) Warning W0001 Ambiguous reference 'F1'


Basta postar assim, e neste caso, como os erros são iguais, somente a linha 7 de test.prg poderia bastar.

Não adianta postar .CH, .HBP, .PRG...
Deve postar o texto do erro, e procurar limitar a postagem a parte do fonte relacionada ao erro.
No caso acima, por exemplo, nem de fonte precisa pra saber qual o motivo do erro, basta a mensagem.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 21:16
por asimoes
Amiguinho não entendi esse seu hbp porque você colocou # na frente dos hbc ? o simbolo # é para comentar a linha ou você não vai usar estas libs?

#hbhpdf.hbc
#hbzebra.hbc

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 21:19
por asimoes
Quintas,

É melhor postar um exemplo de hbp para o nosso amiguinho colocar os prg´s dele, tá parecendo que a gente tá falando russo, heheh.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 22:26
por microvolution
JoséQuintas escreveu:É importante a mensagem pra saber qual erro foi.
mil perdões professor...
foi a primeira coisa que fiz (prtscreen) foi digitalizar a tela de erro, inclusive criei um arquivo .htm com tudo isso...
mas esqueci de fazer o upload, pois precisava sair para tentar vender meu aplicativo para um cliente que já estamos em negociação desde 11/2015, e, hoje (16/2) foi mais um dia de testes e colher alterações que ele quer no meu atual sistema.
Então, me perdoem, pois não "subi" com a imagem do erro...
O sr. e o asimoes, estão totalmente corretos... desta vez não considero "alfinetadas" como alguns andam fazendo comigo e provavelmente com outros "leigos no harbour"... os srs. estão totalmente certos...
bom, vejam as imagens:
16-0216 - runtime error diferente.png

A mesma informação no arquivo .htm personalizado:
Data:16/02/2016 Horario: 14:03:53
Erro BASE/1004 No exported method: DRAW

Called from DRAW(0)
Called from (b)WVWM_PAINT(2817)
Called from AEVAL(0)
Called from WVWM_PAINT(2817)
Called from WVW_PAINT(2023)
Called from SCROLL(0)
Called from MAIN(635)

Data:16/02/2016 Horario: 14:40:22
Erro BASE/1004 No exported method: DRAW

Called from DRAW(0)
Called from (b)WVWM_PAINT(2817)
Called from AEVAL(0)
Called from WVWM_PAINT(2817)
Called from WVW_PAINT(2023)
Called from SCROLL(0)
Called from MAIN(635)
JoséQuintas escreveu:Ao usar -rebuild, TUDO é compilado novamente.

JoséQuintas escreveu:E quem disse que era pra usar isso nos outros programas?

Não. Não usei noutros programas... é o mesmo que contém o hbhpdf.
asimoes escreveu:Amiguinho não entendi esse seu hbp porque você colocou # na frente dos hbc ? o simbolo # é para comentar a linha ou você não vai usar estas libs?

me perdoe também prezado professor asimoes... V. é um dos que também mais tem contribuído para que este teu servo cresça em harbour e suas libs...
sim, os comentários ( # ) são de propósito, pois são LIBs que testei e que talvez irei usá-las, e, estão comentadas para eu não esquecer de voltar - caso ache necessário, principalmente as relacionadas à PDF. Só para dar continuidade às implementações e alterações no código fonte é que as comentei.
No mais... como disse no início desta postagem, os srs. estão totalmente certos em me dar "um puxão de orelha"!

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 23:05
por JoséQuintas
Microevolution.

Estamos falando de compilação.

Agora vém mostrar erros de execução.

Deixou de ser o tudo-em-um há muito tempo.
Tá no tópico errado, assunto errado, pedindo ajuda errado...

começou no all in one, que é o assunto do tópico.
depois era Harbour
era problema de compilação
depois é outro aplicativo
depois é erro de execução
Agora é GTWVW

Você está de palhaçada.

Isso é erro seu. Inventou uma função da GTWVW que não existe.

Pior ainda... inventou a WVW-M, a GTWVW do microevolution.

WVWM_Paint só pode ser isso.

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 23:15
por microvolution
OK professor...
só pra relembrar...
minha primeira postagem, foi pra falar e 3 erros referentes ao HBHPDF há alguns meses atrás (neste tópico).
Bom, agora nos últimos dias, resolvi implementar o PDF no meu aplicativo de testes... para aprender.
Aí deparei-me com o mesmo problema.
Então, fiz os procedimentos...e o problema continua (exceto reinstalar o harbour).
Então, o nobre professor pediu que fizesse um novo teste (aprendizado) com o -rebuild (que não conhecia).
Aí os 3 erros de PDFs permaneceram e apareceram novos erros que não existiam.
O prezado professor, sugere que eu vá pra qual tópico? abra novo tópico? ou o quê?
Estou aqui, pronto a receber as devidas correções, pois minha vida está em construção... e sou um eterno aprendiz, enquanto aqui viver!
JoséQuintas escreveu:Isso é erro seu. Inventou uma função da GTWVW que não existe.

Então, nesse caso, vamos para a GTWVW e vou postar as dúvidas num tópico relacionado ou criar outro... ok?
Prezado Toledo, favor mudar essas pendências aqui para o tópico relacionado à GTWVW, se puder e não for muito incômodo!
professor, mais uma vez, o Sr. está correto em nos chamar a atenção! lamento muito :'(

Exemplos tudo-em-um

MensagemEnviado: 16 Fev 2016 23:45
por JoséQuintas
E nem percebeu que já mostrei o problema
Se a LIB é GTWVW, não pode existir WVWM

Mas segundo você, antes do -rebuild funcionava, o que não pode ser.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 00:04
por microvolution
Mais uma vez... peço mil desculpas... o Sr. continua certo... estou à quem de chegar a 1 % do seu conhecimento!
JoséQuintas escreveu:Isso é erro seu. Inventou uma função da GTWVW que não existe.

ok...
quem sou eu pra inventar... é cópia idêntica da contrib\gtwvw\tests\DEMO.PRG (hb 3.4.0).
Mas, como (antes do professor editar sua postagem) o Sr. escreveu: "é erro seu, corrija seu problema" (algo assim) o Sr. sabe muito bem...
então, fui fuçar até entender. Aí veio a luz, que antes do -rebuild fiz uma última alteração. Vejam:
//   wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New( "Excluir Orçamentos Antigos (F8)", MaxRow() / 2 + 2 , MaxCol() / 2 - ( len ( "Excluir Orçamentos Antigos (F8)" ) / 2 ), , , {|| pDEL_VENDA() }, 3 ) )
  oMouse := WVWMouseButton():New( "Disabled", MaxRow() - 2, 67 - 11 - 11 - 11 - 11, , , {|| xDebugInfo() } )
   oMouse:Enable( .F. )
   wvwm_AddMouseObjects( nCurWindow, oMouse )

o código estava como acima, então comentei as 3 últimas linhas e descomentei a primeira pra testar. ficando assim:
   wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New( "Excluir Orçamentos Antigos (F8)", MaxRow() / 2 + 2 , MaxCol() / 2 - ( len ( "Excluir Orçamentos Antigos (F8)" ) / 2 ), , , {|| pDEL_VENDA() }, 3 ) )
//   oMouse := WVWMouseButton():New( "Disabled", MaxRow() - 2, 67 - 11 - 11 - 11 - 11, , , {|| xDebugInfo() } )
//   oMouse:Enable( .F. )
  wvwm_AddMouseObjects( nCurWindow, oMouse )

Só que o erro está no esquecimento de comentar a última linha. Aí fiz uma varredura e descobri (não sei usar DEBUG - nunca aprendi) que deveria ter comentado as 3 últimas linhas. As linhas corretas são:
   wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New( "Excluir Orçamentos Antigos (F8)", MaxRow() / 2 + 2 , MaxCol() / 2 - ( len ( "Excluir Orçamentos Antigos (F8)" ) / 2 ), , , {|| pDEL_VENDA() }, 3 ) )
//   oMouse := WVWMouseButton():New( "Disabled", MaxRow() - 2, 67 - 11 - 11 - 11 - 11, , , {|| xDebugInfo() } )
//   oMouse:Enable( .F. )
//   wvwm_AddMouseObjects( nCurWindow, oMouse )

Agora voltou a funcionar... que coisa não?
O erro, não tem "nada a ver" com o local exato dele.
vou dormir, pois meu bebê/filho acordou e minha mulher também e ele está chorando muito... valeu e bom descanso a todos!

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 00:17
por JoséQuintas
Encontrei o seu problema.
Ou melhor, apenas confirmei.

É sua instalação do Harbour.

Os únicos lugares aonde existem essas funções são.... nos COMPILADORES C.

compiladorc.png


O que eu disse em post anterior está correto:
Sua instalação de Harbour está ruim.

Se precisava de comprovante, já tem.
Agora pare de ficar enchendo de versões de Harbour na máquina, e instale uma que funcione.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 00:31
por JoséQuintas
Como complemento:
No compilador C do Harbour 3.2 não existe isso.
Podemos supor que pegou o compilador do Harbour 3.2 pra preencher o que faltava no Harbour 3.4.

Talvez dê pra confirmar pelo gcc.exe, que é o compilador do mingw
Pesquise o que tem na máquina.


d:\harbour32\comp\mingw\bin>dir \gcc.exe /s
O volume na unidade D é TRABALHO
O Número de Série do Volume é 6C40-6731

Pasta de d:\harbour\comp\mingw32\bin

09/09/2015 23:12 1.727.488 gcc.exe
1 arquivo(s) 1.727.488 bytes

Pasta de d:\harbour32\comp\mingw\bin

18/09/2011 16:33 307.200 gcc.exe
1 arquivo(s) 307.200 bytes

Total de Arquivos na Lista:
2 arquivo(s) 2.034.688 bytes
0 pasta(s) 193.629.806.592 bytes disponíveis

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 06:33
por microvolution
Olá bom dia a todos!
O resultado da pesquisa que o professor JQuintas pediu, não reflete a realidade. Eu explico - como dantes já havia feito:
Existem 2 windows na minha máquina: W10/64 e XP/32.
* No XP, existem um montão de harbour e libs instaladas, pois foi por onde comecei.
* No W10, só existe uma instalação do harbour 3.4.0 que peguei no link (lá do Viktor) já até postado aqui.
A única coisa que é comum aos 2 windows, é o local onde escolhi para instalar o harbour.
No W10 a unidade chama-se C:.
Enquanto que a mesma unidade de disco no XP é G:
Então, o resultado abaixo, do DIR \GCC.EXE reflete a este raciocínio. Então, por favor, cuidado ao interpretar os dados:
Microsoft Windows [versão 10.0.10586]
(c) 2015 Microsoft Corporation. Todos os direitos reservados.

C:\Users\wal>cd\mvinfo\hb34\mingw

C:\MVinfo\hb34\MinGW>cd bin

C:\MVinfo\hb34\MinGW\bin>dir \gcc.exe /s
O volume na unidade C é W10
O Número de Série do Volume é 049F-B963

Pasta de C:\MVinfo\hb32\comp\mingw\bin

18/09/2011 16:33 307.200 gcc.exe
1 arquivo(s) 307.200 bytes

Pasta de C:\MVinfo\hb34\MinGW\bin

18/12/2015 15:05 1.819.150 gcc.exe
1 arquivo(s) 1.819.150 bytes

Pasta de C:\MVinfo\hmg.3.0.35\MINGW\bin

05/07/2001 14:11 225.280 gcc.exe
1 arquivo(s) 225.280 bytes

Pasta de C:\MVinfo\hmg.3.0.35-orig\MINGW\bin

05/07/2001 14:11 225.280 gcc.exe
1 arquivo(s) 225.280 bytes

Pasta de C:\MVinfo\hmg.3.0.46\hmg.3.0.35\MINGW\bin

21/05/2015 18:12 225.280 gcc.exe
1 arquivo(s) 225.280 bytes

Pasta de C:\MVinfo\hmg.3.0.46\hmg.3.0.46\MINGW\bin

21/05/2015 16:16 1.378.830 gcc.exe
1 arquivo(s) 1.378.830 bytes

Pasta de C:\MVinfo\hmg.3.0.46\hmg.3.4.0\MinGW\bin

06/06/2015 01:48 1.769.486 gcc.exe
1 arquivo(s) 1.769.486 bytes

Pasta de C:\MVinfo\hmg.3.0.46\MINGW\bin

02/12/2011 08:00 1.378.830 gcc.exe
1 arquivo(s) 1.378.830 bytes

Pasta de C:\MVinfo\hmg.3.4.0\MinGW\bin

21/12/2014 15:06 1.769.486 gcc.exe
1 arquivo(s) 1.769.486 bytes

Pasta de C:\MVinfo\Inno Setup 5\siccainst\_conversão para xHarbour\aplicativos para conversão\HMG\oohg_full_harbour_mingw_20121018\oohg\MinGW\bin

24/04/2008 12:01 90.112 gcc.exe
1 arquivo(s) 90.112 bytes

Pasta de C:\MVinfo\mingw32\bin

18/12/2015 10:24 1.715.712 gcc.exe
1 arquivo(s) 1.715.712 bytes

Pasta de C:\MVinfo\OOHG\hb32\comp\mingw\bin

18/09/2011 16:33 307.200 gcc.exe
1 arquivo(s) 307.200 bytes

Pasta de C:\MVinfo\OOHG\MinGW\bin

24/04/2008 12:01 90.112 gcc.exe
1 arquivo(s) 90.112 bytes

Total de Arquivos na Lista:
13 arquivo(s) 11.301.958 bytes
0 pasta(s) 66.159.067.136 bytes disponíveis

C:\MVinfo\hb34\MinGW\bin>

Destaque apenas para a seguinte linha:
Pasta de C:\MVinfo\hb34\MinGW\bin

18/12/2015 15:05 1.819.150 gcc.exe
1 arquivo(s) 1.819.150 bytes

Que literalmente pertence ao W10, as outras informações são do XP.
Abraços e bom dia!
Desde o nascer do sol, até o entardecer, louve ao Senhor!

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 08:48
por asimoes
Amiguinho,

Se você não fizer o que o Quintas tá pedindo, vai ficar difícil te ajudar, tá parecendo cabo de guerra, você tá puxando pro lado errado e ainda não percebeu.

1-Faça o que o Quintas pediu! zere qualquer vestigio de harbour da sua máquina.
2-Pegue a versão que o Quintas lhe informou.

Sem esses dois não vai pra frente.

cabodeguerra1.jpg
Microvolution X Quintas, Asimoes

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 10:40
por JoséQuintas
Um dos seus erros é faltar a função wassert.
Ela faz parte do compilador C.

O uso dessa função não foi pelo tudo-em-um, foi pela lib harupdf.
E ela faz parte do Harbour.

Se quiser resolver, é obter um Harbour correto.
Se não quer obter outro Harbour, paciência, não pode usar PDF no seu Harbour.
Se quiser suporte pra isso, contacte o fabricante da harupdf.

Achei interessante você saber sobre PATH, e que um Harbour não se mistura com o outro se o ambiente estiver configurado correto.
São poucos que entendem isso.
Comparado aos tipos de dúvida, fica até em desacordo.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 12:21
por microvolution
claro que os Srs. está corretíssimos...
asimoes escreveu:Se você não fizer o que o Quintas tá pedindo, vai ficar difícil te ajudar, tá parecendo cabo de guerra, você tá puxando pro lado errado e ainda não percebeu.

gostei da ideia do cabo de força... "de maneira alguma te deixarei" Hebreus 13:5... e tenho entendido que o Todo Poderoso os enviou como anjos a me abençoar. Faço minhas as palavras do verso citado: "de maneira alguma os deixarei"...
então, acho que o problema foi o que o professor JQuintas descreveu anteriormente (não consigo visualizá-lo para QUOTE).
Mas é algo assim, que parece que a versão 3.4.0 está sempre em alteração, e, talvez foi "baixado acidentalmente" uma versão ainda de testes...
Pois como disse e ratifico: baixei exatamente do link do Viktor... a única coisa que me mordeu foi GETMINGW que não achava de jeito algum... talvez o problema possa também estar nele...
bom, mas, vou fazer aqui uma limpeza (no w10) e renomear a HB34 (meu harbour atual) para HB34BACK e baixar e instalar novamente!
O farei agora...
Tomara que a versão correta, não apresente outras mensagens de erro, uma vez que o próprio professor JQuintas descobriu uma tal função WVWM no meu código, que nem sabia desses detalhes, pois como tenho dito, sou um mero leigo em harbour... as coisas ainda não entraram bem em minha "caixola"...
rsrs

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 12:31
por JoséQuintas
a única coisa que me mordeu foi GETMINGW que não achava de jeito algum


Quer dizer, seu problema foi baixar o compilador C.
E seu problema atual é com o compilador C.
Como será que resolveu a questão do getmingw....

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 12:36
por JoséQuintas
Mensagem ao instalar o harbour 3.4:

Usage:

1. Install/unpack to any directory.
2. Launch a Command Prompt.
3. Add Harbour to `PATH`: `set PATH=<path-to-harbour>\bin;%PATH%`
4. Download MinGW C compiler by typing: `hbrun getmingw.hb`
5. Build test x86 executable: `hbmk2 <path-to-harbour>/tests/hello.prg`
6. Build test x64 executable: `hbmk2 <path-to-harbour>/tests/hello.prg -cpu=x64`
(requires package that contains x64 libraries)
7. Further hints in section **Build Your Own Harbour App**
of `README.md`.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 12:44
por microvolution
opa já estou baixando...
os 2 links passados:
1 - com 200 mb
2 - com 21 mb
... aqui tá informando que vai demorar entre 1h e 2hs... internet 1mb apenas...
depois vos reporto novamente!
(pi) (pi) (pi) (pi) tô com muita fome... bom almoço a todos!

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 12:46
por JoséQuintas
Lógico, com certeza a mingw é instalada em uma subpasta do Harbour.
Vai depender da pasta correta ser encontrada durante a instalação.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 14:22
por microvolution
acabei de baixar os 2 (harbour).
Bom, o nome do harbour do Viktor é:
harbour-daily-win.7z

O estranho que o que baixei anteriormente em 12/12/15 tem o mesmo nome, mas, tem tamanhos diferentes:
o de hoje: 22.1140kb
o outro: 20.099kb

Já o do JPA tem 242.251kb
...
Vou instalar o do Viktor e depois para atualizar para o do JQuintas o que fazer?

vlw..
OPA... antes de terminar esta postagem... apareceu o erro abaixo. Vejam:
16-0217 - erro na instalação.png
harbour 3.4.0dev

Uma outra observação... ao olhar aqui no meu hdd os instaladores, descobri que em dezembro baixei as seguintes versões do harbour (só não instalei na minha máquina):
harbour-core-3.4.0dev.zip
harbour-core-master.zip
???? :%

Exemplos tudo-em-um - baixar harbour 3.4.0dev corretamente

MensagemEnviado: 17 Fev 2016 14:25
por microvolution

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 14:38
por asimoes

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 14:50
por microvolution
agora o download do harbour deu certo e sua instalação, apresentou a seguinte mensagem:
16-0217 - instalação.png

instalei-o novamente em c:\mvinfo\hb34, como anteriormente. Para não dar erro, renomeei a minha instalação anterior como hb34-back.
entre no CMD (como administrador) e de dentro da pasta c:\mvinfo\hb34 digitei:
hbrun getmingw.hb... e a mensagem é:
16-0217 - instalação - download.png

Bom, quando esse download terminar, o que fazer? pois da outra vez, não foi assim que fiz, a minha instalação não encontrava esse getmingw.hb em lugar nenhum do meu computador...
foi aí que o Viktor me disse para digitar no google "GETMINGW".

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 14:55
por microvolution
ok... e agora, onde está instalado o mingw?
Microsoft Windows [versão 10.0.10586]
(c) 2015 Microsoft Corporation. Todos os direitos reservados.

C:\WINDOWS\system32>cd\mvinfo\hb34

C:\MVinfo\hb34>hbrun getmingw.hb
! Downloading 32-bit hosted dual-target mingw...
! Checksum OK.
! Unpacking to 'c:\mvinfo\hb34\comp'...

C:\MVinfo\hb34>

acaso está na pasta COMP?
se estiver significa que o PATH será:
c:\mvinfo\hb34\bin;
c:\mvinfo\hb34\comp;
????

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 14:59
por asimoes
O mingw é copiado para a pasta comp\mingw32

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 15:00
por asimoes
Não precisa de path para a pasta comp\mingw32 o hbmk2 pega da pasta comp todos os compiladores ali copiados.
Você só vai precisar de path para a pasta bin

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 16:20
por JoséQuintas
Só por precaução, coloque o PATH também para mingw.
Mas não é pra qualquer pasta, confirme direito o nome.
Provavelmente deve ser:

SET PATH=\mvinfo\hb34\bin;\mvinfo\hb34\comp\mingw32\bin


O download que indiquei é maior, porque já contém o mingw e também o msvc2010.
Nesse ZIP tem lá harbour\comp\mingw32 e harbour\comp\msvc2010
msvc2010 é o compilador C da Microsoft.

Se quiser depois, só copie a pasta msvc2010 pra \mvinfo\hb34\comp\msvc2010

Só copiar a pasta não altera nada. Ela vai ficar lá quietinha, e só vai ser usada se mexer na configuração.
Deixe isso pra depois. Primeiro é confirmar que deu tudo certo.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 16:34
por JoséQuintas
Informei errado quanto ao msvc2010.
O seu Harbour é pronto, então não basta o compilador.
Mas se baixou o ZIP, deixe ele aí e veremos depois, mas não vai ser nada de extraordinário usar msvc2010.
A parte mais difícil é justamente a parte que pra você é fácil.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 16:42
por JoséQuintas
Só explicando:

Tem o download do Harbour pronto.
Ele vém compilado e com as LIBs pra mingw de uma determinada versão.

Tem o compilador C, que no caso vai ser mingw, tem que ser compatível com o que foi usado no Harbour.

Isso é uma dupla que anda junta, Harbour numa versão de mingw, e o compilador mingw de mesma versão.
O download é separado, mas eles tem que ser compatíveis.

Era isso que estava errado na sua instalação.

O problema maior não é o Harbour em si, e sim as libs que ficam em \harbour\lib\win\mingw

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 17:00
por JoséQuintas
E meu zip não tem segredo. ele tem a pasta Harbour com tudo.

Por exemplo: criar uma pasta chamada Harbour e descompactar lá dentro.
Depois o PATH pra Harbour e mingw que tem nela.

E não vai estar atualizando, vai ser praticamente a mesma coisa.
A principal diferença é que no meu vai poder escolher entre mingw ou msvc, na hora que quiser.
E está pronto pra uso, tanto pra mingw, quanto pra msvc.

Depois dos minutos que levar pra decidir ficar com o msvc, pode apagar o mingw, e as libs do Harbour pra ele.
Ou deixar aí, é sempre bom ter as duas opções, ainda mais que está na fase de testar várias LIBs diferentes.
Vai que decide por uma que obriga mingw....

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 17:19
por microvolution
JoséQuintas escreveu:E está pronto pra uso, tanto pra mingw, quanto pra msvc.

o prezado disse que msvc é um compilador concorrente do mingw.
Então:
* o que ele tem a mais?
* por que é tão maior assim?
* quais as vantagens? gráfica, espaço do .EXE ou o quê?
JoséQuintas escreveu:A parte mais difícil é justamente a parte que pra você é fácil.

não entendi essa frase!
Já setei no path (por segurança) o BIN do MINGW...
Vou voltar com as LIBs de PDF para testar... e falo com os Srs. se acabou as 3 mensagens de erro.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 17:26
por microvolution
Srs. uma última informação!
no tópico: viewtopic.php?f=4&t=15099&start=30 (na última das 3 páginas), em 18/12/15 eu já havia postado a tal dúvida quanto ao tal GETMINGW e na época os Srs. não entenderam minhas dúvidas ou não entendi suas explicações...
e lá que aconteceu o erro, pois o GETMINGW não baixei automaticamente digitanto HB GETMINGW. e sim fazendo o download pelo google...
se quiserem relembrar é só ir lá...
aliás, vou postar um comentário lá pra ficar mais fácil!

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 18:39
por JoséQuintas
Vou voltar com as LIBs de PDF para testar...


Como assim as LIBs de PDF?

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 18:51
por JoséQuintas
eu já havia postado a tal dúvida quanto ao tal GETMINGW e na época os Srs. não entenderam minhas dúvidas ou não entendi suas explicações...


Olhando lá, realmente bagunçou.
Mas se pensar direito, essa mesma tela avisando como fazer deve ter aparecido na época.

Antes gera getmingw.bat, e agora é um programa em Harbour que baixa.
Houve essa mudança, e foi o que confundiu na hora de ajudar.

E também sugeriram uma outra opção mais complicada, que talvez agora até interesse (ou melhor depois).
Baixar os fontes do Harbour, e gerar o próprio Harbour.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 19:52
por asimoes
Microvolution,

O compilador padrão do harbour é o mingw, mas você pode usar o msvc, tudo é uma questão de gosto, o compilador msvc é o msvc2010, que tem uma versão que não precisa instalar. Deve ser essa que o Quintas usa.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 19:56
por asimoes
Se você não conseguir baixar o mingw pelo getmingw abra o arquivo getmingw.hb que está na pasta package neste aquivo tem o link para baixar o mingw, opte pela versão 32 bit.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:04
por asimoes
Quintas,

O microvolution já resolveu o assunto veja o último post neste link, o nosso amiguinho nem avisa!

http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=15099&start=30

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:17
por microvolution
JoséQuintas escreveu:Como assim as LIBs de PDF?

prezado professor, entre a página 5 e 6 deste tópico, em dezembro/2015, postei um problema relacionado, que não conseguia compilar seu Tudo_em_um, lembra?
Não?
então reveja o que o nobre professor escreveu para mim (parte do escrito):
Muito esquisito.
Nesse caso a parte importante do erro é esta, aonde aconteceu:

Expandir visualizacao
Ver codigo
1 c:/mvinfo/hb34/lib/win/mingw/liblibhpdf.a(hpdfecyd.o):hpdfecyd.c:(.text+0xc4): undefined reference to `__time32'
2 c:/mvinfo/hb34/lib/win/mingw/liblibhpdf.a(hpdfimac.o):hpdfimac.c:(.text+0x463): undefined reference to `__wassert'
3 c:/mvinfo/hb34/lib/win/mingw/liblibhpdf.a(hpdfimac.o):hpdfimac.c:(.text+0xbb0): undefined reference to `__wassert'
4

Justamente aí está a coisa esquisita: Está dando falta de funções dentro da LIB harupdf (libhpdf.a).
Também estou usando Harbour 3.4

Será que não está misturando LIBs de versões de Harbour diferentes? (ou até do xHarbour)
Difícil mas não impossível: será que baixou justo uma versão intermediária que teve correções depois?

asimoes escreveu:Se você não conseguir baixar o mingw pelo getmingw abra o arquivo getmingw.hb que está na pasta package neste aquivo tem o link para baixar o mingw, opte pela versão 32 bit.

tá de boa... tô testando e até agora nenhum "pó"... :))
asimoes escreveu:O microvolution já resolveu o assunto veja o último post neste link, o nosso amiguinho nem avisa!

claro que avisei sim... jamais faria uma coisa dessas em desrespeito a quem mais tem me ajudado... releia novamente... que inclusive V.Sa. mesmo responde para o professor JQuintas que não precisa de setar nas variáveis PATH o caminho do MINGW e ele diz, por precaução...
lembrou?

bom, já até criei novos posts com outras dúvidas:
- programa de áudio;
- mensagem de erro personalizada para gtwvw;
etc...
no mais, prezado professor "asimoes", se não entendeu que concluí ou se deixei no ar, peço mil e uma desculpas!!!

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:26
por JoséQuintas
Pequena correção da informação do ASimões:

A versão oficial do msvc2010 precisa ser instalada e atualizada.
O que fiz foi identificar a necessidade, e transferir pra pasta msvc2010.
Uma vez funcionando, agora dá pra copiar só a pasta sem precisar instalar.

E aí microevolution?
Agora que funcionou, pronto pra testar com MSVC?

Garanto que não vai querer mais usar o mingw, a não ser que seja obrigado.

O microevolution avisou que estava resolvida a questão do Harbour, sobre baixar mingw.
Não chegou a comentar sobre o tudo-em-um.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:30
por microvolution
JoséQuintas escreveu:Garanto que não vai querer mais usar o mingw, a não ser que seja obrigado.
é professor, o nobre quer me fazer ficar sem dormir né?
já deito tarde e acordo cedo pra tentar fazer meu aplicativo ficar com uma cara mais agradável!
Mas, antes de aguçar minha curiosidade, afinal o que tem tão de diferente assim ao dizer:
"garanto que não vai mais usar o mingw"?

tenho tantas dúvidas, e o que mais pode melhorar prezado professor?

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:30
por JoséQuintas
antes disso, continuando no tudo-em-um, abriu várias janelas?
Abriu opções com e sem visual gráfico?
Abriu o PDF?
Abriu o menu Windows?

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:33
por JoséQuintas
No mingw, não te dá a impressão que travou na hora de linqueditar?
No msvc2010 não tem isso, é muito rápido.
Essa é a diferença.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:40
por microvolution
JoséQuintas escreveu:No mingw, não te dá a impressão que travou na hora de linqueditar?

não tive essa impressão ainda não... o que percebo que de acordo com a quantidade de linhas a compilação/linkedição é demorada... mas isso não é novidade pra mim, pois há 18 que trabalho com o clipper, já acontecia, então, nem me incomodo tanto...
a não ser, que faço uma alteração e tenho que testar e alterar e testar , alterar e testar, e, então a hora passa e não saio do lugar...
JoséQuintas escreveu:antes disso, continuando no tudo-em-um, abriu várias janelas?
Abriu opções com e sem visual gráfico?
Abriu o PDF?
Abriu o menu Windows?

infelizmente sou apenas um, e, não tive condições de fazer esses testes ainda!
Mas, farei, se Deus me permitir viver pra isso!

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:43
por microvolution
agora por exemplo...
paralelamente aos testes e exemplos e libs, e etc... estou alterando meu único aplicativo para atender um cliente em negociação...
e tenho q voltar com os resultados na sexta às 15h...
acontece que, nem tudo que tenho dúvida posto aqui... pra não ficar incomodando muito, pois cada um tem as suas ocupações...
e não estou conseguindo resolver... acho que vou até 1h da madruga!
rsrsrs

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:50
por JoséQuintas
Pode ser mais um motivo pra usar msvc.
Se vai ter que compilar,linkar,testar.... vai te agilizar.

É coisa de talvez 10 vezes mais rápido.
E nem vai ter que bagunçar a instalação do Harbour, já que a diferença de versão é de 1 dia ou menos.

Se vai ter que fazer isso muitas vezes, vai ganhar tempo.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:53
por microvolution
mas peraaí!
para tudo para!
esse MSVC não é da Microsoft?
como ela dá isso de graça para o povo?
tô ficando aqui de boca aberta até pra entender o porquê ela deu o windows 10 de graça e sem ser pirata pra qualquer um? :% tô doidão, bicho tô doidão!

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 20:57
por JoséQuintas
TUDO da Microsoft pra desenvolvimento tem versão grátis.

Windows 10 não é de graça.
Só é de graça pra quem tem W7 e W8.
Tem muita gente com XP.

E pra empresa, dependendo do Windows, também não é de graça.

Tem muita gente descontente com o Windows 8, é de graça por isso.

E ao usarem o Windows 10, vão ter que pagar pra atualizarem as outras máquinas.

Resumindo:
Ela pode ganhar mais dinheiro com o Windows 10 do que qualquer outra versão, mesmo com isso do grátis.
E como atualiza automático, ela pode eliminar piratas, ou já mais pessoas comprando oficial.

Ela vai só ganhar alguns bilhões, coitada.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 21:22
por microvolution
ah! outra coisa...
me ajuda a entender que "esse troço de harbour" ainda é meio confuso:
- o compilador harbour - quem desenvolve-o atualmente é o Viktor e Bredi?
- o linkeditor BCC ou MingW são os mesmos autores?
- qual a vantagem que o Sr. viu em deixar o VB e ficar no clipper avançado que agora é harbour?
- e no meu caso que conheço um pouco de delphi o que tenho a ganhar em ficar aqui no harbour?

ah! sei lá!
são tantas as dúvidas e poucos os manuais e materiais pra gente estudar e aprender... a não ser este fórum...
aliás, se não fosse o nobre professor, o asimoes, o Eolo, não teria conseguido nem chegar onde cheguei...
rsrs

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 22:05
por asimoes
Uma pequena informação útil.

O mingw é o compilador padrão da hmg oficial, a minigui também já está compilando com mingw, com o mingw é possível gerar lib 64 bit, com msvc2010 eu não sei. O msvc pode ser até mais rápido que o mingw, mas não é o padrão harbour. outra coisa o msvc2010 precisa de licença ou mingw não.

Decida o que for melhor para você.

Assim, outro dia tentei gerar uma versão do harbour com msvc2010, não consegui, a compilação apresentou diversos erros e não concluiu, eu também não tentei novamente. Pode ser que esteja funcionando agora.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 22:09
por asimoes
Assim, eu adotei como padrão o mingw, porque não dá erro gerando as libs da hwgui, com msvc dá um monte de erro.
A mingui só compila com bcc e mingw a hmg só com mingw até onde eu sei.

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 22:14
por microvolution
asimoes escreveu:Decida o que for melhor para você.

na verdade tenho muito o que aprender... e acho que decidir ou não a respeito de msvc é uma questão de tempo...
por enquanto, tô satisfeito... aliás, pra vcs que tem me ajudado eeeeeeeeeeeee mmmmmmmmmmuiiiiiiitooooo... foi e é uma grande superação de obstáculos recomeçar onde o mercado está disponível em apenas 1%, acho q tá muito ainda!

Exemplos tudo-em-um

MensagemEnviado: 17 Fev 2016 23:57
por JoséQuintas
outro dia tentei gerar uma versão do harbour com msvc2010, não consegui,


Não sei porque, mas se instalar msvc 2010 oficial e não atualizar o Service Pack dá erro.
Mais um motivo pelo qual deixei pronto sem precisar instalar.

A versão que coloquei pra download tem msvc2010 e mingw.
Pode usar qualquer um dos dois.

E se baixar os fontes do Harbour oficial, pode gerar com qualquer um dos dois, ou com os dois.
Esse download não limita nenhuma versão.

O msvc2010 só precisa acrescentar LIB,INCLUDE,PATH.

A linha Express da Microsoft é grátis.

\harbour\lib\win\mingw -> lib pra mingw
\harbour\lib\win\msvc -> lib pra msvc
\harbour\comp\mingw32 -> compilador mingw
\harbour\comp\msvc2010 -> compilador msvc
Todas as demais pastas, tanto faz, podem ter sido geradas por msvc ou mingw.

Ou seja, usar msvc2010 não não atrapalha em nada manter mingw.

Mas pra manter os dois atualizados, teria que gerar Harbour para os dois, pra criar as LIBs de cada compilador.
Mas a gente não vai ficar trocando de compilador toda hora, então não tem que ficar gerando os dois.
Aqui só gerei a do mingw pra criar o zip antes de deixar pra download.

Sobre 64 bits... a gente até fala disso, mas um programa pra usar mais de 4GB de memória... parece algo que nunca será necessário.
Quando for, aí vou me preocupar, talvez baixar o Visual Studio 2015 pra isso.
O Visual Studio 2010 é o último aonde o Visual C++ é separado do resto. Nas demais, tem que baixar TUDO, completo.

Só mantenho o mingw porque algum dia pode ser necessário, mesmo assim, já vi que a cada versão do Harbour ele pode ser diferente.
Tem essa também: pra quem pensa que o mingw é sempre o mesmo, não é.
Ele é outro pacote de coisas, que podem ser de versões diferentes.
Só olhar na pasta do mingw que vai encontrar build-info.txt
Esse arquivo contém a lista com a versão de cada componente da mingw.
Aliás... mingw é apenas um dos componentes do pacote.

Esse troço de open source é complicado.

Aliás... nem tanto... exatamente o que reclamavam da Microsoft é o que acontece.
Tem que ficar tudo compatível pra não dar erro... rs

Nada contra Open Source. Apenas comentando que acaba tudo dando no mesmo.
Ainda mais que agora é tudo grátis.

Quem será que vai mexer nos fontes do compilador C? eu é que não sou, então não adianta eu ter os fontes dele.

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2016 09:16
por asimoes
Quintas,

Baixei o harbour que você disponibilizou e notei diferenças no que eu tenho aqui, mas eu tentei gerar uma compilação com a atualização do projeto hoje e quando fui compilar de estes erros (imagem) tem como você postar a sua bat de criação do harbour?
ScreenShot1.png
Erro compilando com MSVC 2010


Obs.: a compilação é a versão fork do Viktor

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2016 09:57
por JoséQuintas
configurações permanentes na minha máquina:

HB_COMPILER=msvc
HB_COMPILER_VER=1600
HB_INSTALL_PREFIX=d:\harbour
HB_LANG=EN
INCLUDE=d:\harbour\comp\msvc2010\include
LIB=d:\harbour\comp\msvc2010\lib
PATH=d:\harbour\bin;d:\harbour\comp\msvc2010\bin;d:\tools\útil


geração:

cd \cvsfiles\josequintas\harbour34
win-make clean install


E quando quero mingw, altero HB_COMPILER, HB_COMPILER_VER e se necessário o PATH indicando mingw
Somente pra geração do Harbour.

Por acaso não instalou pacotes adicionais?
Verifique SET HB
Se tem pacotes adicionais, configurados pra serem gerados, vai precisar deles

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2016 10:01
por JoséQuintas
Só um detalhe:

Já que tem todo Harbour, pode copiar só a pasta MSVC2010 daquele ZIP.

Aqui quando vou gerar o Harbour, de vez em quando até apago tudo, deixo somente a pasta harbour\comp
Só os compiladores C.

Os fontes estão sempre na outra pasta..
E a outra pasta é o download do Harbour, nada além do Harbour.

Nota: a d:\tool\útil é por causa do UPX.EXE que fica lá.

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2016 10:06
por JoséQuintas
Recapitulando:
Se eu pegar uma nova máquina nova, totalmente zerada.

Baixo os fontes do Harbour em d:\cvsfiles\josequintas\harbour34

Baixo o Harbour oficial pronto em d:\harbour, e a mingw, pra garantir uma mingw atualizada.

acrescento o msvc2010

Coloco essas configurações que postei, e faço o que postei.
No final vou ter o Harbour pronto tanto pra msvc2010 quanto pra mingw

Só mexo na configuração pra gerar mingw, como postei antes.
Depois só fecho a janela do prompt, e ao reabrir, volta à configuração permanente.

Nenhum BAT adicional, nada. Só o que vém no Harbour, a pasta msvc2010, e a configuração que mostrei.

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2016 10:19
por JoséQuintas
Lembre-se:
a libcurl é separada, depende de download de arquivos pra ela.
Provavelmente outras adicionais também.

Não uso nada adicional, nem libcurl.
Pode precisar disso pra email do gmail.

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2016 11:07
por asimoes
Quintas,

Consegui gerar o harbour com msvc, uma pergunta porque você usa HB_LANG=EN ?

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2016 11:10
por asimoes
O msvc (portable) que eu tenho aqui tem mais arquivos e pastas do que o seu, agora eu não sei quais arquivos necessários ou desnecessários, parece que o seu tá mais enxuto. De qualquer forma obrigado.

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2016 11:15
por asimoes
Quintas,

Para finalizar porque você usa HB_COMPILER_VER=1600, a versão do msvc é 1600?

Exemplos tudo-em-um

MensagemEnviado: 18 Fev 2016 12:21
por JoséQuintas
É o número de versão dele 16.00

Como tem o site harbourdoc.com.br, e lá o padrão é em inglês, o HB_LANG é pra deixar as mensagens do Harbour em inglês, sem tradução, pra não colocar lá errado.

Exemplos tudo-em-um

MensagemEnviado: 19 Fev 2016 21:39
por microvolution
não aguentei até a próxima oportunidade... enquanto compilo meu aplicativo a cada alteração/correção... resolvi compilar o TEST.BAT do seu All_In_one...
então,
de cara gostei muito!

estou curioso a princípio... com:
1 - o PDF gera 3 arquivos:

a) um texto - beleza;
b) 2 em .PDF... o que realmente seria a diferença dos 2?

2 - em BrasilOnly - sei que é besteira - pois o google tem resposta, vou precisar desse SPED pra quê?
no mais...
achei a calculadora mais agradável que o calendário...
e o @SAY/GET em modo gráfico... é top demais!

agora o Menu Gráfico, é o mais show de todos...
só tem aquele perigo que o nobre JQuintas já havia dito:
é tudo MT e se não souber fazer essa gestão vira uma bagunça né?

Agora a grosso modo, as 3 únicas coisas que achei que precisam ser melhoradas:
1 - o calendário parece ser lento, que a cada clique se percebe um tipo de delay (não sei se a minha máquina e o antivirus que eu não tinha e instalei Kaspersky, pois no cliente que tem Avast, reconheceu um vírus no meu aplicativo que fiquei "meio com medo") - ou se é o processamento de minha máquina que é ruim mesmo (dual core - 2gb ram);
2 - a tela fundo (bg) some e só volta se for reiniciada... nem sei como reiniciei;
3 - se tiver diversas janelas em aberto (mt) e fechar a principal, ele aceita...

No meu caso, não saberia resolver...
no mais... o JQuintas é profundo conhecedor de clipper e principalmente harbour...
infelizmente ainda, não consigo acompanhar o nível que os Srs. estão!
:'(

Exemplos tudo-em-um

MensagemEnviado: 19 Fev 2016 22:25
por JoséQuintas
3 - se tiver diversas janelas em aberto (mt) e fechar a principal, ele aceita...


Isso não é pra resolver, é proposital.

A tela de fundo, não existe isso na WVG, coloquei só por colocar.
Ela é remontada conforme se mexe no menu.
Usei uma foto pequena por isso fica deformado, mas foi pra deixar o exemplo com tamanho pequeno.

O PDF, um é modo retrato e outro paisagem. Um de pé e outro deitado.

O calendário foi só um exemplo inacabado

Além da parte que viu, tem a parte que não viu.

- A mesma rotina de menu atende menu console e menu Windows
- A mesma rotina de cadastro atende modo console e modo gráfico
- Os cadastros funcionam com e sem multithread, tem opção para os dois casos no menu, sem multithread, o menu não fica disponível pra fechar
- Copiar/colar, inclusive na calculadora
- Barra de progresso com previsão de horário

E tem mais coisas nos fontes que não viu.

Messenger like
ERRORSYS

Exemplos tudo-em-um

MensagemEnviado: 12 Mar 2016 15:55
por rubens
José Quintas

Onde eu baixo o allinone mais atualizado?

Obrigado
Rubens

Exemplos tudo-em-um

MensagemEnviado: 12 Mar 2016 16:36
por JoséQuintas

Exemplos tudo-em-um

MensagemEnviado: 18 Jun 2017 22:08
por lugab
Boa noite, Quintas, help me...

A linha #require "hbhpdf" , no "Ze_PDFClass.prg" ta dando erro na compilação, e eu to compilando com a lib "hbhpdf.lib" linkada.
Fiz alguma besteira, eu sei, só me diga como consertá-la...
(to usando Hb30 + gtwvg.lib + hbhpdf.lib bcc55 )
D:\HB30\bin\harbour.exe ZE_PDFCLASS.prg -iD:\HB30\include;D:\borland\bcc
55\include;D:\minigui\include -m -n -p
Harbour 3.0.0 (Rev. 16951)
Copyright (c) 1999-2011, http://harbour-project.org/
Compiling 'ZE_PDFCLASS.prg' and generating preprocessed output to 'ZE_PDFCLASS.p
po'...
ZE_PDFCLASS.prg(4) Error F0032  Invalid name follows #
200
** error 1 ** deleting ZE_PDFCLASS.c


Trecho do programa
* ZPDF - PDF Class
*----------------------------------------------------------------

#require "hbhpdf"
#include "hbclass.ch"
#include "inkey.ch"

#define PDF_PORTRAIT  1
#define PDF_LANDSCAPE 2
#define PDF_TXT       3

Exemplos tudo-em-um

MensagemEnviado: 21 Set 2017 04:06
por lugab
Ola, Quintas..

Precisei baixar o allinone de novo, mas o link ta quebrado, vc pode repostar ?

https://github.com/JoseQuintas/AllInOne

Grato

Exemplos tudo-em-um

MensagemEnviado: 21 Set 2017 08:41
por JoséQuintas
Pra não ter versão desatualizada, agora é direto do meu aplicativo.
Tem a de pdf.

https://github.com/JoseQuintas/JoseQuintas/blob/master/source/ze_pdfclass.prg

que vai ter chamada pro preview,no caso de saída matricial

https://github.com/JoseQuintas/JoseQuintas/blob/master/source/ze_preview.prg

Uso nomes de função que identificam pra que servem as funções, e o fonte das funções está tudo na LIB.
Vai de cada um usar ou substituir por rotinas/variáveis próprias.

Por exemplo: AppEmpresaNome() e AppEmpresaApelido().
Todo aplicativo usa nome e/ou apelido da empresa em uso, essas funções facilitam fazer isso.
É só usar @ 1, 0 SAY AppEmpresaApelido(), e AppEmpresaApelido( "nome da empresa" )

Ou criar a sua própria.
FUNCTION AppEmpresaNome); RETURN "FORUM PCTOLEDO"

Acho que no geral não vai ter grandes problemas em usar, pode substituir quase tudo.
O preview antes não tinha, se for o caso também pode remover isso da classe PDF e fica igual antes.

Mas é reação em cadeia: o preview tem opção de enviar por email, então depende de rotina pra enviar email.
Mas pode remover a opção de enviar email... etc. etc. etc.
Então vai de cada um o quanto vai querer usar da LIB. As dependências vão depender do quanto usar da LIB, quanto mais usar, mais dependência vai ter.
E pode remover o que não interessar.

Exemplos tudo-em-um

MensagemEnviado: 24 Set 2017 04:07
por lugab
Bom dia, Quintas...

To vendo o seu programa de recibo e queria saber como mudar características das letras , tamanho, estilo, etc,
tipo assim: Eu quero Gerar a palavra "Recibo" em letras bem maiores, mas o resto da impresao eu quero com tamanho menor e em outro estilo/formato

   oPDF := PDFClass():New()
   oPDF:Begin()
   oPDF:AddPage()
   oPDF:nRow += 2
   oPDF:DrawText( oPDF:nRow, oPDF:MaxCol() / 2 + 3, "RECIBO" )
   oPDF:nRow += 3
   cText := "Recebi de " + Trim( mPagador ) + " a importância de " + "R$" + ;
   Ltrim( Transform( mValor, "@E 999,999,999.99" ) ) + " (" + Extenso( mValor ) + ;
   ") relativa ao pagamento de " + Trim( mMotivo ) + "."
   etc


Obrigado e bom domingo, Professor !!!!

Exemplos tudo-em-um

MensagemEnviado: 24 Set 2017 08:23
por JoséQuintas
Está respondido em outro post.

http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=18633&start=15

Mas resumindo: DrawText() aceita parâmetros pra tamanho, nome de fonte, e até inclinação do texto.

Exemplos tudo-em-um

MensagemEnviado: 24 Set 2017 23:52
por lugab
Obrigado, Quintas,

Só mais uma coisar: Eu esqueci de pedir o zebrado, mas nesse link q vc me passou tem
oPDF:DrawZebrado(1)
   oPDF:DrawText( oPDF:nRow, 0, TrechoJust( @oElement, oPDF:MaxCol() ), , , "Courier-Bold" )

Só que da erro em tempo de execução,
"Message not Found: PDFCLASS: DRAWZEBRADO"..


O que eu to fazendo errado ??

Exemplos tudo-em-um

MensagemEnviado: 25 Set 2017 00:14
por JoséQuintas
Criou a variável da classe primeiro?

oPDF := PDFClass():New()

Exemplos tudo-em-um

MensagemEnviado: 25 Set 2017 04:46
por lugab
Sim, Quintas, eu criei..

E coloquei a linha zebrada só pra ver como fica
   oPDF := PDFClass():New()
   oPDF:Begin()
   oPDF:AddPage()
   oPDF:nRow += 1
   oPDF:DrawImage( cJPG, 07, 130, 20, 10 )      //DrawImage( cJPEGFile, nRow, nCol, nWidth, nHeight )
   oPDF:DrawText( oPDF:nRow, (oPDF:MaxCol()/2)-5 , "RECIBO",,25,,, )
   oPDF:nRow += 1
   oPDF:DrawZebrado(1)
   oPDF:nRow += 4
   do while .t.
      opdf:drawtext( opdf:nrow, 10, trechojust( @ctext, maxcol() - 20 ),,15,,, )
      opdf:nrow += 1
      if len( ctext ) == 0
         exit
      endif
   enddo

Exemplos tudo-em-um

MensagemEnviado: 25 Set 2017 16:50
por JoséQuintas
O último fonte atualizado, que eu uso, é este, direto do aplicativo:

https://github.com/JoseQuintas/JoseQuintas/blob/master/source/ze_pdfclass.prg

Além do DrawZebrado() tem DrawBoxTitleText()

É o que o nome diz: desenha um box com título e texto.... rs