Converter de Clipper para Harbour - Parte II
Moderador: Moderadores
- aprendiz_ce
- Usuário Nível 3

- Mensagens: 147
- Registrado em: 21 Jul 2011 10:05
- Localização: Fortaleza/CE
Converter de Clipper para Harbour - Parte II
Prezados,
Para imprimir os relatórios do meu aplicativo que antes era em Clipper 5.x e agora está em Harbour 3.2 é necessário mudar alguma coisa ou posso manter como está? Adoraria passar a usar "WIN_PrinterList()" e "WIN_PrinterGetDefault()" mas confesso que não sei como fazer. Dei uma olhada pelo fórum, mas não encontrei nada bem simples que eu pudesse tomar como base para entender e ver como proceder. Sendo assim, ainda estou usando "Set Device To Print","Set Device To Screen" e "Set Printer To". Pelo que encontrei no fórum fiz uns testes com "WIN_PrinterList()" e "WIN_PrinterGetDefault()" e achei bem legal, só não sei com utilizar para das saída para uma impressora matricial.
Preciso de uma ajuda do colegas para manter o mesmo código para Windows e Linux. Será que alguém poderia me dar umas dicas?
Obrigado a todos.
Para imprimir os relatórios do meu aplicativo que antes era em Clipper 5.x e agora está em Harbour 3.2 é necessário mudar alguma coisa ou posso manter como está? Adoraria passar a usar "WIN_PrinterList()" e "WIN_PrinterGetDefault()" mas confesso que não sei como fazer. Dei uma olhada pelo fórum, mas não encontrei nada bem simples que eu pudesse tomar como base para entender e ver como proceder. Sendo assim, ainda estou usando "Set Device To Print","Set Device To Screen" e "Set Printer To". Pelo que encontrei no fórum fiz uns testes com "WIN_PrinterList()" e "WIN_PrinterGetDefault()" e achei bem legal, só não sei com utilizar para das saída para uma impressora matricial.
Preciso de uma ajuda do colegas para manter o mesmo código para Windows e Linux. Será que alguém poderia me dar umas dicas?
Obrigado a todos.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
- aprendiz_ce
- Usuário Nível 3

- Mensagens: 147
- Registrado em: 21 Jul 2011 10:05
- Localização: Fortaleza/CE
Converter de Clipper para Harbour - Parte II
Olá,Olá!
Veja este tópico.
Eu já havia visto esse tópico, mas confesso que não entendi nada.
Pelo exemplo que consta no post, o mesmo carrega um arquivo texto e em seguida me parece que envia para a impressora. Não é bem o meu caso!
No meu caso são vários relatórios, todos formatados para impressão em impressora matricial. Vou ter que reescreve-los? Se sim, ficará inviável! Listar as impressoras e selecionar as mesmas que estão instaladas no Windows já entendi. A saída do relatório é que ainda não entendi, ou seja, como substituo o SET PRINTER TO tanto para Windows como para o Linux?
Grato pela sua atenção.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Converter de Clipper para Harbour - Parte II
Olá!
É só adaptar na hora de enviar para a impressora. A criação do arquivo de impressão continua do jeito que você já faz.
Veja se funciona com matricial.
É só adaptar na hora de enviar para a impressora. A criação do arquivo de impressão continua do jeito que você já faz.
Código: Selecionar todos
// This example sends printer output to a text file, overwriting
// an existing file with the same name:
SET PRINTER TO Prnfile.txt
SET DEVICE TO PRINTER
SET PRINTER ON
//
// Colocar o código de geração do relatório aqui...
@ 0, 0 SAY "This goes to Prnfile.txt"
? "So will this!"
//
SET DEVICE TO SCREEN
SET PRINTER OFF
SET PRINTER TO // Close the print file
PrintWinPrn( "Prnfile.txt" )
*********************************
FUNCTION PrintWinPrn(cArq,cPrint)
*********************************
*
*
Local oPrn, aPrn:=WIN_PRINTERLIST(), n := 0
Local cText, nLinh, n
if empty(aPrn)
Alert('Não há impressoras instaladas')
return .f.
endif
If cPrint == Nil
cPrint := win_PrinterGetDefault()
EndIf
oPrn := win_prn():New(cPrint)
oPrn : LandScape := .f.
oPrn : FormType := FORM_A4
oPrn : Copies := 1
oPrn : CharSet(255)
oPrn : setfont('Courier New',,10,,,,255)
If !oPrn:Create()
Alert("Não foi criado documento")
Return Nil
EndIf
If !oPrn:startDoc("Imprimindo Documento")
hwg_Msginfo("Erro na Impressora")
Return Nil
EndIf
HB_CDPSelect("PT850")
cText := memoread(cArq)
nLinh := mlcount(cText)
oPrn:NewLine()
oPrn:NewLine()
For n := 1 to nLinh
oPrn:Textout(WIN_ansitooem(memoline(cText,,n)),.t.)
Next
oPrn:EndDoc()
HB_CDPSelect( "PTISO")
Return .t.
//-----------------------------------------------------------------------[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- aprendiz_ce
- Usuário Nível 3

