estou tentando entender como imprime no hmg

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Trazom
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 14 Ago 2003 01:01
Localização: Maceió/AL

estou tentando entender como imprime no hmg

Mensagem 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 ?
Imagem

Harbour 3.2 HMG 1.2a NSX
Evandro
Pelo fato de exercitar bem a própria arte,
cada um pretendia ser sapientíssimo também nas
outras coisas de maior importância,
e esse erro obscurecia o seu saber

Platão, Apologia de Sócrates
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

estou tentando entender como imprime no hmg

Mensagem 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 273 vezes
link da função
https://pctoledo.org/forum/viewto ... aw#p114739

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

estou tentando entender como imprime no hmg

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

https://github.com/JoseQuintas/
ArnaldoND
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 23 Jan 2019 16:12
Localização: são paulo/sp

estou tentando entender como imprime no hmg

Mensagem 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)
Responder