说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Windows环境下实时列表输出的实现方法-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
Windows环境下实时列表输出的实现方法-Delphi资料

Windows环境下的实时采集越来越多

但如何实现一台计算机控制下的两台打印机或多台打印机分时输出却困难重重

这主要是由于Windows的页式输出方式造成的。

左图所示是一个基本的数据采集系统的模型

各种信号通过信号电缆送入数据采集计算机

计算机对这些信号进行处理后派生出其它一些参数

同时在显示器上显示出相应的数字及曲线。左侧的打印机EPSON LQ1600设为LPT1

右侧的打印机BJ600C为LPT2

通过下面的DLL(用Delphi写成则可以轻松地实现任一打印机的实时数字输出。

LIBRARY MYDLL;

VAR CHARAL

PORTDX:BYTE;

FUNCTION PRINTCHAR(CHARAL

PORTDX:BYTE):INTEGER;EXPORT;

BEGIN;

ASM;

MOV AL

CHARAL

MOV DL

PORTDX

MOV AH

00H

INT 17H

MOV CHARAL

AH

END;

PRINTCHAR:=CHARAL;

END;

FUNCTION PRINTINIT (PORTDX:BYTE):INTEGER;EXPORT;

BEGIN;

ASM;

MOV DL

PORTDX

MOV AH

01H

INT 17H

MOV AH

CHARAL

END;

PRINTINIT:=CHARAL;

END;

EXPORTS

PRINTCHAR INDEX 1;

PRINTINIT INDEX 2;

BEGIN

END.

上面的DLL包括了PRINTCHAR和PRINTINT两个函数

分别用于字符输出和打印机初始化。我们给它起个名字为MYDLL.DPR

在Delphi下编译后便可生产MYDLL.DLL

将其拷入Windows的SYSTEM子目录之下就可以为其它程序所调用了。

在VB环境下调用此DLL非常容易

按VB的要求

首先在MODULE中定义这两个函数:

DECLARE FUNCTION PRINTCHAR LIB"MYDLL.DLL"(BYVAL PORT_ASCII AS INTEGER

BYVAL PORT_ADD AS INTEGER) AS INTEGERDECLARE FUNCTION PRINTINIT LIB"MYDLL.DLL"(BYVAL PORT_ADD AS INTEGER) AS INTEGER在VB的COMMAND或其它按钮的CLICK过程中运行下面的D elphi代码(假定Windows的DEFAULT打印机定义在LPT2上

纸张为A4):

DIM PRINTER1

PRINTER2 AS INTEGER

DIM OUTSTRING AS STRING

PRINTER1=0:PRINTER2=1

OUTSTRING="打印机直接输出测试程序"

PRINTER.SCALEMODE=6

PRINTER.FONTNAME="SYSTEM"

PRINTER.FONTSIZE=9.75

FOR I=1 TO 50

PRINTER.PRINT FORMAT$(I

####.##

)

FOR J=1 TO LEN(OUTSTRING)

OUTCHAR%=ASC(MID$(OUTSTRING

J

1))

OUTPORT%=PRINTER1

R%=PRINTCHAR(OUTCHAR%

OUTPORT%)

NEXT J

OUTCHAR%=&HOD

OUTPORT%=PRINTER1

R%=PRINTCHAR(OUTCHAR%

OUTPORT%)

NEXT I

PRINTER.ENDDOC

在PRINTER1上可以见到连续的输出

由于打印机具有汉字库

因此

可以实现中英文混合输出。而PRINTER2因未遇到PRINTER.ENDDOC

所以不能打印输出。

上面的程序适合于所有打印机端口

完全符合17号中断的要求

因此可以较好地完成打印工作。

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