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的单元 ...
随机推荐
- xhprof 安装使用
1.安装扩展 windows下把 xhprof.dll 放到extensions目录下 修改配置文件 [xhprof] extension=xhprof.so; ; directory used by ...
- 牢骚 - 你代码写得丑,又不肯用好一点的IDE,这让我很为难啊。
又有人问我代码错误,发过来就是一篇巨丑无比的代码,先不说左大括号转行还和代码写在同一行的谭浩强风格,你这狗啃的一样的缩进是闹哪样!粘进VS2015里面,自动格式化,瞬间赏心悦目,编译错误出了5行,我直 ...
- bug_ _小心android-support-v4.jar版本混乱造成的NoClassDefFoundError
当你的项目出现以下红色提示的时候,要小心了, 因为很可能因为这个错误而导致解释不通的异常出现. Found 2 versions of android-support-v4.jar in the de ...
- Hadoop中两表JOIN的处理方法(转)
1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的 ...
- C语言中,数组名作为参数传递给函数时,退化为指针
C语言中,数组名作为参数传递给函数时,退化为指针 C语言中,数组名作为参数传递给函数时,退化为指针:需要数组大小时, 需要一个参数传数组名,另一个传数组大小. 数组名做函数参数时,就相当于指针了. ...
- ubuntu14.04 彻底重装mysql&phpmyadmin
---恢复内容开始--- 因为很久没用mysql,突然发现密码忘记了,折腾半天后,怎么也改不会来了!再此记一下,彻底重新删除再安装的过程. step1. 卸载: sudo apt-get remove ...
- iPhone的定位技术与Core Location框架
来源:http://www.cnblogs.com/lovecode/archive/2011/12/24/2300579.html iPhone定位来源通常有:1. GPS定位 2. WiFi定位 ...
- 转: Ubuntu 安装字体方法
命令安装: 以微软雅黑字体为例(其他的宋体.黑体等点阵字体都一样的),我们的雅黑字体文件是:Yahei.ttf(放在自己的主目录下)(在widows目录的Fonts目录下找需要的字体)由于我是双系 ...
- Android SDK Manager 设置代理
直接启用 Android SDK Manager 的命令如下: 在SDK 的 tools 目录下执行: ./android sdk 就会进入 Android SDK Manager 设置代理 在 ...
- Knockout
<button id="load">Load</button><ul data-bind="template: { foreach: ven ...