TCppWebBrowse的幾個問題 |
尚未結案
|
Miki-lion
中階會員 ![]() ![]() ![]() 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
因為我現在要有2個功能1.顯示網頁2.顯示網頁的原始檔 顯示網頁的原始檔的部分我是用NMHTTP元件,LabeledEdit(輸入網頁的地方)
和一個RichEdit(顯示原始檔的地方) 問題是在於TCppWebBrowse顯示網頁,是在他的元件裡面,我想將2個功能整合在一起。 顯示網頁和顯示原始檔的地方是一樣的,用2個按鈕來選擇你要顯示甚麼, 有沒有可能將以下的程式(顯示網頁原始檔)的RichEdit改成顯示在TCppWebBrowse裡
//抓網頁原始檔 if(LabeledEdit1->Text != "") { NMHTTP1->Get(LabeledEdit1->Text); RichEdit1->Lines->Add(NMHTTP1->Body); } |
Miki-lion
中階會員 ![]() ![]() ![]() 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
|
Miki-lion
中階會員 ![]() ![]() ![]() 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
我寫出來的方法是2個按鈕ㄧ個是瀏覽網頁,一個是抓取原始檔 2個程式都一樣,只有LabeledEdit編號更改(1和2)
if(LabeledEdit2->Text != "")
{
NMHTTP1->Get(LabeledEdit2->Text);
RichEdit1->Lines->Add(NMHTTP1->Body);
CppWebBrowser1->Navigate(WideString(LabeledEdit2->Text));
}
不管按哪一個按鈕,他都會去跑這2種功能 但是編譯時就錯了~~沒有錯誤訊息~就當在那裡...我試好幾次了..><
|
Miki-lion
中階會員 ![]() ![]() ![]() 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
以下就是我自己想出來的解決方式BitBtn3的Onclick事件設為BitBtn12 不過取的原始檔方面,雅虎奇摩就沒有辦法抓他的原始檔下來, NMHTTP有限定什麼條件嗎?
void __fastcall TForm1::BitBtn12Click(TObject *Sender) { //抓網頁/原始檔 if(Sender == BitBtn12) { RichEdit1->Clear(); CppWebBrowser1->Navigate(WideString(LabeledEdit2->Text)); NMHTTP1->Get(LabeledEdit2->Text); RichEdit1->Lines->Add(NMHTTP1->Body); } if(Sender == BitBtn3) { RichEdit1->Clear(); CppWebBrowser1->Navigate(WideString(LabeledEdit1->Text)); NMHTTP1->Get(LabeledEdit1->Text); RichEdit1->Lines->Add(NMHTTP1->Body); } } |
RedSnow
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Miki-lion 妳好: 如果妳只需要讀取網頁,並且將它的內容取出來放到 RichEdit 裡去的話,妳沒有必要使用到 NMHTTP,同時妳原先的處理動作不但重覆,而且有可能在網速突然變慢或網站突然當掉時,發生 RichEdit 內容無法與 WebBrowser 的內容相對應的現象。 我建議妳只要使用 WebBrowser 就好了,當妳將網頁讀取到 WebBrowser 顯示後,妳可以直接從 WebBrowser 取得網頁的原始碼內容,然後丟給 RichEdit 來顯示,以下敘述可以做到我所描述的動作:
Variant doc = WebBrowser1->ControlInterface->Document; if (((IDispatch *)doc) != NULL) { Variant body = doc.OlePropertyGet("Body"); Variant html = body.OlePropertyGet("InnerHTML"); RichEdit1->Lines->Text = html; }妳可以將這段敘述放到單獨的按鈕事件中,不過妳得先確保網頁已經載入到 WebBrowser 裡了,最好的作法是直接將這段敘述放到 WebBrowser 的 OnDocumentComplete 事件中,這樣子就可以在 WebBrowser 讀完網頁內容後,就直接將原始碼設給 RichEdit 了,剩下的動作妳只需修改一下妳的按鍵動作,切換顯示 RichEdit 或是 WebBrowser 就可以了。 另外照妳原先的想法 (在 WebBrowser 內顯示網頁的 HTML 原始碼),其實也是可行的,只需要透過字串轉換動作,將取得的 HTML 原始碼中的 < 與 > 符號分別轉為 < 與 > 然後再傳回給 WebBrowser 來顯示即可。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/08/13 21:21:47 |
Miki-lion
中階會員 ![]() ![]() ![]() 發表:90 回覆:180 積分:54 註冊:2005-04-24 發送簡訊給我 |
以下是我按照你的寫出來的程式,由LabeledEdit2輸入網址,按下按鈕後,並沒有在Richedit內出現網頁的原始碼。 因為這段程式我好多看不懂,不知道你的方式,我的方法雖然功能出來了,不過寫法真的是太多餘了點,謝謝你的幫忙,我再繼續研究看看。
CppWebBrowser1->Navigate(WideString(LabeledEdit2->Text)); Variant doc = CppWebBrowser1->ControlInterface->Document; if (((IDispatch *)doc) != NULL) { Variant body = doc.OlePropertyGet("Body"); Variant html = body.OlePropertyGet("InnerHTML"); RichEdit1->Lines->Text = html; }發表人 - miki-lion 於 2005/08/14 01:59:04 |
RedSnow
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Miki-lion 妳好:
引言:以下是我按照你的寫出來的程式,由LabeledEdit2輸入網址,按下按鈕後,並沒有在Richedit內出現網頁的原始碼。那是因為妳並沒有仔細的去看我所寫的說明,所以無法在 RichEdit 內顯示出網頁的原始碼,請再仔細的看一遍: 引言:妳可以將這段敘述放到單獨的按鈕事件中,不過妳得先確保網頁已經載入到 WebBrowser 裡了,最好的作法是直接將這段敘述放到 WebBrowser 的 OnDocumentComplete 事件中,這樣子就可以在 WebBrowser 讀完網頁內容後,就直接將原始碼設給 RichEdit 了,剩下的動作妳只需修改一下妳的按鍵動作,切換顯示 RichEdit 或是 WebBrowser 就可以了。妳把我那一段程序直接放在妳那個載入頁面 CppWebBrowser1->Navigate(WideString(LabeledEdit2->Text)); 的敘述之後,這個時候頁面根本就還沒載入完畢,當然會無法取得頁面的內容。 妳應該要將該段敘述放到 WebBrowser 的 OnDocumentComplete 事件中,或者在進行 CppWebBrowser1->Navigate(WideString(LabeledEdit2->Text)); 的敘述前先將準備讀取原始碼的按鈕 (放置我那段敘述的那個按鈕) 先 Disabled 起來,等到頁面載入完畢了之後再重設為 Enabled 狀態。 另外一件事情;我剛才做了些測試,發現我在前一篇提供的簡便方式所取得的頁面內容僅有 BODY 段的,後續雖又做了多項測試後,似乎仍無法使用同法取得完整頁面內容,因此上網找了一下,找到一篇可以抓取完整頁面內容的方式,請參考下列網頁內的最後一篇使用 IHTMLDocument2 取得網頁原始碼的範例: http://c.developpez.com/faq/bcb/?page=composantstcppwebbrowser 將該段自定函式碼複製到妳自己程式的最前面 (記得要 include 那個 mshtml.h 檔),然後在妳要取得網頁原始碼的位置加上如下的敘述即可: RichEdit1->Lines->Text = GetSource(CppWebBrowser1);再試試看吧。 7 天天敲鍵盤 v 時時按滑鼠 8 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |