Página 1 de 1

estou tentando entender como imprime no hmg

Enviado: 11 Jun 2019 15:26
por Trazom
Ola amigos,
Estou fazendo meu primeiro sistema em hmg, e estou com muita dificuldade em entender impressão. Pelo que vi nuns posts acho que ainda a melhor forma é gerar um arquivo txt ou pdf e enviar para impressora via nodosimp ou outro.
Pelo menos existe alguma forma de abrir o díalogo de impressao do windows para imprimir o arquivo gerado ?

estou tentando entender como imprime no hmg

Enviado: 11 Jun 2019 15:53
por rubens
Boa tarde...

Evandro...
Você pode usar do jeito que usava, mas aí não vai evoluir..
O que muda então? você pode usar qualquer impressora instalada no windows, direto nela sem programas externos. O que acontece é que você tem que saber se a impressão é raw ou gráfica (spooler). Para ficar mais fácil pensa assim, impressora matricial e mini impressora, térmica ou não é raw já as laser e jato de tinta mais moderna ( da hp1132, hp1102, brother etc) são gráficas, spooler.
Aí fica assim:
Impressora matricial você usa o winprintfileraw(). Usa os mesmos relatórios que tem hoje, mas tem que gerar o relatório em um txt e no final do relatorio manda esse txt na função WinprintFileraw(). Usa os mesmos comandos que você usava no clipper para negrito, sublinhado e etc, não precisa mudar a formatação.
Agora se a impressora é laser ou jato (gráfica) aí tem que usar a função da minigui para impressão gráfica.
Eu adaptei uma função (na realidade várias funções) que quando manda imprimir e escolhe a impressora, a própria função define se é matricial (raw) ou gráfica. Se for matricial manda direto para impressora se for gráfica gera o pdf e visualiza para impressão.
De toda forma tem que gerar o relatório em TXT.
a função que tô falando quando a impressora é gráfica, a função lê os comandos esc/p (chr) e aumenta/diminui e coloca comando negrito, expandido, condensado simulando a impressora raw(matricial).
O Sistema de impressão da impressora gráfica é diferente da matricial porque você precisa posicionar em pixels e na matricial é sequencial linha,coluna.
Veja o exemplo de um orçamento gerado pela função.
OR016806.pdf
(2.03 KiB) Baixado 274 vezes
link da função
https://pctoledo.org/forum/viewto ... aw#p114739

Rubens

estou tentando entender como imprime no hmg

Enviado: 11 Jun 2019 20:41
por JoséQuintas
Trazom escreveu:Estou fazendo meu primeiro sistema em hmg, e estou com muita dificuldade em entender impressão
Se não pesquisar, não vai ir muito longe.
Já olhou nessas PASTAS, elas contém um ou mais exemplos:

HMG
pasta samples\printsystem

HMG Extended
pastas samples\basic\graphprint, samples\basic\graphprint_2, samples\basic\graphprint_bitmap, samples\basic\print, samples\basic\print_jobstatus, samples\basic\print_list, samples\basic\print_test, samples\advanced\pdf_print, samples\advanced\pdf_print_2, samples\advanced\pdf_print_3, samples\advanced\pdf-fillter, samples\advanced\pdfreader, samples\advanced\pdfview, samples\advanced\report_class, samples\advanced\report_generator, samples\advanced\report_generator_2, samples\advanced\report_interpreter

OOHG
pastas samples\do_report, samples\printing, samples\report_form

Harbour
pastas tests, contrib\hbwin\tests, contrib\hbhpdf\tests

estou tentando entender como imprime no hmg

Enviado: 17 Jun 2019 16:38
por ArnaldoND
Trazom, que tipo de relatorio pretende imprimir?
Entendo sua dificuldade.. ha uns meses atras, não tinha noção alguma de hmg,mas depois de algumas cabeçadas, percebi q não era nenhum bicho de sete cabeças...
se for uma listagem simples, veja a estrutura a seguir: (lembre-se, as coordenadas x e y são as posições em milimetros, dentro da folha de impressão.. exemplo, quer imprimir uma linha horizontal no meio da folha A4, orientação landscape, a sintaxe seria: @ 105,000 PRINT LINE TO 105,296 )

* ------------------------------------------------------------
function rel_01P( )

local p_linha := 040
local u_linha := 185
local linha := p_linha
local pagina := 1

SELECT PRINTER DIALOG PREVIEW
START PRINTDOC NAME 'Gerenciador de impressão'
START PRINTPAGE

cabecalho(pagina)

N := 1
QT := LEN( aTable ) // aTable é uma array pre-carregada a partir do resultado de uma query
nReg := 0

while N <= QT

nReg++
@ linha, 010 PRINT aTable[n,1] FONT 'courier new' SIZE 10
// repita aqui a linha, para imprimir todos os detalhes do registro
linha +=4

if linha >= u_linha
rodape()
END PRINTPAGE
START PRINTPAGE
pagina ++
cabecalho(pagina)
linha := p_linha
endif
N++

endif
end

if linha >= u_linha
rodape()
END PRINTPAGE
START PRINTPAGE
pagina ++
cabecalho(pagina)
linha := p_linha
endif
rodape()

END PRINTPAGE
END PRINTDOC

return(nil)
*-------------------------------------------------------------------------------
static function cabecalho(p_pagina)
// imprimir o cabeçalho
return(nil)
*-------------------------------------------------------------------------------
static function rodape()
// imprimir seu rodapé

return(nil)