delphi的ActiveForm的開發幾點總結

delphi的ActiveForm的開發幾點總結


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;

相關文章
相關標籤/搜索