解決 ActiveForm 在IE 上的安全性問題 |
|
frankiech
中階會員 發表:7 回覆:78 積分:52 註冊:2002-08-29 發送簡訊給我 |
將你的ActiveForm 中的TActiveFormFactory改成TSafeActiveFormFactory
initialization // TActiveFormFactory.Create( TSafeActiveFormFactory.Create( ComServer, TActiveFormControl, Txxx, Class_xxx, 1, '', OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL, tmApartment);TSafeActiveFormFactory 定義如下 : unit SafeFactory; interface uses ComObj, ActiveX, AXCtrls; const CATID_SafeForScripting: TGUID = '{7DD95801-9882-11CF-9FA9-00AA006C42C4}'; CATID_SafeForInitializing: TGUID = '{7DD95802-9882-11CF-9FA9-00AA006C42C4}'; type TSafeActiveFormFactory = class( TActiveFormFactory ) procedure UpdateRegistry( Register: Boolean ); override; end; TSafeActiveXControlFactory = class( TActiveXControlFactory ) procedure UpdateRegistry( Register: Boolean ); override; end; implementation procedure AddSafetyKeys( const ClassID: TGUID ); var ClassKey: string; begin ClassKey := 'CLSID\' GUIDToString( ClassID ); CreateRegKey( ClassKey '\Implemented Categories','',''); CreateRegKey( ClassKey '\Implemented Categories\' GUIDToString( CATID_SafeForScripting ),'',''); CreateRegKey( ClassKey '\Implemented Categories\' GUIDToString( CATID_SafeForInitializing ),'',''); end; procedure RemoveSafetyKeys( const ClassID: TGUID ); var ClassKey: string; begin ClassKey := 'CLSID\' GUIDToString( ClassID ); DeleteRegKey( ClassKey '\Implemented Categories\' GUIDToString( CATID_SafeForInitializing )); DeleteRegKey( ClassKey '\Implemented Categories\' GUIDToString( CATID_SafeForScripting )); DeleteRegKey( ClassKey '\Implemented Categories'); end; {TSafeActiveFormFactory} procedure TSafeActiveFormFactory.UpdateRegistry( Register: Boolean ); begin if Register then begin AddSafetyKeys( ClassID ); inherited UpdateRegistry( Register ); end else begin RemoveSafetyKeys( ClassID ); inherited UpdateRegistry( Register ); end; end; {TSafeActiveXControlFactory} procedure TSafeActiveXControlFactory.UpdateRegistry( Register: Boolean ); begin if Register then begin AddSafetyKeys( ClassID ); inherited UpdateRegistry( Register ); end else begin RemoveSafetyKeys( ClassID ); inherited UpdateRegistry( Register ); end; end; end. |
yzml
一般會員 發表:4 回覆:4 積分:1 註冊:2004-12-26 發送簡訊給我 |
const
CATID_SafeForScripting: TGUID = '{7DD95801-9882-11CF-9FA9-00AA006C42C4}';
CATID_SafeForInitializing: TGUID ='{7DD95802-9882-11CF-9FA9-00AA006C42C4}'; 請問這裏的TGUID的值與Type Library的哪個TGUID相同?比如Type Library中有四個TGUID:
LIBID_YzFTP: TGUID = '{E5E2E5ED-2E2A-4845-A9F2-DC658EEBF8F3}';
IID_IYzFTP: TGUID = '{D0B55322-B569-4A7E-B256-AEB5B1EC2828}';
DIID_IYzFTPEvents: TGUID = '{9084EA54-1ACD-42FA-A594-9D1D909391F4}';
CLASS_YzFTP: TGUID = '{5CCF17F5-E15A-4E37-A5DD-AC2C8A8CE5B8}';
應該選哪一個TGUID填到裏面去?
|
frankiech
中階會員 發表:7 回覆:78 積分:52 註冊:2002-08-29 發送簡訊給我 |
|
cwvdavid
一般會員 發表:1 回覆:4 積分:1 註冊:2005-02-16 發送簡訊給我 |
frankiech大大...不好意思喔...我是Delphi的初學者...
以前只寫過一般的應用程式(是用Delphi...連資料庫...做一些簡單的事) 之後就是寫Java, C , VB, ASP...... 最近因為工作的關係又回來摸Delphi了... 我試了您所說的方式...
直接在ActiveForm的Project...New一個unit...(檔名是SafeFactory)
把程式碼貼上去...(至此沒有問題...) 然後把ActiveForm 中的TActiveFormFactory改成
TSafeActiveFormFactory 然後編譯...就錯了...
[Error] STUC030RImpl1.pas(2033): Undeclared identifier: 'TSafeActiveFormFactory'
[Error] STUC030RImpl1.pas(2033): Missing operator or semicolon
[Fatal Error] STUC03R.dpr(7): Could not compile used unit 'STUC030RImpl1.pas' 我看程式碼...有寫呀...那...我不曉得是不是少了什麼動作...
如果可能, 希望能請您再詳細一點的介紹, 謝謝您
|
frankiech
中階會員 發表:7 回覆:78 積分:52 註冊:2002-08-29 發送簡訊給我 |
你可以將
unit SafeFactory; interface uses ComObj, ActiveX, AXCtrls; const CATID_SafeForScripting: TGUID = '{7DD95801-9882-11CF-9FA9-00AA006C42C4}'; CATID_SafeForInitializing: TGUID = '{7DD95802-9882-11CF-9FA9-00AA006C42C4}'; type TSafeActiveFormFactory = class( TActiveFormFactory ) procedure UpdateRegistry( Register: Boolean ); override; end; TSafeActiveXControlFactory = class( TActiveXControlFactory ) procedure UpdateRegistry( Register: Boolean ); override; end; implementation procedure AddSafetyKeys( const ClassID: TGUID ); var ClassKey: string; begin ClassKey := 'CLSID\' GUIDToString( ClassID ); CreateRegKey( ClassKey '\Implemented Categories','',''); CreateRegKey( ClassKey '\Implemented Categories\' GUIDToString( CATID_SafeForScripting ),'',''); CreateRegKey( ClassKey '\Implemented Categories\' GUIDToString( CATID_SafeForInitializing ),'',''); end; procedure RemoveSafetyKeys( const ClassID: TGUID ); var ClassKey: string; begin ClassKey := 'CLSID\' GUIDToString( ClassID ); DeleteRegKey( ClassKey '\Implemented Categories\' GUIDToString( CATID_SafeForInitializing )); DeleteRegKey( ClassKey '\Implemented Categories\' GUIDToString( CATID_SafeForScripting )); DeleteRegKey( ClassKey '\Implemented Categories'); end; {TSafeActiveFormFactory} procedure TSafeActiveFormFactory.UpdateRegistry( Register: Boolean ); begin if Register then begin AddSafetyKeys( ClassID ); inherited UpdateRegistry( Register ); end else begin RemoveSafetyKeys( ClassID ); inherited UpdateRegistry( Register ); end; end; {TSafeActiveXControlFactory} procedure TSafeActiveXControlFactory.UpdateRegistry( Register: Boolean ); begin if Register then begin AddSafetyKeys( ClassID ); inherited UpdateRegistry( Register ); end else begin RemoveSafetyKeys( ClassID ); inherited UpdateRegistry( Register ); end; end; end.另存至 SafeFactory.pas, 然後就跟一般的使用方法一樣 Add 到你的Project, and use it !! |
cwvdavid
一般會員 發表:1 回覆:4 積分:1 註冊:2005-02-16 發送簡訊給我 |
不好意思喔...我又來了... 由於一直試不出來, 所以我改為... 執行Delphi→建立新的ActiveX Form→(什麼都不加)
然後, 加一個unit1.pas...把程式碼加進去...
(至此仍然都是ok...) 問題仍然在ActiveX Form裡面...
只要把TActiveFormFactory改成TSafeActiveFormFactory
就一定會無法編譯... 我在想...應該是新加入的程式碼...不屬於ActiveX Form...
至於是否有細部設定, 我就真的不清楚了 我已經把檔案上傳到http://210.67.36.236/delphi/test.zip 如果您有時間的話, 可以試試看... 最後...我是用Delphi 6...(應該不會剛好是版本的問題吧...) 再一次的感謝您 發表人 -
|
cwvdavid
一般會員 發表:1 回覆:4 積分:1 註冊:2005-02-16 發送簡訊給我 |
|
frankiech
中階會員 發表:7 回覆:78 積分:52 註冊:2002-08-29 發送簡訊給我 |
在你的 unit ActiveFormImpl1 裡的uses 加入 unit1
unit ActiveFormImpl1; {$WARN SYMBOL_PLATFORM OFF} interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ActiveX, AxCtrls, ActiveFormProj1_TLB, StdVcl , unit1 ; ^^^^^^ 引言: 不好意思喔...我又來了... 由於一直試不出來, 所以我改為... 執行Delphi→建立新的ActiveX Form→(什麼都不加) 然後, 加一個unit1.pas...把程式碼加進去... (至此仍然都是ok...) 問題仍然在ActiveX Form裡面... 只要把TActiveFormFactory改成TSafeActiveFormFactory 就一定會無法編譯... 我在想...應該是新加入的程式碼...不屬於ActiveX Form... 至於是否有細部設定, 我就真的不清楚了 我已經把檔案上傳到http://210.67.36.236/delphi/test.zip 如果您有時間的話, 可以試試看... 最後...我是用Delphi 6...(應該不會剛好是版本的問題吧...) 再一次的感謝您 發表人 - >>< face="Verdana, Arial, Helvetica"> |
cwvdavid
一般會員 發表:1 回覆:4 積分:1 註冊:2005-02-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |