最近做个即时通讯软件,模仿QQ或者MSN的,但是遇到问题,聊天内容区域如何实现的?可以插入表情图片和文字的那个区域。
我想用WebBrowser来实现,发先即时消息呢,需要实时刷新。
听说是用richtextbox可以实现。有没有高人开发过的啊?
大家讨论一下啊。
我的其他界面都出来了,就是聊天内容窗体这里了。

解决方案 »

  1.   

    WebBrowser不错的。
    不想用的话,就用TRichView吧。插入图片很简单。我在用原始的RichEdit做,太累....
      

  2.   

    目前我用WebBrowser遇到的问题是,实时消息如何实时显示进去,就像memo的lines的增加一行那样,WebBrowser加载的html,如何自动增加记录而不闪屏呢?!
    用TRichView?好的,我可以做个demo研究一下,如果方便,那就用这个了。但是我在想,用TRichView能否显示如msn的窗体里面提示的那段“单击此处查看与此联系人的全部对话记录”,然后下面有短横线,这个效果呢,点击还要显示全部聊天内容的窗体。
      

  3.   

    TRichView控件可以实现插入图片(bmp,jpg,gif),文字格式设置,插入表格,超链接
      

  4.   

    用 WebBrowser 可以,用 RichEdit 也可以我發現很多都是用 RichEdit 的。比如 QQ, MSN, Baihu Hi .....RichEdit 的話,你發一個大一點的圖片,它不會有橫行滾動條。不過我在用的過程中,對 RichEdit 不太會控制,結果速度很慢。
    後來我也就用  WebBrowser 了。www.2ccc.com 上有個 TEditWebBrowser ,我是用那個來改的我在這裡感謝一下那個作者。希望有做過即時通訊的問題聊一下技術
      

  5.   

    我现在用WebBrowser,delphi里面自动写页面代码,我把自动填写的代码单独保存成html执行脚本自动添加聊天记录都ok,可是在delphi跑起来程序中,WebBrowser的脚本一执行,就报缺少对象错误。
    //--------------------------------
    procedure TForm2.Button5Click(Sender: TObject);
    var
      V: OleVariant;
      h:WideString;
    begin 
      V := WebBrowser1.Document;
          //-------------------------------------------------------------------------
      h := '<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312">'+
           '<style type="text/css">*{padding:0;margin:0;;font:13px/20px Arial,Sans-serif,"宋体";color:#666666;}'+
           '#tmpStyle{MARGIN: 0px;font-family: "宋体", "Times New Roman"; font-size: 9px;}'+
           '.say{margin:0px;}'+
           '#footer {margin-top:5px;margin-bottom:0px;border-top:1px solid #999999;border-bottom:0px;width:40px;}</style>'+
           '<script language="JavaScript" type="text/javascript"> '+
           '   function addSay(){   '+
           '     var x=document.getElementById("listTable").insertRow(); '+
           '     var h1=x.insertCell(0);  '+
           '     h1.innerHTML="<tr class=''say''><td width=''100%''>'+'寶兒 说:'+'</td></tr>"; '+
           '   };  '+
           '   function addCont(){ '+
           '     var y=document.getElementById("listTable").insertRow(); '+
           '     var h2=y.insertCell(0);'+
           '     h2.innerHTML="<tr><td width=''100%''><table height=''26px'' border=''0px'' width=''100%'' cellpadding=''0px'' cellspacing=''0px''>"+ '+
           '              "<tr><td width=''12px''></td><td style=''font-size:15px;color:#0000ff''>'+'测试'+'</td></tr></table></td></tr>";'+
           '   };   '+
           '   function addRow(){'+
           '       addSay(); '+
           '       addCont(); }  '+
           ' </script></head><body>   '+
           ' <a href="javascript:addRow();" style="color:#0000ff;text-indent:1em;">单击此处</a>查看与此联系人的全部对话记录'+
           ' <div id="footer"></div>   '+
           ' <table id="listTable" border="0px" width="100%" cellpadding="0px" cellspacing="1px">'+
           ' <tr class="say"><td width="100%">寶兒 说:</td></tr> '+
           ' <tr><td width="100%"><table height="26px" border="0px" width="100%" cellpadding="0px" cellspacing="0px"> '+
           ' <tr><td width="12px"></td><td style="font-size:15px;color:#0000ff">测试说话内容啊</td></tr></table></td></tr> '+
           ' </table></body></html>';
           //--------------------------------------------------------------------------
      Memo1.Lines.Add(h);
      V.Script.Document.Body.InnerHTML  := h;
      //WebBrowser1.OleObject.document.documentElement.innerHTML := h;
      //Memo1.Lines.Add(h);
    end;
    //---------------------------
    以上就是部分代码,当我点击WebBrowser1中的“单击此处”想要增加一条记录,结果就报“缺少对象”。谁能给个提示,怎么解决呢。ps:
    TEditWebBrowser和TRichView看来也是很好的选择。最好用的或者说最好控制的应该是哪个呢?
      

  6.   

    发现问题了
    procedure TForm2.FormCreate(Sender: TObject);
    begin
      WebBrowser1.Navigate('about:blank');//这种方式,上面代码产生的样式和脚本都不能得到使用
      WebBrowser1.Navigate('D:\CallCenter\rrrrr\chat\eee.html');//这样直接加载一个页面没问题
    end;那么如何让WebBrowser1.Navigate('about:blank');这种方式,动态产生的页面里面的样式和脚本都能得到正确解析和使用呢?
      

  7.   

    http://www.delphidabbler.com/articles這裡有幾篇關於自定義 WebBrowser的文章,我也是看了他的文章才做到的一些功能,比如捕捉把文件拖到 IE 裡,的實現,還有邊框與上面你得到的自定義 css 問題,我都是在上面找到的答案。
      

  8.   

    问题点就在于如下这句话,执行会报错,缺少对象
    WebBrowser1.OleObject.Document.parentWindow.execScript('addRow()', 'javascript'); 
    为什么不能这样使用呢,如果也面不是动态产生而是加载的则可以正常执行,现在不行。为什么呢
      

  9.   

    文檔加載完沒有? WebBrowser 是異步的,你加載了文檔,但它不一定馬上就加載完成
      

  10.   

    我来总结一下问题所在:
    1、初始化WebBrowser1有两种方式,如下,第一种自然是动态创建html,第二种自然就是已经有一个页面,然后再对源码操作。
    procedure TForm2.FormCreate(Sender: TObject);
    begin
      WebBrowser1.Navigate('about:blank');//方式一
      WebBrowser1.Navigate('d:\test.html');//方式二
    end;2、调用页面脚本的执行如下:
    procedure TForm2.Button4Click(Sender: TObject);
    begin
      WebBrowser1.OleObject.Document.parentWindow.execScript('addRow()', 'javascript'); 
    end;总结:
    如果用了【方式一】初始化,则调用动态产生的html的里面的脚本会报错,提示“缺少对象”。
    如果采用了【方式二】初始化,则调用的页面里面的脚本没有问题,哪怕脚本部分是动态添加的也没问题,也就是说这个页面存在即可。我的问题就是,必须用【方式一】初始化,那么,如何解决这个“缺少对象”的错误呢???!!!
    ps:以上代码可以直接调试。