Sala de Informática, Hospital de Medicina Tradicional Chinesa de Wuxi, Província de Jiangsu
Yuanbo
----O sistema de gerenciamento de informações do nosso hospital utiliza programação Delphi. Como os requisitos de cada disciplina são diferentes e os formulários de laudo também são diversos, é uma dor de cabeça escrever. O Delphi é executado na plataforma WINDOWS e a impressão é completamente diferente daquela no DOS, é difícil de controlar e consome recursos. Para um relatório um pouco complexo com requisitos especiais, o Quick Report não pode ser realizado. Aqui estão alguns métodos de implementação para relatórios típicos encontrados na programação.
---- 1. O departamento financeiro de qualquer unidade possui vários livros-razão grossos. O departamento financeiro do nosso hospital propôs imprimir o livro-razão do armazém de medicamentos para se livrar do livro-razão manual. o escritório. O pedido é razoável, reitor. Também se diz que deveria ser assim. Olhando para os pequenos cartões vermelhos e verdes fornecidos pelo Departamento de Finanças, impressos uniformemente e com espaçamento entre linhas de 3 mm, não pude deixar de pensar na virtude da frugalidade do povo chinês. Considerando que cada medicamento deve ser impresso pelo menos uma vez, e não falta uma única linha da tabela. Além disso, existem mais de 2.000 tipos de medicamentos no hospital de medicina tradicional chinesa, portanto este relatório deve ser impresso em impressora a laser (como). para saber como fazer com que o reitor concorde em comprar uma impressora a laser, então é outra coisa. Como a automação de escritório pode ser gratuita?) A ideia de implementar o programa é basicamente usar o papel de impressão como tela para desenhar pequenos retângulos nele, o que é implementado especificamente pelos seguintes processos: (Deixe o Form chamado Ttzview).
Primeiro defina duas classes no programa:
titlerecord=registro
Correto: Trecto;
Título:string;
fim;
registro detalhado=registro
Areto: Treto;
alinhamento:Palavra;
fim;
---- Estabeleça os quatro processos a seguir;
---- RectDraw(Acanvas:Tcanvas;s:string;R:Trect;frame:boolean;posição:palavra);
---- Este processo é usado para desenhar um retângulo, e a moldura determina se uma linha deve ser desenhada (é claro que ela deve ser desenhada aqui!);
----PRintinitit(primeiro topo,primeiroesquerdo:inteiro);
---- Este processo é utilizado para inicialização, que consiste em definir a posição de cada pequeno retângulo no papel;
---- printtitle(acanvas:Tcanvas);
----Este processo consiste em imprimir o cabeçalho, pois os caracteres do cabeçalho são sempre maiores;
---- printdetail(acanvas:Tcanvas;Qtz:Tdataset;acount:integer;firstpage:integer);
----Este processo consiste em imprimir o conteúdo específico. Uma página imprime 40 linhas. Se não for suficiente, mude a página. Resumindo, uma página só pode ser um medicamento.
---- printhj(acanvas:Tcanvas);
---- Você pode perceber rapidamente que esse processo consiste em imprimir o total!
---- Basta criar um Botton e chamar os quatro processos printinitit, printtitle, printdetail e printhj em sequência.
---- (Formato de chamada: printtitle(printer.canvas);)
---- A propósito, Qtz é o dado contábil consultado. Como gerá-lo não será discutido aqui.
----Os procedimentos específicos são os seguintes
---- Este programa é executado nas plataformas delphi1, delphi3 versões WIN3.2, WIN95, WIN97 e WIN98. A propósito, ele fornece a estrutura da biblioteca do banco de dados razão.
---- 2. Relatórios muito complexos e incompreensíveis
---- O Departamento de Oncologia do nosso hospital precisa imprimir os prontuários dos pacientes. Isso faz parte da modernização das especialidades. Os Serviços de Saúde virão fiscalizar, portanto a tarefa deve ser concluída. Cada prontuário tem mais de 100 itens. Se você usar o Qreport, se precisar adicionar ou subtrair um item no meio (isso acontece com frequência), o ajuste e a disposição de dezenas de itens farão as pessoas desmaiarem. Criei mais de 100 variáveis temporárias de uma vez e desenhei na tela virtual. Funcionou perfeitamente na minha máquina PII233 com 64M de memória, mas quando mudei para a máquina do departamento de oncologia com 486,8M de memória (não riam, pessoal), o. a pilha do sistema irá transbordar imediatamente, então tenho que recorrer ao método do ponteiro (meu nível de programação parece ter melhorado novamente, secretamente feliz), o método é o seguinte:
Primeiro crie a classe titleprint:
titleprint=^Titlerecord;
titlerecord=registro
Correto: Trecto;
Título:string[50];
fim;
Em seguida crie o processo printnow (o nome do Formulário é
zlk, printdot são os pontos da impressora, geralmente 180);
procedimento Tzlk.printnow(acanvas:Tcanvas);
var i,x,y,pc_count:inteiro;
myprint:array[0..200] da impressão do título;
começar
primeiro topo:=redondo(int(0,5/2,54*printponto));
primeiraesquerda:=redondo(int(0.1/2.54*printdot));
altura da linha:=redondo(int(0,7/2,54*printponto));
x:=0+primeiraesquerda;y:=redondo(int
(1,3/2,54*ponto de impressão))+primeiro topo;
contagem_pc:=0;
inc(pc_count); new(minhaimpressão[pc_count]);
minhaimpressão[pc_count]^.currect:=rect
(x+redondo(int(0,1/2,54*printponto))+primeiraesquerda,y,
x+redondo(int(3.0/2.54*printdot))+primeiraesquerda,
y+firsttop+round(int(0,5/2,54*printdot)));
minhaimpressão[pc_count]^.atitle:=Lnome.
legenda+nome do banco de dados.texto;
ACanvas.MoveTo(minhaimpressão[pc_count]^.
atual.esquerda,
minhaimpressão[pc_count]^.currect.top-round
(altura da linha/5));
{As quatro linhas a seguir serão repetidas mais de 100 vezes, o que é basicamente a mesma coisa.
Eu não escrevo todos para ganhar royalties}
inc(pc_count); new(minhaimpressão[pc_count]);
minhaimpressão[pc_count]^.currect:=scalerect(
minhaimpressão[pc_count-1]^.currect,round(int
(2,5/2,54*ponto de impressão)),0);
minhaimpressão[pc_count]^.atitle:=Lxb.caption+Cxb.text;
ACanvas.LineTo(minhaimpressão[i]^.currect.right,
myprint[i]^.currect.top-round(rowheight/5));
.......
{Imprimir}
printtitle(acanvas);
{Esta função não será fornecida, não importa se você não precisa do cabeçalho}
para i:=1 para pc_count faça
começar
RectDraw(Acanvas,minhaimpressão[i]^.atitle,
minhaimpressão[i]^.currect,false,
dt_left ou dt_singleline ou dt_vcenter);
fim;
descartar(minhaimpressão[pc_count]);
{Não se esqueça de liberar a memória ocupada pelo ponteiro}
fim;
---- Por fim, crie um Botton, adicione um julgamento se ele está realmente impresso e depois chame essas funções.
---- (Formato de chamada: printtitle(printer.canvas);)
---- Depois de ler os dois exemplos acima, você acha que imprimir no WINDOWS é realmente muito simples, assim como desenhar uma tabela à mão, e se a posição do conteúdo da tabela é centralizada, esquerda ou direita depende inteiramente do Alinhamento do conteúdo impresso. O formato de impressão é determinado pelo formato de exibição do conteúdo. Você não precisa calculá-lo sozinho, o que é muito conveniente.