Visual Basic& .NET不是我的优点,所以如果我问一个愚蠢的问题,请原谅我。
我正在使用一个从硬件设备捕获签名的activex组件。我正在尝试在设备的显示屏上加载BMP图像。
activex附带了很好的文档,这是负责在显示屏上绘制BMP的函数:
该函数接受某种HBITMAP / BitmapHandle对象。有人能给我一个关于如何从URL(而不是从本地文件)加载BMP对象的示例吗?
我有另一个用.NET编写的例子,但是我正在使用vbscript和那个activex。这是我发现的.NET示例:
Dim WebClient As New System.Net.WebClient
Dim sign As Bitmap
Dim strSign As String
strSign = "http://www.topazsystems.com/images/Sign.bmp"
sign = New System.Drawing.Bitmap(WebClient.OpenRead(strSign))
Dim HIcon As IntPtr = sign.GetHbitmap
AxSigPlus1.TabletState = 1
AxSigPlus1.DisplayWindowRes = True
AxSigPlus1.SetBackgroundHandle(HIcon.ToInt32, 0
编辑(5/9/12):
第二次看,activex是OCX activex组件而不是DLL。
这是SDK附带的演示vbscript脚本:
<SCRIPT LANGUAGE="VBScript"><!--
Sub LoadSig
If document.formname.txtValue2.value="" Then
SigPlus1.ClearTablet()
MsgBox "Please re-enter your first name to display signature"
Else
SigPlus1.JustifyX=10
SigPlus1.JustifyY=10
SigPlus1.AutoKeyStart
SigPlus1.AutoKeyData=document.formname.txtValue2.value
SigPlus1.AutoKeyData=document.formname.Disclaimer.value
strDisclaimer2=document.formname.Disclaimer.value
SigPlus1.AutoKeyFinish
SigPlus1.EncryptionMode=1
SigPlus1.SigCompressionMode=2
SigPlus1.DisplayPenWidth=10
SigPlus1.JustifyMode=5
SigPlus1.SigString=document.formname.SigData.value
If strDisclaimer=strDisclaimer2 Then
If SigPlus1.NumberOfTabletPoints=0 Then
MsgBox "Name does not match. Signature cannot be displayed"
End If
Else
MsgBox "Disclaimer has been changed. Signature cannot be displayed"
End If
End If
end Sub
//--></SCRIPT>
<FORM NAME="formname">
<INPUT TYPE="hidden" NAME="SigData">
<INPUT TYPE="hidden" NAME="txtValue">
<DIV STYLE="position:absolute; top:204px; left:10px;">
<b>Disclaimer information from the previous page:</b><br><br>
<INPUT TYPE="text" size=117 name="Disclaimer">
</DIV>
<DIV STYLE="position:absolute; top:252px; left:10px;">
<br><br><br><br><br><br><br>
<b>Please re-enter your first name to display signature:</b><br><br>
<INPUT TYPE="text" NAME="txtValue2">
<input id="DoneBtn" name="DoneBtn" type="button" value="Display" onclick="LoadSig" style="BACKGROUND-COLOR: #666699; COLOR: white; FONT: bold 8pt verdana" onmouseout="window.event.srcElement.style.background = '#666699'" onmouseover="window.event.srcElement.style.background = '#AFAFAF'">
</DIV>
</FORM>
<SCRIPT LANGUAGE="JavaScript"><!--
//These Javascript functions grab the data passed via the GET method, and redistribute
//the data for use on this page
function replace(string,text,by) {
// Replaces text with by in string
var i = string.indexOf(text), newstr = '';
if ((!i) || (i == -1))
return string;
newstr += string.substring(0,i) + by;
if (i+text.length < string.length)
newstr += replace(string.substring(i+text.length,string.length),text,by);
return newstr;
}
function getParm(string,parm) {
// returns value of parm from string
var startPos = string.indexOf(parm + "=");
if (startPos > -1) {
startPos = startPos + parm.length + 1;
var endPos = string.indexOf("&",startPos);
if (endPos == -1)
endPos = string.length;
return unescape(string.substring(startPos,endPos));
}
return '';
}
var passed = replace(location.search.substring(1),"+"," ");
document.formname.SigData.value = getParm(passed,'SigData');
document.formname.txtValue.value = getParm(passed,'txtValue');
document.formname.Disclaimer.value = getParm(passed, 'Disclaimer');
strDisclaimer = document.formname.Disclaimer.value;
//--></SCRIPT>
答案 0 :(得分:4)
您应该下载该文件并暂时保存。完成此操作后,您可以使用LoadPicture()函数进行处理。 LoadPicture返回带有 Handle 属性的Picture
对象。我认为这就是你所需要的。
Dim Fso, Stm, WebCli, sign, HIcon, strTempPath
Set Fso = CreateObject("Scripting.FileSystemObject")
strTempPath = Fso.BuildPath(Fso.GetParentFolderName(WScript.ScriptFullName), Fso.GetTempName)
Set Stm = CreateObject("Adodb.Stream")
Stm.Type = 1 'adTypeBinary
Stm.Open
Set WebCli = CreateObject("MSXML2.XMLHTTP")
WebCli.open "GET", "http://www.topazsystems.com/images/Sign.bmp"
WebCli.send
Stm.Write WebCli.responseBody
Stm.SaveToFile strTempPath
Stm.Close
Set sign = LoadPicture(strTempPath)
HIcon = sign.Handle
AxSigPlus1.TabletState = 1
AxSigPlus1.DisplayWindowRes = True
AxSigPlus1.SetBackgroundHandle HIcon, 0
Set sign = Nothing
Fso.DeleteFile strTempPath 'remove temp file
答案 1 :(得分:1)
如果你能弄清楚如何在字节数组和图片对象之间进行转换,那么你可能只需让服务器应用程序从磁盘加载图片,将其转换为严格的代码生成VBA分配,例如'ar (m)= v ...'然后在VBA中转换。我在VB6中发现了各种样本,但所有样本都充满了win32 API调用。
祝客户方能够使用它,祝你好运。在我工作的地方,我们正在转换一个使用签名板在网络上工作的胖客户端应用程序;这就是我打算做的事情:
用自己的OCX包裹它。让它自己设置为脚本安全等,它可以做它想要的,包括写文件。
您将不得不向用户发送Topaz垫。他们将不得不安装软件。只需在安装上搭载你的。如果他们自己购买垫子,只需让他们下载你的安装程序。
如果你想变得非常富有,你可以让你的包装器签名,无论如何它都会自动下载并设置自己的安全。如果你这样做,请确保它非常薄,升级的开销很大。