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 オブジェクトを受け入れます。BMP オブジェクトを URL から (ローカル ファイルからではなく) ロードする方法の例を誰か教えてもらえますか?

それを行う.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 は DLL ではなく OCX の activex コンポーネントです。

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 は、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
于 2012-05-04T00:39:49.957 に答える