关于控件开发的问题(高分求教) 给一个类增加属性方法事件都很简单但如何给类里面包含的类增加属性我就完全糊涂了如:一个控件继承自tdbgrid我现在想给tdbgrid里面的tcolumn增加一个属性type怎么搞啊。能不能这样搞?请各位高手帮小弟我解决难题!最好有例子; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你另外建个类,从tcolumn,给她增加属性,然后在写你的控件 ljmanage(过客)假设我照你的方法做了,新增一个类ts_column,继承自tcolumn.增加属性type;然后再新增一个ts_dbgrid,继承自tdbgrid.但是我如何让ts_dbgrid里包含的列(tcolumn)具有ts_column的功能呢?也就是具有type属性呢?请指小弟一条明路。 把ts_dbgrid新增一个属性column_xx类型为ts_column 继承自TDBGrid,重载所有创建TColumn的方法,把类型TColumn改成TS_Column就行了。 你們有沒有去試過啊?我照你們的方法做了好像都不行,是我水平太低還是....不過請不要不負責任的猜答案撈分......有誰拿出一個可行實例出來.只要很簡單就好了,我想這是一個概念性的問題.能夠解決對我幫助很大.100分全部給他.再加也可以.反正我可用分還有幾千分.(例子只要你在dbgrid的列加一個最簡單的屬性就可以了) 自己改造DELPHI帶的源碼吧在DBGRIDS.PAS中個性 TColumn 類,在它里面加入你要的屬性再替換掉系統原有的.DCU文件即可 打錯字了,上面的個性應該是修改,Hi,Hi 修改Delphi的VCL代码是有风险的。但是也不失为一个有效的方法。此外,虽然我理解你的心情,但是并不是每个人都有那么多的时间帮你去一一测试。你如果对答案不满意,可以不给分。然后,我再稍微详细说一下我的看法(当然完全没有测试过,你也可以不看)。1、新建一个控件,继承自TDBGrid控件,名为TMyDBGrid;同时继承TColumn为TMyColumn。2、在TMyColumn中添加你想要的属性。3、在DBGrid的源代码中搜索创建TColumn的代码,记下相应的类方法的名称。如果我估计不差,这些代码应该不多。4、在TMyDBGrid中重载所有涉及创建TColumn的类方法(如果不是虚方法的话就用reintroduce强制重载)。复制TDBGrid中相应的部分TMyDBGrid中,再替换所有创建TColumn的代码为创建TMyColumn的代码。5、编译安装TMyDBGrid控件。 cybercake(数字蛋糕) 你所說的方法我早就試過了.基類的方法里面如果有用到private 變量.那麼強制重载后是無法訪問到private 變量,當然也就會出錯.或是一些功能丟失 直接指定column的类型为你自己定义的类就行了 xikug(西方不敢很帅) 請問該如何指定?聽你講好像很簡單,能不能寫一兩句出來給我看看?因為我實在太菜了!將不勝感激! 对不起,原来没有注意到private这个问题。我今天稍微看了一下DBGrid的源代码。觉的还是有可能的。下面是一个例子。已经测试过了。unit SSDBGrid;interfaceuses Windows, Messages, SysUtils, Classes, Controls, Grids, DBGrids;type TSSColumn = class(TColumn) private FXXX: Integer; procedure SetXXX(const Value: Integer); published property XXX : Integer read FXXX write SetXXX; end; TSSDBGrid = class(TDBGrid) private { Private-Deklarationen } protected { Protected-Deklarationen } function CreateColumns: TDBGridColumns; override; public { Public-Deklarationen } published { Published-Deklarationen } end;procedure Register;implementationprocedure Register;begin RegisterComponents('Beispiele', [TSSDBGrid]);end;{ TSSDBGrid }function TSSDBGrid.CreateColumns: TDBGridColumns;begin Result := TDBGridColumns.Create(Self, TSSColumn);end;{ TSSColumn }procedure TSSColumn.SetXXX(const Value: Integer);begin FXXX := Value;end;end.安装这个控件就OK了。 polygon出错,可能什么缘故? 小弟有一问题,很是不明白,想不出办法解决.路过的都来看看! 如何用Delphi做一个记事本,最好有源程序? "基础类“哪里去了? 一个指问题,先谢了 这个sql语句怎么写?在线等啊 如何用Delphi调用Windows目录下的可执行程序 讨论关于屏蔽外挂的问题,有兴趣的朋友请进!! 怎样设置和delphi一样的工具栏? 怎么给已经有的unit重命名????????(牛虻) 火大了--关于<系统件开发模式...>一文评论贴的回应 为什么我不的程序coInitialize和CoUninitialize同时使用就内存出错
假设我照你的方法做了,
新增一个类ts_column,继承自tcolumn.增加属性type;
然后再
新增一个ts_dbgrid,继承自tdbgrid.
但是我如何让ts_dbgrid里包含的列(tcolumn)具有ts_column的功能呢?也就是具有type属性呢?请指小弟一条明路。
我照你們的方法做了好像都不行,是我水平太低還是....
不過請不要不負責任的猜答案撈分......
有誰拿出一個可行實例出來.
只要很簡單就好了,
我想這是一個概念性的問題.
能夠解決對我幫助很大.
100分全部給他.
再加也可以.反正我可用分還有幾千分.
(例子只要你在dbgrid的列加一個最簡單的屬性就可以了)
在DBGRIDS.PAS中
個性 TColumn 類,在它里面加入你要的屬性
再替換掉系統原有的.DCU文件即可
2、在TMyColumn中添加你想要的属性。
3、在DBGrid的源代码中搜索创建TColumn的代码,记下相应的类方法的名称。如果我估计不差,这些代码应该不多。
4、在TMyDBGrid中重载所有涉及创建TColumn的类方法(如果不是虚方法的话就用reintroduce强制重载)。复制TDBGrid中相应的部分TMyDBGrid中,再替换所有创建TColumn的代码为创建TMyColumn的代码。
5、编译安装TMyDBGrid控件。
你所說的方法我早就試過了.
基類的方法里面如果有用到private 變量.
那麼強制重载后是無法訪問到private 變量,當然也就會出錯.或是一些功能丟失
請問該如何指定?聽你講好像很簡單,能不能寫一兩句出來給我看看?因為我實在太菜了!
將不勝感激!
Windows, Messages, SysUtils, Classes, Controls, Grids, DBGrids;type
TSSColumn = class(TColumn)
private
FXXX: Integer;
procedure SetXXX(const Value: Integer);
published
property XXX : Integer read FXXX write SetXXX;
end; TSSDBGrid = class(TDBGrid)
private
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
function CreateColumns: TDBGridColumns; override;
public
{ Public-Deklarationen }
published
{ Published-Deklarationen }
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Beispiele', [TSSDBGrid]);
end;{ TSSDBGrid }function TSSDBGrid.CreateColumns: TDBGridColumns;
begin
Result := TDBGridColumns.Create(Self, TSSColumn);
end;{ TSSColumn }procedure TSSColumn.SetXXX(const Value: Integer);
begin
FXXX := Value;
end;end.安装这个控件就OK了。