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

關於獲取一個網站的返回信息函數. (Idhttp?Recv?)

 
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-02-10 09:12:29 IP:61.229.xxx.xxx 訂閱
[原]一个简单的函数回调演示
http://www.wa666.cn/?action=show&id=52

作用是取得網頁的HTML源碼,使用idHttp控件。
將獲取的過程寫在線程裏,不再主線程內運行,是防止界面的無響應現象。idAntiFree控件雖然可以做到,但是效果不明顯。很多時候線程裏不可能做太多的事情,可能用來通用化,而且線程之間的通信還是比較麻煩,用消息的方法雖然簡單,但是如果我用來接受消息的類是不可視的話,使用AllocateHWnd函數來建立消息句柄將佔用資源,所以這個時候使用回調函數是比較折中的辦法,雖然不太符合OO設計^_^.
下面是代碼(WinXP SP2 D2006測試通過)...

  1. unit MainFrm;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, IdHTTP;
  6. type
  7. TCallBack = procedure(Html: string) of object;
  8. type
  9. TForm1 = class(TForm)
  10. mmo1: TMemo;
  11. btn1: TButton;
  12. edt1: TEdit;
  13. procedure btn1Click(Sender: TObject);
  14. private
  15. procedure myCallBack(Html: string);
  16. { Private declarations }
  17. public
  18. { Public declarations }
  19. end;
  20. THtmlThreade = class(TThread)
  21. private
  22. FHttp: TIdHTTP;
  23. FUrl: string;
  24. myCallBack: TCallBack;
  25. protected
  26. procedure Execute; override;
  27. public
  28. constructor Create(aUrl: string; CallBack: TCallBack);
  29. destructor Destroy; override;
  30. end;
  31. var
  32. Form1: TForm1;
  33. implementation
  34. {$R *.dfm}
  35. procedure TForm1.myCallBack(Html: string);
  36. begin
  37. mmo1.Text := Html;
  38. end;
  39. { THtmlThreade }
  40. procedure THtmlThreade.Execute;
  41. begin
  42. myCallBack(FHttp.Get(FUrl));
  43. end;
  44. constructor THtmlThreade.Create(aUrl: string; CallBack: TCallBack);
  45. begin
  46. inherited Create(True);
  47. FUrl := aUrl;
  48. myCallBack := CallBack;
  49. FHttp := TIdHTTP.Create(nil);
  50. FreeOnTerminate := True;
  51. end;
  52. destructor THtmlThreade.Destroy;
  53. begin
  54. FHttp.Free;
  55. inherited Destroy;
  56. end;
  57. procedure TForm1.btn1Click(Sender: TObject);
  58. var
  59. mythread: THtmlThreade;
  60. begin
  61. mythread := THtmlThreade.Create(edt1.Text, myCallBack);
  62. mythread.Resume;
  63. end;
  64. end.
------
努力會更接近成功
系統時間:2024-05-19 22:22:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!