加载BMP图片到VBScript中的对象 [英] Loading a BMP image into an object in vbscript

查看:273
本文介绍了加载BMP图片到VBScript中的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

视觉基本和放大器; .NET是不是我的强项,所以请原谅我,如果我问一个愚蠢的问题。

我使用的ActiveX组件来捕获签名的硬件设备。我试图加载BMP图像设备的显示屏上。

该ActiveX配备了良好的文档,这就是该功能负责在屏幕上绘制BMP:

<一个href="http://www.topazsystems.com/software/sigplushelp/Methods_and_Properties_for_use_with_LCD_Tablets/Graphics_Methods/LCDWriteBitmap.htm" rel="nofollow">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的例子,我发现:

 昏暗的Web客户端作为新System.Net.WebClient
昏暗的标志作为位图
昏暗strSign作为字符串
strSign =htt​​p://www.topazsystems.com/images/Sign.bmp
签=新System.Drawing.Bitmap(WebClient.OpenRead(strSign))

昏暗惠康作为IntPtr的= sign.GetHbitmap

AxSigPlus1.TabletState = 1
AxSigPlus1.DisplayWindowRes = TRUE
AxSigPlus1.SetBackgroundHandle(HIcon.ToInt32,0
 

修改(12年5月9日):

在第二次看,ActiveX是一个OCX ActiveX组件,而不是一个DLL。

下面是附带的SDK演示的VBScript脚本:

 &LT; SCRIPT LANGUAGE =VBScript中&GT;&LT;! - 

子LoadSig
   如果do​​cument.formname.txtValue2.value =然后,
      SigPlus1.ClearTablet()
      MsgBox请重新输入显示的签名您的名字
   其他
      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.SigCom pressionMode = 2
      SigPlus1.DisplayPenWidth = 10
      SigPlus1.JustifyMode = 5
      SigPlus1.SigString = document.formname.SigData.value

      如果strDisclaimer = strDisclaimer2然后
         如果SigPlus1.NumberOfTabletPoints = 0然后
            MSGBOX姓名不匹配。签​​名无法显示
         结束如果
      其他
         MSGBOX免责条款已经被更改。签名无法显示
      结束如果
   结束如果
端子

//  - &GT;&LT; / SCRIPT&GT;

&LT; FORM NAME =窗体名称&GT;

&LT; INPUT TYPE =隐藏NAME =SigData&GT;
&LT; INPUT TYPE =隐藏NAME =txtValue&GT;
&LT; D​​IV STYLE =的位置是:绝对的;顶部:204px;左:10px的;&GT;
&LT; B&GT;从previous页免责声明信息:LT; / B&GT;&LT; BR&GT;&LT; BR&GT;
&LT; INPUT TYPE =文字大小= 117名=免责声明&GT;
&LT; / DIV&GT;

&LT; D​​IV STYLE =的位置是:绝对的;顶部:252px;左:10px的;&GT;
&LT; BR&GT;&LT; BR&GT;&LT; BR&GT;&LT; BR&GT;&LT; BR&GT;&LT; BR&GT;&LT; BR&GT;
&LT; B&gt;请重新输入您的名字,以显示签名:&LT; / B&GT;&LT; BR&GT;&LT; BR&GT;
&LT; INPUT TYPE =文本NAME =txtValue2&GT;&安培; NBSP;&安培; NBSP;
&LT;输入ID =DoneBtnNAME =DoneBtn类型=按钮值=显示的onclick =LoadSig的风格=BACKGROUND-COLOR:#666699;颜色:白色; FONT:大胆8PT宋体的onmouseout = window.event.srcElement.style.background ='#666699'的onmouseover =window.event.srcElement.style.background ='#AFAFAF'&GT;
&LT; / DIV&GT;

&LT; / FORM&GT;

&LT; SCRIPT LANGUAGE =JavaScript的&GT;&LT;! - 

//这些Javascript函数抢到通过GET方法传递的数据,并重新分配
//数据使用此页

函数替换(字符串,文本,由){
    //由字符串替换文本
    VAR I = string.indexOf(文字),中newstr ='';
    如果((!I)||(我== -1))
        返回的字符串;
    中newstr + = string.substring(0,I)+通过;
    如果(1 + text.length&LT; string.length减)
        中newstr + =替换(string.substring(1 + text.length,string.length减),文本,通过);
    返回中newstr;
}


功能getParm(字符串,PARM){
    PARM的//从字符串返回值
    变种startPos = string.indexOf(PARM +=);
    如果(startPos&GT; -1){
        startPos = startPos + parm.length + 1;
        变种endPos = string.indexOf(与&amp;,startPos);
        如果(endPos == -1)
            endPos = string.length减;
        返回反向转义(string.substring(startPos,endPos));
    }
    返回 '​​';
}

变种传递=取代(location.search.su​​bstring(1)中,+,);

document.formname.SigData.value = getParm(通过,SigData');
document.formname.txtValue.value = getParm(通过,txtValue');
document.formname.Disclaimer.value = getParm(通过,'免责声明');
strDisclaimer = document.formname.Disclaimer.value;

//  - &GT;&LT; / SCRIPT&GT;
 

解决方案

您应该下载该文件并保存暂时的。这样做后,就可以得到处理使用的LoadPicture( )功能。的LoadPicture返回是处理属性图片对象。我认为这是你所需要的。

 暗淡FSO,STM,WebCli,标志,惠康,strTempPath
设置Fso的=的CreateObject(Scripting.FileSystemObject的)

strTempPath = Fso.BuildPath(Fso.GetParentFolderName(WScript.ScriptFullName),Fso.GetTempName)

设置STM =的CreateObject(的ADODB.Stream)
    Stm.Type = 1'adTypeBinary
    Stm.Open

设置WebCli =的CreateObject(MSXML2.XMLHTTP)
    WebCli.openGET,http://www.topazsystems.com/images/Sign.bmp
    WebCli.send
    Stm.Write WebCli.responseBody
    Stm.SaveToFile strTempPath
    Stm.Close

套牌=的LoadPicture(strTempPath)
惠康= sign.Handle

AxSigPlus1.TabletState = 1
AxSigPlus1.DisplayWindowRes = TRUE
AxSigPlus1.SetBackgroundHandle HICON,0

套牌=无
Fso.DeleteFile strTempPath删除临时文件
 

Visual basic & .NET aren't my strong points, so forgive me if I'm asking a stupid question.

I'm using an activex component that captures signatures from a hardware device. I'm trying to load BMP images on the device's display.

The activex comes with good docs, and that's the function that responsible for drawing BMP on the display:

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

That function accept some kind of HBITMAP / BitmapHandle object. Can someone give me an example on how to load a BMP object from a URL (not from a local file)?

I got another example written in .NET that does that, but I'm using vbscript with that activex. Here's that .NET example I found:

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

Edit (5/9/12):

On second look, the activex is an OCX activex component and not a DLL.

Here's a demo vbscript script that comes with the SDK:

<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>

解决方案

You should download the file and save temporarily. After doing this, you can get handle using LoadPicture() function. LoadPicture returns a Picture object with Handle property. I think this is what you need.

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

这篇关于加载BMP图片到VBScript中的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