有些字劃掉並非刪除線而是右斜線,在ReportMachine報表的實現

  最近項目中,由於有個字是刪除的意思,但不像Word排版給設置刪除線樣式就能夠達到的,而是要求從左上角劃一直線穿過這個字到右下角。最開始想到用造字的辦法,但是造字不只麻煩,並且要爲不一樣字體造字,而且,若是機器系統不同,字體之間還有差別,最關鍵的是,造出來的字,輸出爲pdf打開來看時,pdf並不能顯示這個造的字出來。在報表中,這個字,有多是從數據庫中出來的,輸入與輸出在不一樣機器間共享,表達就會有很大的損失,形成錯漏。因此造字是行不通的辦法。數據庫

  報表是採用ReportMachine 6.5,這是網上流傳很廣的源碼版。經過分析發現,能夠針對出現這個字的狀況下,進行特殊處理。找到RM_Class.pas文件, TRMCustomMemoView.ShowMemo就是輸出處理,找到文本繪製的處理 _DrawOneStr,修改代碼:ide

 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 do
10   begin
11     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 = '(補' then
18     begin
19       str2 := copy(str1,1,i);  // 補前的字符
20       str1 := str2 + '@@' + copy(str1,i+3,Length(str1)); // 將找到的"補"字用兩個@替換
21     end
22     else if str2 = '(補' then
23     begin
24       str2 := copy(str1,1,i+1);
25       str1 := str2 + '@@' + copy(str1,i+4,Length(str1)); // 將找到的"補"字用兩個@替換
26     end
27     else if str2 = '補)' then
28     begin
29       str2 := copy(str1,1,i-1);
30       str1 := Str2 + '@@' + copy(str1,i+2,Length(str1)); // 將找到的"補"字用兩個@替換
31     end
32     else if str2 = '補)' then
33     begin
34       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後的效果很是好。凡是用括號(不管全角仍是半角)括起來的「補」字,均有右斜線劃去。字體

相關文章
相關標籤/搜索