relatorio usando miniprint ou hbprint

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

relatorio usando miniprint ou hbprint

Mensagem por Amparo »

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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

relatorio usando miniprint ou hbprint

Mensagem por Toledo »

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,
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
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

relatorio usando miniprint ou hbprint

Mensagem por Amparo »

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

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
ENDIF
é 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
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

relatorio usando miniprint ou hbprint

Mensagem por Amparo »

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:

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)}
em harbour uso da seguinte forma:

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 nCont
aqui a funcao BuildArray

Có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  aArrayRet
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?
Responder