TDBGridEh 4.14 怎么样改源代码,使它能当有空行时,列的左右两边的坚线能一直画到Grid底部。(100分)

  • 主题发起人 主题发起人 GalfordLiu
  • 开始时间 开始时间
还没高手改EHLIB4.14吗? 呵呵
 
严重关注中。。。
亟需解决此问题....希望能达到flysand贴图中所示的效果
 
此问题who可以解决,请到下面几个贴子领分:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3572988 (200)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3545370 (50)
 
to Flysand,给个完整的代码吧,大家都需要哦,或者麻烦发个邮件给我brighteye@126.com,谢谢
 
我改的是3.2的,不是4.14的,改的东西全在上面贴出来了,
如果要能画出正确的金额线,EhCurrency.pas中画字符间距与位置的算法要重新写过,

EhCurrency.pas在ehlib的原版是没有的,只有2.4和3.2的改进版才有,不知道是谁加进去的.
 
那就把你的EhCurrency.pas发表一下呗?很羡慕你实现的效果.....
 
把footer 提上去也行啊。
 
好吧,为了大家方便,大家下载我和程序测试并给出意见的指出BUG的,我把我改的控件代码打包给他:

http://www.flysand.com/mysoftware/tbjxc.exe
这个程序里面的票据录入就是用这个控件写出来的,
数据库中已存在1万多条商品记录,在测试中可以测试到将要开发的系统在Internet上运行的速度情况.
录入商品名称时,可以录入商品编码/商品中文名任意部分/商品名任意部分的拼音码/商品条码
 
表格区填满表格线的问题,经过各位富翁(尤其是FushiZhiRen推荐的3。2版本源码)的帮助,终于解决了。现公布如下:

3。6版本中修改DBGridEh.pas单元的UpdateRowCount过程:
procedure TCustomDBGridEh.UpdateRowCount;
var BetweenRowHeight, t: Integer;
OldRowCount, OccupiedHeight, VisibleDataRowCount, NewRowCount: Integer;
。。。。。。。。。。。。。。
begin
...............................
with FDataLink do
if not Active or (RecordCount = 0) or not HandleAllocated then
begin
.................
end else
begin
VisibleDataRowCount := (ClientHeight - OccupiedHeight {- LineHeight}) div DefaultLineRowHeight;
if VisibleDataRowCount <= 0 then VisibleDataRowCount := 1;

FDataLink.BufferCount := VisibleDataRowCount;
if FFooterRowCount = 0 then //增加的一个条件,用户可以用FooterRowCount值来决定是否填满表格线
VisibleDataRowCount := FDataLink.RecordCount;
Inc(OccupiedHeight, DefaultLineRowHeight * VisibleDataRowCount);
NewRowCount := VisibleDataRowCount + TopDataOffset;

if FooterRowCount > 0 then
begin
NewRowCount := NewRowCount + FooterRowCount + 1;
SetRowCount(NewRowCount);
BetweenRowHeight := ClientHeight - OccupiedHeight {- LineHeight};
if BetweenRowHeight < 0 then BetweenRowHeight := 0;
//RowHeights[TopDataOffset + VisibleDataRowCount] := BetweenRowHeight;//原代码行
RowHeights[TopDataOffset + VisibleDataRowCount] := 0;//修改后的代码行
//把多余的不足一行的高度加在最后一行,增加下面一行代码
RowHeights[FTitleOffset + VisibleDataRowCount] := DefaultRowHeight+BetweenRowHeight;
end else
SetRowCount(NewRowCount);

UpdateActive;
end;
if OldRowCount <> RowCount then Invalidate;
end;
 
4.14版本中也是修改DBGridEh.pas单元的UpdateRowCount过程:
procedure TCustomDBGridEh.UpdateRowCount;
var
BetweenRowHeight,{恢复被注释掉的变量BetweenRowHeight} t: Integer;
OldRowCount, OccupiedHeight, VisibleDataRowCount, NewRowCount: Integer;
。。。。。。。。。。。。。
begin
...........................
with FDataLink do
if not Active or (RecordCount = 0) or not HandleAllocated then
begin
//MoveColRow(Col, TitleOffset, False, False);

