将BMP图像加载到vbscript中的对象中

时间:2012-05-02 20:13:27

标签: .net vbscript activex

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编写的例子,但是我正在使用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">&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>

2 个答案:

答案 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垫。他们将不得不安装软件。只需在安装上搭载你的。如果他们自己购买垫子,只需让他们下载你的安装程序。

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

相关问题