Ola amigos
andei fazendo uma busca no fórum sobre relatório no modo gráfico desenvolvido em Harbour MiniGUI Extended Edition e não encontrei nenhuma informação que me ajudasse com meu problema.
eu já criei um relatório utilizando a HBPRINT mas estou com uma duvida, no modo console quando íamos imprimir um relatório em formulário continuo de 80 colunas tínhamos que verificar o tamanho das varias a serem impressas para não estourar o tamanho do formulário isso valia para 80 ou 132 colunas, e no modo gráfico ainda é o mesmo procedimento? sabendo que podemos mudar o tamanho de fonte.
como fica esta situação? se eu usar uma fonte por exemplo times new roman SIZE 10 em um formulário tipo A4 vai caber +/- 120 caracteres e se usar SIZE 20 vai caber 60 caracteres ( esta quantidade é apenas fictícia nao tenho nem ideia de quantos caracteres poderia caber)
alguém tem algum material que fala sobre o assunto onde eu possa ler e esclarecer um pouco melhor sobre a impressao no modo gráfico?
abraços
amparo
relatorio usando miniprint ou hbprint
Moderador: Moderadores
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
relatorio usando miniprint ou hbprint
Amparo, a impressão no modo gráfico como você poderá usar várias fontes de letras com tamanho variados, fica complicado previamente saber qual será o tamanho do espaço de impressão. Se for necessário ter um número certo de caracteres impressos em uma linha, o melhor é escolher fontes de letras mono-espaçadas (Courier New, Lucida Console, etc), onde o espaço ocupado por uma letra será igual para todas as letras.
Fontes como a Times New Roman, tem largura variável, o espaço ocupado por uma letra é diferente de uma letra para outra, então no mesmo espaço ocupado por uma letra M pode conter até 3 letras I. Inclusive, o tamanho 10 da fonte Times New Roman é diferente do tamanho 10 da fonte Arial, as letras da fonte Arial são maiores.
Então se for o caso de saber previamente o número de caracteres impressos em um linha, o melhor a fazer, é usar fontes mono-espaçadas. Uma dica para saber quantos caracteres por linha, é entrar no Word e formatar o tamanho da página e as margens ao seu gosto e depois digitar várias linhas com números 1234567890123... até o final da linha, usando a fonte Courier New, mas formatando cada linha em um tamanho diferente de letra. Assim você vai saber quantos caracteres podem ser impressos na linha por cada tamanho da fonte.
Abraços,
Fontes como a Times New Roman, tem largura variável, o espaço ocupado por uma letra é diferente de uma letra para outra, então no mesmo espaço ocupado por uma letra M pode conter até 3 letras I. Inclusive, o tamanho 10 da fonte Times New Roman é diferente do tamanho 10 da fonte Arial, as letras da fonte Arial são maiores.
Então se for o caso de saber previamente o número de caracteres impressos em um linha, o melhor a fazer, é usar fontes mono-espaçadas. Uma dica para saber quantos caracteres por linha, é entrar no Word e formatar o tamanho da página e as margens ao seu gosto e depois digitar várias linhas com números 1234567890123... até o final da linha, usando a fonte Courier New, mas formatando cada linha em um tamanho diferente de letra. Assim você vai saber quantos caracteres podem ser impressos na linha por cada tamanho da fonte.
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
relatorio usando miniprint ou hbprint
ola amigos,
bom dia a todos
Toledo, mais uma vez obrigado pela ajuda.
montei um relatório bem simples mais funcional usando a miniprint , só que me surgiu duvidas
em minha aplicação tenho um controle cfe abaixo é um CHECKBOX para o usuário escolher se quer visualizar ou não o relatório.
1.duvida, o select printer dialog ... abre um form para o usuário configurar a impressora, sendo: escolher em qual impressora vai imprimir, mudar as propriedades da impressora, escolher o tamanho de papel, mudar de retrato para paisagem e ate procurar uma impressora na rede, pois bem, após ele confirmar com o OK eu faço START PRINTDOC
START PRINTPAGE, pergunto, tem como pegar os valores que foram setados, sele mudou o tamanho do formulário ou se ele trocou de retrato para paisagem ou vise versa.
2.duvida, esta não me preocupa muito é apenas para alargar mais o conhecimento, tem como configurar o PREVIEW? tirar ou acrescentar um botão, mudar a posição na tela, centralizar o relatório dentro do form quando você clica com o mouse para obter lupa?
desde ja agradeço
bom dia a todos
Toledo, mais uma vez obrigado pela ajuda.
montei um relatório bem simples mais funcional usando a miniprint , só que me surgiu duvidas
em minha aplicação tenho um controle cfe abaixo
Código: Selecionar todos
IF GETPROPERTY( FORM_MAE, "preview_not_yes", "VALUE" ) == .T.
SELECT PRINTER DIALOG TO PRINTER_OK PREVIEW
ELSE
SELECT PRINTER DIALOG TO PRINTER_OK
ENDIF1.duvida, o select printer dialog ... abre um form para o usuário configurar a impressora, sendo: escolher em qual impressora vai imprimir, mudar as propriedades da impressora, escolher o tamanho de papel, mudar de retrato para paisagem e ate procurar uma impressora na rede, pois bem, após ele confirmar com o OK eu faço START PRINTDOC
START PRINTPAGE, pergunto, tem como pegar os valores que foram setados, sele mudou o tamanho do formulário ou se ele trocou de retrato para paisagem ou vise versa.
2.duvida, esta não me preocupa muito é apenas para alargar mais o conhecimento, tem como configurar o PREVIEW? tirar ou acrescentar um botão, mudar a posição na tela, centralizar o relatório dentro do form quando você clica com o mouse para obter lupa?
desde ja agradeço
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
relatorio usando miniprint ou hbprint
ola amigos
resolvi o meu problema usando a include winprint.ch com a variável HBPRNMAXROW e HBPRNMAXCOL
mas agora estou com um problema maior não consigo imprimir um relatório que é pré montado em meu sistema,
tenho uma tabela DBF chamada de REPORTS esta tabela tem os seguintes campos R_HEADER,R_FOOTER etc...
na R_HEADER tenho a seguinte instrução:em harbour uso da seguinte forma:
aqui a funcao BuildArray
só que usando a Harbour MiniGUI Extended Edition 2.3.3 não consigo o mesmo efeito, sei que o comando para imprimir é @ lin,col say textoaimprimir font ... to print
mas já tentei varias formas e não consigo imprimir.
será que a forma que estou querendo montar não dará certo em minigui, somente funciona um harbour?
resolvi o meu problema usando a include winprint.ch com a variável HBPRNMAXROW e HBPRNMAXCOL
mas agora estou com um problema maior não consigo imprimir um relatório que é pré montado em meu sistema,
tenho uma tabela DBF chamada de REPORTS esta tabela tem os seguintes campos R_HEADER,R_FOOTER etc...
na R_HEADER tenho a seguinte instrução:
Código: Selecionar todos
{|x| DevPos(01,x+1),DevOut("Indústria Remaster Ltda" )}
{|x| DevPos(02,x+1),DevOut( REPLICATE("-",80))}
{|x| DevPos(03,x+1), DevOut( PadC("Ficha de Cliente - Completa - Emissao em : "+DtoC( Date()),70) )}
{|x| DevPos(05,x+1), DevOut("Código : "+CLIENTES->CODIGO+" Tipo : "+TRIM(CLIENTES->TIPO)+" Pessoa : "+CLIENTES->PESSOA)}Código: Selecionar todos
LOCAL aHeadArray := {}
LOCAL aBodyArray := {}
aHeadArray := BuildArray( AllTrim( REPORTS->R_HEADER ) )
aFootArray := BuildArray( AllTrim( REPORTS->R_FOOTER ) )
...
...
SET CONSOLE OFF
SET PRINTER TO ( cPorta )
SET PRINTER ON
SET DEVICE TO PRINTER
nSize := Len( aHeadArray )
FOR nCont := 1 TO nSize
IF PrintStop( cPorta ) // Testa se pressionou ESC
lRetorno := .F.
EXIT
ENDIF
bCodeBlock := aHeadArray[ nCont ]
Eval( bCodeBlock, nLeft ) // aqui os dados sao impressos conforme as coordenadas no REPORTS->R_HEADER
NEXT nContCódigo: Selecionar todos
FUNCTION BuildArray( strMemo )
LOCAL aArrayRet, nLinhas, nContador, uBloco
aArrayRet := {}
nLinhas := MLCount( strMemo, 250 )
FOR nContador := 1 TO nLinhas
uBloco := AllTrim( MemoLine( strMemo, 250, nContador ) )
IF Empty( uBloco ) .OR. uBloco = "//"
LOOP
ENDIF
AAdd( aArrayRet, &(uBloco) )
NEXT nContador
RETURN aArrayRetmas já tentei varias formas e não consigo imprimir.
será que a forma que estou querendo montar não dará certo em minigui, somente funciona um harbour?