- Mensagens: 147
- Registrado em: 21 Jul 2011 10:05
- Localização: Fortaleza/CE
Converter de Clipper para Harbour - Parte II
alxsts,alxsts escreveu:Olá!
É só adaptar na hora de enviar para a impressora. A criação do arquivo de impressão continua do jeito que você já faz.Veja se funciona com matricial.Código: Selecionar todos
// This example sends printer output to a text file, overwriting // an existing file with the same name: SET PRINTER TO Prnfile.txt SET DEVICE TO PRINTER SET PRINTER ON // // Colocar o código de geração do relatório aqui... @ 0, 0 SAY "This goes to Prnfile.txt" ? "So will this!" // SET DEVICE TO SCREEN SET PRINTER OFF SET PRINTER TO // Close the print file PrintWinPrn( "Prnfile.txt" ) ********************************* FUNCTION PrintWinPrn(cArq,cPrint) ********************************* * * Local oPrn, aPrn:=WIN_PRINTERLIST(), n := 0 Local cText, nLinh, n if empty(aPrn) Alert('Não há impressoras instaladas') return .f. endif If cPrint == Nil cPrint := win_PrinterGetDefault() EndIf oPrn := win_prn():New(cPrint) oPrn : LandScape := .f. oPrn : FormType := FORM_A4 oPrn : Copies := 1 oPrn : CharSet(255) oPrn : setfont('Courier New',,10,,,,255) If !oPrn:Create() Alert("Não foi criado documento") Return Nil EndIf If !oPrn:startDoc("Imprimindo Documento") hwg_Msginfo("Erro na Impressora") Return Nil EndIf HB_CDPSelect("PT850") cText := memoread(cArq) nLinh := mlcount(cText) oPrn:NewLine() oPrn:NewLine() For n := 1 to nLinh oPrn:Textout(WIN_ansitooem(memoline(cText,,n)),.t.) Next oPrn:EndDoc() HB_CDPSelect( "PTISO") Return .t. //-----------------------------------------------------------------------
Eu sempre enviei direto para a impressora. Tipo: Set Printer To LPT1. Só envio para arquivo quando quero que o usuário visualize em tela.
Quer dizer que com Harbour eu sempre tenho que criar o relatório em um arquivo texto e depois é que mando para a impressora, é isso?! Se sim, então no Linux é da mesma forma?
Grato e aguardo pelo seu comentário.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Converter de Clipper para Harbour - Parte II
Olá!
É aquela velha história: se não quiser ou não puder mudar, continue como está. O Harbour é compatível com Clipper neste ponto, tanto no Windows, quanto no Linux.
Mas, é altamente recomendável fazer uma modernização nos teus processos. Já faz bastante tempo que é padrão criar um arquivo de impressão, exibi-lo na tela e permitir ao usuário imprimi-lo ou salvá-lo em alguns formatos, como texto ou PDF. Dependendo do arquivo, é indicado também exportar para Excel.
É aquela velha história: se não quiser ou não puder mudar, continue como está. O Harbour é compatível com Clipper neste ponto, tanto no Windows, quanto no Linux.
Mas, é altamente recomendável fazer uma modernização nos teus processos. Já faz bastante tempo que é padrão criar um arquivo de impressão, exibi-lo na tela e permitir ao usuário imprimi-lo ou salvá-lo em alguns formatos, como texto ou PDF. Dependendo do arquivo, é indicado também exportar para Excel.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- aprendiz_ce
- Usuário Nível 3

