Pelo jeito, um modo profissional de executar um preview vai demorar um pouco.
Todavia, dividi o cheque de sessenta por dois de trinta. Eu não sabia se sessenta se escrevia com dois "s".
Foi o seguinte:
Na classe Win32Prn eu criei mais um objeto que chamei de preview.
Iniciei este objeto com uma matriz vazia.
VAR PREVIEW INIT {}
Depois, no método TEXTOUT, que é chamado para imprimir cada linha da impressão, adicionei mais uma linha, adicionando à matriz criada a string a ser impressa.
AADD(::PREVIEW,cString)
Assim, a matriz criada conterá o texto que foi enviado para a impressora (Deus sabe onde).
Dessa forma, antes de emitir um ENDDOC e DESTROY para encerrar o documento, enviá-lo para impressão e "detonar" o contexto criado(DC), simplesmente, com o auxílio de um tbrowse, visualizo a matriz que contém os dados.
É capenga?
Sim, porque não é possível visualizar os negritos, itálicos, sublinhados, circulos, quadrados eventualmente existentes no texto e muito menos figuras (.bmp, etc.).
Todavia, e eu gosto de aplicações console, apesar de certa lentidão, resolve parcialmente o problema de visualização pré-impressão, com utilização de recursos da win32prn.
Com efeito, o documento é criado observando valores obtidos previamente pela classe, tais como tamanho de página configurado, número máximo de linhas em face do papel, etc.
Espero ter ajudado alguém como eu, que vai ter trabalho para visualizar hPrinterDC em WMF.
MGS
Preview (capenga)
Moderador: Moderadores
-
thekey
- Usuário Nível 1

- Mensagens: 33
- Registrado em: 17 Abr 2008 16:37
- Localização: Governador Valadares MG
Preview (capenga)
Uma boa ideia !
Tive uma ideia simplista de fazer um preview um pouco mais pratico e um pouco menos capenga.
Quem é clippeiro e pede um preview para usar com a winprn32 em 90% ja tem em seus sistemas um preview pronto apartir de um txt comum gerado pelo seu sistema que abre com memoread certo ?
Fiz uma coisa aqui muito pratica !
Criei uma rotina para ler o meu txt gerado e traduzir a partir do txt os principais comandos de impressao da matricial que eu usava, como negrito, italico, condensado, eject, nova linha etc.
A rotina le caracter por caracter do txt ja gerado com a minha aplicacao (dentro deste txt ja tem imbutido comandos impressao) e traduz por exemplo o caracter asc(27)+asc(33)+asc(16) que é o negrito e traduz para oPrinter:bold(800) ja direcionadndo para o objeto de impressao criado.
A rotina ficou pequena e fantastica.
Bom realmente nao se trata exatamente de um preview, mas como voce ja tem milhares de relatorios DOS, que geravam um TXT para fazer um preview, para nao ter que programar novamente todos os relatorios, esta rotina traduz seus txts DOS (previews) que ja estao prontos para impressao e levam para a winprn32 com os principais comandos de impressao ja traduzidos diretamente para a impressora instalada no windows.
tudo que a rotina encontra dentro do txt que nao sao comandos, ela joga na winprn32 com textout normalmente como texto comum.
Comandos principais traduzidos: negrito, italico, sublinhado, extendido, compactado, eject, prow()+1.
Se alguem se interessar posto a rotina aqui.
Abracos
Tive uma ideia simplista de fazer um preview um pouco mais pratico e um pouco menos capenga.
Quem é clippeiro e pede um preview para usar com a winprn32 em 90% ja tem em seus sistemas um preview pronto apartir de um txt comum gerado pelo seu sistema que abre com memoread certo ?
Fiz uma coisa aqui muito pratica !
Criei uma rotina para ler o meu txt gerado e traduzir a partir do txt os principais comandos de impressao da matricial que eu usava, como negrito, italico, condensado, eject, nova linha etc.
A rotina le caracter por caracter do txt ja gerado com a minha aplicacao (dentro deste txt ja tem imbutido comandos impressao) e traduz por exemplo o caracter asc(27)+asc(33)+asc(16) que é o negrito e traduz para oPrinter:bold(800) ja direcionadndo para o objeto de impressao criado.
A rotina ficou pequena e fantastica.
Bom realmente nao se trata exatamente de um preview, mas como voce ja tem milhares de relatorios DOS, que geravam um TXT para fazer um preview, para nao ter que programar novamente todos os relatorios, esta rotina traduz seus txts DOS (previews) que ja estao prontos para impressao e levam para a winprn32 com os principais comandos de impressao ja traduzidos diretamente para a impressora instalada no windows.
tudo que a rotina encontra dentro do txt que nao sao comandos, ela joga na winprn32 com textout normalmente como texto comum.
Comandos principais traduzidos: negrito, italico, sublinhado, extendido, compactado, eject, prow()+1.
Se alguem se interessar posto a rotina aqui.
Abracos
-
thekey
- Usuário Nível 1

