CnPack 开源软件项目 - D7下为StringGrid实现一个特殊的编辑需求
  网站首页 下载中心 每日构建 文档中心 公益基金 开发论坛 关于我们 致谢名单 English


 Google 搜索

内容: 
 最新下载包


 
CnWizards 1.3.1.1181
[2024-04-04]

 
CnVCL 组件包 20240404
[2024-04-04]

 
CVSTracNT 多语言版 V2.0.1_20080601
[2008-06-02]

 
CVSTrac Linux 中文版 V1.2.1_20060112
[2006-01-12]
  最新开发版下载 RSS
  项目时间线 RSS RSS
 项目相关链接

CnPack GitHub 首页
GIT 使用说明
申请加入 CnPack
CnPack 成员名单
CnPack 邮件系统
 网站访问量

今日首页访问: 728
今日页面流量: 2972
全部首页访问: 5145301
全部页面流量: 20571611
建站日期: 2003-09-01

D7下为StringGrid实现一个特殊的编辑需求

CnPack 开源软件项目 2008-02-22 12:39:18

作者:Zhou JingYu

最近在工作中使用 TStringGrid 时遇到个比较特殊的需求:要求 Grid 中某些 Cell 只能用鼠标点击来控制其内容(开关切换),而其它的 Cell 则允许用户编辑内容。查看 D7 下的 TStringGrid,没有发现能直接实现该需求的办法,于是分析一下 VCL 源码,并通过以下简单的方法实现了该需求。现帖上来与大家交流。

具体的实现是在使用该 Grid 的窗体单元中,增加以下代码:

  TEditShowEvent = procedure (var CanShow: Boolean) of object;

  // 增加了控制编辑框是否允许事件的 StringGrid
  TStringGrid = class(Grids.TStringGrid)
  private
    FOnEditShow: TEditShowEvent;
  protected
    function CanEditShow: Boolean; override;
  public
    property OnEditShow: TEditShowEvent read FOnEditShow write FOnEditShow;
  end;

implementation


function TStringGrid.CanEditShow: Boolean;
begin
  Result := inherited CanEditShow;
  if Assigned(FOnEditShow) then
    FOnEditShow(Result);
  if not Result then
    EditorMode := False;
end;

基本思路如下:
因为不希望注册新的 IDE 控件,所以在窗体中使用了同名类覆盖的小技巧,通过声明 TStringGrid = class(Grids.TStringGrid) 在窗体中为 VCL 的 TStringGrid 派生出一个同名的类,但是增加了一个 OnEditShow 事件。新的控件通过 override CanEditShow 方法来产生事件供用户使用。使用时,通过代码的方式手动为该 Grid 关联 OnEditShow 事件并在其中对 Cell 位置进行判断以解决原始需求。


本文已阅读 9858 次
来自: CnPack 开源软件项目

上一主题 | 返回上级下一主题

相关主题:
翻译:现有 Delphi 项目迁移到 Tiburon 中的注意事项


版权所有(C) 2001-2018 CnPack 开发组 网站编写:Zhou Jinyu