(中行雷威2018.9.29)
(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。如需下载开发工具及源代码请加入我的QQ群。)
【阅读倡议】
1、有问题请留言;
2、没问题请点赞;
3、看连载请加群;
4、下源码请加群;
【开发工具】
1、C++Builder10.2.3 tokyo
2、FMSoft_uniGUI_Complete_Professional_1.10.0build1471(正版)
一、需求
最近在开发一个web聊天工具,想做一个聊天信息交互小窗口,原来我习惯用UniMemo,但是UniMemo不支持超文本链接,因此首次尝试使用UniHTMOMemo控件。
二、用法
拖两个UniHTMLMemo控件到MainForm窗口上,UniHTMLMemo1用于显示交互信息,UniHTMLMemo3用于输入文字,如下图所示,大家不需要关注其他控件。
1、发送文字消息
if(UniHTMLMemo3->Text.Length()==0)
{
ShowMessageN("亲,你还没有输入聊天信息呢!");
UniHTMLMemo3->SetFocus();
return;
}
if(UniHTMLMemo3->Text.Length()>450)
{
ShowMessageN("亲,聊天信息太长啦,限制长度450个字符呢!");
UniHTMLMemo3->SetFocus();
return;
}
UniHTMLMemo1->Lines->Add("<p>"+UniHTMLMemo3->Text);//发送文字
UniHTMLMemo3->Lines->Clear();//发送文字后清空输入框
在这里你会发现我在发送文字处增加了“<p>”,那是因为如果不增加这个,接收窗口显示时会把多次信息链接到一起,没有换行。
2、发送文件链接
destPath=“fileHome” 是程序运行根目录到文件存放的子目录
fileName="abc.doc" 是文件名字
UniHTMLMemo1->Lines->Add("<p>你给["+toUserName+"]发送了一个文件");
UniHTMLMemo1->Lines->Add("<a href=\""+destPath+"/"+fileName+"\" target=\"_blank\">"+fileName+"</a>");
UniHTMLMemo3->Lines->Clear();
注意:超链接串是否正确,将访问地址放到浏览器url里,如果能打开下载就是正确了。本例子可以在浏览器中输入http://127.0.0.1/fileHome/abc.doc验证文件链接是否正确。
3、解决滚屏问题
也许是uniHTMLMemo的BUG,uniMemo在不断增加新的消息时会自动滚屏,但是UniHTMOMemo不会,可在发完消息后和收到消息后添加调用javaScript函数解决。
/*HTMLMemo好友聊天滚屏*/
UniSession->AddJS("Ext.defer(function(){var me="+ UniHTMLMemo1->JSName +".iframeEl.el.dom; me.contentWindow.scrollTo(0, me.contentDocument.scrollingElement.scrollHeight)}, 200);");
本例子介绍了一种程序中添加调用js代码的一种调用javaScript的方式,下一例子将介绍uniGUI调用js文件的调用方式。