線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3417
推到 Plurk!
推到 Facebook!

TCppWebBrowse的幾個問題

尚未結案
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-11 17:06:55 IP:220.137.xxx.xxx 未訂閱
因為我現在要有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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-13 16:58:18 IP:218.162.xxx.xxx 未訂閱
目前已經打算個別寫好CppWebBrowser和NMHTTP1 但是想請問如何在CppWebBrowser開啟網頁時,NMHTTP1也一起抓取原始檔。 反之~~NMHTTP1抓取原始檔時,CppWebBrowser也開啟網頁。
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-13 17:27:08 IP:218.162.xxx.xxx 未訂閱
我寫出來的方法是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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-13 20:04:10 IP:218.162.xxx.xxx 未訂閱
以下就是我自己想出來的解決方式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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-13 20:44:19 IP:59.115.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-14 01:55:24 IP:218.162.xxx.xxx 未訂閱
以下是我按照你的寫出來的程式,由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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-14 02:43:41 IP:61.230.xxx.xxx 未訂閱
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
系統時間:2024-05-03 17:10:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!