- Mensagens: 147
- Registrado em: 21 Jul 2011 10:05
- Localização: Fortaleza/CE
Converter de Clipper para Harbour - Parte II
Olá alxsts, Bom Dia!alxsts escreveu:Olá!
É aquela velha história: se não quiser ou não puder mudar, continue como está. O Harbour é compatível com Clipper neste ponto, tanto no Windows, quanto no Linux.
Mas, é altamente recomendável fazer uma modernização nos teus processos. Já faz bastante tempo que é padrão criar um arquivo de impressão, exibi-lo na tela e permitir ao usuário imprimi-lo ou salvá-lo em alguns formatos, como texto ou PDF. Dependendo do arquivo, é indicado também exportar para Excel.
Só pra não restar dúvidas: Então o padrão atualmente é criar o arquivo (texto) e depois envia-lo para a impressora?
O meu problema é aproveitar o relatórios que tenho hoje, pois são vários e sem falar que são bastantes específicos e complexos, daí só quero "moderniza-los" em um segundo momento. O que necessito com uma certa URGÊNCIA é a criação de meia dúzia de relatórios em PDF. Como fica essa questão? O próprio Harbour já tem suporte para isso ou vou ter que utilizar algum tipo LIB? VI aqui no fórum em alguns posts antigos, que o pessoal tinha que utilizar umas "coisinhas" extras.
Mais uma vez obrigado pela sua atenção e aguardo pelo seu comentário.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Converter de Clipper para Harbour - Parte II
Boa tarde,
Para fazer o que deseja, imprimir direto sem gerar arquivo texto, use essa rotina, a única diferença que vai ter, é que será montado um menu com todas as impressoras instaladas no seu Windows para escolher, depois que escolher com ENTER, tudo vai ser direcionado para essa impressora, abaixo o código :
1- Exemplo de um PRG que vai imprimir algo, no momento onde o usuário escolhe período (exemplo nesse caso), etc
2- Como chamar a função que direciona para as impressoras
...depois continua com o seu código fonte para imprimir o relatório.
3- A função que vai mostrar as impressoras
Se vc usa o xHarbour, compila normalmente, se usa o Harbour, basta incluir a lib xhb.
Abraços
Para fazer o que deseja, imprimir direto sem gerar arquivo texto, use essa rotina, a única diferença que vai ter, é que será montado um menu com todas as impressoras instaladas no seu Windows para escolher, depois que escolher com ENTER, tudo vai ser direcionado para essa impressora, abaixo o código :
1- Exemplo de um PRG que vai imprimir algo, no momento onde o usuário escolhe período (exemplo nesse caso), etc
Código: Selecionar todos
While .T.
SetColor(Cor18)
@ 09, 17 Say 'Visualizar :'
@ 10, 17 Say 'Periodo :' Get dInicio Valid .Not. Empty(dInicio)
@ 10, 44 Get dFinal Valid dFinal >= dInicio
@ 11, 17 Say 'Confirma :'
@ 12, 17 Say 'Mensagem :'
Read
If LastKey() == 27
Close All
Seta_On()
RestScreen(,,,,Tela)
SetColor(Cor)
Return(Nil)
Endif
SetColor("n+/w,gr+/b")
@ 09, 31 Prompt 'em TELA'
@ 09, 40 Prompt 'na IMPRESSORA'
Menu To nOp_Vis
Do Case
Case nOp_Vis == 0
Close All
Seta_On()
RestScreen(,,,,Tela)
SetColor(Cor)
Return(Nil)
Case nOp_Vis == 2
EscolheImp()
EndCase
SetColor("n+/w,gr+/b")
@ 11, 31 Prompt 'Sim, imprimir'
@ 11, 45 Prompt 'NÆo, voltar'
Menu To nOp_ok
Do Case
Case nOp_ok == 0 .Or. nOp_ok == 2
Close All
Seta_On()
RestScreen(,,,,Tela)
SetColor(Cor)
Return(Nil)
EndCase
Exit
End
Código: Selecionar todos
If nOp_Vis == 1
cAplicativo := 'notepad.exe'
Set Printer To c:\RELAT.TXT
Set Device To Print
Set Console Off
Else
Set Printer To (aPrinter[nOpPrinter])
Set Device To Print
Set Console Off
Set Printer On
@ 00, 00 Say Chr(027)+Chr(040)+Chr(115)+Chr(049)+Chr(054)+Chr(054)+Chr(048)+Chr(050)+Chr(084) //arial
@ 00, 00 Say Chr(027)+Chr(038)+Chr(108)+Chr(050)+Chr(054)+Chr(065) //A4
@ 00, 00 Say Chr(027)+Chr(040)+Chr(115)+"15"+Chr(072)
Endif
3- A função que vai mostrar as impressoras
Código: Selecionar todos
Function EscolheImp()
Local nX := 0
Local Cor := SetColor()
Local Tela := SaveScreen()
aPrinter := GetPrinters()
SetColor('w+/r')
@ 00, 40 Clear To 00, 80
@ 00, 41 Say 'Escolha a impressora :'
SetColor('w/b*,n/gr*')
@ 01, 40 Clear To Len(aPrinter)+2, 80
While .T.
For nX := 1 To Len(aPrinter)
@ 01+nX, 41 Prompt aPrinter[nX]
Next nX
Menu To nOpPrinter
Do Case
Case nOpPrinter == 0
Alert('Primeiro escolha uma impressora')
Loop
Otherwise
Exit
EndCase
End
SetColor(Cor)
Return(Nil)
Abraços
Marcelo Neves
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Converter de Clipper para Harbour - Parte II
Olá!
Quanto à questão da geração de documentos em PDF, sugiro que leia o tópico Passando pra Harupdf em etapas, onde existem alguns exemplos.
Quanto à questão da geração de documentos em PDF, sugiro que leia o tópico Passando pra Harupdf em etapas, onde existem alguns exemplos.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- aprendiz_ce
- Usuário Nível 3

