向vb高手求救:用vb写得代码打印机控件(有代码),想用php调用vb中的方法生成ocx,如何修改vb代码啊?
Public flageztPrivate Sub Command1_Click()
If Text1.Text = "" Then
MsgBox "请输入数据"
Else
flagezt = 1
Call print_jc '调用打印函数
Delay (110)
If flagezt = 1 Then
MsgBox "打印机异常"
End If
End If
End Sub
Public Sub Delay(mSec As Long)
On Error Resume Next
Dim TStart As Single
TStart = Timer
While (Timer - TStart) < (mSec / 1000)
DoEvents
Wend
End Sub
Private Function print_jc() As String
Dim i As Integer
Dim str3 As String
Dim sj() As Byte
Dim sj_Txt As String
''1B40100401
sj_Txt = "1B40100401"
ReDim sj(Len(sj_Txt) / 2 - 1)
For i = 0 To Len(sj_Txt) - 1 Step 2
sj(i / 2) = Val("&H" & Mid(sj_Txt, i + 1, 2))
Next
MSComm1.Output = sj '向串口发数据
End Function
Private Function print_pt() As String
Dim i As Integer
Dim str3 As String
Dim sj() As Byte
Dim sj_Txt As String
''1B40100401
Dim chr_str As String
Dim hex_str As String
chr_str = Text1.Text
Text1.Text = ""
hex_str = chr_hex(chr_str) '将字符串转为十六进制表示的字符串
hex_str = Replace(hex_str, "2F6E", "0D0A") ''将回车换行的asc码DA转换转换成ODOA
Dim pt_dy As String
pt_dy = hex_str
sj_Txt = "1b40161b6coa1D28460400010001011d0c1b6405" + pt_dy + "0a1d5601100401"
ReDim sj(Len(sj_Txt) / 2 - 1)
For i = 0 To Len(sj_Txt) - 1 Step 2
sj(i / 2) = Val("&H" & Mid(sj_Txt, i + 1, 2))
Next
MSComm1.Output = sj '向串口发数据
End Function
Private Function chr_hex(a As String)
Dim b As String
Dim i As Integer
For i = 1 To Len(a)
b = b & Hex(Asc(Mid(a, i, 1)))
Next i
chr_hex = b
End Function
Private Sub Form_Load()
flagezt = 1
With MSComm1
.CommPort = 1
.Settings = "9600,N,8,1"
.InBufferSize = 1024
.OutBufferSize = 1024
.InputLen = 0
.RThreshold = 1
.RTSEnable = True
.InputMode = comInputModeBinary
.InBufferCount = 0
.OutBufferCount = 0
On Error GoTo Err:
'Exit Sub
Err:
If Err.Number = 8005 Then
MsgBox "打开端口1失败"
Else
MSComm1.PortOpen = True '打开通讯端口
Exit Sub
End If
End With
End Sub
Private Sub MSComm1_OnComm()
Dim DataRead() As String
Dim bytData() As Byte '用来从接收缓冲区读取数据
Dim i As Integer
Dim leng As Integer
Dim ccount As Integer
Dim readmsg As String
flagezt = 2
With MSComm1
Select Case .CommEvent
Case comEvReceive
.RThreshold = 0 '关闭串口事件响应
Do
ccount = .InBufferCount
Delay (100)
Loop Until .InBufferCount = ccount
bytData = .Input
ReDim DataRead(UBound(bytData)) As String
For i = 0 To UBound(bytData) '读串口缓冲区
DataRead(i) = Chr(bytData(i))
readmsg = readmsg & DataRead(i)
Next i
Select Case readmsg
Case Chr(&H0)
MsgBox "装纸成功"
Case Chr(&H4)
MsgBox "打印机缺纸,请重新装纸"
Case Chr(&H1E)
MsgBox "打印机缺纸,请重新装纸"
Case Chr(&HFE)
MsgBox "打印机加电正常"
Case Chr(&HFC)
MsgBox "打印机加电正常"
Case Chr(&HFF)
MsgBox "打印机加电正常"
Case Chr(&H0)
MsgBox "打印机异常"
Case Chr(&H16)
If Text1.Text <> "" Then
Call print_pt
Else
MsgBox "打印成功"
End If
End Select
Text3.Text = Text3.Text + readmsg
'Text3.Text = readmsg
.RThreshold = 1 '恢复串口事件响应
End Select
End With
End Sub
ps: php是用事件调用
<HTML>
<HEAD>
<TITLE>(第二步)</TITLE>
<SCRIPT LANGUAGE="javascript" FOR="com_fp" EVENT="ScanOK">
<!--
read_card_scanok();
-->
</SCRIPT>
<script language="JavaScript">
function timeout_jy()
{
document.all.pos_td.innerHTML="等待用户操作超时!";
setTimeout('myrefresh()',3000);
document.all.Submit1.disabled=true;
}
function myrefresh()
{
window.location="first.php";
}
function timeout()
{
document.all.pos_td.innerHTML="发票打印机状态异常,请检查打印机是否正常!";
setTimeout('myrefresh()',5000);
}
setTimeout('timeout()',15000); //指定10秒后返回(可认为打印机不正常,无电源或通讯线路不正常)
</script>
</HEAD>
<BODY>
<OBJECT ID="com_fp" CLASSID="CLSID:AEEC6FEF-??????-A2B2-E56C90FD6B46" width="0" height="0"></OBJECT>
<table width="100%">
<tr>
<td align="center" height="120" id="pos_td"> </td>
</tr>
<form name="form1" method="post" action="third.php">
<tr>
<td align="center" height="20" >
<input type="hidden" name="name" value="<? echo $name; ?>" >
<input type="hidden" name="id" value="<? echo $id; ?>" >
<input type="submit" name="Submit1" value="确认打印" disabled>
<input type="submit" name="Submit2" value=" 返 回 " onClick="myrefresh()"> </td>
</tr>
</form>
</table>
</BODY>
<SCRIPT ID="clientEventHandlersJS" LANGUAGE="javascript">
function read_card_scanok() //响应事件函数
{
var str;
str=com_fp.card_number; //从控件中取得返回值
if(str.length>0)
{
document.all.pos_td.innerHTML="打印机状态正常,可以交易!";
document.all.Submit1.disabled=false;
setTimeout('timeout_jy()',10000);
}
}
function read_card_init()
{
com_fp.com_port="1"; //串口号
com_fp.com_conf="9600,N,8,1"; //串口参数
com_fp.init(); //初始化串口
com_fp.print_jc(); //
}
read_card_init(); //查询pos机状态
</script>
</HTML>
--------------------编程问答-------------------- 我擦 09年的。估计一年的思索楼主已经知道答案了。
顺便补充一下,打印机是本地的。要编成activeX控件供。net或php调用即可。
可以用vb写activeX。
鉴定完毕。
补充:VB , 控件