我想用TRichTextBox控件做一个聊天程序。但不知道如何使用该控件。请指点:
如何发送和显示文本以及带有图片的信息。
假设RichTextBox1是发送信息的输入框,RichTextBox2是显示聊天记录的区域,当我输入内容,点击发送时,如下语句不起作用
RichTextBox2.TextRTF:=RichTextBox2.TextRTF+RichTextBox1.TextRTF;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      RichTextBox2.SelStart:=length(RichTextBox2.Text);
      RichTextBox2.SelText:=RichTextBox1.TextRTF;
      RichTextBox1.Text:='';
    end;
      

  2.   

    关于显示图片,去百度嗖 ‘RichTextBox 显示图片’
      

  3.   

    广州大哥,谢谢你的指点,还想多请教一下,我希望在显示聊天信息时,把对方的名字和发送时间也显示出来,并且用的字体和聊天文本的字体不同,就像QQ显示的那样,该如何实现啊?
    我用这个 RichTextBox2.SelText:= friendName+' '+datetimetostr(now)+':'+#13#10+RichTextBox1.TextRTF;可是显示的是乱七八糟的东西
      

  4.   

    RichTextBox2.SelText:=RichTextBox1.TextRTF
      

  5.   

    我尝试把聊天内容拆开显示,按照如下代码,结果字体显示统一为8,不知道为什么
      RichTextBox2.SelStart:=length(RichTextBox2.Text);
      RichTextBox2.SelFontSize :=8;
      RichTextBox2.SelText:=friendName+' '+datetimetostr(now)+#13#10;  RichTextBox2.SelStart:=length(RichTextBox2.Text);
      RichTextBox2.SelFontSize :=20;
      RichTextBox2.SelText:=RichTextBox1.Text+#13#10;
      RichTextBox1.Text:='';
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    const Chatter_A='广州佬(190814570) ';
          Chatter_B='larrykan(未知) ';
    var s:WideString;
        startstr,len:integer;
      procedure poststr(str:string;const clr:TColor=clHighlight;
        const size:integer=10; Bold:boolean=false; fsItalic:boolean=false; Underline:boolean=false);
      begin
        len:=length(str);
        startstr:=length(RichTextBox2.Text);
        RichTextBox2.SelStart:=startstr;
        RichTextBox2.SelText:=str;
        RichTextBox2.SelStart:=startstr;
        RichTextBox2.SelLength:=len-1;
        RichTextBox2.SelColor:=clr;
        RichTextBox2.SelFontSize:=size;
        RichTextBox2.SelBold:=Bold;
        RichTextBox2.SelItalic:=fsItalic;
        RichTextBox2.SelUnderline:=Underline;
      end;
    begin
      s:=#13#10+#13#10+Chatter_A+ formatdatetime('yy-mm-dd,hh-nn-ss',now);
      poststr(s);
      s:=#13#10+'http://topic.csdn.net/u/20111007/22/a0c502c0-7bb9-45fa-8c07-632c547e459e.html';
      poststr(s,clBlue,8,false,false,true);
      s:=#13#10+'您真省,40分问了几个问题?';
      poststr(s,clBlue);
      s:=#13#10+#13#10+Chatter_B+ formatdatetime('yy-mm-dd,hh-nn-ss',now);
      poststr(s);
      s:=#13#10+'放心,下次我开新帖给你分。';
      poststr(s,clRed,16);
      s:=#13#10+#13#10+Chatter_A+ formatdatetime('yy-mm-dd,hh-nn-ss',now);
      poststr(s);
      s:=#13#10+'那就先谢了~';
      poststr(s,clBlue,18,true,true);
    end;
      

  7.   

    或改成这样://如要选字体,请自行在过程及调用中加多这参数
    procedure poststr(RTBox:TRichTextBox; str:string;const clr:TColor=clHighlight;
        const size:integer=10; Bold:boolean=false; fsItalic:boolean=false; Underline:boolean=false);
    var startstr,len:integer;
    begin
      with RTBox do begin
        len:=length(str);
        startstr:=length(Text);
        SelStart:=startstr;
        SelText:=str;
        SelStart:=startstr;
        SelLength:=len-1;
        SelColor:=clr;     //颜色
        SelFontSize:=size; //字号
        SelBold:=Bold;     //加粗
        SelItalic:=fsItalic; //斜体
        SelUnderline:=Underline; //下划线
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    const Chatter_A='广州佬(190814570) ';
          Chatter_B='larrykan(未知) ';
    var s:string;
    begin
      s:=#13#10+#13#10+Chatter_A+ formatdatetime('yy-mm-dd,hh-nn-ss',now);
      poststr(RichTextBox2,s);
      s:=#13#10+'http://topic.csdn.net/u/20111007/22/a0c502c0-7bb9-45fa-8c07-632c547e459e.html';
      poststr(RichTextBox2,s,clBlue,8,false,false,true);
      s:=#13#10+'您真省,40分问了几个问题?';
      poststr(RichTextBox2,s,clBlue);
      s:=#13#10+#13#10+Chatter_B+ formatdatetime('yy-mm-dd,hh-nn-ss',now);
      poststr(RichTextBox2,s);
      s:=#13#10+'放心,下次我开新帖给你分。';
      poststr(RichTextBox2,s,clRed,16);
      s:=#13#10+#13#10+Chatter_A+ formatdatetime('yy-mm-dd,hh-nn-ss',now);
      poststr(RichTextBox2,s);
      s:=#13#10+'那就先谢了~';
      poststr(RichTextBox2,s,clBlue,18,true,true);
    end;