如何在程序运行时改变dbgrid控件的rowheight?(200分)

  • 主题发起人 主题发起人 guansufa
  • 开始时间 开始时间
G

guansufa

Unregistered / Unconfirmed
GUEST, unregistred user!
我希望在程序运行时改变dbgrid控件的rowheight,该如何解决?
TDBGrid的父类TCustomDBGrid有defaultrowheight的属性,为何在TDBGrid中不能用?
 
从TDBGrid继承下来,
TScrollDBG=class(TDBGrid)
public
property DefaultRowHeight;
property Col;
property ColCount;
property Row;
property RowCount;
property RowHeights;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TScrollDBG]);
end;

用TScrollDBG替换原来的TDBGrid就行。
最好不要改变RowHeights,但可以改变DefaultRowHeight。
 
在dbgrid中有一个事件(忘了),可自定义输出格式(宽,高,颜色。。。),找找
 
给分吧
TStringGrid(DBGrid1).Fixedcols:=4;
TStringGrid(DBGrid1).DefaultRowHeight:=40;
 
上面的方法没有用的。除非从TCustomGrid开始继承。
用DBGridEh把。完全解决问题。
 
不需要从TCustomGrid开始继承吧!
reintroduce就是了!
 
To guansufa :
DefaultRowHeight 实际上是 TCustomGrid 处声明的,不过是 Protected
类型的,而 TDBGrid 又没有把它 Publish 出来,所以你用不了。
解决方法很简单,只要想办法把它 Public 或 Publish 出来,像 zensst 的
方法就可以,cqsssco 的办法也可以,不过有点歪,对不是存在于同一个父类里的
属性会出问题,当然本例中能行(DefaultRowHeight 是在 TDBGrid 和 TStringGrid
的共同父类 TCustomGrid 中声明的)。
就是这样。
From: BaKuBaKu
 
我同意 zensst 的说法.
 
同意 zensst
 
以上方法都应该是可行的。主要是把属性设置为public

另外见到过一种更简单的对付protected属性的方法。
在需要使用protected属性的单元中申明一个继承类,
则在整个单元中,父类的protected属性都是可见的.
例如
在你需要改变dbgrid.DefaultRowHeigh的单元中定义
Tmygrid = class(TCustomDBGrid)
end;

其后使用
Tmygrid(dbgrid1).DefaultRowHeight:=40;
就可编译通过了,不用注册控件。

当然如果需要在很多窗体中使用这样的protect属性
这种申明就有些烦,采用zensst方法好了
 
DefaultRowHeight 实际上是 TCustomGrid 处声明的,不过是 Protected
类型的,用生个儿子改一改的方法去解决(方法详情见dELPHI高级开发指南).试试看吧
 
多人接受答案了。
 
后退
顶部