- Mensagens: 147
- Registrado em: 21 Jul 2011 10:05
- Localização: Fortaleza/CE
Converter de Clipper para Harbour - Parte II
Olá MSDN,
Penso que com o seu exemplo vou deixar a "coisa" bem profissional.
Muito obrigado pela sua atenção.
Penso que com o seu exemplo vou deixar a "coisa" bem profissional.
Muito obrigado pela sua atenção.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
- aprendiz_ce
- Usuário Nível 3

- Mensagens: 147
- Registrado em: 21 Jul 2011 10:05
- Localização: Fortaleza/CE
Converter de Clipper para Harbour - Parte II
Olá alxsts,
Vou dar uma olhada no tópico recomendado por você.
Mais uma vez obrigado pela sua pronta atenção.
Vou dar uma olhada no tópico recomendado por você.
Mais uma vez obrigado pela sua pronta atenção.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
- aprendiz_ce
- Usuário Nível 3

- Mensagens: 147
- Registrado em: 21 Jul 2011 10:05
- Localização: Fortaleza/CE
Converter de Clipper para Harbour - Parte II
Prezados,
Por que ao tentar imprimir em uma impressora de rede (compartilhada) a rotina me retorna o seguinte erro:
"Error TERM/2014 Create error: \\SERVER\FX2180 (DOS Error 53)"? Se eu utilizar um bloco de notas ou qualquer outra coisa imprime normalmente. Fiz o teste seguindo o exemplo postado aqui.
Grato.
Por que ao tentar imprimir em uma impressora de rede (compartilhada) a rotina me retorna o seguinte erro:
"Error TERM/2014 Create error: \\SERVER\FX2180 (DOS Error 53)"? Se eu utilizar um bloco de notas ou qualquer outra coisa imprime normalmente. Fiz o teste seguindo o exemplo postado aqui.
Grato.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Converter de Clipper para Harbour - Parte II
Bom dia pessoal, estou com um problema de troca de caracteres no ato da impressão.
O caractere que saia no Clipper, está saindo diferente no xHarbour.
O que no Clipper sai uma linha continua , no windows está saindo a letra "Ä" , como abaixo :
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
O que meu programa faz?
Cria um arquivo texto com os dados e salvo em TMP_CONS.TXT. Quanto do prompt do DOS, digito "type TMP_CONS.TXT", os carecteres estão corretos
porém quando abro o mesmo arquivo e imprimo com a classe Win32Prn ou mesmo com o Bloco de Notas, os caracteres saem trocados.
Alguém pode me ajudar?
Agradeço a atenção,
Abraço,
Eduardo
O caractere que saia no Clipper, está saindo diferente no xHarbour.
O que no Clipper sai uma linha continua , no windows está saindo a letra "Ä" , como abaixo :
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
O que meu programa faz?
Cria um arquivo texto com os dados e salvo em TMP_CONS.TXT. Quanto do prompt do DOS, digito "type TMP_CONS.TXT", os carecteres estão corretos
porém quando abro o mesmo arquivo e imprimo com a classe Win32Prn ou mesmo com o Bloco de Notas, os caracteres saem trocados.
Alguém pode me ajudar?
Agradeço a atenção,
Abraço,
Eduardo
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Converter de Clipper para Harbour - Parte II
No notepad troque a fonte para Courier New ou Terminal.os carecteres estão corretos
porém quando abro o mesmo arquivo e imprimo com a classe Win32Prn ou mesmo com o Bloco de Notas, os caracteres saem trocados.
É um problema com a fonte.
No Clipper ou Harbour é o mesmo problema.
Mude a pagina de código antes de imprimir.
HB_CDPSelect("PT850")
Código: Selecionar todos
*********************************
Function PrintWinPrn(cArq,cPrint)
*********************************
*
*
Local oPrn, aPrn:=WIN_PRINTERLIST(), n := 0
if empty(aPrn)
hwg_Msginfo('Não há impressoras instaladas')
return .f.
endif
If cPrint == Nil
cPrint := win_PrinterGetDefault()
EndIf
oPrn := win_prn():New(cPrint)
oPrn : LandScape := .F.
oPrn : FormType := WIN_DMPAPER_A4
oPrn : Copies := 1
oPrn : CharSet(255)
oPrn : setfont('Courier New',,10,,,,255)
If !oPrn:Create()
hwg_Msginfo("Não foi criado documento")
Return Nil
EndIf
If !oPrn:startDoc("Imprimindo Documento")
hwg_Msginfo("Erro na Impressora")
Return Nil
EndIf
HB_CDPSelect("PT850")
//setprc(7,0)
cText := memoread(cArq)
nLinh := mlcount(cText)
oPrn:NewLine()
oPrn:NewLine()
For n := 1 to nLinh
oPrn:Textout(WIN_ansitooem(memoline(cText,,n)),.t.)
Next
oPrn:EndDoc()
HB_CDPSelect( "PTISO")
Return .t.
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Converter de Clipper para Harbour - Parte II
Agradeço a atenção Itamar, mas infelizmente não funcionou,
O arquivo gerado original, quanto digito no prompt do DOS "type arquivo gerado.txt" os caracteres saem corretos, porém, quando abro via Bloco de Notas e altero a fonte, conforme você me orientou para Currier New, os carácteres "estranhos" continuam, como abaixo. Abaixo deste arquivo estou incluindo a função com a inclusão do HB_CDPSelect("PT850"). Muito obrigado pela atenção Itamar. Abraço
³ P E D I D O ³ ³ Paciente..: BERNARDO
Hospital..: HOSP 309
³ 177399 ³ ³ Idade.....: 2 anos 2 meses 21 dias Sexo: M ³
³ 13/01/2015 ³ ³ Peso Atual: 0,000 Kg Peso Teorico: 12,000 Kg ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ GASTO ENERGETICO DIARIO(estimado) NUTRICAO ENTERAL ³
³ FAIXA -> 1018 Ä 1113 KCal VCT : 94 KCal ³
³ Ptna : 3,54 g 14,69 % ³
³ Lip¡dio : 4,72 g 43,58 % ³
³ HC : 10,17 g 41,73 % ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ Volume [ 123.0] ml - Dieta B sica:ALFARE ³
³ Dietas: ALFARE 19,68 g ³
³ ³
³ Aditivos: ³
³ ³
³ ³
³ ³
³ ³
³ ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ELEMENTO ³ NECESSIDADES DIARIAS ³ DIETA ENTERAL ³
³ ³ RDA 89 ³ PRESCRITA ³
³ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͳÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͳÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͳ
³ ³ ³ ³
³ Ca (mg/mEq) ³ 800/ 40,0 ³ 0/ 0,0 ³
³ P (mg/mEq) ³ 800/ 16,7 ³ 49/ 1,0 ³
³ Na (mg/mEq) ³ 325/ 14,1 Ä 975/ 42,4 ³ 57/ 2,5 ³
³ K (mg/mEq) ³ 550/ 14,1 Ä 1650/ 42,2 ³ 118/ 3,0 ³
³ Cl (mg/mEq) ³ 500/ 14,1 Ä 1500/ 42,3 ³ 98/ 2,8 ³
³ Mg (mg/mEq) ³ 150/ 12,3 ³ 12/ 0,98 ³
³ Fe (mg) ³ 15 ³ 1 ³
³ Zn (æg) ³ 10000 ³ 707,8 ³
³ I (æg) ³ 70 ³ 5 ³
³ Cu (æg) ³ 1000,0 Ä 1500,0 ³ 52,43 ³
³ Mn (æg) ³ 1000,0 Ä 1500,0 ³ 6,57 ³
³ F (mg) ³ 0,50 Ä 1,50 ³ 0,00 ³
³ Cr (æg) ³ 20,00 Ä 80,00 ³ 0,00 ³
³ Se (æg) ³ 20,0 Ä 80,0 ³ 0,0 ³
³ Mo (æg) ³ 50,0 Ä 100,0 ³ 0,0 ³
³ Vitamina A (UI) ³ 1333 ³ 283 ³
³ Vitamina D (UI) ³ 400 ³ 56 ³
³ Vitamina E (UI) ³ 7,45 ³ 1,18 ³
³ Vitamina K (æg) ³ 15 Ä 30 ³ 8 ³
³ Vitamina C (mg) ³ 45 ³ 7 ³
³ Tiamina Ä B1 (mg) ³ 0,7 ³ 0,1 ³
³ Riboflavina Ä B2 (mg) ³ 0,80 ³ 0,13 ³
³ Piridoxina Ä B6 (mg) ³ 0,90 ³ 0,06 ³
³ Niacina - PP - B3(mg) ³ 9 ³ 1 ³
³ Ac. Folico (æg) ³ 100 ³ 8 ³
³ Cobalamina Ä B12 (æg) ³ 2,0000 ³ 0,2096 ³
³ Biotina (æg) ³ 65 ³ 2 ³
³ Ac. Pantotenico (mg) ³ 3 ³ 0 ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ OUTROS ELEMENTOS CONTIDOS NA DIETA PRESCRITA ³
³ Glutamina : 0,000 g Fibra : 0,000 g ³
³ Taurina : 0,000 g Colina : 7,085 mg ³
³ Carnitina : 0,000 g Inositol : 4,192 mg ³
³ Arginina : 0,0000 g Biotina : 2,096 mg ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
* INICIO DO FONTE QUE IMPRIME EM WINDOWS
#include "WinGdi.ch"
// Função que imprime o arquivos ArqTxt já salvo em disco para impressora em windows.
Function ImpArq(ArqTxt,inPrnDefault,inTipoImpressao)
Local cPrinter
Local contl := 1
Private PrnDefault
cFileName := ArqTxt
cTipoImpressao := 1 // 1 = normal 2 = Comprimido
If inTipoImpressao = Nil
cTipoImpressao := 2
Else
cTipoImpressao := inTipoImpressao
Endif
If inPrnDefault = nil
PrnDefault := .f.
Else
PrnDefault := .t.
Endif
If !File( cFileName )
Return Nil
Else // Vamos colocar seu arquivo num Array
cLinha := Nil
aLinesPrint := {}
cBuffer := FOpen( cFileName, 2 )
Do While Hb_FReadLine( cBuffer, @cLinha, Nil, 255 ) = 0
AaDd( aLinesPrint, cLinha )
EndDo
FClose( cBuffer )
EndIf
cPrinter := PegaPrinter() // escolhe a impressora
If !Empty( cPrinter )
nCopias := 1 // n£mero de c¢pias
oPrinter := Win32Prn():new( cPrinter )
oPrinter:landscape := .F.
oPrinter:formType := DMPAPER_A4 // folha A4
oPrinter:copies := nCopias
IF .NOT. oPrinter:create()
Alert("Erro Tentando Acessar a Impressora")
Return Nil
ENDIF
IF .NOT. oPrinter:startDoc( "Impressao Teste" )
Alert("Erro Tentando Enviar os Dados de Impressao")
Return Nil
ENDIF
IF cTipoImpressao = 2 // impressao comprimida
// impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
// oPrinter:SetFont( "Lucida Console", 10, { 3, -50 } )
oPrinter:SetFont( "Courier New", 10, { 3, -50 } ) // Letra Default do DOS -> Courier New
Else // impressao normal
// oPrinter:SetFont( "Lucida Console", 10 )
oPrinter:SetFont( "Courier New", 10 ) // Letra Default do DOS -> Courier New
oPrinter:CharSet( 0 )
oPrinter:bold( FW_NORMAL ) // nao negrito, nao it lico, etc...
Endif
oPrinter:leftMargin(130) // Posiciona Margem da folha.
// Imprimir arquivo Texto enviado via parametro para a funcão impArq().
HB_CDPSelect("PT850") <-------- INCLUSAO SUGERIDA
For i = 1 To Len ( aLinesPrint )
oPrinter:textOut( alltrim(aLinesPrint[ i ]) ) // imprime a linha
oPrinter:newLine() // passa para proxima linha
Next
oPrinter:endDoc() // envia a impressora
oPrinter:destroy() // fecha documento de impressao
ERASE &cFileName // apaga arquivo criado para impressao. 21-08-2014
EndIf
// EndIf // Imprime relatório?
Return Nil
**************************************************************
Function PegaPrinter() // seleciona impressora
Local i, nPrn := 1, oPrn, nMaxLen := 0, aPNomes := {}
Local cPrinter := "", aPrn := GetPrinters( .t. )
Local cPrinDefault := GetDefaultPrinter()
If Empty( aPrn )
Alert( "Nenhuma impressora Instalada" )
Return ( cPrinter )
Endif
For i=1 To Len( aPrn )
AaDd( aPNomes , aPrn[i,1] )
nPrn := If( aPrn[i,1] = cPrinDefault, i, nPrn )
nMaxLen := If( Len( aPrn[i,1] ) > nMaxLen, Len( aPrn[i,1] ), nMaxLen )
Next
If PrnDefault
Return ( cPrinDefault ) // teste para impressão de folhas seguidas
Endif
nCor := SetColor()
Set color to
Clear Screen
Set curs On
nPrn := AChoice( 3, 10, Len( aPNomes )+3, nMaxLen+10, aPNomes, .T., Nil , nPrn )
SetColor(nCor)
If nPrn = 0
Return ( cPrinter )
EndIF
cPrinter := Alltrim( aPNomes[nPrn] )
Return ( cPrinter )
O arquivo gerado original, quanto digito no prompt do DOS "type arquivo gerado.txt" os caracteres saem corretos, porém, quando abro via Bloco de Notas e altero a fonte, conforme você me orientou para Currier New, os carácteres "estranhos" continuam, como abaixo. Abaixo deste arquivo estou incluindo a função com a inclusão do HB_CDPSelect("PT850"). Muito obrigado pela atenção Itamar. Abraço
³ P E D I D O ³ ³ Paciente..: BERNARDO
Hospital..: HOSP 309
³ 177399 ³ ³ Idade.....: 2 anos 2 meses 21 dias Sexo: M ³
³ 13/01/2015 ³ ³ Peso Atual: 0,000 Kg Peso Teorico: 12,000 Kg ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ GASTO ENERGETICO DIARIO(estimado) NUTRICAO ENTERAL ³
³ FAIXA -> 1018 Ä 1113 KCal VCT : 94 KCal ³
³ Ptna : 3,54 g 14,69 % ³
³ Lip¡dio : 4,72 g 43,58 % ³
³ HC : 10,17 g 41,73 % ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ Volume [ 123.0] ml - Dieta B sica:ALFARE ³
³ Dietas: ALFARE 19,68 g ³
³ ³
³ Aditivos: ³
³ ³
³ ³
³ ³
³ ³
³ ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ELEMENTO ³ NECESSIDADES DIARIAS ³ DIETA ENTERAL ³
³ ³ RDA 89 ³ PRESCRITA ³
³ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͳÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͳÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͳ
³ ³ ³ ³
³ Ca (mg/mEq) ³ 800/ 40,0 ³ 0/ 0,0 ³
³ P (mg/mEq) ³ 800/ 16,7 ³ 49/ 1,0 ³
³ Na (mg/mEq) ³ 325/ 14,1 Ä 975/ 42,4 ³ 57/ 2,5 ³
³ K (mg/mEq) ³ 550/ 14,1 Ä 1650/ 42,2 ³ 118/ 3,0 ³
³ Cl (mg/mEq) ³ 500/ 14,1 Ä 1500/ 42,3 ³ 98/ 2,8 ³
³ Mg (mg/mEq) ³ 150/ 12,3 ³ 12/ 0,98 ³
³ Fe (mg) ³ 15 ³ 1 ³
³ Zn (æg) ³ 10000 ³ 707,8 ³
³ I (æg) ³ 70 ³ 5 ³
³ Cu (æg) ³ 1000,0 Ä 1500,0 ³ 52,43 ³
³ Mn (æg) ³ 1000,0 Ä 1500,0 ³ 6,57 ³
³ F (mg) ³ 0,50 Ä 1,50 ³ 0,00 ³
³ Cr (æg) ³ 20,00 Ä 80,00 ³ 0,00 ³
³ Se (æg) ³ 20,0 Ä 80,0 ³ 0,0 ³
³ Mo (æg) ³ 50,0 Ä 100,0 ³ 0,0 ³
³ Vitamina A (UI) ³ 1333 ³ 283 ³
³ Vitamina D (UI) ³ 400 ³ 56 ³
³ Vitamina E (UI) ³ 7,45 ³ 1,18 ³
³ Vitamina K (æg) ³ 15 Ä 30 ³ 8 ³
³ Vitamina C (mg) ³ 45 ³ 7 ³
³ Tiamina Ä B1 (mg) ³ 0,7 ³ 0,1 ³
³ Riboflavina Ä B2 (mg) ³ 0,80 ³ 0,13 ³
³ Piridoxina Ä B6 (mg) ³ 0,90 ³ 0,06 ³
³ Niacina - PP - B3(mg) ³ 9 ³ 1 ³
³ Ac. Folico (æg) ³ 100 ³ 8 ³
³ Cobalamina Ä B12 (æg) ³ 2,0000 ³ 0,2096 ³
³ Biotina (æg) ³ 65 ³ 2 ³
³ Ac. Pantotenico (mg) ³ 3 ³ 0 ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ OUTROS ELEMENTOS CONTIDOS NA DIETA PRESCRITA ³
³ Glutamina : 0,000 g Fibra : 0,000 g ³
³ Taurina : 0,000 g Colina : 7,085 mg ³
³ Carnitina : 0,000 g Inositol : 4,192 mg ³
³ Arginina : 0,0000 g Biotina : 2,096 mg ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
* INICIO DO FONTE QUE IMPRIME EM WINDOWS
#include "WinGdi.ch"
// Função que imprime o arquivos ArqTxt já salvo em disco para impressora em windows.
Function ImpArq(ArqTxt,inPrnDefault,inTipoImpressao)
Local cPrinter
Local contl := 1
Private PrnDefault
cFileName := ArqTxt
cTipoImpressao := 1 // 1 = normal 2 = Comprimido
If inTipoImpressao = Nil
cTipoImpressao := 2
Else
cTipoImpressao := inTipoImpressao
Endif
If inPrnDefault = nil
PrnDefault := .f.
Else
PrnDefault := .t.
Endif
If !File( cFileName )
Return Nil
Else // Vamos colocar seu arquivo num Array
cLinha := Nil
aLinesPrint := {}
cBuffer := FOpen( cFileName, 2 )
Do While Hb_FReadLine( cBuffer, @cLinha, Nil, 255 ) = 0
AaDd( aLinesPrint, cLinha )
EndDo
FClose( cBuffer )
EndIf
cPrinter := PegaPrinter() // escolhe a impressora
If !Empty( cPrinter )
nCopias := 1 // n£mero de c¢pias
oPrinter := Win32Prn():new( cPrinter )
oPrinter:landscape := .F.
oPrinter:formType := DMPAPER_A4 // folha A4
oPrinter:copies := nCopias
IF .NOT. oPrinter:create()
Alert("Erro Tentando Acessar a Impressora")
Return Nil
ENDIF
IF .NOT. oPrinter:startDoc( "Impressao Teste" )
Alert("Erro Tentando Enviar os Dados de Impressao")
Return Nil
ENDIF
IF cTipoImpressao = 2 // impressao comprimida
// impressao comprimida: { 3, -50 } ‚ igual 50/3, ou seja 16.6 cpp
// oPrinter:SetFont( "Lucida Console", 10, { 3, -50 } )
oPrinter:SetFont( "Courier New", 10, { 3, -50 } ) // Letra Default do DOS -> Courier New
Else // impressao normal
// oPrinter:SetFont( "Lucida Console", 10 )
oPrinter:SetFont( "Courier New", 10 ) // Letra Default do DOS -> Courier New
oPrinter:CharSet( 0 )
oPrinter:bold( FW_NORMAL ) // nao negrito, nao it lico, etc...
Endif
oPrinter:leftMargin(130) // Posiciona Margem da folha.
// Imprimir arquivo Texto enviado via parametro para a funcão impArq().
HB_CDPSelect("PT850") <-------- INCLUSAO SUGERIDA
For i = 1 To Len ( aLinesPrint )
oPrinter:textOut( alltrim(aLinesPrint[ i ]) ) // imprime a linha
oPrinter:newLine() // passa para proxima linha
Next
oPrinter:endDoc() // envia a impressora
oPrinter:destroy() // fecha documento de impressao
ERASE &cFileName // apaga arquivo criado para impressao. 21-08-2014
EndIf
// EndIf // Imprime relatório?
Return Nil
**************************************************************
Function PegaPrinter() // seleciona impressora
Local i, nPrn := 1, oPrn, nMaxLen := 0, aPNomes := {}
Local cPrinter := "", aPrn := GetPrinters( .t. )
Local cPrinDefault := GetDefaultPrinter()
If Empty( aPrn )
Alert( "Nenhuma impressora Instalada" )
Return ( cPrinter )
Endif
For i=1 To Len( aPrn )
AaDd( aPNomes , aPrn[i,1] )
nPrn := If( aPrn[i,1] = cPrinDefault, i, nPrn )
nMaxLen := If( Len( aPrn[i,1] ) > nMaxLen, Len( aPrn[i,1] ), nMaxLen )
Next
If PrnDefault
Return ( cPrinDefault ) // teste para impressão de folhas seguidas
Endif
nCor := SetColor()
Set color to
Clear Screen
Set curs On
nPrn := AChoice( 3, 10, Len( aPNomes )+3, nMaxLen+10, aPNomes, .T., Nil , nPrn )
SetColor(nCor)
If nPrn = 0
Return ( cPrinter )
EndIF
cPrinter := Alltrim( aPNomes[nPrn] )
Return ( cPrinter )

