Salle informatique, Hôpital de médecine traditionnelle chinoise de Wuxi, province du Jiangsu
Yuan Bo
----Le système de gestion de l'information de notre hôpital utilise la programmation Delphi Étant donné que les exigences de chaque sujet sont différentes et que les formulaires de rapport sont également divers, c'est un casse-tête à rédiger. Delphi fonctionne sous la plate-forme WINDOWS et l'impression est complètement différente de celle sous DOS. Elle est difficile à contrôler et consomme des ressources. Pour un rapport légèrement complexe avec des exigences particulières, Quick Report ne peut pas être réalisé. Voici quelques méthodes d’implémentation pour les rapports typiques rencontrés en programmation.
---- 1. Le service des finances de toute unité dispose de plusieurs grands livres épais Le service des finances de notre hôpital a proposé d'imprimer le grand livre de l'entrepôt de médicaments afin de se débarrasser du grand livre manuel. Cela peut être considéré comme une modernisation. le bureau. La demande est raisonnable, doyen. On dit aussi qu'il devrait en être ainsi. En regardant les petites cartes rouges et vertes fournies par le Département des Finances, imprimées uniformément et avec un interligne de 3 mm, je n'ai pas pu m'empêcher de penser à la vertu de frugalité du peuple chinois. Considérant que chaque médicament doit être imprimé au moins une fois et qu'il ne manque aucune ligne de tableau. De plus, il existe plus de 2 000 types de médicaments dans l'hôpital de médecine traditionnelle chinoise, ce rapport doit donc être imprimé avec une imprimante laser (comme c'est le cas). pour savoir comment faire accepter au doyen d'acheter une imprimante laser, alors c'est une autre chose, comment la bureautique peut-elle être gratuite ?) L'idée de la mise en œuvre du programme est essentiellement d'utiliser le papier d'impression comme toile pour y dessiner de petits rectangles, ce qui est spécifiquement implémenté par les processus suivants : (Laissez le formulaire s'appeler Ttzview).
Définissez d’abord deux classes dans le programme :
enregistrement de titre=enregistrement
Actuel : Trect ;
Titre : chaîne ;
fin;
enregistrement détaillé = enregistrement
Arect:Trect;
alignement : Mot ;
fin;
---- Établir les quatre processus suivants ;
---- RectDraw(Acanvas:Tcanvas;s:string;R:Trect;frame:boolean;position:word);
---- Ce processus est utilisé pour dessiner un rectangle, et le cadre détermine s'il faut tracer une ligne (bien sûr, elle doit être dessinée ici !) ;
----PRintinitit(firsttop,firstleft:integer);
---- Ce procédé est utilisé pour l'initialisation, qui consiste à définir la position de chaque petit rectangle sur le papier ;
---- printtitle(acanvas:Tcanvas);
----Ce processus consiste à imprimer l'en-tête, car les caractères de l'en-tête sont toujours plus gros ;
---- printdetail(acanvas:Tcanvas;Qtz:Tdataset;acount:integer;firstpage:integer);
----Ce processus consiste à imprimer le contenu spécifique. Une page imprime 40 lignes. Si cela ne suffit pas, changez de page. En bref, une page ne peut contenir qu'un seul médicament.
---- printhj(acanvas:Tcanvas);
---- Vous pouvez voir en un coup d'œil que ce processus consiste à imprimer le total !
---- Créez simplement un Botton et appelez les quatre processus printinitit, printtitle, printdetail et printhj dans l'ordre.
---- (Format d'appel : printtitle(printer.canvas);)
---- À propos, Qtz est les données du grand livre interrogées. Comment les générer ne sera pas discuté ici.
----Les procédures spécifiques sont les suivantes
---- Ce programme fonctionne sous les plates-formes delphi1, delphi3 versions WIN3.2, WIN95, WIN97 et WIN98. À propos, il fournit la structure de la bibliothèque de la base de données du grand livre.
---- 2. Rapports très complexes et incompréhensibles
---- Le service d'oncologie de notre hôpital doit imprimer les dossiers médicaux des patients. Cela fait partie de la modernisation des spécialités. Le Bureau de la santé viendra inspecter, la tâche doit donc être accomplie. Chaque dossier médical contient plus de 100 éléments. Si vous utilisez Qreport, si vous devez ajouter ou soustraire un élément au milieu (cela arrive souvent), l'ajustement et la disposition de dizaines d'éléments feront s'évanouir les gens. J'ai créé plus de 100 variables temporaires à la fois et dessiné sur le canevas virtuel. Cela a fonctionné sans problème sur ma machine PII233 avec 64 Mo de mémoire, mais lorsque je suis passé à la machine du service d'oncologie avec 486,8 Mo de mémoire (Ne riez pas, tout le monde), le la pile système va déborder immédiatement, je dois donc recourir à la méthode du pointeur (mon niveau de programmation semble s'être encore amélioré, secrètement heureux), la méthode est la suivante :
Créez d’abord la classe titleprint :
titleprint=^Titreenregistrement;
enregistrement de titre=enregistrement
Actuel : Trect ;
Titre:chaîne[50];
fin;
Créez ensuite le processus printnow (le nom du Formulaire est
zlk, printdot sont les points de l'imprimante, généralement 180) ;
procédure Tzlk.printnow(acanvas:Tcanvas);
var i,x,y,pc_count:entier;
myprint:array[0..200] de titleprint ;
commencer
firsttop:=round(int(0.5/2.54*printdot));
firstleft:=round(int(0.1/2.54*printdot));
hauteur de ligne :=rond(int(0.7/2.54*printdot));
x:=0+premiergauche;y:=rond(int
(1,3/2,54*printdot))+firsttop ;
nombre_pc :=0 ;
inc(pc_count); new(myprint[pc_count]);
monimpression[pc_count]^.currect:=rect
(x+rond(int(0.1/2.54*printdot))+firstleft,y,
x+rond(int(3.0/2.54*printdot))+premiergauche,
y+firsttop+round(int(0.5/2.54*printdot)));
myprint[pc_count]^.atitle:=Lname.
légende+DBname.text;
ACanvas.MoveTo(myprint[pc_count]^.
actuel.gauche,
myprint[pc_count]^.currect.top-round
(hauteur de ligne/5));
{Les quatre lignes suivantes seront répétées plus de 100 fois, ce qui est fondamentalement la même.
Je ne les écris pas tous pour gagner des royalties}
inc(pc_count); new(myprint[pc_count]);
myprint[pc_count]^.currect:=scalerect(
myprint[pc_count-1]^.currect,round(int
(2,5/2,54*point d'impression)),0);
myprint[pc_count]^.atitle:=Lxb.caption+Cxb.text;
ACanvas.LineTo(myprint[i]^.currect.right,
myprint[i]^.currect.top-round(rowheight/5));
.......
{Imprimer}
printtitle(une toile);
{Cette fonction ne sera pas fournie, peu importe si vous n'avez pas besoin de l'en-tête}
pour i:=1 à pc_count faire
commencer
RectDraw(Acanvas,myprint[i]^.atitle,
myprint[i]^.currect,false,
dt_left ou dt_singleline ou dt_vcenter);
fin;
disposer(myprint[pc_count]);
{N'oubliez pas de libérer la mémoire occupée par le pointeur}
fin;
---- Enfin, créez un Botton, ajoutez un jugement s'il est réellement imprimé, puis appelez ces fonctions.
---- (Format d'appel : printtitle(printer.canvas);)
---- Après avoir lu les deux exemples ci-dessus, pensez-vous qu'imprimer sous WINDOWS est en fait très simple, tout comme dessiner un tableau à la main, et que la position du contenu du tableau soit centrée, à gauche ou à droite dépend entièrement de la Alignement du contenu imprimé. Le format d’impression est déterminé par le format d’affichage du contenu. Vous n’avez pas besoin de le calculer vous-même, ce qui est très pratique.