社区
C++ Builder
帖子详情
StringGrid的固定行点击的事件是什么? 怎么做到点击固定行进行排序?
sztanj
2000-09-13 05:08:00
加精
...全文
231
10
打赏
收藏
StringGrid的固定行点击的事件是什么? 怎么做到点击固定行进行排序?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sztanj
2000-09-16
打赏
举报
回复
麻烦你晚上帮我解决问题,十分感谢! 区区60分聊表敬意,请笑纳。
昨天晚上你在解决问题,我却在看电视,惭愧惭愧!!
sztanj
2000-09-15
打赏
举报
回复
我试了一下,点击固定行根本就不激发OnClick事件,怎么搞?
BCB
2000-09-15
打赏
举报
回复
(:|
非常抱歉,匆忙之中编出的GetRC()子程序还是出
了错,当行列多而滚动时,固定行列又被当成了普通行
列对待,返回的却不是0。应该首先判定是不是固定行
或列,下列有改进,若还有其它Bug,以后再改进。
void GetRC(TStringGrid *StringGrid1,int X,int Y,
int &row,int &col)
{
row=col=-1;
int s;
s=StringGrid1->RowHeights[0];
if (Y<=s)
row=0; // 计算行号
else
for (int i=StringGrid1->TopRow;
i<StringGrid1->RowCount &&
s<=StringGrid1->GridHeight; i++)
{
s+=StringGrid1->RowHeights[i]+
StringGrid1->GridLineWidth;
if (Y<=s)
{
row=i;
break;
}
}
s=StringGrid1->ColWidths[0];
if (X<=s)
col=0; // 计算列号
else
for (int i=StringGrid1->LeftCol;
i<StringGrid1->ColCount &&
s<=StringGrid1->GridWidth; i++)
{
s+=StringGrid1->ColWidths[i]+
StringGrid1->GridLineWidth;
if (X<=s)
{
col=i;break;
}
}
}
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
int row=-1,col=-1;
GetRC(StringGrid1,X,Y,row,col);
if (row>=0 && col>=0)
ShowMessage("这是第"+String(row)+"行\n\n"
" 第"+String(col)+"列");
}
BCB
2000-09-15
打赏
举报
回复
考虑到不同的要求,固定行与固定列都有可能作为点击对
象,下面GetRC()函数可求出鼠标所点击的任意行与列,即
使滚动仍可正确,知道了行号、列号,事情就好办了。通用
性很好,众友不妨一试.
void GetRC(TStringGrid *StringGrid1,int X,int Y,
int &row,int &col)
{
row=col=-1; // 表示行列之外
int s;
s=0; // 计算行号
for (int i=StringGrid1->TopRow-1;
i<StringGrid1->RowCount &&
s<=StringGrid1->GridHeight; i++)
{
s+=StringGrid1->RowHeights[i]+
StringGrid1->GridLineWidth;
if (Y<s)
{
row=i;break;
}
}
s=0; // 计算列号
for (int i=StringGrid1->LeftCol-1;
i<StringGrid1->ColCount &&
s<=StringGrid1->GridWidth; i++)
{
s+=StringGrid1->ColWidths[i]+
StringGrid1->GridLineWidth;
if (X<s)
{
col=i;break;
}
}
}
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
int row=-1,col=-1;
GetRC(StringGrid1,X,Y,row,col);
if (row>=0 && col>=0)
ShowMessage("这是第"+String(row)+"行\n\n"
" 第"+String(col)+"列");
}
BCB
2000-09-15
打赏
举报
回复
在ONCLICK 中可访问
StringGrid1->Col
StringGrid1->Row
就可知道当前点击位置
BCB
2000-09-15
打赏
举报
回复
StringGrid的属性中已有当前行Row与列Col位置,
与ONCLICK()配合使用就可了再试试。
BCB
2000-09-15
打赏
举报
回复
固定行的确是个盲区,除了Mouse事件,其它都不行,下面程序
能间接地算出它的行号,并按字符串顺排序该行,若其它顺序
可用TStringList::CustomSort()代替Sort(),不过要自行编
个比较函数。程序稍长点,但能正确地达到目的.
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
int H=StringGrid1->RowHeights[0];
if (Y>H && X<StringGrid1->ColWidths[0])
for (int L=StringGrid1->TopRow;
L<StringGrid1->RowCount &&
H<=StringGrid1->GridHeight; L++)
{
H+=StringGrid1->RowHeights[L]+
StringGrid1->GridLineWidth;
if (Y<H)
{
ShowMessage("这是第"+String(L)+"行");
TStringList *ss=new TStringList();
ss->AddStrings(StringGrid1->Rows[L]);
ss->Sort();
StringGrid1->Rows[L]=(TStrings *)ss;
delete ss;
break;
}
}
}
// 试好了,别记了给俺加分,本人专家分还为0
sztanj
2000-09-13
打赏
举报
回复
我试了一下,点击固定行根本就不激发OnClick事件,点击其它行就可以激发OnClick事件。
sztanj
2000-09-13
打赏
举报
回复
OnClick里没有鼠标点击的位置或选择的cell的row,col呀。怎么办?
ace
2000-09-13
打赏
举报
回复
没有吧
只能在OnClick里处理,如果row 或 col 等于 0 就是固定行了
排序?重新填充一边吧
String
Grid
之稀梳矩阵排序
先来浅析下
String
Grid
。 T
String
Grid
= class(TDraw
Grid
) = class(TCustomDraw
Grid
) = class(TCustom
Grid
) = class(TCustomControl) 可以看到这是一个自定义的控件,这也体现了MFC(或者说Windows的API)与vcl的不同...
Delphi
String
Grid
控件的用法
String
Grid
.FixedCols:=
固定
行
之数;
String
Grid
.FixedRows:=
固定
列之数;
String
Grid
. FixedColor:=
固定
行
列之颜色;
String
Grid
.Color:=资料区之颜色; ●资料
行
列之宽高度:
String
Grid
.DefaultColWidth:=内定...
Delphi
String
Grid
使用全书
简介: ...(1)正确地设置
String
Grid
列宽而不截断任何一个文字方法是在对
String
Grid
填充完文本串后调用SetOptimal
Grid
CellWidth过程 -----------程序片断---------------------------------------
Delphi
String
Grid
使用全书( 一)
Delphi
String
Grid
使用全书( 一) 简介: (1)正确地设置
String
Grid
列宽而不截断任何一个文字方法是在对
String
Grid
填充完文本串后调用SetOptimal
Grid
CellWidth过程 -----------程序片断--------------...
收集的
string
grid
的技巧
String
Grid
行
列的增加和删除如何编写使
String
Grid
中的一列具有Check功能,和CheckBox效果一样
String
Grid
组件Cells内容分
行
显示在T
string
grid
.ondrawcell
事件
中在
String
Grid
怎样制作只读的列在 OnSelectCell
事件
处理...
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章