- Mensagens: 33
- Registrado em: 17 Abr 2008 16:37
- Localização: Governador Valadares MG
Preview (capenga)
Observacao:
Caso eu nao tenha sido claro, esta rotina nao converte PRG para PRG com os comandos da winprn32, mas sim, ela le o TXT que sua aplicacao normal gerou e leva para a impressora instalado no windows apos o preview normal que voce ja tem.
Colocando esta rotina na compilacao de sua aplicacao, basta chama-la apos seu preview convencional imprimindo o TXT que ja foi gerado.
Abracos
Ruy.thekey
Caso eu nao tenha sido claro, esta rotina nao converte PRG para PRG com os comandos da winprn32, mas sim, ela le o TXT que sua aplicacao normal gerou e leva para a impressora instalado no windows apos o preview normal que voce ja tem.
Colocando esta rotina na compilacao de sua aplicacao, basta chama-la apos seu preview convencional imprimindo o TXT que ja foi gerado.
Abracos
Ruy.thekey
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Preview (capenga)
Olá!
Não seria mais prático e menos trabalhoso instalar uma dessas impressoras PDF existentes (algumas free, como a PDF Complete)?
Não seria mais prático e menos trabalhoso instalar uma dessas impressoras PDF existentes (algumas free, como a PDF Complete)?
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Preview (capenga)
Boa tarde, acho bem legal a bastante tempo atras tive um destes problema de imprimir em impressora USB e como não tinha xHarbour, fiz um programa externo que faz a leitura do arquivo txt gerado para impressão e montar um em FiveWin, como previa e opção de escolha de impressora e um codigo bem simples mais me ajudou muito tempo a impressão em qq impressora.
Frazato
Frazato
-
thekey
- Usuário Nível 1

- Mensagens: 33
- Registrado em: 17 Abr 2008 16:37
- Localização: Governador Valadares MG
Preview (capenga)
Alexandre e frazato.
É logico que temos opcoes externas.
Mas sabemos tambem que nos clippeiros temos mania de ser independentes com tudo em nossa programacao. Exemplo disto, é ter o "poder" de nao ficar dependendo de bancos de dados externos como firebird mysql, etc uma vez que se quisermos, nossa amada linguagem trabalhava com nossos velhos e bons dbfs.
Por isto a intencao do preview e impressao for windows é de nossas aplicacoes fazerem tudo sozinhas sem utilizar nenhum executavel ou aplicativo externo.
Abracos.
É logico que temos opcoes externas.
Mas sabemos tambem que nos clippeiros temos mania de ser independentes com tudo em nossa programacao. Exemplo disto, é ter o "poder" de nao ficar dependendo de bancos de dados externos como firebird mysql, etc uma vez que se quisermos, nossa amada linguagem trabalhava com nossos velhos e bons dbfs.
Por isto a intencao do preview e impressao for windows é de nossas aplicacoes fazerem tudo sozinhas sem utilizar nenhum executavel ou aplicativo externo.
Abracos.
-
thekey
- Usuário Nível 1

- Mensagens: 33
- Registrado em: 17 Abr 2008 16:37
- Localização: Governador Valadares MG
Preview (capenga)
Segue a funcao que faz a leitura do txt que contem a impressao DOS e leva para o objeto de impressao criado anteriormente pela winprn32:
Neste exemplo a funcao traduz para a winprn32 o conteudo de \tmp.prn
Como ja disse esta traducao esta limitada aos comandos de negrito, italico, sublinhado, extendida, proxima linha e ou proxima pagina. Mais comuns na leitura de um TXT confeccionado por um aplicativo qualquer das antigas. A intencao é voce poder continuar utilizando o preview que voce ja tem e enviar o conteudo dele para a winprn32 sem ter que reprogramar os comandos de impressao.
Neste exemplo a funcao traduz para a winprn32 o conteudo de \tmp.prn
Como ja disse esta traducao esta limitada aos comandos de negrito, italico, sublinhado, extendida, proxima linha e ou proxima pagina. Mais comuns na leitura de um TXT confeccionado por um aplicativo qualquer das antigas. A intencao é voce poder continuar utilizando o preview que voce ja tem e enviar o conteudo dele para a winprn32 sem ter que reprogramar os comandos de impressao.
Código: Selecionar todos
if file("\tmp.prn")
cbuffer=space(1)
nhandle=fopen("\tmp.prn")
if ferror() <> 0
pergunta(10,10,"Erro de abertura &varq1")
return .f.
endif
oImp=abrepwin() //Esta funcao é particular minha apenas para criar o objeto de impressao oImp.
vabrebloco=fread(nhandle,@cbuffer,1)
do while vabrebloco <> 0
do case
case cbuffer=27
vabrebloco=fread(nhandle,@cbuffer,1)
do case
case cbuffer=33
vabrebloco=fread(nhandle,@cbuffer,1)
do case
case cbuffer=0
oImp:bold(0)
oImp:italic(.F.)
oImp:Underline(.F.)
oImp:SetFont('Courier New',11,0)
case cbuffer=32
oImp:SetFont('Lucida Console',18, 0)
case cbuffer=4
oImp:SetFont('Courier New',7,{3,-50})
case cbuffer=4
oImp:italic(.T.)
case cbuffer=8
oImp:bold(800)
case cbuffer=128
oImp:UnderLine(.T.)
case cbuffer=16
oImp:bold(800)
endcase
endcase
case cbuffer=12
oImp:newpage()
case cbuffer=13
vabrebloco=fread(nhandle,@cbuffer,1)
if cbuffer=10
oImp:newline()
endif
otherwise
oImp:textout(cbuffer)
endcase
vabrebloco=fread(nhandle,@cbuffer,1)
enddo
oImp:enddoc()
oImp:destroy()
endif

