全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1177
推到 Plurk!
推到 Facebook!

怎麼強迫指定 TCppWebBrowser 的文件類型

尚未結案
visor
一般會員


發表:5
回覆:12
積分:3
註冊:2003-09-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-23 14:11:17 IP:211.72.xxx.xxx 未訂閱
怎麼強迫指定 TCppWebBrowser 的文件類型 我現在遇到的問題是,使用 TCppWebBrowser 然後用更改 Document 的方式將 原始檔餵給他,但是它有時顯示 HTML 有時顯示原始檔,所以該怎麼去強迫指 定 TCppWebBrowser 的文件類型 -- Visor 元智大學資訊工程所
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-23 15:27:24 IP:61.63.xxx.xxx 未訂閱
引言: 怎麼強迫指定 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-23 17:19:01 IP:203.204.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-24 09:26:39 IP:61.63.xxx.xxx 未訂閱
引言: 您好,我現在的做法因為資料是從資料庫取出,經過 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-24 16:21:15 IP:211.72.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-24 20:03:26 IP:211.78.xxx.xxx 未訂閱
引言: 我在猜想是不是設定 "about:blank" 的關係,讓他不知道格式?
我發現原因了,只要原始檔的大小 >= 4096 就會顯示 source ,若小於就會正常顯示,請問這該怎麼處理呢? -- Visor 元智大學資訊工程所 發表人 - visor 於 2004/03/24 20:04:46
visor
一般會員


發表:5
回覆:12
積分:3
註冊:2003-09-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-24 23:01:49 IP:211.72.xxx.xxx 未訂閱
引言: 我發現原因了,只要原始檔的大小 >= 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-25 09:53:58 IP:61.63.xxx.xxx 未訂閱
引言:
引言: 我在猜想是不是設定 "about:blank" 的關係,讓他不知道格式?
我發現原因了,只要原始檔的大小 >= 4096 就會顯示 source ,若小於就會正常顯示,請問這該怎麼處理呢? -- Visor 元智大學資訊工程所 發表人 - visor 於 2004/03/24 20:04:46
visor你好: 真不好意思,還沒有空 >! 不過說真的,我自已 >,同時也讓我知道了原因,謝謝< >!
系統時間:2024-07-03 17:08:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!