c++ builder ListView实现可编辑任意列(转)
// ---------------------------------------------------------------------------
// Form的构造函数中填充StrinGrid单元格
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
for (int i = StringGrid1->FixedRows; i < StringGrid1->RowCount; i++)
{
for (int j = StringGrid1->FixedCols; j < StringGrid1->ColCount; j++)
{
StringGrid1->Cells[i][j] = i * + j;
}
}
} // ---------------------------------------------------------------------------
// 在StrinGrid的OnDrawCell事件中在指定的单元格绘制按钮
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
TStringGrid *sg = dynamic_cast<TStringGrid *>(Sender); // 填充背景,准备重绘
sg->Canvas->FillRect(Rect); // 如果当前正在绘制第三行第四列的格子(准备内嵌按钮的格子)
if (ARow == && ACol == )
{
// 63 63 72 75 6E 2E 63 6F 6D
// 用StringGrid的Tag作按钮弹起或按下的标志, 1为弹起, 0为按下
if (sg->Tag == )
DrawFrameControl(sg->Canvas->Handle, &Rect,
DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_PUSHED);
else
DrawFrameControl(sg->Canvas->Handle, &Rect,
DFC_BUTTON, DFCS_BUTTONPUSH);
} // 以背景透明方式绘制出单元格的字符串
sg->Canvas->Brush->Style = bsClear; sg->Canvas->TextOut(Rect.Left + ,
(Rect.Height() - sg->Canvas->TextHeight("A") ) / + Rect.Top,
sg->Cells[ARow][ACol]);
} // ---------------------------------------------------------------------------
// 在StringGrid的OnMouseDown事件中判断如果当前鼠标下的格子是指定的格子
// 就改变StringGrid->Tag并使其重绘,以显示出按钮被按下的样子
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TStringGrid *sg = dynamic_cast<TStringGrid *>(Sender);
if (!sg) return; // 获取StringGrid中当前鼠标下的行和列
int nCol, nRow;
TPoint ptMouse = sg->ScreenToClient(Mouse->CursorPos);
sg->MouseToCell(ptMouse.x, ptMouse.y, nCol, nRow); sg->Tag = nRow == && nCol == ? : ;
sg->Invalidate();
} // ---------------------------------------------------------------------------
// 在StringGrid的OnMouseUp事件中判断如果当前鼠标下的格子是指定的格子
// 就改变StringGrid->Tag并使其重绘,以显示出按钮被弹起的样子
void __fastcall TForm1::StringGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TStringGrid *sg = dynamic_cast<TStringGrid *>(Sender);
if (!sg) return; // 获取StringGrid中当前鼠标下的行和列
int nCol, nRow;
TPoint ptMouse = StringGrid1->ScreenToClient(Mouse->CursorPos);
sg->MouseToCell(ptMouse.x, ptMouse.y, nCol, nRow); sg->Tag = ; // 注意这里和上面OnMouseDown的不同
sg->Invalidate(); // 在OnMouseUp事件中处理点击事件
if (nRow == && nCol == )
{
// 这里加入自己的代码即可 ShowMessage(String().sprintf(
TEXT("按钮 %s 被点击"), sg->Cells[nRow][nCol]));
}
}
c++ builder ListView实现可编辑任意列(转)的更多相关文章
- Visio编辑数据库模型列
Visio编辑数据库模型列:邮件group->Open实体,进入实体属性编辑界面,按回车可以添加.
- 如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值
如何在Delphi 中使用 DevExpressVCL的 CxGrid与CxTreeList,编辑某列后计算另一列的值:比如 输入 单价,数量,计算金额. 参考: 1. 输入 单价,数量,计算金额 ...
- [No000018E]Vim快速跳转任意行、任意列以及高亮显示当前行、当前列方法-Vim使用技巧(3)
vim提供了丰富的快速跳转任意行.任意列的方法,方便高效地移动光标,定位文件位置. 一.Vim行跳转 使用vim查看文件时,使用以下命令可以快速跳转文件首.尾行,方便对整个文件有个全局把握. 1.1 ...
- 用mapreduce实现从hbase导出到hdfs,实现一个工具类,能够支持任意表 任意列 任意路径导出,并且支持表头
分析: 1.由于是任意列 任意表 任意路径,我们很容易想到是参数传入,参数传入后怎么去获得参数,根据我们以往的经验就是通过args[]来获取,但是在mapper或者是reducer中,我们不能直接将参 ...
- ionic listview对象的编辑、排序和删除
1)ionic的listview对象即<ion-list></ion-list> 2)添加并显示编辑按钮(添加其他自定义按钮也一样) can-swipe属性设置为true(默认 ...
- ListView、DataGrid 不显示列标题
<!--ListView不显示列标题--> <Style TargetType="{x:Type GridViewColumnHeader}"> <S ...
- WPFDataGrid可以编辑某列Bug,困惑已久
这个问题困扰了好几天,最近在做DataGrid编辑列,有一个添加按钮,当我点击添加按钮的时候自动生成一行,并别生成序列号,然后按回车键完成添加,但是有一个问题就是:当我点击完添加按钮以后,然后继续添加 ...
- jqgrid 实现行编辑,表单编辑的列联动
这个问题的场景相信大家都遇到过,比方有A,B,C三列,B,C列均为下拉框.可是C列的值是由B列的值来决定的.即C列中的值是动态变化的,变化的根据就是B列中你选择的值. 本文给出的是一个有用,简易快捷的 ...
- [Excel] Excel固定任意行或者任意列
固定第一行第一列:点击B2单元格[以B2为中介点,找你冻结部分的中介点!行列的交叉点!] 例如只想固定第一行,那么请选择A2的单元格 为中介点,A3.A4…… 例如只想固定第一列,那么请选择B1的单元 ...
随机推荐
- 在eclipse中下载包含子模块(Submodules)的git项目
先将项目下载下来 , 这时由于是子项目的原因 , 下载的项目中不包含任何子项目 . 这时在eclipse的Git Repositories中 , 选中Submodules , 右键点击update即可 ...
- 在PHPstorm编辑器中配置git环境
在phpstorm编辑器中配置git环境,使得编程人员从git仓库中提交代码,克隆代码,,,更佳便利快捷,有利于提高项目的质量和效率 工具/原料 phpstorm编辑器,git客户端 win7或w ...
- Java Cookie和Session(转载)
一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...
- ruby字符串学习笔记5
1获取字符串某部分 s = "My kingdom for a string!" s.slice(3,7) # kingdom s[3,7] # kingdom s[/.ing/] ...
- linux内核神级list
源码: #ifndef _LINUX_LIST_H #define _LINUX_LIST_H /* * Simple doubly linked list implementation. * * S ...
- sublimetext3 安装php语法检测
打开控制台,install package 搜 sublimelinter 先安装sublimelinter本体 安装完以后再搜索一下,安装sublimelinter-php 接下来,打开prefer ...
- T450设置插入USB鼠标时自动禁用触摸板
刚入手T450,打字时经常碰到触摸板,很是恼火,于是求助万能的度娘,找了卡饭基佬的教程,实测可行,大家可以试试.<win7下如何设置插入USB鼠标时自动禁用触摸板>,地址:www.kafa ...
- 无法重新组织表 "ty_wf_ex_local_process_info" 的索引 "idx_prc_act_id" (分区 1),因为已禁用页级锁定。
无法重新组织表 "ty_wf_ex_local_process_info" 的索引 "idx_prc_act_id" (分区 1),因为已禁用页级锁定. ALT ...
- [SQL]SQL中把一个字段的数据分多行显示
其实你完全可以写个自定义函数就OK了 . =================================================================== create func ...
- hive处理hbase数据
CREATE EXTERNAL TABLE table1( key string, zoneid int, result int, ) STORED BY 'org.apache.hadoop.hiv ...