动态AdvStringGrid完美示例 (AdvStringGrid使用技巧/Cells)|Delphi技巧 推荐 TTTBLOG
2009-06-1050460
动态AdvStringGrid完美示例 (AdvStringGrid使用技巧/Cells)
---
作者:TTT
日期:2009610
---
本方法实现用常量和常量数组完美创建和控制动态TAdvStringGrid。
原理就是先声明常量,包括列数,行数,各列的属性,然后在程序的其它过程用这些常量来控制Cells。非常方便,便于修改和移植!
以下为窗体整体代码,中间有说明。此段代码不光有动态AdvStringGrid的完美示例,还有一般窗体的常用的过程,比较窗体初始化,刷新过程。
此窗体,只需要简单准备如下,即可运行:
1,添加一个TAdvStringGrid,并命名为strGrid1。
2,设置:TAdvStringGrid-->option-->goEditing=true
TAdvStringGrid-->enableGraphics=true
3,修改Form名称为form1,或替换以下代码中的form1为当前窗体的名字。
4,将以下代码覆盖原来的代码。
5,关联以下过程(只需要在窗体和strGrid1控件属性-事件页中双击相关项即可完成关联。)
FormCreate
FormShow
strGrid1CanEditCell
strGrid1GetAlignment
strGrid1GetCellColor
strGrid1GetEditorType
unit ENMA0101;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, AdvGrid;const
cUnit_ID=^ENMA0101^; //声明常量,保存单元名称//声明常量,用于保存Cells的列数
cColQty1=8;//声明常量数组,保存Cells的各种属性,各种属性含义如下:
{0-显示
1-编辑
2-必输
3-类型
4-对齐
5-颜色
6-宽度
7-标题
8-是否从数据库中读取
9-数据表名称
10-字段名
11-字段长度
12-文本中读取
13-文本中位置 }
cColProp1: array[0..cColQty1-1] of array[0..13] of string=( //列属性
//显示编辑必输类型对齐 颜色 宽度 标题
// 0 1 2 3 4 5 6 7 8 9 10 11
(^Y^,^N^,^N^,^E^,^R^,^clBtnFace^,^25^,^NO.^,^N^,^^,^^,^0^,^N^,^0^), // 0
(^Y^,^N^,^N^,^E^,^L^,^clInfoBk^,^150^,^Part No^,^Y^,^POJBSUB^,^PART_NO^,^30^,^Y^,^2^), // 1
(^Y^,^Y^,^N^,^E^,^R^,^clWindow^,^60^,^Qty^,^Y^,^POJBSUB^,^ORDER_QUANTITY^,^9^,^Y^,^3^), // 2
(^Y^,^N^,^N^,^E^,^C^,^clMoneyGreen^,^40^,^U/M^,^Y^,^POJBSUB^,^UNIT_OF_MEASURE^,^2^,^Y^,^4^), // 3
(^Y^,^Y^,^N^,^C^,^C^,^clWindow^,^60^,^Dept^,^Y^,^POJBSUB^,^DELIVERY_TO_DEPT^,^3^,^Y^,^5^), // 4
(^Y^,^Y^,^N^,^C^,^C^,^clWindow^,^50^,^Grp^,^Y^,^POJBSUB^,^GROUP_A^,^3^,^Y^,^7^), // 5
(^Y^,^N^,^N^,^E^,^L^,^clSkyBlue^,^160^,^Part Name^,^Y^,^POJBSUB^,^PART_NAME_C^,^70^,^Y^,^8^), // 6
(^Y^,^Y^,^N^,^M^,^L^,^clWindow^,^50^,^DF^,^Y^,^POJBSUB^,^VENDOR_NO^,^5^,^Y^,^6^) // 7
);
//声明常量,定义列号,便于修改与引用
cC1NO=0;
cC1PART_NO=1;
cC1ORDER_QUANTITY=2;
cC1UNIT_OF_MEASURE=3;
cC1DELIVERY_TO_DEPT=4;
cC1GROUP_A=5;
cC1PART_NAME_C=6;
cC1Data_Flag=7;type
TForm1 = class(TForm)
strGrid1: TAdvStringGrid;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure strGrid1CanEditCell(Sender: TObject; ARow,
ACol: Integer; var CanEdit: Boolean);
procedure strGrid1GetAlignment(Sender: TObject; ARow,
ACol: Integer; var AAlignment: TAlignment);
procedure strGrid1GetCellColor(Sender: TObject; ARow,
ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
procedure strGrid1GetEditorType(Sender: TObject; ACol,
ARow: Integer; var AEditor: TEditorType);private
{ Private declarations }
procedure prClear(pMode:byte);
procedure prRefresh(pMode: byte);procedure prStgInitialize1;
procedure prStg1Clear;public
{ Public declarations }
end;var
Form1: TForm1;implementation
{$R *.dfm}
//窗体创建时执行代码
procedure TForm1.FormCreate(Sender: TObject);
Var
i,j:integer;
begin
//设定行数最大值,用于设置CheckedBox
strGrid1.RowCount:=1000;//设置cColProp1[3,J]=^C^的单元格为CheckedBox格式
for i:=1 to strGrid1.rowcount-1 do begin//通过以下属性数组设置未通过,当两列checkbox时,只能设置一列。
{for j:=0 to cColQty1-1 do begin
if cColProp1[3,J]=^C^ then
strGrid1.AddCheckBox(j,i,false,false);
end;}
//改为以下方式直接定义。
strGrid1.AddCheckBox(4,i,false,false);
strGrid1.AddCheckBox(5,i,false,false);
end;
end;//窗体显示时执行代码
procedure TForm1.FormShow(Sender: TObject);
begin
form1.caption:= cUnit_ID + ^ ^ + form1.caption;
prClear(0);
end;//窗体清空代码
procedure TForm1.prClear(pMode:byte);
begin
case pMode of
0:begin
prStgInitialize1;
end;
1:begin
prStg1Clear;
end;
end;//其它清空内容
end;
//窗体刷新代码
procedure Tform1.prRefresh(pMode: byte);
begin
//窗体刷新内容end;
//AdvStringGrid初始化过程
procedure TForm1.prStgInitialize1;
Var
I:Integer;
begin//设定零件表初始行数和列数
strGrid1.RowCount:=2;
strGrid1.ColCount:=cColQty1;
strGrid1.FixedRows:=1;
strGrid1.FixedCols:=1;//设定列宽度和列标题
for I:=0 to cColQty1-1 do begin
strGrid1.Cells[I,0]:=cColProp1[I,7]; //标题
if cColProp1[I,0]=^Y^ then
strGrid1.ColWidths[I]:=strToInt(cColProp1[I,6]) //列宽
else
strGrid1.ColWidths[I]:=0; //列宽
end;end;
//AdvStringGrid清空过程
procedure TForm1.prStg1Clear;
Var
I:integer;
J:integer;
begin
for I:=1 to strGrid1.RowCount-1 do begin
for J:=0 to cColQty1-1 do begin
strGrid1.Cells[J,I]:=^^;
strGrid1.SetCheckBoxState(J,I,false);
end;
end;
strGrid1.RowCount:=2;
end;//设定单元表各列是否可以编辑
procedure TForm1.strGrid1CanEditCell(Sender: TObject; ARow,
ACol: Integer; var CanEdit: Boolean);
Var
I:integer;
begin//直接定义
{if stgPList.Cells[cNCols1[3]-2,ARow]=^1^ then
CanEdit:=false
else begin
if ACol=cNCols1[2]-2 then
CanEdit:=true
else
CanEdit:=false;
end;}
{if aRow=0 then
CanEdit:=false
else if}//用属性数组定义
for I:=0 to cColQty1 do begin
if ACol=I then begin
if cColProp1[I,1]=^Y^ then CanEdit:=true;
if cColProp1[I,1]=^N^ then CanEdit:=False;
end;
end;//以下代码首先根据列cC1Data_Flag的值设定一行是否可以编辑,然后再根据属性数组设定。
{if (strGrid1.cells[cC1Data_Flag,ARow]=^^) or (strGrid1.cells[cC1Data_Flag,ARow]=^C^) then begin
canEdit:=false;
exit;
end else begin
for I:=0 to cColQty1 do begin
if ACol=I then begin
if strGrid1.cells[cC1Data_Flag,aRow]=^C^ then CanEdit:=false
else begin
if cColProp1[I,1]=^Y^ then CanEdit:=true;
if cColProp1[I,1]=^N^ then CanEdit:=False;
end;
end;
end;
end;}
end;
//设定单元表各列对齐方式
procedure TForm1.strGrid1GetAlignment(Sender: TObject; ARow, ACol: Integer; var AAlignment: TAlignment);
Var
I:integer;
begin
//直接定义
{if ARow=0 then AAlignment:=tacenter
else begin
case ACol of
0: AAlignment:=taRightJustify;
1: AAlignment:=taCenter;
2: AAlignment:=taCenter;
3: AAlignment:=taRightJustify;
4: AAlignment:=taCenter;
6: AAlignment:=taCenter;
8: AAlignment:=taCenter;
9: AAlignment:=taCenter;
else AAlignment:=taLeftJustify;
end;
end; }
//用属性数组定义
if ARow=0 then AAlignment:=taCenter
else begin
for I:=0 to cColQty1-1 do begin
if ACol=I then begin
//case strToInt(cColProp1[I,4])
if cColProp1[I,4]=^C^ then AAlignment:=taCenter;
if cColProp1[I,4]=^L^ then AAlignment:=taLeftJustify;
if cColProp1[I,4]=^R^ then AAlignment:=taRightJustify;
end;
end;
end;end;
//设定单元表各列颜色
procedure TForm1.strGrid1GetCellColor(Sender: TObject; ARow,
ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
Var
I:integer;
begin//直接定义
{if ARow>0 then begin
Case ACol of
1: ABrush.Color:=RGB(227,249,248);
2: ABrush.Color:=RGB(250,232,193);
3: ABrush.Color:=RGB(227,249,248);
4: ABrush.Color:=RGB(250,232,193);
12: ABrush.Color:=RGB(227,249,248);
14: ABrush.Color:=RGB(250,232,193);
24: ABrush.Color:=RGB(227,249,248);
48: ABrush.Color:=RGB(250,232,193);
51: ABrush.Color:=RGB(227,249,248);
End;
end;}//用属性数组定义
if ARow=0 then
abrush.Color:=clBtnFace // 首行为灰色
else begin
for I:=0 to cColQty1 do begin // 非首行按属性数组设置颜色
if ACol=I then abrush.Color:=StringToColor(cColProp1[I,5]);
end;
end;end;
//设定单元表各列控件类型
procedure TForm1.strGrid1GetEditorType(Sender: TObject; ACol,
ARow: Integer; var AEditor: TEditorType);
Var
I:integer;
beginfor I:=0 to cColQty1 do begin
if ACol=I then begin
if cColProp1[I,3]=^M^ then begin
AEditor:=edComBoEdit;
strGrid1.ClearComboString;
strGrid1.AddComboString(^Y : 同意^);
strGrid1.AddComboString(^N : 拒绝^);
end;
end;
end;
end;end.
(以上过程在Delphi6中测试通过。)
这样,如果修改Cells相关的属性,只需要修改数组cColProp1相关的值就可以实现了,很方便的。
关于修改cColProp1,你可以直接在上面的代码窗口中修改,但如果列相当多的话,这样改起来也是相当麻烦的,而且容易改错,也是不方便的!
对此,我做了一个excel模板:动态Cells设定工具表,如附件。
通过这个模板,可以自动生成静态数组cColProp1和静态列号,修改起来也很直观,很方便。
修改后,将生成的静态数组cColProp1和静态列号复制到代码里即可。
动态Cells设定工具表: DynamicCells_Setting.xls
手机截图软件哪个好?6款手机截图软件推荐 在日常生活中手机的使用频率越来越频繁,经常都需要用到手机截屏和录屏功能,不过手机本身自带的截图功能使用起来较 …
网页神漫漫画大全由神漫画网站整理,提供所有的神漫 漫画免费阅读。在线看神漫漫画大全就来这里 搜索历史 没有任何历史搜索 热门搜索 没有搜索到结果 游客 钻石 0 金币 0 推荐 0 月票 6 登录 登录后您可以:同步并永久保存历史记录 ...
燃气热水器十大品牌排名是万和Vanward、海尔haier、万家乐、A.O.史密斯、华帝Vatti、能率NORITZ、林内Rinnai、美的MIDEA、卡萨帝(Casarte)、方太Fotile 。. 燃气热水器哪个牌子的好,推荐海尔、万和、林内等十大品牌. 1、海尔(Haier) 燃气热水器. 海尔智家股份 ...
网页WIKI功能. 阅读: 更新日期: 2024-03-09. 最新编辑:乐与乐寻. 页面贡献者 : 阅 编 刷 历. 首页 > 角色. 如果是第一次来,按Ctrl+D可以收藏随时查看更新~觉得WIKI好玩的话,请推荐给朋友哦~ ( ω<)☆. 按右上角“WIKI功能→编辑”即可修改页面内容,新建相应的图鉴页请点击 。 角色导航. 角色一览 角色筛选 角色消耗材料 角色培养总览 提瓦特时间管理 角色分类 …
NS绅士、纯爱类游戏推荐TOP13+:阿宅专场!. 炎炎夏日,是躲在空调房间玩游戏的绝佳时光。. 而各种福利向或是纯爱向的阿宅游戏,更是必不可少的避暑佳品。. 今天让我们来看看Switch上有哪些福利游戏和GALGAME吧~.
说起炒包菜,推荐一道大家都喜欢吃的做法。搭配粉丝和鸡蛋,大火一炒,2两分钟就上桌。软软的粉丝,脆脆的包菜,混合着香香的鸡蛋,看似极其家常的食 …
订阅40张独家照片. 每月收到我们推荐最好的高品质图像。. 订阅. 下载 搜索 裸体动漫 热门 免费壁纸, 世界著名的壁纸网站 wallhere.com电脑桌面壁纸 - WallHere 壁纸库.
根据目前我国孕期保健的现状和产前检查项目的需要,本指南推荐的产前检查孕周分别是:妊娠 6~13 +6周,14~19 +6周,20~24 周,24~28 周,30~32 周,33~36 周,37~41 周。
去哪儿网攻略社区为自由行、自助游用户提供韩国最全面的目的地指南,包括韩国旅游攻略、旅游景点大全、住宿信息、特色美食、交通查询、签证办理、购物推荐、娱乐活动,应有尽有,还有真实用户发表的实用旅游攻略,最新游记照片。
女装正太. 评分: 3.3 推荐. 分类: 日本动漫 地区: 日本 年份: 2006. 主演: 池田. 导演: 谷田部勝義. 更新: 2020-11-02 20:37. 简介: 动画包含三个短片。. 炎热的盛夏,名为阿保的男子来到了一家.. 详情.
求jl03291动漫..求jl03291 动漫的资源,哪位哥有点发一下链接 网页 资讯 视频 图片 知道 文库贴吧地图 采购 进入贴吧 全吧搜索 。 08月05日 漏签 0 天 彼之岁月_独守千年吧 关注: 7,074 贴子: 19,258 看贴 图片 吧主推荐 游戏 17 回复贴,共 1 页 返回彼 ...
阳布布鸭. 推特新晋萝莉萌妹福利姬阳布布鸭门槛作品流出. 3K views ·6 月 ago. 这歌页面是关于 阳布布鸭 所有内容由 瓜老师の笔记 整理而成。 想吃瓜,看黑料,看关于 阳布布鸭 的更多精彩推荐,不要错过哦!
网页穷游行程助手:为旅行者提供最佳旅游线路推荐,旅游线路规划,详细旅游行程安排,并支持一键导出行程单,方便随时查看及送签使用。 目的地 锦囊
10、《人世间》. 以居住在北方某省会城市的一户周姓人家三代人的视角,描绘了十几位平民子弟在近50年时间内所经历的跌宕起伏的人生,全面展示了改革开放以来中国所经历的 …
米拉小姐 第27集 特色推荐 杀毒软件 软件下载 手机版 Windows版 Mac版 iPad版 TV版 服务 客服 反馈 侵权投诉 VIP采购 腾讯视频隐私保护指引 腾讯视频用户服务协议 腾讯视频第三方SDK目录 ...
77 人赞同了该回答. 推荐5款精致的充满创意性的视频网站,每一款都能让你找到灵感. 1. 好奇心研究所. 传送门: www.qdaily.com. 网站以商业视角观察生活并激发你的好奇心,囊括商业报道、 科技新闻 、生活方式等各个领域,网站如其名,报道的东西都比较 …
今天小编给大家推荐五本起点评分9分以上的网络小说,从头爽到尾,不好看算我输!. 第一本:超品相师. 作者是九灯和善,相信很多书虫都认识。. 这本小说是标准的 …
外企红颜点评. 波斯点评: 《外企红颜》人物刻画比较细腻,每个人物都有血有肉,尤其是对小人物的刻画,故事剧情十分精彩,主角性格鲜明,看后让人热血沸腾,十分推荐一看。. (2017-04-04 23:57) 翩翩点评: 在书店看一本实体书,感觉不错就买回来了 ...
话不多说,直接入正题: 常见的OLED通常有两种样式,如下图所示,分别是4线和6线控制 本人几乎浏览了网上所有关于控制OLED模块的教程,并都经过了项目实测:大力推荐u8g2这个库函数来控制,文章末尾给出了安装包,请自取(其余的库函数要么安装很费力,要么使用起来不友好,再个就是参考 ...
美国恐怖片排行榜前十名电影 1、《驱魔人》 《驱魔人》是由华纳兄弟影片公司于1973年12月26日推出的一部现代恐怖电影,该片改编自威廉·彼得·布雷迪的同名小说。 由威 …
14.星河至尊(Q版和3d中间,更新中,长篇小说改编,暮歌,修炼类) 15.完美世界 (更新中,长篇小说改编,辰东,修炼类) 16.眷思量(第一季已完结,画面精良,就是情节有点无聊) 17.双城记(第一季已完结,看不懂的情节) 18.万界春秋(已完结,修炼类
强烈推荐140G,全DLC内容,新增额外动作100+,战斗时可场景转移,商店额外道具增加,新地图,版,honeycome V1.0.6全中文对话特典DLC人物卡插件整合15G,hs2甜心挑选2豪华版R13全汉化精品整合300G最新mod插件!.
看完一众影迷的介绍后,我有一个感觉:恐怖片太容易成经典了,其实有些影迷众多的恐怖片并不能称为经典。 在此推荐100部经典恐怖片,可供参考(有些年代较早,但真的很经典) 经典恐怖惊悚电影100部名单-编号AB …
主角是的小说叫《超凡都市2035》,是作者npwarship写的一本都市风格的小说,文中的爱情故事凄美而纯洁,文笔极佳,实力推荐。 小说精彩段落试读:【超凡都市2035】(1-2)作者:npwarshi...
网页张家界旅游全攻略(内附张家界线路推荐+交通+门票). “偷的浮生半日闲,哪得云雾半绕山。. ”当在城市久居、感到心情烦躁的时候,不如抽个时间,避开拥挤的人流,游览于张家界的三千奇峰,八百秀水之间。. 俗话说,“九寨沟看水,张家界看山 ...
妻心如刀(全)免费全文-精彩阅读. 作者: 妖(镜妖) 操作: 投票推荐, 加入书架, 直达底部, TXT下载. 更新时间:2020-01-22 05:37:00 [共101章] 最新: 分卷阅读101. 推荐阅读: 从此男主改拿绿茶剧本 菊景天 (历史小说) 、 极品透视保镖 王者可以约美女吗 (都市生活) 、 黄金台 退婚后我成了六宫之主 百度网盘 (权谋小说) 、 两界走私商 ( …
网页直传, 视频播放量 20603、弹幕量 1、点赞数 95、投硬币枚数 5、收藏人数 72、转发人数 14, 视频作者 巴哈姆特動畫瘋编集部, 作者简介 ,相关视频:起风了!欢迎来到浪荡妖精之森,补番推荐 救世主妖精之森,《ようこそ!スケベエルフの森へ》ED合集,快楽堕ちが止ま …
本榜单只收录2014年上映的韩国本土电影 推荐 4人 关注 44 人关注 全部 (23) 按添加顺序查看 1 播放全片 咪咕视频 优酷视频 腾讯视频 来自:豆瓣电影 鸣梁海战 명량 7.2 (55780人 …
TapTap 为您推荐热门古风类手游,其中的每一款古风类游戏,都是由专业人员从全球海量的手机游戏中精选而出,为您推荐高品质的古风类手机游戏下载.