首页 > 代码库 > 有些字划掉并不是删除线而是右斜线,在ReportMachine报表的实现
有些字划掉并不是删除线而是右斜线,在ReportMachine报表的实现
最近项目中,因为有个字是删除的意思,但不像Word排版给设置删除线样式就可以达到的,而是要求从左上角划一直线穿过这个字到右下角。最开始想到用造字的办法,可是造字不仅麻烦,而且要为不同字体造字,并且,如果机器系统不一样,字体之间还有差异,最关键的是,造出来的字,输出为pdf打开来看时,pdf并不能显示这个造的字出来。在报表中,这个字,有可能是从数据库中出来的,输入与输出在不同机器间共享,表达就会有很大的损失,造成错漏。所以造字是行不通的办法。
报表是采用ReportMachine 6.5,这是网上流传很广的源码版。通过分析发现,可以针对出现这个字的情况下,进行特殊处理。找到RM_Class.pas文件, TRMCustomMemoView.ShowMemo就是输出处理,找到文本绘制的处理 _DrawOneStr,修改代码:
1 procedure _DrawOneStr; 2 var 3 i: Integer; 4 lWidth: Integer; 5 str1,str2 : string; /// add 2014/9/19 6 begin 7 {/// 在有补字上画一个右斜线 } 8 str1 := aStr; 9 while true do10 begin11 str2 := ‘(补‘;12 i := Pos(str2, str1);13 if i = 0 then begin str2 := ‘(补‘; i := Pos(str2, str1); end;14 if i = 0 then begin str2 := ‘补)‘; i := Pos(str2, str1); end;15 if i = 0 then begin str2 := ‘补)‘; i := Pos(str2, str1); end;16 if i = 0 then break;17 if str2 = ‘(补‘ then18 begin19 str2 := copy(str1,1,i); // 补前的字符20 str1 := str2 + ‘@@‘ + copy(str1,i+3,Length(str1)); // 将找到的"补"字用两个@替换21 end22 else if str2 = ‘(补‘ then23 begin24 str2 := copy(str1,1,i+1);25 str1 := str2 + ‘@@‘ + copy(str1,i+4,Length(str1)); // 将找到的"补"字用两个@替换26 end27 else if str2 = ‘补)‘ then28 begin29 str2 := copy(str1,1,i-1);30 str1 := Str2 + ‘@@‘ + copy(str1,i+2,Length(str1)); // 将找到的"补"字用两个@替换31 end32 else if str2 = ‘补)‘ then33 begin34 str2 := copy(str1,1,i-1);35 str1 := str2 + ‘@@‘ + copy(str1,i+2,Length(str1)); // 将找到的"补"字用两个@替换36 end;37 38 lStrLen := Length(str2);39 GetTextExtentPoint32A(Canvas.Handle, PAnsiChar(str2), lStrLen, lSize);40 Canvas.MoveTo(aCurx + lSize.cx + (lCurLineHeight div 6), lCury);41 Canvas.LineTo(aCurx + lSize.cx + lCurLineHeight - (lCurLineHeight div 6), lCury + lSize.cy);42 end;43 {\\\ end add 2014/9/19}44 lStrLen := Length(aStr);45 GetTextExtentPoint32W(Canvas.Handle, PWideChar(aStr), lStrLen, lSize);46 ......47 end;
通过增加上面的代码,导出pdf后的效果非常好。凡是用括号(无论全角还是半角)括起来的“补”字,均有右斜线划去。
有些字划掉并不是删除线而是右斜线,在ReportMachine报表的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。