1

Visual Basic 和 .NET 不是我的强项,所以如果我问了一个愚蠢的问题,请原谅我。

我正在使用从硬件设备捕获签名的 activex 组件。我正在尝试在设备的显示屏上加载 BMP 图像。

activex 附带了很好的文档,这就是负责在显示器上绘制 BMP 的函数:

http://www.topazsystems.com/software/sigplushelp/Methods_and_Properties_for_use_with_LCD_Tablets/Graphics_Methods/LCDWriteBitmap.htm

该函数接受某种 HBITMAP / BitmapHandle 对象。有人可以给我一个关于如何从 URL(而不是从本地文件)加载 BMP 对象的示例吗?

我得到了另一个用 .NET 编写的示例,但我正在使用带有该 activex 的 vbscript。这是我找到的.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">&nbsp;&nbsp;
<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>
4

2 回答 2

4

您应该下载文件并临时保存。完成此操作后,您可以使用LoadPicture()函数获取句柄。LoadPicture 返回一个Picture具有Handle属性的对象。我认为这就是你所需要的。

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
于 2012-05-04T00:39:49.957 回答
1

如果你能弄清楚如何在字节数组和图片对象之间进行转换,你会很高兴:你可以让服务器应用程序从磁盘加载图片,将其转换为一系列代码生成的 VBA 分配,如 'ar(m) =v...' 然后在 VBA 中取消转换。我在 VB6 中找到了各种示例,但都充满了 win32 API 调用。

祝你好运让客户端使用它。在我工作的地方,我们正在将使用签名板的胖客户端应用程序转换为在 Web 上工作;这就是我打算做的:

用你自己的 OCX 包装它。让它自己设置为脚本安全等,它可以做它想做的事情,包括写文件。

您将不得不向您的用户发送 Topaz 垫。他们将不得不安装软件。只需在安装时搭载您的。如果他们自己购买垫子,只需让他们下载您的安装程序。

如果你想变得非常富有,你可以让你的包装器签名等等,这样它就会自动下载并设置自己的安全。如果你这样做,请确保它非常薄,升级会有开销。

于 2012-05-14T21:10:49.710 回答