高分求助TWEBBROWSER問題 幫頂有分 VCL組件開發及應用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225015126140.html
用TWEBBROWSER做了一個瀏覽器,調用原生兩個網頁檔案
網頁中有大量的JAVESCRIP指令碼,
在來回切換時出現三種錯誤,這三種錯誤不經常出,但總有,
一個是MSHTML。DLL異常
二是彈出一個對話方塊,標題為“Just-in-Time 偵錯”
最上方是:“請選擇一個調試器”
下面是一個列表框,標題為“可能的調試器”
列表框中有一個“新執行個體Mircosoft script editor”
下方是一個複選框,內容是將當前的調試器設為預設調試器,對後最下方是,是否希望用選定的調試器進行調試然後是按鈕
三是 出現一個對話方塊,從英文看是告訴我在調試狀態下
第一個問題是測試時在所有機器上都會出現
第二個問題和第三個問題,在有的機器上不出現,
第三個問題出現後,會直接關閉程式
開發環境 D7 XP
網頁 javascrip,加MP7是由工具軟體產生的
請高手解決
My Code是這樣
我有一個單元,定義了一個類,這個類從資料庫中讀出參數,產生執行個體,然後在介面上產生按鈕
每個按鈕對應這個類的一個執行個體
點擊一個按鈕則會開啟相應的網頁,這些網頁都是存在本地的,是由軟體產生的MP7課件
包含視頻和PPT,並由網頁中的javaSCRIPt 指令碼負責視頻和PPT的播放,同步問題,
網頁內的指令碼是由軟體產生的,而且單獨播放一個是沒有問題的
問題都出在我不停的按按鈕的時候,也就是我開啟一個網頁之後,馬上又開啟一個網頁
我想是WEBBROWSER調入了新的網頁,但原網頁中的指令碼沒有釋放乾淨,或者還在運行,造成了衝突,所以出現了這個問題
主要代碼如下,
unit define;
//
TPowerCtl = class(TObject)
private
but: Boolean;
Fobj: Tcontrol;
FCtlInfo: TCtlFieldINfo;
oldx: Integer;
oldy: Integer;
procedure objClick(Sender:Tobject);
procedure objenter(sender:Tobject);
procedure TPowerCtl.objClick(Sender:Tobject);
var
i:integer;
doc:IHTMLDOCUMENT2;
// temp:integer;
begin
// temp:=0;
For i:=0 to TControl(sender).Parent.ControlCount-1 do
begin
if TControl(TControl(sender).Parent.Controls[i]).Tag =9999 then //網頁控制項的TAG
begin
while TWebBrowser(TControl(sender).Parent.Controls[i]).ReadyState <>4 do
Application.ProcessMessages;// 完成後再執行
TWebBrowser(TControl(sender).Parent.Controls[i]).Stop ;
doc:=TWebBrowser(TControl(sender).Parent.Controls[i]).document as IhtmlDOCument2;
doc.close ;
doc.clear ;
TWebBrowser(TControl(sender).Parent.Controls[i]).Navigate(MainPath+self.FCtlInfo.FINdexPage); //調入相應的網頁
doc._Release;
end;
end;
end;
由主表單調用這個單元,
在這個單元的初始化事件中初始化了OLE控制項//這點我有疑問,到底在那初始化好
// WEB是辦面上固定的,是否應當寫在PRJ的初始化事件
//或是主表單單元的初始化事件中
頂一下
上一貼上幫過忙的兄弟,上一貼已結貼給分,但如有空,請繼續幫忙,
頂頂~
頂了,看...
你得把兩個網頁給出來吧
估計是因為:objClick還沒執行完,新的objClick又執行了
需要想辦法避免這樣的情況
方案1
procedure TPowerCtl.objClick(Sender:Tobject);
//。。
begin
Enabled := False; // 還沒處理完的時候別讓使用者切換
//開啟網頁
Enabled := True; // 處理完後才允許切換
end;
方案2
別用while do
通過事件WebBrowser1.OnDocumentComplete處理文檔下載完的事件
伴水兄,
由於網頁開啟一個新的網頁之後,會自已去調用網頁,所以我覺得用ONDOCUMENTCOMPLETE靠不住,,
我現在用readystate=4 來控制控制項的enabled,
但是問題還是一樣,
有沒有辦法在我中止網頁的同時,中止網頁中指令碼的執行
剪兄
兩個網頁加起來300多M,我估計發不出來,含視頻和PPT的,指令碼也不是我寫的,
沒遇到過,我幫頂!
初始化一定要加,很重要,格式:
uses ActiveX;
Initialization
OleInitialize(nil);
finialization
OleUnInitialize;
兩個網頁加起來300多M,我估計發不出來,含視頻和PPT的,指令碼也不是我寫的,
大汗,給出網頁代碼就可以吧!ppt和視頻都是本地調用。
不過新手,不會webbrowser的異常處理。
初始化應當加在那個單元?
結帳給分