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

如何将网页中的内容读到TRichEdit中

尚未結案
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-08 12:31:43 IP:218.5.xxx.xxx 未訂閱
目前在整理从网上收集的资料。 自己开发了一个工具,网页的内容复制到编辑区(TRichEdit做的),再将内容压缩后保存。 可是手工处理效率太低了:打开网页,复制内容到TRichEdit再保存。 请教先进,有没有方法可能将网页的内容读出放到TRichEdit中,网页中如有图片也要能一起读出(目前手工操作是发现如果有图片,直接从网页中复制到TRichEdit图片没有被复制过来,还得先复制到Word,再从Word复制过来)。 说明:我的TRichEdit经过扩展,可以放图片。
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-08 21:01:12 IP:211.22.xxx.xxx 未訂閱
查一查TWebBrowser如何操作網頁,應該對你的需求有幫助! ----------------------------------------------
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-09 11:44:56 IP:218.5.xxx.xxx 未訂閱
使用HTMLDocument.body读取网页内容时出现'Access violation at address 0048A1D0 in module 'Project1.exe''错误? 我的代码是:
var
    vv: Variant;
    HTMLDocument: IHTMLDocument2;
begin
    with TWebBrowser.Create(nil) do
    begin
        try
            Navigate('E:\book\VC\ActiveX\ÓATLºÍMFCÀ´´´½¨ActiveX¿Ø¼þ.htm');
            HTMLDocument := Document as IHTMLDocument2;
            RichEdit1.lines.text:=HTMLDocument.body;
        finally
            HTMLDocument.close;
            Free;
        end;
    end;
end;
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-09 13:31:45 IP:203.69.xxx.xxx 未訂閱
TWebbrowser 這類元件不能用這種寫法. 因為當你下達 Navigate時 你就進入多執行緒的狀態, TWebBrowser 會另開一堆 Thread 去跟 Server 要資料, 再這同時 你的程式繼續執行, 到    RichEdit1.lines.text:=HTMLDocument.body    這行時, 因為 Server 端資料還沒回來 所以出現你所列出的錯誤...    程式的基本調子應該像這樣
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, MSHtml, ComCtrls, ActiveX, ExtCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    WB: TWebBrowser;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure WBDocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;
 
implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
begin
  WB.OnDocumentComplete := WBDocumentComplete;
  WB.Navigate('http://tw.yahoo.com/');
end;    procedure TForm1.WBDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  Memo1.Lines.Clear;
  Memo1.lines.text := (WB.Document as IHTMLDocument2).body;
end;
end.
討論 TWebBrowser 的文件很多, 要不要先 study 一下有問題再問... 發表人 - malanlk 於 2005/08/09 14:47:38
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-09 14:35:34 IP:218.5.xxx.xxx 未訂閱
引言: TWebbrowser 這類元件不能用這種寫法. 因為當你下達 Navigate時 你就進入多執行緒的狀態, TWebBrowser 會另開一堆 Thread 去跟 Server 要資料, 再這同時 你的程式繼續執行, 到 RichEdit1.lines.text:=HTMLDocument.body 這行時, 因為 Server 端資料還沒回來 所以出現你所列出的錯誤... 程式的基本調子應該像這樣
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, MSHtml, ComCtrls, ActiveX, ExtCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    WB: TWebBrowser;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure WBDocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;
  WB1: TWebBrowser = nil;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
begin
  WB.OnDocumentComplete := WBDocumentComplete;
  WB.Navigate('http://tw.yahoo.com/');
end;    procedure TForm1.WBDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  vv: Variant;
  i: Integer;
begin
  Memo1.Lines.Clear;
  Memo1.lines.text := (WB.Document as IHTMLDocument2).body;
end;
end.
討論 TWebBrowser 的文件很多, 要不要先 study 一下有問題再問...
用你的方法好象还是提示同样的错误,如果你有时间的话帮我再看看.谢谢.
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-09 14:53:57 IP:203.69.xxx.xxx 未訂閱
我是測試過才貼上去...
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-09 16:05:49 IP:218.5.xxx.xxx 未訂閱
对不起,可能是刚才用的网页是不存在的(我是用本地保存的测试),我换了一个网页,可能等半天也没触发OnDocumentComplete事件,我想可能是网页很久未打开吧.malanlk兄,你测试是也是这样吗?
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-09 16:30:50 IP:203.69.xxx.xxx 未訂閱
我這完全正常...看的到網頁 也觸發 OnDocumentComplete event
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-09 17:44:20 IP:218.5.xxx.xxx 未訂閱
谢谢,我本想做的是,不在窗体上将网页内容显示出来,直接转存到RICHEDIT中,可出现刚才的问题,先不管它,还是先显示后再转存吧.结案了.
系統時間:2024-06-02 0:26:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!