FR的交叉报表的位置调整和左上角画线的改进方法 (10分)

O

onedot

Unregistered / Unconfirmed
GUEST, unregistred user!
最近被用户炒死了,只好钻研了下FR的代码,解决了他们的问题
哎,我很有满足感的同时不得不感叹一些事情,。。。。
我把我的改动地方贴出来,希望可以对大家有帮助。
注意:在FR2.4基础上修改的,我没有看其他版本的
各位可以自己按照我写的看你用的FR苑代码里对应位置
//对了,我没看如何使CELL也都有边框,这个如果有谁知道可以RE下,谢谢
//加左上角边框
第一步:在FR_Cross文件的TfrCrossView.CreateObjects方法里找到
OneObject('ColumnHeaderMemo', 'Header');
在它前面加上
OneObject('HeaderNil',' ' );
//创建一个该设计态用的HEADER
第二步:在FR_Cross文件的TfrCrossView.Draw方法加上
//为了可以在设计态设计该左上角的FRMEMOVIEW
v := FReport.FindObject('HeaderNil' + Name);
if v<>nil then
begin
v.SetBounds(x+8 , y+8, v.dx, v.dy);
v.Draw(Canvas);
end;

第三步:在FR_Cross文件的TfrCrossView.MakeBands方法先找到
CalcWidths;

//然后接着加上下面代码:

v3:=TfrMemoView.Create;
//自己在前面定义一下。
//开始画左上角的方框
d := 0;
for i := 0 to FCross.TopLeftSize.cy - 1do
begin
d := d + FColumnHeights;// + Ord(not FShowHeader)];
end;
v3.Memo.Add(' ');
v3.SetBounds(ch2.x, ch1.y, 0, 0);
v3.Prop['FrameTyp'] := 15;
p.Objects.Add(v3);
v3.dy := d;
for i := 0 to FCross.TopLeftSize.cx - 1do
begin
v3.dx := v3.dx + FColumnWidths;
end;
// 开始复制设计态的那个FRMEMOVIEW的数据
v1:=TfrMemoView(p.FindObject('HeaderNil'+Name));
if v1<>nil then
begin
v3.Prop['FrameWidth'] := v1.Prop['FrameWidth'];
v3.Prop['FrameColor'] := v1.Prop['FrameColor'];
v3.Prop['FrameStyle'] := v1.Prop['FrameStyle'];
v3.FillColor := v1.FillColor;
v3.Format := v1.Format;
v3.FormatStr := v1.FormatStr;
v3.gapx := v1.gapx;
v3.gapy := v1.gapy;
v3.Alignment := v1.Alignment;
v3.Highlight := v1.Highlight;
v3.LineSpacing := v1.LineSpacing;
v3.CharacterSpacing := v1.CharacterSpacing;
v3.Font := v1.Font;
v3.Memo.Assign(v1.Memo);
end;

//让交叉报表水平位置和设计态一致
在FR_Cross文件的TfrCrossView.MakeBands方法先找到下面的代码
ch2 := TfrBandView.Create;
// cross header
ch2.BandType := btCrossHeader;
ch2.Name := 'CrossHeader2' + Name;
ch2.SetBounds(p.LeftMargin+0, 0, 60, 18);
if FRepeatCaptions then
ch2.Prop['RepeatHeader'] := True;
p.Objects.Add(ch2);
改成
ch2 := TfrBandView.Create;
// cross header
ch2.BandType := btCrossHeader;
ch2.Name := 'CrossHeader2' + Name;
ch2.SetBounds(p.LeftMargin+TfrMemoView(p.FindObject(Name)).prop['Left'],15, 60, 18);
if FRepeatCaptions then
ch2.Prop['RepeatHeader'] := True;
p.Objects.Add(ch2);
 
CELL的边线问题:
在FR_Cross文件的TfrCrossView.ReportBeforePrint代码最后一行
View.Memo.Text := s;后加上
v1 := TfrMemoView(FReport.FindObject('CellMemo' + Name));
if v1<>nil then
View.FrameTyp:=v1.FrameTyp
else
View.FrameTyp:=15;
 
接受答案了.
 
顶部