怎麼強迫指定 TCppWebBrowser 的文件類型 |
尚未結案
|
visor
一般會員 發表:5 回覆:12 積分:3 註冊:2003-09-09 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 怎麼強迫指定 TCppWebBrowser 的文件類型 我現在遇到的問題是,使用 TCppWebBrowser 然後用更改 Document 的方式將 原始檔餵給他,但是它有時顯示 HTML 有時顯示原始檔,所以該怎麼去強迫指 定 TCppWebBrowser 的文件類型 -- Visor 元智大學資訊工程所visor你好< >: 嗯,不好意思,對於你的問題實在不是很瞭解,所以可能要討論一下先了< >! 1.就我目前的認知,Builder的TCppWebBrowser物件等同於一個IE browser,也就是你餵TCppWebBrowser吃什麼檔它就依這個檔的格式去顯示(當然有可能格式無法辨式),完全同IE一樣! 2.所以如果你的.html檔沒有編錯(可能你用frontpage或手編或......),那麼你給它吃下後,絕對能正常顯示,當然如果你的.html檔有編錯的話,那麼它吃下後就只能顯示它看得懂的部份了(合html語言格式的部份),這時顯示的東東看起來可能像是原始檔! 3.所以你應該不用去強迫指定它的檔案格式,只要餵的.html檔是正確的 4.可能有一種情況是你你將.html的檔轉成.txt格式的檔,這樣這個.txt檔看起來一定是原始檔的樣子!然後要 >! |
visor
一般會員 發表:5 回覆:12 積分:3 註冊:2003-09-09 發送簡訊給我 |
引言: visor你好< >: 嗯,不好意思,對於你的問題實在不是很瞭解,所以可能要討論一下先了< >! 1.就我目前的認知,Builder的TCppWebBrowser物件等同於一個IE browser,也就是你餵TCppWebBrowser吃什麼檔它就依這個檔的格式去顯示(當然有可能格式無法辨式),完全同IE一樣! 2.所以如果你的.html檔沒有編錯(可能你用frontpage或手編或......),那麼你給它吃下後,絕對能正常顯示,當然如果你的.html檔有編錯的話,那麼它吃下後就只能顯示它看得懂的部份了(合html語言格式的部份),這時顯示的東東看起來可能像是原始檔! 3.所以你應該不用去強迫指定它的檔案格式,只要餵的.html檔是正確的 4.可能有一種情況是你你將.html的檔轉成.txt格式的檔,這樣這個.txt檔看起來一定是原始檔的樣子!然後要 >! >>< face="Verdana, Arial, Helvetica"> 您好,我現在的做法因為資料是從資料庫取出,經過 TPageProducer 產生 HTML 原始檔,在利用 TMemoryStream 把這些資料直接餵入 TCppWebBrowser->Document,這原始檔我直接抓出來存成 .html 再用 IE 開一切正常, 但是餵入 TCppWebBrowser 時,有時候會顯示原始檔,有時候會顯示正確的 HTML,所以我在猜想是不是沒有強迫設定文件型態,導致它自動辨識時出錯了。 -- Visor 元智大學資訊工程所 |
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 您好,我現在的做法因為資料是從資料庫取出,經過 TPageProducer 產生 HTML 原始檔,在利用 TMemoryStream 把這些資料直接餵入 TCppWebBrowser->Document,這原始檔我直接抓出來存成 .html 再用 IE 開一切正常, 但是餵入 TCppWebBrowser 時,有時候會顯示原始檔,有時候會顯示正確的 HTML,所以我在猜想是不是沒有強迫設定文件型態,導致它自動辨識時出錯了。 -- Visor 元智大學資訊工程所visor你好< >: 不好意思,對於你的整個過程沒辦法深入瞭解,所以還是只能推測性的討論你的問題< >! 迂迴作法 visor你經過 TPageProducer 產生 HTML 原始檔時,應該可以直接存成一個.html檔,或甚至data在TMemoryStream也應該可以存成一個.html檔!存成後再用 CppWebBrowser1->Navigate 直接載入應該是沒問題了!不知道你可不可以允許要這個中間的.html檔的存在! ex: void __fastcall TForm1::Button1Click(TObject *Sender) { TMemoryStream* ms=new TMemoryStream(); ms->Position=0; ms->LoadFromFile("C:\\Mytest.txt"); ms->SaveToFile("C:\\Mytest.html"); CppWebBrowser1->Navigate(WideString("C:\\Mytest.html")); }問題點 老實說我不知道是否TCppWebBrowser有visor你說的強迫文件型態這種問題?但常理上判斷而言,就算CppWebBrowser它是動態的,有時顯示 HTML 有時顯示原始檔!但如果你都餵它同一個html原始檔的話,不太可能它自已一下幫你顯示html有時又幫你顯示source,這不是動態的精神! 動態的精神是隨著你餵的東東格式的改變而變,所以我想visor是不是你餵它吃的東東有什麼異動,造成它顯示的不同! 嗯,說的有點亂!不曉得有沒有幫助,> |
visor
一般會員 發表:5 回覆:12 積分:3 註冊:2003-09-09 發送簡訊給我 |
引言: visor你好< >: 不好意思,對於你的整個過程沒辦法深入瞭解,所以還是只能推測性的討論你的問題< >! 迂迴作法 visor你經過 TPageProducer 產生 HTML 原始檔時,應該可以直接存成一個.html檔,或甚至data在TMemoryStream也應該可以存成一個.html檔!存成後再用 CppWebBrowser1->Navigate 直接載入應該是沒問題了!不知道你可不可以允許要這個中間的.html檔的存在! ex:void __fastcall TForm1::Button1Click(TObject *Sender) { TMemoryStream* ms=new TMemoryStream(); ms->Position=0; ms->LoadFromFile("C:\\Mytest.txt"); ms->SaveToFile("C:\\Mytest.html"); CppWebBrowser1->Navigate(WideString("C:\\Mytest.html")); }問題點 老實說我不知道是否TCppWebBrowser有visor你說的強迫文件型態這種問題?但常理上判斷而言,就算CppWebBrowser它是動態的,有時顯示 HTML 有時顯示原始檔!但如果你都餵它同一個html原始檔的話,不太可能它自已一下幫你顯示html有時又幫你顯示source,這不是動態的精神! 動態的精神是隨著你餵的東東格式的改變而變,所以我想visor是不是你餵它吃的東東有什麼異動,造成它顯示的不同! 嗯,說的有點亂!不曉得有沒有幫助,>>>< face="Verdana, Arial, Helvetica"> 您好< >: 迂迴作法的確能解決這個問題,不過不是我的設計風格< >。TStringList *doctext = new TStringList(); TMemoryStream *stm = new TMemoryStream(); TStreamAdapter *sa = new TStreamAdapter( stm, soReference ); IPersistStreamInit *psi = NULL; doctext->Text = PageProducer1->Content(); doctext->SaveToStream(stm); stm->Seek( 0, 0 ); if ( sa == NULL ) { delete stm; return; } _di_IDispatch doc = CppWebBrowser1->Document; //browser 為 TCppWebBrowser 元件 if ( doc == NULL ) { TVariant url = "about:blank"; CppWebBrowser1->Navigate2( &url ); while ( doc == NULL ) { Application->ProcessMessages(); doc = CppWebBrowser1->Document; } } if ( doc->QueryInterface(IID_IPersistStreamInit, (void**)&psi ) == S_OK ) { if ( psi ) { psi->Load( *sa ); } } else delete sa; delete stm; delete doctext;我在猜想是不是設定 "about:blank" 的關係,讓他不知道格式? 原始程式也可在這下載: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46811 -- Visor 元智大學資訊工程所 |
visor
一般會員 發表:5 回覆:12 積分:3 註冊:2003-09-09 發送簡訊給我 |
|
visor
一般會員 發表:5 回覆:12 積分:3 註冊:2003-09-09 發送簡訊給我 |
引言: 我發現原因了,只要原始檔的大小 >= 4096 就會顯示 source ,若小於就會正常顯示,請問這該怎麼處理呢?改用了另一種方法 if ( doc->QueryInterface(IID_IHTMLDocument2, (void**)&HTMLDocument ) == S_OK ) { VARIANT *param; SAFEARRAY *sfArray; sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1); if (sfArray == NULL) { SafeArrayDestroy(sfArray); HTMLDocument->Release(); return; } SafeArrayAccessData(sfArray,(LPVOID*) & param); param->vt = VT_BSTR; param->bstrVal = ws.c_bstr(); SafeArrayUnaccessData(sfArray); HTMLDocument->write(sfArray); HTMLDocument->close(); SafeArrayDestroy(sfArray); }這樣就沒有 4096 大小的限制了 不過還是把分數給版主,感謝您的幫忙 相關資料 < href="http://msdn.microsoft.com/workshop/browser/mshtml/reference/ifaces/document2/write.asp">http://msdn.microsoft.com/workshop/browser/mshtml/reference/ifaces/document2/write.asp -- Visor 元智大學資訊工程所 發表人 - visor 於 2004/03/24 23:05:19 |
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |