首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网络安全 > 黑客技术 > Visual Basic编程疑难问题解(二)五
【标  题】:Visual Basic编程疑难问题解(二)五
【关键字】:c,编程,Visual,is,Visual Basic,Basic,Visual,Basic
【来  源】:网络

Visual Basic编程疑难问题解(二)五

  问题五:如何获取打印机纸张信息?
   办法如下:


Option Explicit
Private Const DC_MAXEXTENT = 5
Private Const DC_MINEXTENT = 4
Private Const DC_PAPERNAMES = 16
Private Const DC_PAPERS = 2
Private Const DC_PAPERSIZE = 3
Private Declare Function DeviceCapabilities Lib "winspool.drv"
Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String,
ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, lpDevMode As Any) As Long
Private Type POINTS
x As Long
y As Long
End Type

'***********************************************************
'* 名称:GetPaperInfo
'* 功能:得到打印机低张信息
'* 用法:GetPaperInfo(控件名)
'* 描述:如在 form_load()中调用GetPaperInfo MSHFlexGrid1
'***********************************************************
Public Function GetPaperInfo(Flex As MSHFlexGrid) As Boolean

Dim i As Long, ret As Long
Dim Length As Integer, Width As Integer
Dim PaperNo() As Integer, PaperName() As String, PaperSize() As POINTS

With Flex
.FormatString = "^纸张编号|^纸张名称|^纸张长度|^纸张宽度"
For i = 0 To .Cols - 1
.ColWidth(i) = 1700
Next i
.AllowUserResizing = flexResizeColumns
.Left = 0
End With

'支持最大打印纸:
ret = DeviceCapabilities(Printer.DeviceName, "LPT1", DC_MAXEXTENT, ByVal 0&, ByVal 0&)
Length = ret \ 65536
Width = ret - Length * 65536

'支持最小打印纸:
ret = DeviceCapabilities(Printer.DeviceName, "LPT1", DC_MINEXTENT, ByVal 0&, ByVal 0&)
Length = ret \ 65536
Width = ret - Length * 65536

'支持纸张种类数
ret = DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERS, ByVal 0&, ByVal 0&)

'纸张编号
ReDim PaperNo(1 To ret) As Integer
Call DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERS, PaperNo(1), ByVal 0&)

'纸张名称
Dim arrPageName() As Byte
Dim allNames As String
Dim lStart As Long, lEnd As Long
ReDim PaperName(1 To ret) As String
ReDim arrPageName(1 To ret * 64) As Byte
Call DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERNAMES, arrPageName(1), ByVal 0&)
allNames = StrConv(arrPageName, vbUnicode)
'loop through the string and search for the names of the papers
i = 1
Do
lEnd = InStr(lStart + 1, allNames, Chr$(0), vbBinaryCompare)
If (lEnd > 0) And (lEnd - lStart - 1 > 0) Then
PaperName(i) = Mid$(allNames, lStart + 1, lEnd - lStart - 1)
i = i + 1
End If
lStart = lEnd
Loop Until lEnd = 0

'纸张尺寸

ReDim PaperSize(1 To ret) As POINTS
Call DeviceCapabilities(Printer.DeviceName, "LPT1", DC_PAPERSIZE, PaperSize(1), ByVal 0&)

'显示在表格中
For i = 1 To ret
Flex.AddItem PaperNo(i) & vbTab & PaperName(i)
& vbTab & PaperSize(i).y & vbTab & PaperSize(i).x
Next i

End Function

   问题六:在DataGrid中显示DataCombo

   办法如下:

DataGrid1_MouseDown
Dim col As MSDataGridLib.Column
Set col = DataGrid1.Columns(DataGrid1.col)
If col.Caption = "MS" And DataGrid1.CurrentCellVisible Then
DataCombo1.Left = DataGrid1.Left + col.Left + 2 * Screen.TwipsPerPixelX
DataCombo1.Top = DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row) + 2 * Screen.TwipsPerPixelX
DataCombo1.Width = col.Width - 2 * Screen.TwipsPerPixelX
DataCombo1.Text = col.Text
DataCombo1.Visible = True
DataCombo1.SetFocus
DataCombo1.ZOrder
Else
DataCombo1.Visible = False
End If


Visual Basic编程疑难问题解(二)六:【上一篇】
Visual Basic编程疑难问题解(二)四:【下一篇】
【相关文章】
  • Visual Basic编程疑难问题解(二)六
  • 如何在本地机器调试CGI
  • 利用IEObjectData漏洞实现网页木马
  • 用VC++实现Win2000/XP下的休眠
  • 与软件高手过招:成为编程高手的奥秘
  • 用Visual Basic提取图标资源
  • 用VB6编程监控CPU的资源状况
  • RawSocke原始套接字实现Sniffer嗅探 上
  • RawSocke原始套接字实现Sniffer嗅探 下
  • JavaScript与Java的区别
  • 【随机文章】
  • Painter 7 手绘实例《插画篇》(3)
  • ProFTPD 1.3.0 released
  • web2.0编程思想
  • Cisco PIX防火墙配置指南
  • AJAX 与微软的新方案
  • 系统日志中的Mark
  • PKI 1 概要
  • 介绍 .NET Framework 3.0
  • Exchange 2000 Server安装答疑
  • 又得到一篇OpenBSD
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.