如题,我用indy控件开发一个邮件收发系统,发现收到的html格式的邮件用memo不能正常显示,(显示为<html>、<body>... ...),有说用webbrowser控件解决的,请教一下详细的解决过程!另外,用memo控件是不是说肯定不行?谢谢!请详细附代码说明!百分求解!急!!!!!!

解决方案 »

  1.   

    uses mshtml,ActiveX;procedure sethtml(const WebBrowser:TWebBrowser; const Html: string);
    var
      Document1: IHtmlDocument2;
      v:oleVariant;
    begin
      Document1 := WebBrowser.Document as IHtmlDocument2;
      if (Assigned(Document1)) then begin
        v := VarArrayCreate([0, 0], varVariant);
        v[0] := Html;
        Document1.Writeln(PSafeArray(TVarData(v).VArray));
        Document1.close;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      WebBrowser1.Navigate('about:blank');
      sethtml(WebBrowser1,Memo1.Lines.text);  //memo1 里就是你的html代码
    end;
      

  2.   

    dragonki(dragonki) 你好:
    我用你的方法试了一下
    调试通过
    不过webbrowser1中没有显示任何内容
    我在我的代码的: memo1.Lines.AddStrings(tidtext(msg.MessageParts.Items[intindex]).Body);后面加了一句
    showmessage(memo1.lines.text);
    运行的时候弹出了三个对话框
    第一个显示为:this is a multi-part message in MIME format
    第二个显示为邮件的正常内容
    第三个显示为邮件正常内容的html格式的代码
    我怎样能只收取第二个部分?
      

  3.   

    既然能单独  showmessage 出来,那么应该可以直接取得,
    你直接 showmessage(tidtext(msg.MessageParts.Items[intindex]).Body); 试试
    改下intindex看看
    如果你要用WebBrowser1显示,memo1里的内容要设置为第三个,而不能是全部。
      

  4.   

    先将邮件内容存储成一个临时的HTML文件,然后用TWebBrowser打开,这是最好的解决办法了。
      

  5.   

    问题已经解决了
    呵呵
    就是修改intindex
    嘿嘿
    甚至没有使用webbrowsers控件wintergoes(多来米饭少来稀)的方法我曾试过
    取得的效果不是我想要得
    嘿嘿
    不过也给分!结贴散分!非常感谢!