中图分类号:TP319;R197.323.1
基于RichView 的电子病历编辑器的开发
陈建辉
(莆田学院信息工程学院,福建莆田351100)
摘要:
分析了电子病历编辑器的功能需求和系统架构,利用和封装RichView 组件,实现电子病历的打开、编辑、保存及个性化打印等功能。该编辑器提供源码二次开发平台,便于系统的扩展,进而提供更好的适应性。根据目前在中小医院的使用情况,该电子病历编辑器运行安全可靠。关键词:
电子病历;RichView ;编辑器;组件Development of Electronic Medical Record Editor Based on RichView
CHEN Jianhui
(School of Information Engineering,Putian University,Putian Fujian 351100,China )
Abstract :This paper introduced the function demands of electronic medical record editor and system architecture.By
using and encapsulating RichView components,it implemented the electronic medical records with the function of openning,editing,saving and personalized printing.Because the editor provided the redevelopment platform for the source code,it was easy to extend the system,and then provided better adaptability.According to the usage of small and medium-sized hospitals,this editor had safe and reliable operation.
Key words :electronic medical record;RichView;editor;component
收稿日期:2017-09-03
基金项目:福建省教育厅资助省属高校专项课题(JK2015042)
作者简介:陈建辉(1974-),男,福建莆田人,副教授,硕士,主要从事医疗信息化、数据挖掘研究。
0引言
电子病历系统是指医疗机构内部支持电子病历信息的采集、存储、访问和在线帮助,并围绕提高医疗质量、保障医疗安全、提高医疗效率而提供信息处理和智能化服务功能的计算机信息系统[1]。电子病历管理在医院信息管理中有重要作用,是维系医院与病人信息的桥梁与纽带。
而电子病历编辑器是电子病历系统的核心和难点,
因为电子病历系统开发80%以上的技术难点集中在电子病历编辑器。目前电子病历编辑器的实现有基于Word 的电子病历编辑器[2]、基于Zen 的电子病历编辑器[3]、基于AbiWord 的电子病历编辑器[4-5]、基于XML
的医学编辑器[6-7]等。这些编辑器基本上实现了富文本编辑功能如特殊字符、表格、图像随机插入,不仅能减轻医护工作者的病历录入工作量,而且减少了因手工书写而引起的各种问题,不过以上编辑器所依赖的组件一般不提供源码,不利于二次开发,因此很有必要开发基于RichView 的电子病历编辑器。
1电子病历编辑器的功能需求
电子病历编辑器类似于Word 的富文本编辑器,具有所见即所得的编辑效果,它减少了对于文字、段落、表格、图片等的编辑需求,而强调对模板设计的需求。因此所设计的电子病历编辑器不仅
第24卷第5期莆田学院学报
Vol.24No.52017年10月
Journal
of Put ian University
Oct.2017文章编号:1672-4143(2017)05-0041-04
文献标识码:A
莆田学院学报2017年10月
要涵盖基本的病历书写功能,还要包括电子病历页面设置、病历模板制作等辅助功能,并可扩展应用于检查检验报告模板的编辑[8],同时具有良好的规范性、实用性、安全性和扩展性。
按照卫生部《电子病历系统功能规范(试行)》的要求,对现实电子病历进行分析参考其他电子病历系统功能,编辑器的基本功能需求如下:(1)支持富文本编辑,能够实现类Word“所见即所得”的编辑形式,即呈现的电子病历与打印出的电子病历相一致。
(2)支持自定义模板的电子病历的编辑,不同医院的电子病历有一定的差距,要求支持医院所有科室所有种类的自定义病历类型的编辑与打印。
(3)支持电子病历的导入导出,支持电子病历内容导出RTF格式,模版导入需要保证电子病历结构的准确呈现。
(4)支持个性化打印功能,支持全部文档打印、当前页面打印、续打、选择打印等功能。
2RichView
RichView是一套Delphi/C++Builder组件,主要用于显示、编辑和打印超文本文档。该组件支持字体、文本背景颜,自定义下拉列表等特征属性。RichView所创建的文档不仅可以包含图片、图像、表格等常见的编辑元素,而且可嵌入任意的Delphi控件,具有段落排列、项目符号编号、页面设置、缩进样式、背景图片等排版格式,支持打印预览、RTF输入和输出、HTML输出等。RichView 由9个组件组成:TRVStyle、TRichView、TRichViewEdit、TDBRichView、TDBRichViewEdit、TRVPrint、TRVPrintPreview、TRVReportHelper和TRVOfficeConverter,使用TRichView富文本控件,可以创建一个编辑器能够导出HTML和docx 格式的文档。RichView程序包完全由Delphi所编写,而不需借助外部的DLL或者ActiveX文件,因此在Delphi中使用RichView非常方便,可以轻松实现图文混排,满足电子病历编辑器的功能需求。
3基于RichView的电子病历编辑器的设计
3.1电子病历编辑器的系统架构
鉴于目前我国使用Windows操作系统的庞大用户数量,为了有利于所开发的电子病历编辑器的使用和推广,笔者所开发的电子病历编辑器的支撑环境采用Windows操作系统,以面向对象的程序开发语言Delphi来编写开发。电子病历编辑器的系统架构[9]如图1所示,整个架构以RichView编辑组件为中心,编辑框架类往电子病历编辑器添加文本域、表格、图像并设置格式等,事件模块响应电子病历编辑器的消息及点击事件,如插入公式、编码输入等,文档排版模块进行页面设置等,文档打开存储模块负责将文档载入到电子病历编辑器和保存数据,文档导入导出模块将外面数据导入到文档,或将文档数据导出。
3.2编辑框架类
编辑功能是电子病历编辑器的核心功能之一,用户通过编辑功能可以制作电子病历模板和录入电子病历,以满足不同医疗机构或者科室对电子病历的个性化需求。通过对电子病历的逻辑结构进行细致分析,把常用的编辑组件封装成框架类,其界面如图2所示,封装代码部分如下。
TfrRVCooBar=class(TFrame)
RVAControlPanel1:TRVAControlPanel;
pmSpacing:TPopupMenu;
SingleLineSpacing1:TMenuItem;
N15LineSpacing1:TMenuItem;
DoubleLineSpacing1:TMenuItem;
RVPrint1:TRVPrint;
pmFakeDropDown:TPopupMenu;
pmRichView:TPopupMenu;
actlRV:TActionList;
rvActionAlignLeft1:TrvActionAlignLeft;
rvActionAlignRight1:TrvActionAlignRight;
rvActionAlignCenter:TrvActionAlignCenter;
rvActionAlignJustify1:TrvActionAlignJustify;
rvActionInsertTable1:TrvActionInsertTable;
图1电子病历编辑器系统架构
42
陈建辉:基于RichView 的电子病历编辑器的开发第5
期图3插入公式界面
//省略大部分定义...end;
3.3事件模块
事件模块,负责处理RichView 编辑器的窗体消息,实现事件响应机制。在编辑框架类中定义了TOnRichViewRefresh 自定义事件和SetRichView 方法,SetRichView 方法将键盘和鼠标的所有事件相对应地写入,当编辑器在接收到用户的操作消息时,系统通过回调函数自动执行该映射关系来完成对某个事件的响应动作,而各个编辑组件的事件直接由TrvAction 类实现,SetRichView 方法主要代码如下。
procedure TfrRVCooBar.SetRichView (RichView :Tsdl Richview;
OnRichViewRefresh :TOnRichViewRefresh);begin
m_table :=nil;
m_isRtTableMouseUp :=False;m_RichView:=RichView;
//RichViewMouseUp 为自定义鼠标按键被松开时发生的事件,实现左、右键等鼠标事件
if Assigned (m_RichView.OnMouseUp )=False then m_RichView.OnMouseUp :=RichViewMouseUp;//改变样式触发事件
if Assigned (m_RichView.OnRtTableMouseUp)=False then
m_RichView.OnRtTableMouseUp :=RichViewRtTable
MouseUp;
//当前编辑器改变
if Assigned(m_RichView.OnChangeActiveEditor)=False then
m_RichView.OnChangeActiveEditor:=RVChangeActive
Editor;
//公式编辑器触发
RtEditFomula :=RVRtEditFomula;
//常用公式
m_RichView.OnCurTextStyleChanged :=RVCurTextStyle Changed;
m_RichView.RVHeader.OnCurTextStyleChanged:=RVCur TextStyleChanged;
m_RichView.RVFooter.OnCurTextStyleChanged:=RVCur TextStyleChanged;
//自定义响应事件
FOnRichViewRefresh :=OnRichViewRefresh;rtRichViewRefresh (Self,'',C_RV_Change_Height );end;
3.4公式编辑器
医学中要使用的公式有许多,且一些特定的医学公式无法在文档中编写,为了解决公式的编辑与数据存储问题,笔者通过在电子病历中插入图像来解决。在电子病历编辑器中点击“插入公式”会弹出如图3所示
的界面,公式类型可以根据医院的需要增加,选择相应公式类型填写相应数据后,点击“确定”会触发上面介绍的事件模块中m_RichView.InsertFomula ('HF_'+IntToStr (AppPa ra.GetKeyID),sValue,nil,true)方法,
以下是描绘
公图2编辑框架类界面
43
莆田学院学报2017年10月
式文本和线的部分代码:
//R1公式左侧生成文本
DrawText(Canvas.Handle,sText,-1,R1,DT_VCENTERor DT_SINGLELINEorDT_CALCRECT);
//画线
DrawLine(Canvas,R2.Left,R2.Bottom+iTmp,R2. Right,R2.Bottom+iTmp);
3.5病历个性化打印
小程序图文editor
在打印电子病历时,除了全部文档打印、当前页打印等,各个医院在实际使用过程中还会出现各种打印场景,如续打、选择打印等个性化打印功能。个性化打印实现的主要原理是在最终发给打印画布之前,处理要打印的内容(画布上的图),即获取要打印的起始行位置,将此位置之前的所有内容都“涂”为白,因此对TSRichViewEdit组件进行封装,改写PaintPage方法,实现个性化打印,其代码部分如下。
PageRect:=ScaleRectOut(PageRect,ScaleX,ScaleY);
OffsetRect(PageRect,OffsetX,OffsetY);
Canvas.Brush.Style:=bsSolid;
if SequelPageEnd<0then
begin
tmp:=PaintRect;
if BottomSeque then
begin
//1:顶部至于页面初始横线
tmp.Bottom:=round(SequelPos/(FViewProp erty.FZoomPercent*0.01))
+PageRect.Top;
end
else
begin
//2:顶部至于页面初始横线
tmp.Top:=round(SequelPos/(FViewProperty. FZoom Percent*0.01))
+PageRect.Top;
end;
/
/把续打前面(或底部)部分清除
Canvas.FillRect(tmp);
end
4结语
笔者介绍了自主开发的基于RichView的电子病历编辑器的系统架构及解决方案,实现了电子病历模板设计、电子病历书写等,且与其他医疗信息系统集成应用(如图4所示),调用LIS、PACS 系统,完成检查检验报告的编辑处理与阅读,而且已经成功地在多家中小医院运行,切合中小医院实际。但整个编辑器还存在一些缺陷,如病历书写痕迹保留和注解功能等。
参考文献:
[1]卫生部.电子病历基本规范(试行)[EB/OL].(2011-01-04)
[2017-07-01].v/mohyzs/s3585/201012 /50229.shtml.
[2]陈建辉.基于Word编辑器的电子病历系统的设计与实
现[J].莆田学院学报,2014,21(2):50-54.
[3]李光明,王芳,郭文强.基于ZEN的电子病历编辑器的
开发[J].陕西科技大学学报,2009,27(2):88-91.
[4]邓健.基于AbiWord的电子病历编辑器的研究与实现
[D].西安:西北大学信息科学与技术学院,2015.
[5]熊志刚,尚浩.基于AbiWord的结构化电子病历系统研
究[J].中国数字医学,2017,12(2):45-47.
[6]王蒙.基于XML的医学编辑器系统的研究与实现[D].
长沙:中南大学生物医学工程学院,2012.
[7]肖强.基于XML的半结构化电子病历录入方法研究[J].
中国数字医学,2015,10(1):43-44.
[8]杨飞.一种电子病历报告模板编辑系统的设计与实现
[D].武汉:华中科技大学软件学院,2014.
[9]茅伟强.基于结构化电子病历的临床路径系统设计应用
[J].信息系统工程,2017(1):80-81.
[责任编辑林锋]
图4
电子病历编辑器集成应用
44

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。