2012-05-02 11 views
1

Visual basic & .NETは私の強みではないので、私が愚かな質問をしている場合は私を許してください。vbscriptのオブジェクトにBMPイメージをロードする

私は、ハードウェアデバイスからシグネチャをキャプチャする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で書かれたもう1つの例がありますが、そのアクティブスクリプトでvbscriptを使用しています。

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):ここでは.NETの例は、私が見つけたことだ

二表情で、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> 
+0

ActiveXコンポーネントはActiveXコントロール(.ocxファイル)ですか、それともActiveX DLLですか? – HK1

+0

私はそれがアクティブなdllのVisual Basicで書かれていると思う。 – aporat

+0

VB.NETまたはVBScriptを使用していますか?彼らは2つの非常に異なるものです。 – cadrell0

答えて

4

あなたがファイルをダウンロードし、一時的に保存する必要があります。この後、LoadPicture()機能を使用してハンドルを取得することができます。 LoadPictureはハンドルプロパティを持つ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 
+0

!これはWebページで使用できるvbscriptスクリプトですか、またはこの変更でactivexを再コンパイルする必要がありますか? – aporat

+0

my activexコードは、htmlページのにカプセル化されています。このコードはクライアント側では実行されません。他のアイデア? – aporat

+0

Webページで使用することはできますが、Internet ExplorerのみのブラウザでActiveXコントロールをサポートする場合にのみ実行されます。または、VBS拡張子で終わるファイルに入れ、.NetからProcess.Start( "C:\ a.vbs")でシェルすることもできます。 .NetフレームワークのWebClientクラスでこれを行う方が簡単です。 –

1

あなたは黄金のだろう画像オブジェクトにバイト配列の間で変換する方法を見つけ出すことができれば:あなただけのサーバーアプリはディスクから画像をロードする可能性があり、codegenerated VBAの深刻に変換'ar(m)= v ...'のような割り当てをして、VBAで変換しないでください。私はVB6ですべての種類のサンプルを見つけましたが、すべてがwin32 API呼び出しでうんざりしていました。

幸運にもクライアント側はそれに取り組んでいます。私が働いているところでは、署名パッドを使ってウェブ上で作業するシッククライアントアプリケーションを変換しています。これは私がやろうとしていることです:

あなた自身のOCXでラップしてください。スクリプトの安全性などを設定し、ファイルの作成を含め、必要なことを行うことができます。

ユーザーにはTopazのパッドを送信する必要があります。彼らはソフトウェアをインストールする必要があります。インストール時にあなたのことだけをピギーバックしてください。パッドを自分で購入している場合は、インストーラをダウンロードさせてください。

あなたが本当に豊かになりたい場合は、ラッパーが署名されていれば、それが自動的にダウンロードされ、安全に設定されます。あなたがそれを行うなら、それを非常に薄くするようにしてください。アップグレードのオーバーヘッドがあります。

関連する問題