Pablo César escreveu:esse procedimento de "seleção de conteúdo a ser impresso" está dentro da mesma função que faz a impressão pelo spooler (função PRT_SendToSpooler).
E onde você acha que isso deveria estar? A função de impressão precisa saber
o quê vai imprimir. Se olhar com calma, verá que existem duas funções de apoio. Uma destrincha (ou explode) a lista de páginas, obtendo e validando as seqüências de números. A segunda cria um índice em memória, que me permite encontrar facilmente cada página. Aí entra em ação a função de impressão que lê a lista de páginas e vai imprimindo uma a uma.
O que eu estou tentado lhe dizer, é que seria até mais aproveitável ser separado o procedimento de "seleção de conteúdo a ser impresso" (que está dentro da função PRT_SendToSpooler) em função SEPARADA
Gostaria que você me explicasse por quê seria mais aproveitável separar isso? E aproveitável pra quem?
Veja: a seleção do quê será impresso vem pelo argumento que representa a lista de números de páginas. De acordo com a filosofia do projeto, eu preciso dessa lista desmembrada. Isso é feito por uma função à parte, como já expliquei acima. Depois disso essa lista está pronta para ser lida na função principal. A cada número lido a página é encontrada no arquivo com a ajuda do índice montado por aquela outra função. Encontrada a página, ela é enviada para o
spool. Ou seja, não dá pra separar coisa alguma.
e até mesmo criando um novo SWITH para que esse procedimento venha acontecer em um arquivo temporário para impressão.
Um novo
switch pra quê exatamente? Não entendi isso. Qual seria a função dele? E pra quê um arquivo extra?
Realmente isso não me parece ter a menor lógica. Pra quê dar voltas e voltas se vou parar no mesmo lugar? Do jeito que foi feito é direto.
Isso porque, você estaria acrescentando diversificando e conciliando recursos do WAPI, podendo até ser executado em conjunto ou simultaneamente com a função PRINT.
Sua concepção me parece terrivelmente equivocada. A forma de trabalho que você está sugerindo, além de totalmente estranha (nem entendi muito bem), só faria acrescentar complexidade e dificuldade naquilo que não só é simples, como já está pronto e funcionando. Se eu percebesse na sua proposta algum ganho, até poderia acatar uma sugestão. Mas não é o que eu vejo.
Pelo que eu ví e entendí do seu código fonte (na função PRT_SendToSpooler), você manda linha a linha o conteúdo do arquivo de impressão e (linha a linha) são enviado ao spool de impressão.
Você não entendeu o código. Eu mando página a página.
Não confunda com aquela nova proposta de imprimir um arquivo texto crú, onde aí sim, cada linha seria lida individualmente e impressa sem qualquer tratamento. Mas isso ainda é apenas uma idéia.
Agora eu pergunto: Não seria mais rápido ou melhor enviar todo o arquivo pro spool ?. Qual seria a vantagem de manter isso assim ?
Poderia mandar o relatório inteiro, mas isso não produziria qualquer efeito benéfico em termos de velocidade. Não há uma grande vantagem em mandar página por página, mas em termos de facilidade de codificação, nem se compara, haja vista que nem sempre se quer imprimir tudo. E se o sujeito quiser imprimir apenas a páginas pares? Eu teria que ter dois blocos de código: um para imprimir tudo numa pancada só e outro pra imprimir de forma seletiva, página a página. Como não há ganho nisso, é melhor deixar assim.
Outra coisa que eu te questiono é sobre os 5 parâmetros que foram adicionados ao swicth -PRINT. Sei que são necessário para compor a lógica para o procedimento de impressão seletiva. No obstante, se você tivesse aplicado outra técnica (como por exemplo aquela que eu exponho no tópico viewtopic.php?f=1&t=8105#p45550 que fala na criação de um segundo arquivo para impressão) você não iria necessitar de tantos parâmetros para fazer a impressão. Em vista da possibilidade de inserir mais um recurso de impressão gráfica, você mesmo está vendo que cada vez está mais complicado toda essa questão de impressão. Não seria mais um motivo para desdobrar procedimentos ?
A quantidade de parâmetros é uma questão irrelevante. Eu poderia ter 50 parâmetros e isso não me atrapalharia em nada. Aí entra a biblioteca de abstração, cuja função principal é facilitar a sua vida, como usuário da WAPI. A camada extra de dificuldade a que você se refere, acredite, não está no tamanho da lista de argumentos. Isso é o de menos. Se meu problema fosse só esse, estaria contente.
Inserir o modo gráfico seria (teoricamente) apenas incluir mais um simples argumento. Na função principal de impressão eu talvez faça um desvio para a conversão, para depois enviar para o
spool por ali mesmo. Mas há outras formas de fazer isso. Ainda não decidi nada. Mas pra você, usuário, isso é totalmente irrelevante.
Aliás, sendo irrelevante pra você, não entendo essa sua preocupação em "desdobrar procedimentos" dentro do WAPI.C. Pra você isso não importa. O que realmente importa é que funcione e bem, de forma transparente pra você. Isso, até onde foi feito, funciona sim. E continuará funcionando, mesmo com o acréscimo dos recursos que já mencionei. E os que não mencionei ainda, mas que são apenas idéias.