delphi path login function parameters ie javascript
1.打開多個包含控件的頁面出錯
在delphi7中開發的控件就有這個問題,緣由出在自己開發環境的類庫代碼有問題。目前沒有好的解決方法,官方給出過修改辦法,我沒有試驗成功,使用delphi2007開發,到目前爲止沒有出現這類問題。java
2.資源的釋放
重載Destroy; override;函數,在IE6.0中,關閉窗口會調用到這個函數。但我拿到IE7.0看的時候卻不行了,只會在跳轉到另外一個頁面調用,直接點擊IE右上角的關閉按鈕時沒用。
後來發現,點擊關閉按鈕時會產生「OnDestroy」事件,在它的調用代碼中加入咱們用來釋放的資源,如
procedure TActiveFormX.DestroyEvent(Sender: TObject);
begin
self.destroy_app();//用來釋放資源
if FEvents <> nil then FEvents.OnDestroy;
end;
能夠解決問題。web
3.調試
調試ActiveForm,不能直接點調試運行按鈕,由於它不是一個可執行的程序。須要在這以前設定一下運行參數,在菜單run--parameters中「host application」設置ie程序的路徑,通常爲C:\Program Files\Internet Explorer\iexplore.exe,「parameters」設置包含控件的htm頁的路徑,如d:\finger\FingerProj1.htm,而後就能夠設定斷點開始調試。
還有一個地方須要注意,運行的時候ie會檢測在C:\WINDOWS\Downloaded Program Files目錄中是否已經有了該控件,若是有就會直接用該控件,新生成的控件不會被運行,因此最好在調試以前將C:\WINDOWS\Downloaded Program Files目錄的該控件的舊有版本刪除掉。安全
4.向javascript中傳遞事件
只能是以下形式
<script for="obj" event="onhello(arg)" language="jscript"></script>,「onhello」爲事件名,arg爲參數。
obj.onhello=function()
{}這種形式無效。服務器
5.去除控件在網頁中的虛框
因爲安全的緣由,默認狀況下控件在頁面中不能得到焦點,不能響應一些事件。解決的方法是使用document.write輸出控件的標籤代碼。如:
function create_ck_webcamtest()
{
document.write("<OBJECT id='ct_webcamtest' classid='clsid:CCCC7A66-B886-47F3-A2CD-09793F65DD1B' ");
document.write("codebase='./twebcam.ocx' width=160 height=25 align=center hspace=0 vspace=0>");
document.write("</OBJECT>");
}app
6.壓縮和簽名
通常用delphi開發的控件比較大,只一個空白的ActiveForm就有500k左右。必須對它進行壓縮,我用「aspack」,能夠減小一半左右的大小,再能夠打包成cab形似會更小。
簽名也是必須的,否則IE會禁止控件的安裝,使用微軟提供的簽名軟件,前提是你要買一個證書,一年的費用1000多人民幣。ide
7.將二進制文件傳遞給web服務器
//用戶登錄示例
function TActiveFormX.User_Login(shop_id: Integer;
const path: WideString): Integer;
var
IdHttp1:TIdHttp;
PostStream:TIdMultiPartFormDataStream;
ResponseStream:TIdStringStream;
ms:TMemoryStream;
login_path:string;
begin
result:=-1;函數
if not self.FIs_Scaned then
begin
result:=-11;
exit;
end;spa
login_path:=trim(string(path));
if login_path='' then
begin
result:=-12;
exit;
end;.net
IdHttp1:=TIdHttp.Create(nil);
PostStream:=TIdMultiPartFormDataStream.Create;
ResponseStream:=TIdStringStream.Create('');
ms:=TMemoryStream.Create;
try
ms.Write(self.fpimage.Bits^,self.fpimage.Width*self.fpimage.Height);
ms.Position:=0;
PostStream.AddFormField('shop_id',inttostr(shop_id));
PostStream.AddFormField('fp_w',inttostr(self.fpimage.Width));
PostStream.AddFormField('fp_h',inttostr(self.fpimage.Height));
PostStream.AddObject('File1','image/fp_bmp',ms,'fp.bp');
try
IdHttp1.Request.ContentType:=PostStream.RequestContentType;
IdHttp1.Post(login_path,PostStream,ResponseStream);
result:=strtoint(trim(ResponseStream.DataString));
except
result:=-13;
end;
finally
IdHttp1.Free;
PostStream.Free;
ms.Free;
ResponseStream.Free; end;end;