SetRowCount(1 + TopDataOffset);
ContraRowCount := FooterRowCount;
//恢复原代码中被注释掉的语句行
(*========================================================================*)
SetRowCount(1 + TopDataOffset);
Inc(OccupiedHeight, DefaultLineRowHeight);
if HandleAllocated then
begin
if (FooterRowCount > 0) then
begin
SetRowCount(RowCount + FooterRowCount + 1);
BetweenRowHeight := ClientHeight - OccupiedHeight {- LineHeight};
if BetweenRowHeight < 0 then BetweenRowHeight := 0;
RowHeights[TopDataOffset + 1] := BetweenRowHeight;
end;
end;
(*========================================================================*)
end else
begin
VisibleDataRowCount := (ClientHeight - OccupiedHeight {- LineHeight}) div DefaultLineRowHeight;
if VisibleDataRowCount <= 0 then VisibleDataRowCount := 1;

FDataLink.BufferCount := VisibleDataRowCount;
if FFooterRowCount = 0 then //增加的一个条件,用户可以用FooterRowCount值来决定是否填满表格线
VisibleDataRowCount := FDataLink.RecordCount;
Inc(OccupiedHeight, DefaultLineRowHeight * VisibleDataRowCount);
NewRowCount := VisibleDataRowCount + TopDataOffset;

if FooterRowCount > 0 then
begin
SetRowCount(NewRowCount);
ContraRowCount := FooterRowCount;
//恢复原代码中注释掉的部分
(*========================================================================*)
NewRowCount := NewRowCount + FooterRowCount + 1;
SetRowCount(NewRowCount);
BetweenRowHeight := ClientHeight - OccupiedHeight {- LineHeight};
if BetweenRowHeight < 0 then BetweenRowHeight := 0;
//RowHeights[TopDataOffset + VisibleDataRowCount] := BetweenRowHeight;//这一行仍然不要,改成下面的代码
(*========================================================================*)
RowHeights[TopDataOffset + VisibleDataRowCount] := 0;//修改后的代码行
//把多余的不足一行的高度加在最后一行,增加下面一行代码
RowHeights[FTitleOffset + VisibleDataRowCount] := DefaultRowHeight+BetweenRowHeight;
end else
SetRowCount(NewRowCount);

UpdateActive;
end;
if OldRowCount <> RowCount then Invalidate;
end;
 
以上修改,当用户设置FooterRouCount > 1时表格空白区都可以画线,值为0时空白区不画线。 对于画表格线时多余的行高度都放到表格Footer之前的那一行,用户可以调整RowHeight属性值使表格画线显得匀称。
在3。6版本下,空白区表格的颜色跟随FixedColor,如果用户把它设成与Color相同,则表格区颜色将变得统一。
在此也对3。2版本的修改者shj表示感谢!这次照猫画虎画成了!
 
先谢谢楼上的. 不过,我按你的代码改了一下,的确是可以把底下的线画上来了,可是,网格的线有问题,每一行的高,都把底下的空白的高加了上去,变成每一行都很高.效果并不完美啊.还有很多问题
 
你把Email留下来,我把我改的发过去。我这边测试没有你说的问题哦。。。
 
To bjaman:
如果DBGridEh的Dataset是内存表MemtableEh的话,还是无法把底下的线画出来,看能否解决?
 
这样子吗? 你那边没问题?
nakanunu@163.com
上面是我的邮箱,谢谢.发过来看看
 
to tonky:我用TClientDataSet作内存表,用TDBGridEh显示不存在问题.不晓得你说的是什么意思?
to GalfordLiu:发了.
 
谢谢bjaman,邮件已收到,的确可以画出空记录了.但是我发现和以前用的3.6版画空行的方式有点区别.
你画的空行,包含了横线.,而3.6版的空行,是只有竖线而没有横线的.我个人认为,那样好看点,呵呵.
 
To bjaman:
不好意思,我没有说清楚,是这样的:
如果DBGridEh.Datasoure.Dataset是连接到Ehlib自身带的数据集控件TMemTableEh的话,DBGridEh还是无法把底下无数据的空行用线画出来,看能否解决?
我测试过的,如果用ADODataset,clientDatset,TQuery等数据集控件都能正常显示,但如果用Ehlib自身带的数据集控件TMemTableEh就无法画空白区域的线条.
 
后退
顶部