VB下使用并口控制打印机
vb.net打印设置打印预览和预览控制器的实例
打印设置打印预览和预览控制器的实例效果图1:效果图2:提示:调试环境为vs2005 + windows2003 / windows2008 / xp / vista 代码如下:Public Class PrintFormDim pageset As Printing.PageSettings = New Printing.PageSettings()Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.ClickPageSetupDialog1.Document = PrintDocument1 ''设置Document属性=文档对象或者与PageSettings类关联就可以使用该控件PageSetupDialog1.AllowMargins = TruePageSetupDialog1.PageSettings = PrintDocument1.DefaultPageSettingsDim re As DialogResult = PageSetupDialog1.ShowDialog()If re = Windows.Forms.DialogResult.OK Thenpageset = PageSetupDialog1.PageSettingsEnd IfEnd SubPrivate Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e AsSystem.Drawing.Printing.PrintPageEventArgs)Dim mypen As Pen = New Pen(Color.Blue, 2)PrintDocument1.DefaultPageSettings = pagesete.Graphics.DrawString(RichTextBox1.Text, New Font("黑体", 15), mypen.Brush, 10, 10)End SubPrivate Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton3.ClickPrintDialog1.Document = PrintDocument1PrintDialog1.PrinterSettings.Copies = 5 ''打印的份数PrintDialog1.PrinterSettings.FromPage = 1 ''第一页的页码PrintDialog1.PrinterSettings.ToPage = 5 ''最后一页页码Dim re As DialogResult = PrintDialog1.ShowDialog()If re = Windows.Forms.DialogResult.OK ThenAddHandler PrintDocument1.PrintPage, AddressOf Me.PrintDocument1_PrintPagePrintDocument1.Print()End IfEnd Sub '更多.net源码和教程,来自[乐博网]Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton4.ClickPrintPreviewDialog1.Document = PrintDocument1AddHandler PrintDocument1.PrintPage, AddressOf Me.PrintDocument1_PrintPagePrintPreviewDialog1.PrintPreviewControl.Zoom = 1.0PrintPreviewDialog1.WindowState = FormWindowState.NormalPrintPreviewDialog1.ShowDialog()End SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickDim PrintPreviewControl1 As PrintPreviewControl = New PrintPreviewControl = "PrintPreviewControl1"PrintPreviewControl1.Dock = DockStyle.FillPrintPreviewControl1.Document = PrintDocument1eAntiAlias = TrueAddHandler PrintDocument1.PrintPage, AddressOf Me.PrintDocument1_PrintPageForm1.Controls.Add(PrintPreviewControl1)PrintPreviewControl1.Show()Form1.Show()End SubEnd Class。
VB使用ZPL指令控制zebra打印机案例
VB使用ZPL指令控制zebra打印机案例Dim i As Integer, j As Integer, nCount As Integer, col_count As Long Dim zpl_head(12) As String, zpl_foot As String Dim cell_width_ini As Integer, cell_height_ini(3) As IntegerDim tmp_MAC() As String, tmp_SN() As String Dim zpl_text_MAC() As String, zpl_text_SN() As StringDim zpl_barcode_MAC() As String, zpl_barcode_SN() As StringDim cbuf As String * 21000'**************************'设置打印开始信息'**************************zpl_head(0) = "^XA" '起始符zpl_head(1) = "^LH0,0" '参考点zpl_head(2) = "^FO540,60^GB0,1850,7^FS" '竖线zpl_head(3) = "^FO1025,60^GB0,1850,7^FS" '竖线zpl_head(4) = "^FO10,242^GB1100,0,7^FS" '横线zpl_head(5) = "^FO10,422^GB1100,0,7^FS" '横线zpl_head(6) = "^FO10,602^GB1100,0,7^FS" '横线zpl_head(7) = "^FO10,782^GB1100,0,7^FS" '横线zpl_head(8) = "^FO10,962^GB1100,0,7^FS" '横线zpl_head(9) = "^FO10,1152^GB1100,0,7^FS" '横线zpl_head(10) = "^FO10,1332^GB1100,0,7^FS" '横线zpl_head(11) = "^FO10,1512^GB1100,0,7^FS" '横线zpl_head(12) = "^FO10,1692^GB1100,0,7^FS" '横线'*******************************' 计算列循环次数,各数组下标'*******************************col_count = (Grid1.Rows - 1) / 10 + CInt(CBool((Grid1.Rows - 1) Mod 10)) * (-1)ReDim tmp_MAC(Grid1.Rows - 1)ReDim tmp_SN(Grid1.Rows - 1)ReDim zpl_text_MAC(Grid1.Rows - 1)ReDim zpl_text_SN(Grid1.Rows - 1)ReDim zpl_barcode_MAC(Grid1.Rows - 1)ReDim zpl_barcode_SN(Grid1.Rows - 1)'*******************************'设置标签体'*******************************'单元初始X坐标cell_width_ini = 97For i = 1 To col_count'单元初始Y坐标cell_height_ini(0) = 88cell_height_ini(1) = 116cell_height_ini(2) = 147cell_height_ini(3) = 180For j = 1 To 10'第一单元:MAC文字nCount = GETFONTHEX("MAC:" & Grid1.TextMatrix((i - 1) * 10 + j, 0), "verdana", "MAC" & CStr((i - 1) * 10 + j), 0, 32, 16, 0, 0, cbuf) tmp_MAC((i - 1) * 10 + j) = Mid(cbuf, 1, nCount)zpl_text_MAC((i - 1) * 10 + j) = "^FO" & CStr(cell_width_ini) & "," & CStr(cell_height_ini(0)) & "^XG" & "MAC" & CStr((i - 1) * 10 + j) & ",1,1^FS"'第二单元:MAC条码zpl_barcode_MAC((i - 1) * 10 + j) = "^FO" & CStr(cell_width_ini) & "," & CStr(cell_height_ini(1)) & "^BCN,33,N,N^FD" & Grid1.TextMatrix((i - 1) * 10 + j, 0) & "^BY1.87,5.369^FS"'第三单元:SN文字nCount = GETFONTHEX("S/N:" & Grid1.TextMatrix((i - 1) * 10 + j, 1), "verdana", "SN" & CStr((i - 1) * 10 + j), 0, 32, 16, 0, 0, cbuf) tmp_SN((i - 1) * 10 + j) = Mid(cbuf, 1, nCount)zpl_text_SN((i - 1) * 10 + j) = "^FO" & CStr(cell_width_ini) & "," & CStr(cell_height_ini(2)) & "^XG" & "SN" & CStr((i - 1) * 10 + j) &",1,1^FS"'第四单元:SN条码zpl_barcode_SN((i - 1) * 10 + j) = "^FO" & CStr(cell_width_ini) & "," & CStr(cell_height_ini(3)) & "^BCN,33,N,N^FD" & Grid1.TextMatrix((i - 1) * 10 + j, 1) & "^BY1.87,5.369^FS"If (i - 1) * 10 + j = Grid1.Rows - 1 ThenExit ForEnd Ifcell_height_ini(0) = cell_height_ini(0) + 180cell_height_ini(1) = cell_height_ini(1) + 180cell_height_ini(2) = cell_height_ini(2) + 180cell_height_ini(3) = cell_height_ini(3) + 180Next jcell_width_ini = cell_width_ini + 500Next i'*******************************'设置标签结束信息'*******************************zpl_foot = "^XZ"'*******************************'输出信息'*******************************Dim str1 As String, str2 As String, str3 As String, str4 As String str1 = ""str2 = ""str3 = ""str4 = ""For i = 0 To 12str1 = str1 & zpl_head(i) & Chr(13) NextFor i = 0 To Grid1.Rows - 1str2 = str2 & tmp_MAC(i) & Chr(13)str3 = str3 & tmp_SN(i) & Chr(13) NextFor i = 0 To Grid1.Rows - 1str4 = str4 & zpl_text_MAC(i) & Chr(13)str4 = str4 & zpl_barcode_MAC(i) & Chr(13)str4 = str4 & zpl_text_SN(i) & Chr(13)str4 = str4 & zpl_barcode_SN(i) & Chr(13) Next。
25针并口VB编程技术
25针并口编程技术本文主要介绍并行端口的结构以及简单的对并口的读、写并以及如何获得端口的状态。
并行接口的分类: SPP(标准并行接口) ,EPP(增强型并行接口),ECP(扩展型并行端口)标准并行端口(SPP)也是最早的端口定义,主要功能如下,1:并行端口提供了8个数据线以进行并行的字节传输,2:计算机能够通过数据线向打印机发送选能信号,以通知打印机已经准备好接收数据,3:打印机招收到数据后,向计算机发送一个回应信号(NACK)。
其各位信号线所代表的意义详见下表。
增强型并行端口(EPP)的出现提供了一种更高性能的连接方式,并东路向下兼容所有在此之前存在的并行接口及外设。
与SPP 不同之处在于原来17个信号中的重新定义,在这17个信号中,EPP使用了其中的14个信号进行传输,握手和选通,剩下的3个信号可以由外设设计者有来自定义。
并行接口的大致结构:并行口一般有25个引脚,其中包括8位数据线,5位打印机状态线,4位控制线.下面将对这些引脚予以详细说明:(注:1:>出,表示由计算机发向打印机;入,表示由打印机发向计算机,2:>低电平有效信号用上划线或星号表示(如S7*),高电平有效信号则没有上划线或星号)打印机常用端口: 对于LPT1:0X378 为数据发送地址,0X379为打印机状态地址,0X37A为计算机向打印机控制地址, 通常为了使程序具有通用性我们可以从注册表中取得这个地址,对于WINDOWS CE 而言,这个值被存储在{HKEY_LOCAL_MACHINE//DRIVERS//BUILTIN//PARALLEL//IOBASE}.然后我们就可以通过对此三个端口进行控制达到简单的并口编程的目的.下面是对打印机状态端口及打印机控制端口作一详细解释:控制端口:这个0x37A计算机控制打印机的地址,可以产生对打印机进行控制的必要信号,可写,两高位(7和8)没什么用,第6位写1表示可以向并口输出数据。
vb 打印 实例-概述说明以及解释
vb 打印实例-概述说明以及解释1.引言1.1 概述在VB中,打印是一项常见的功能需求,通过打印可以将软件中的数据输出到纸张上,使得用户能够方便地查看和保存信息。
本文将介绍VB 中的打印功能,并通过实例演示和分析来帮助读者更好地理解和应用这一功能。
在VB中,打印功能的实现主要通过使用PrintDocument组件来完成,PrintDocument组件可以方便地控制打印输出的内容和样式。
通过设置PrintDocument的PageSettings属性和PrintPage事件来指定打印页面的设置和内容。
另外,也可以使用PrintPreviewDialog组件来提供打印预览的功能,使得用户可以在打印前预览输出的效果,从而调整需要打印的内容和格式。
本文将通过实例演示和分析来介绍如何在VB中实现打印功能,希望能帮助读者更加深入地了解和掌握这一重要的功能。
文章结构部分主要包括文章的大致组织和内容安排,旨在帮助读者更好地理解整篇文章的逻辑结构。
本文的文章结构如下:1. 引言1.1 概述:介绍VB打印功能的重要性和应用背景1.2 文章结构:介绍本文的大纲和各部分内容安排1.3 目的:阐明撰写本文的意义和目的2. 正文2.1 VB打印功能介绍:详细介绍VB语言中的打印功能的基本原理和特点2.2 VB打印实例演示:通过具体的实例演示,展示VB打印功能的具体应用和使用方法2.3 VB打印实例分析:对演示的实例进行分析和总结,深入探讨其应用场景和优势特点3. 结论3.1 总结:对整篇文章进行总结,强调VB打印功能的重要性和价值3.2 应用推广:探讨VB打印功能在实际应用中的推广和发展前景3.3 展望:展望未来VB打印功能的发展方向和潜力通过以上结构,读者可以清晰地了解本文的逻辑结构和内容安排,有助于他们更好地理解和消化文章所传达的信息。
1.3 目的:本文的目的在于介绍如何在VB(Visual Basic)中使用打印功能,并通过实例演示和分析,帮助读者更好地了解如何在自己的程序中实现打印功能。
vb控制打印机自动打印表格
VB控制EXCLE自动打印表格VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。
因此充分利用EXECL的强大报表功来实现报表功能。
但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。
一、VB读写EXCEL表:VB本身提自动化功能可以读写EXCEL表,其方法如下:1、在工程中引用Microsoft Excel类型库:从"工程"菜单中选择"引用"栏;选择Microsoft Excel 9.0 Object Library(EXCEL2003),然后选择"确定"。
表示在工程中要引用EXCEL类型库。
2、在通用对象的声明过程中定义EXCEL对象:Dim excel As ObjectDim workbook As ObjectDim sheet As Object3、在程序中操作EXCEL表常用命令:Set xlApp = CreateObject("Excel.Application") '创建EXCEL对象Set xlBook = xlApp.Workbooks.Open("文件名") '打开已经存在的EXCEL工件簿文件xlApp.Visible = True '设置EXCEL对象可见(或不可见)Set xlSheet = xlBook.Worksheets("表名") '设置活动工作表xlSheet.Cells(row, col) =值'给单元格(row,col)赋值xlSheet.PrintOut '打印工作表xlBook.Close (True) '关闭工作簿xlApp.Quit '结束EXCEL对象Set xlApp = Nothing '释放xlApp对象xlBook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏xlBook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏4、在运用以上VB命令操作EXCEL表时,除非设置EXCEL 对象不可见,否则VB程序可继续执行其它操作,也能够关闭EXCEL,同时也可对EXCEL进行操作。
VB并口操作
sky655302005-11-22 09:02我现在在XP系统下通过WINIO操作并口跟下位机通讯,我们之间有时序要求,比如读BUSY(11脚)为低(反相后)时将ENB脚置低(14脚,反相后)然后向数据端口写数据(8位一个字节数据,采用数据线)。
但是传输速度特别慢,4KB数据需要3秒,50多K需要三十多秒,而且数据还不能保证正确,为什么会这样?下位机在读数据端口之前需要延时一段时间,否则就读不到正确数据,一定要延时吗?希望哪位高手给予指点,不胜感激!xhs11152005-11-22 09:04希望一起讨论能说得详细点么,有必要的话把程序发上来行么.我写过一个在vc下通过并口控制16x2液晶的程序,希望能和你一起讨论一下。
你说的winIo是一个驱动吧,我用的也是这个。
并口的control是双向的,在使用之前需要设置一下。
另外有的控制端口需要外接上拉电阻。
延迟这个东西最好用示波器看一下来确定。
梦想成真2005-11-22 09:12WINIO操作并口本来就慢或者说XP下面操作并口本来就慢吗?是啊,控制端口用来告诉下位机我是否忙,状态端口用来检查下位机是否处于忙状态,也就是时序配合了,时序方面的配合好像没什么问题,就是下位机读数据时延迟少了就不行,这样导致整个传输速度很慢。
你用并口控制液晶显示器的数据量有多少?我现在传输的速度也就1K左右,我希望达到10K以上才行。
程序是用VB做的一个小测试程序,很简单,主要就是读写端口操作,因为您是用VC的,所以不知道您是否能看明白,我大概写一下主要语句吧。
//SetPortVal(端口地址,要发送的数据,数据长度)--写端口//GetPortVal(端口地址,存放读取数据地址,数据长度)--读端口//读下位机状态不为BUSY时运行for i=0 to 4096 //发送数据循环SetPortVal &H378,data(i),1 //向数据端口发送一字节数据data(i) setPortVal &H379,2,1 //将ENB脚置低,告诉下位机已发送数据//读BUSY脚,看下位机是否在处理数据READ_BUSY //子程序//读BUSY脚,看下位机是否准备好接收数据//READ_NBUSY //子程序next izlg9002005-11-22 09:26我测试了一下,还是比较快的。
如何在VB环境下利用并口实现PLC控制
1 引言普通的计算机一般都配有并行接口(就是通常用的打印机接口),它是通过25芯的D型接头连接打印机与计算机的,计算机的并行接口不仅可以向打印机发送数据,还可以从打印机接收数据(打印的工作状态)。
因此,利用计算机的并行接口,你可以去控制外部继电器的吸合,从而控制外部设备,同样可以利用它来检测外部设备的状态。
不需添加任何硬件。
从而使一台普通的计算机具有“PLC”的开关量的功能。
本文分析的系统,把普通并口实现了一个4输入8输出数字量的功能,切不需任何投资。
们先对打印机的并行口做一下细致的分析。
配有一个并口的计算机经系统引导后,初始化过程把并行端口配置成LPT1, 这个端口又分配了数据地址378H, 状态地址379H。
其中378 H端口做输出端口,379H端口做输入端口。
2 并口数据采集控制原理(1) 端口378H,378H的管脚见表1。
在计算机通电后的自然状态,378H端口的每个数据位为1,表1中每个管脚对地(25脚)为高电平5V。
即378H地址的内容为FF(十进制是255),当控制378H的内容为1(十进制)二进制码是00000001时,即2脚对地输出高电平,其它对地是0电平。
如控制378H的内容为2(十进制)二进制码是00000010,即3脚对地输出高电平,其它对地是0电平。
如控制378H的内容为3(十进制)二进制码是00000011,即2、3脚对地输出高电平,其它对地是0电平。
依次类推。
当某管脚对地是高电平5V时,由于每条数据线的输出电流高达20mA,可以接5V的直流继电器,通过继电器的触点在去控制其它的设备,如电磁阀、电机等。
图1是用打印机并行接口实现的继电器控制电路,此电路稍加修改即可用于其它设备的开关控制。
(2) 端口379H,379H的管脚见表2。
在计算机通电后的自然状态,379H端口的数据位第7位是0,其余每个数据位为1,即上述每个管脚对地(25脚)为高电平5V。
即379H地址的内容为127(十进制)二进制码是0111 1111。
VB控制EXCEL进行报表设计及打印
VB控制EXCEL进行报表设计及打印VB控制EXCEL进行报表设计及打印在工控程序的开发中,经常涉及到数据信息的分析、加工,最终还需把统计结果形成各种形式的报表打印输出。
在Visual Basic中制作报表,通常是用数据环境设计器(DataEnvironment Designer)与数据报表设计器(Data Report Designer),或者使用第三方产品来完成。
但对于大多数习惯于Excel报表的用户而言,用以上方法生成的报表在格式和功能等方面往往不能满足他们的要求。
由于Excel具有自己的对象库,在Visual Basic工程中可以加以引用,通过对Excel使用OLE自动化,可以创建一些外观整洁的报表,然后打印输出。
这样实现了Visual Basi应用程序对Excel的控制。
本文将针对一个具体实例,阐述基于VB和EXCEL的报表设计及打印过程。
1)创建Excel对象Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对象到透视表,图表等复杂的对象。
下面简单介绍一下其中最重要,也是用得最多的五个对象。
(1)Application对象:Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。
(2)Workbook对象:Workbook对象直接地处于Application 对象的下层,表示一个Excel工作薄文件。
(3)Worksheet对象:Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4)Range对象:Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。
(5)Cells对象:Cells对象包含于Worksheet对象,表示Excel 工作表中的一个单元格。
如果要启动一个Excel,使用Workbook和Worksheet对象,下面的代码启动了Excel并创建了一个新的包含一个工作表的工作薄:Dim zsbexcel As Excel.ApplicationSet zsbexcel = New Excel.Applicationzsbexcel.Visible = True如要Excel不可见,可使zsbexcel.V isible = Falsezsbexcel.SheetsInNewWorkbook = 1Set zsbworkbook = zsbexcel.Workbooks.Add2)设置单元格和区域值要设置一张工作表中每个单元格的值,可以使用Worksheet对象的Range属性或Cells 属性。
VB使用CodeSoft9打印标贴程序
set cs = createObject ("lppx2.application")
VB的打印与链接
VB的几种打印方法我们编程时,如果在程序中加入“打印”功能会使程序更加完善,更加专业。
下面,我提供几种编写打印程序的方法以供大家参考。
1. 采用Visual Basic提供的简单打印函数PrintForm方法应用程序窗体的PrintForm方法时Visual Basic把当前窗体的位图送到打印机。
该方法的优点在于它几乎不需要任何编程但也有很大缺陷。
最为突出的是当低分辨率图形在高分辨率打印机上打印时其结果令人无法满意会产生锯齿。
代码如下:Private Sub Command1_Click '用PrintForm打印Me.PrintForm '打印窗体的可见区域End Sub2. 用Printer对象要想产生复杂的打印输出编程较为烦琐。
Printer对象代表系统缺省的打印机Printer对象支持许多由窗体和图形框所支持的属性和方法三种对象都有画线和画方框。
应用程序可用以下代码在Printer对象上画出1平方英寸的方框。
注意打印机以twips来测量距离。
每英寸有1440个twips。
Printer.Line2144021440-Step14401440 B打印机、从窗体和图形框都有Circle、PaintPicture、Print、Pset、TextHeight、TextWidth方法。
使用这些方法应用程序可以为打印机生成高分辨率输出。
打印文本直接用Print方法,见下列代码:Printer.Print "Hello China ComputerWorld" '打印字符串Printer对象还有一些窗体和图形框都没有方法NewPage告诉打印机程序对当前输出页的发送已经结束Printer对象应开始新的一页。
EndDoc告诉VB程序创建文档结束VB应将它发送到物理打印机上打印。
KillDoc取消当前打印作业。
应用程序应该终止由EndDoc和KillDoc所设定的每个打印作业。
vb printer打印属性大全
printer属性大全ColorMode 属性返回或设置一个值,决定彩色打印机是按彩色还是单色打印输出。
运行时不可用。
语法:object.ColorMode [= value]ColorMode 属性语法包含下面部分:部分描述Object对象表达式,其值是“应用于”列表中的一个对象。
Value 常数或整数,指定打印方式,“设置值”中有详细描述。
value 的设置值为:设置值值描述VbPRCMMonochrome 1 以单色打印输出(一般为黑白阴影)VbPRCMColor 2 以彩色打印输出说明:缺省值取决于打印机驱动程序和当前打印机设置。
单色打印机忽略该属性。
注意Printer 对象属性的效果,取决于打印机生产商提供的驱动程序。
有些属性设置可能不起作用,或有可能几个不同的属性设置具有相同的结果。
如果对不支持彩色的打印机设置ColorMode 属性,设置值将被忽略。
但如果试图引用该ColorMode 属性,则给出错误信息。
在可接受范围外的设置,也有可能导致错误。
有关更多的信息,请参阅有关驱动程序的生产商文档。
Copies 属性返回或设置需要打印的份数。
对于Printer 对象,在设计时不可用。
语法:object.Copies [= number]Copies 属性语法包含下面部分:部分描述Object 对象表达式,其值是“应用于”列表中的一个对象。
Number 数值表达式,指定需要打印的份数。
该值必须是整型值。
说明:对于“打印”对话框,该属性返回在“份数”框中用户输入的份数。
如果设置CommonDialog 控件的cdlPDUseDevModeCopies 标志,则该属性始终返回1。
对于Printer 对象,对多份打印可能进行、也可能不进行核对,这取决于打印机驱动程序。
可以将整个文档或将每一页打印多份。
对于不支持核对的打印机,设置Copies = 1,然后在程序中使用循环,就可以将整个文档打印多份。
VB中打印机选择
(1)假设你的COMMONDIALOG 控件叫CMDiag 用如下代码可以使你选择的打印机成为默认打印机 ”Printer”On Error Resume Next CMDiag.PrinterDefault = True CMDiag.Cance lError = True CMDiag.ShowPrinterIf Err.Number <> 0 Then Exit Sub(2) VB 里面,原本改变预设打印机的方法是:(假设安装有两种打印机(驱动程式))Set Printer = Printers(O)'将预设打印机设定成第一种打印机 Set Printer=Printers(1),将预设打印机设定成第二种打印机但实际上以上叙述有时候不会成功(原因不详), 为了能够成功地改变预设打印机,以下是呼叫Windows API 的方法:(此一解决方案适用於Windows 95,98)1. API 的宣告:Const HWND_BROADCAST = &HFFFF& Const WM_WININICHANGE = &H1APrivate Declare Function GetPro Lib "kernel32" Alias"GetPro" (ByVallpAppNameAs String,ByVal lpKeyName As _String, ByVal lpDefault As String, ByVal lpReturnedString As String, _ ByVal nSize AsLong) AsLongPrivate Declare Function WritePro Lib "kernel32" Alias"WritePro" (ByVallpszSection As String, ByVal lpszKeyName _As String, ByVal lpszString As String) As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long2. 程式范例:PrinterName ="您想设定的打印机名称” Dim S As String, length As Long, hKey As LongS = String(80, Chr(O)) length = GetPro("devices", PrinterName, "", S, Len(S))S =Left(S, length)Call WritePro("windows", "device", PrinterName &Call SendMessage(HWND_BROADCAST, WM_WININICHANGE,至於改变 NT 预设打印机的方法, 则是改变登录资料库(Registry)打印机的设定,& S)&H7FFF&, ByVal "windows")在登录资料库中纪录预设打印机的Value 是:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows subkey 的Device value (3) VB中获取指定打印机的各种纸张类型及大小放入一个MSFlexGrid,名称为fgdl,列数为4'Option Private ExplicitConst DC_MAXEXTENT= 5Private Const DC_MINEXTENT= 4Private Const DC_PAPERNAME= 16Private Const DC_PAPERS= 2Private Const DC_PAPERSIZE = 3Private Declare Function DeviceCapabilities Lib "winspool.drv" Alias "De viceCapabilitiesA” (ByVal lpDeviceName As String, ByVal lpPort As Strin g, ByVal ilndex As Long, lpOutput As Any, lpDevMode As Any) As LongPrivate Type POINTSx As Longy As LongEnd TypePrivate Sub Form_Load()Dim i As LongWith fgdl.Clear .FormatString = "A纸张编号|人纸张名称|人纸张长度|人纸张宽度”For i = 0 To .Cols - 1.ColWidth(i) = 1700Next i.AllowUserResizing = flexResizeColumns.Left = 0.Width = Me.ScaleWidthEnd WithGetPaperlnfoEnd SubPrivate Sub GetPaperInfo()Dim i As Long, ret As LongDim Length As Integer, Width As IntegerDim PaperNo() As Integer, PaperName() As String, PaperSize() As POINTS,支持最大打印纸:ret = DeviceCapabilities(打印机名称,"LPT1", DC_MAXEXTENT, ByVal0&, ByVal0&)Length = ret \ 65536Width = ret - Length * 65536'lblMaxLength.Caption = Length 'lblMaxWidth.Caption = Width '支持最小打印纸:ret = DeviceCapabilities(称,"LPT1", DC_MINEXTENT, ByVal打0&, ByVal印0&)机名Length = ret \ 65536Width = ret - Length * 65536'支持纸张种类数ret = DeviceCapabilities(打印机名称,"LPT1”, DC_PAPERS, ByVal 0&, ByVal 0&)'纸张编号ReDim PaperNo(1 To ret) As IntegerCall DeviceCapabilities( 打印机名称,"LPT1", DC_PAPERS, PaperNo(1), ByVal 0&)'纸张名称Dim arrPageName() As ByteDim allNames As StringDim lStart As Long, lEnd As LongReDim PaperName(1 To ret) As StringReDim arrPageName(1 To ret * 64) As ByteCall DeviceCapabilities( 打印机名称,"LPT1", DC_PAPERNAMESarrPageName(1), ByVal 0&)allNames = StrConv(arrPageName, vbUnicode)'loop through the string and search for the names of the papers i = 1DolEnd = InStr(lStart + 1, allNames, Chr$(0), vbBinaryCompare)If (lEnd > 0) And (lEnd - lStart - 1 > 0) ThenPaperName(i) = Mid$(allNames, lStart + 1, lEnd - lStart-1)i = i + 1End IflStart =丘ndLoop Until lEnd = 0'纸张尺寸ReDim PaperSize(1 To ret) As POINTSCall DeviceCapabilities(bo1.Text, "LPT1", DC_PAPERSIZE, PaperSize( 1), ByVal 0&) '显示在表格中For i = 1 To ret fgdl.AddItem PaperNo(i) & vbTab & PaperName(i) & vbTab & PaperSize(i).y & vbTab & PaperSize(i).xNext i'移除第一个空行fgd1.Row = 1fgd1.RemoveItem 1End SubPrivate Sub Form_Resize()With fgd1.Left = 0.Width = Me.ScaleWidth.Height = Me.ScaleHeight.Top = 0End WithEnd Sub(5)编写VB打印控制程序的几点心得摘要本文在总结作者实际开发经验的基础上,详细介绍了VB实现高分辨率打印方法的几点心得。
VB控制计算机并口示例
VB控制计算机并口示例作者:中国航空信息中心吴斌在VB应用程序中巧用DLL在使用VB开发多媒体应用程序时,如何合理地存放大量的多媒体资源,是一件十分棘手的事。
如果将资源以文件形式存放在磁(光)盘上,使用时再从盘上读取,势必大大影响资源调用的速度。
如果将资源直接编译在应用程序的可执行文件中,虽然可以获得令人满意的资源存取速度,但会导致最终的可执行文件尺寸大大膨胀。
如何解决这个矛盾呢,笔者从Windows动态链接库的原理中得到启发,找到了一个结合二者优势的解决方法。
动态链接库是实现Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。
常见的动态库包含外部函数和资源,也有一些动态库只包含资源,如Windows字体资源文件,我们将这类动态库称之为资源动态链接库。
制作资源动态库的方法很多,笔者在此提供了一种无需编程、简单有效的方法。
该方法利用了Borland C++的资源管理器Resource Workshop的反编译能力,借用现成的动态库,将其改制为自己的资源动态库。
具体方法是,拷贝一个现成的资源动态库文件(如windows\system目录下的字体资源文件arial.fot)到应用程序工作目录,更改文件名,如改为DEMO.DLL。
然后在Resource Workshop中打开该文件,选择其中原有的资源将其删除,再加入自己的资源,即可制成自己的资源动态库。
由于篇幅所限,具体操作过程请读者参阅有关资料。
不过有两个关键问题需要提请读者注意,其一,对于声音这类非Windows传统资源,在加入动态库之前,需要用户自定义一个资源类型以存放这类资源,如笔者在DEMO.DLL中为Windows音频文件定义了WAVE资源类型;其二,动态库中每一个资源的资源名十分重要,它是调用资源的关键,建议用户最好在加入资源后为其定义一个有意义的资源名。
通过上面介绍的资源动态库的简单制作方法,即使不熟悉C语言的读者也可以轻松地制作自己的资源动态库了。
如何实现VB.NET打印控件的使用
描述:open按钮打开⼀个对话框,选择⼀个⽂件,并将⽂本反映到richtextbox上。
同时激活print,再按,就执⾏打印。
[vb]view plain copy01. Imports System.IO02. Imports System.Drawing.Printing03.04. Public Class Form105. Private PrintPageSettings As New PageSettings06. Private StringToPrint As String07. Private PrintFont As New Font("Arial", 10)08.09. Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click10. Dim FilePath As String11. OpenFileDialog1.Filter = "Text files (*.txt)|*.txt"12. OpenFileDialog1.ShowDialog()13. If OpenFileDialog1.FileName <> ""Then14. FilePath = OpenFileDialog1.FileName15. Try16. Dim MyFileStream As New FileStream(FilePath, FileMode.Open)17. RichTextBox1.LoadFile(MyFileStream, RichTextBoxStreamType.PlainText)18. MyFileStream.Close()19. StringToPrint = RichTextBox1.Text '初始化打印字符串20. btnPrint.Enabled = True21. Catch ex As Exception22. MessageBox.Show(ex.Message)23. End Try24. End If25. End Sub26.27. Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click28. Try29. '指定当前页设置30. PrintDocument1.DefaultPageSettings = PrintPageSettings31. '指定“打印”对话框的⽂档并显⽰32. StringToPrint = RichTextBox1.Text33. PrintDialog1.Document = PrintDocument134. Dim result As DialogResult = PrintDialog1.ShowDialog()35. If result = DialogResult.OK Then36. PrintDocument1.Print() '打印,并⾮由“打印”对话框控制.正如OpenFileDialog表现的形式⼀样。
用VB实现并行接口模拟实验
用VB实现并行接口模拟实验摘要:可视化方法编程,第一步是“画”界面,第二步是合理安排事件,第三步才是“写”代码。
VB的集成开发环境界面,主要包括六个部分:标题栏、工具箱、属性窗口、代码编辑器窗口、工程资源管理器窗口和窗体布局窗口。
使用VB让这个接口能够接收、发送数据,并且可以有LED的工作方式和数码管的工作方式;通过简单的程序语言可以让接口实现很多的功能。
主要的功能就是可以利用滚动条的左右滑动来调整8个灯泡的循环连续速度,并且在连续循环中灯泡的颜色呈七彩色变化。
关键词:可视化编程、集成开发、控件、属性、方法、事件、变量、实验步骤。
VB语言特点:传统编程与可视化编程有较大的区别,按传统的“纯”结构化方法编程,自始至终都在“写”代码;而采用可视化方法编程,第一步是“画”界面,第二步是合理安排事件,第三步才是“写”代码,思维方式发生了非常大的变化。
人们一般用Visual一词表示可视化,这个词的英文原意是“视觉化”。
“可视的语言”这个名字可能抽象了点,但实际上它却是最直观的编程方法。
之所以叫做“可视”,是指无须编程,仅通过直观的操作方法即可完成界面的设计工作。
因此,可视化语言是目前最好的Windows应用程序开发工具。
在这种语言中引入了控件的概念,按钮、文本框都可称为控件,Command1是按钮控件,而Text1、Text2、Text3则属于文本框控件。
可视化语言把这些控件模式化、对象化,每个控件都有若干方法和事件,并通过一系列的属性来控制控件的外观。
利用这些控件,编程过程就如同画画,随意点几下鼠标,一个按钮就完成了,这些工作在使用传统编程语言的情况下,需要编写大量复杂的程序代码才能实现。
归纳起来,可视化编程语言的特点主要表现在两个方面:一是基于面向对象的思想,引入了控件的概念和事件驱动;而是程序开发过程一般遵循以下步骤,即先进行界面的绘制工作,再基于事件编写程序代码,以响应鼠标、键盘的各种动作。
VB的集成开发环境界面,主要包括六个部分:标题栏、工具箱、属性窗口、代码编辑器窗口、工程资源管理器窗口和窗体布局窗口。
并口控制说明
并口控制说明✧控制设置:✓第一步:设置BIOS。
开机时,根据屏幕提示按F2键(有些设备按DEL、ESC、F1、F10、F12键)进入BIOS设置。
激活启用并口。
并口工作模式。
控制软件使用EPP(Enhanced Parallel Port增强并行接口)和ECP(Extended Capabilities Port扩展功能并行接口)模式。
并口基地址。
分别为278、378、3BC。
退出并保存更改。
并口设置,会因为BIOS的不同而出现在不同位置,但设置方式相同。
第二步:设置控制软件并口的端口地址。
鼠标右键单击"桌面"上"我的电脑"图标出现如下快捷菜单。
选择"属性"出现如下窗口。
选择"硬件"单击"设备管理器"出现如下窗口。
展开,鼠标右键单击出现如下快捷菜单。
选择"属性"出现如下窗口。
设置控制软件的"系统参数"的"LPT参数"的"端口基址"和上图打印机端口基址一致。
第三步:制作连接电缆计算机DB25并行接口插座,输出端口为CMOS电路,输出电压≥3.6V(高电平1)或≤0.1V(低电平0)。
电机控制信号(D0-D7):控制软件支持四轴联动,目前仅提供X和Y轴控制信号。
输入开关信号(S3-S7):用于输入信号。
输出控制信号(C0-C3):用于输出控制信号。
地线(G0-G7):一般是用来完善电路的。
焊接电缆:计算机后面板上的为DB25孔式并行接口插座(母头)。
连接到计算机后面板上的DB25孔式并行接口插座的DB-25针型插座(公头),且背面带焊接头(见下图)。
按照上面提供的信号类型,引出信号,并连接到相应设备。
如果电缆线长度不够,可以使用LPT并口延长线。
如下图:第四步:控制设备如果并口存在,且参数设置正确,并接好连接线后,便可以对设备实施控制。
VB中打印机选择
.1)假定你的 COMMONDIALOG 控件叫CMDiag用以下代码能够使你选择的打印机成为默认打印机 "Printer"OnErrorResumeNext=True=TrueIf<>0ThenExitSub2)VB 里面,本来改变预设打印机的方法是:(假定安装有两种打印机(驱动程式))Set Printer = Printers(0) ' 将预设打印机设定成第一种打印机Set Printer = Printers(1) ' 将预设打印机设定成第二种打印机但实质上以上表达有时不会成功(原由不详),为了能够成功地改变预设打印机,以下是呼喊Windows API 的方法:( 此一解决方案合用於Windows 95,98)1. API 的宣布:Const HWND_BROADCAST = &HFFFF&Const WM_WININICHANGE = &H1APrivate Declare Function GetPro Lib "kernel32" Alias _ "GetPro" (ByVal lpAppName As String, ByVal lpKeyName As _String, ByVal lpDefault As String, ByVal lpReturnedStringAs String, _ByVal nSize As Long) As LongPrivate Declare Function WritePro Lib "kernel32" Alias _ "WritePro" (ByVal lpszSection As String, ByVal lpszKeyName _ As String, ByVal lpszString As String) As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" _(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _lParam As Any) As Long程式典范:PrinterName = "您想设定的打印机名称"Dim S As String, length As Long, hKey As LongSString(80,Chr(0))lengt h=GetPro("devices",PrinterName,"",S,Len(S))S=Left(S,length)Ca ll WritePro("windows","device",PrinterName&","&S)...Call SendMessage(HWND_BROADCAST,WM_WININICHANGE,&H7FFF&,ByVal"windows")至於改变NT预设打印机的方法,则是改变登录资料库(Registry)打印机的设定,在登录资料库中纪录预设打印机的Value是:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows subkey的Device value3)VB中获取指定打印机的各样纸张种类及大小放入一个MSFlexGrid,名称为fgd1,列数为4'Option ExplicitPrivate Const DC_MAXEXTENT=5Private Const DC_MINEXTENT=4Private Const DC_PAPERNAMES=16Private ConstDC_PAPERS=2Private Const DC_PAPERSIZE=3Private Declare Function DeviceCapabilities Lib"winspool.drv"Alias"De viceCapabilitiesA"(ByVal lpDeviceName As String,ByVal lpPort As String,ByVal iIndex AsLong,lpOutput As Any,lpDevMode AsAny)As Long Private TypePOINTSAsLongAsLongEnd TypePrivate Sub Form_Load()Dim i As LongWith fgd1.Clear.FormatString="^纸张编号|^纸张名称|^纸张长度|^纸张宽度"For i=0To.Cols-1.ColWidth(i)=1700Next i.AllowUserResizing=flexResizeColumns.Left=0.Width=End WithGetPaperInfoEnd SubPrivate Sub GetPaperInfo()Dim i As Long,ret As LongDim Length As Integer,Width AsIntegerDim PaperNo()As Integer,PaperName()AsString,PaperSize()AsPOINTS'支持最大打印纸:...ret= DeviceCapabilities(打印机名称,"LPT1",DC_MAXEXTENT,ByVal0&,ByVal0&)Length=ret\65536Width = ret- Length * 65536= Length=Width支持最小打印纸:ret= DeviceCapabilities(打印机名称,"LPT1",DC_MINEXTENT,ByVal0&,ByVal0&)Length=ret\65536Width = ret- Length * 65536支持纸张种类数ret=DeviceCapabilities(打印机名称,"LPT1",DC_PAPERS,ByVal0&,ByVal0&)'纸张编号ReDim PaperNo(1Toret)As IntegerCall DeviceCapabilities(打印机名称,"LPT1",DC_PAPERS,PaperNo(1),ByVal0&)纸张名称Dim arrPageName()As ByteDim allNames AsStringDim lStart AsLong,lEnd As LongReDim PaperName(1To ret)As StringReDim arrPageName(1Toret*64)As ByteCall DeviceCapabilities(打印机名称,"LPT1",DC_PAPERNAMES,arrPageName(1),ByVal0&)allNames=StrConv(arrPageName,vbUnicode)'loop through the string and search for the namesofthe papers=1DolEnd=InStr(lStart+1,allNames,Chr$(0),vbBinaryCompare)If(lEnd>0)And(lEnd-lStart-1>0)ThenPaperName(i)=Mid$(allNames,lStart+1,lEnd-lStart -1)i=i+1End IflStart=lEndLoop Until lEnd=0'纸张尺寸ReDimPaperSize(1To ret)As POINTS'Call DeviceCapabilities(bo1.Text,"LPT1",DC_PAPERSIZE,PaperSize('1),ByVal0&)'显示在表格中...For i= 1 To retPaperNo(i)& vbTab & PaperName(i)& vbTab &PaperSize(i).y& vbTab &PaperSize(i).xNext i移除第一个空行fgd1.Row =11End SubPrivate Sub Form_Resize()With fgd1.Left=0.Width.Height.Top =0End WithEnd Sub(5)编写VB打印控制程序的几点心得摘要本文在总结作者实质开发经验的基础上,详尽介绍了VB实现高分辨率打印方法的几点心得。