delphi stringgrid的单元格点击事件问题

qq_33802316 2017-02-08 10:21:34
想每行绑定一个点击事件,使用onselectcell的话,滚动鼠标会触发事件不可取。使用stringgrid的onclick事件然后y(sender as Tstringgrid).col/row用判断单元格也能锁定单元格,但是滚动滚轮依然触发stringgrid的onclick事件不可取。请问应该怎么办埃,请教各位了
...全文
1513 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_18214415 2018-01-09
  • 打赏
  • 举报
回复
请问我在StringGrid1MouseWheelDown里面添加Handled:=True;为什么会有错误提示Expression syntax???
santiaodahan 2017-02-09
  • 打赏
  • 举报
回复
引用 14 楼 qq_33802316 的回复:
引用 13 楼 santiaodahan 的回复:
[quote=引用 12 楼 qq_33802316 的回复:] [quote=引用 11 楼 santiaodahan 的回复:] [quote=引用 10 楼 qq_33802316 的回复:] [quote=引用 2 楼 santiaodahan 的回复:] 在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
谢谢,谢谢方便留个qq么,或者麻烦加我也行啊,我的qq是305343159,我delphi新手,经常卡壳,还像朋友多学习埃
我很少用QQ。学会搜索,看帮助,多看书会比较系统。[/quote]深深地感觉做界面时候挺费脑的,做java的时候数据显示用html和js太方便了,这个。。。。。。。再麻烦问下,如何动态设置获取焦点的单元格埃。。。[/quote] 指定行列数就行。StringGrid1.Row:=2; StringGrid1.Col:=4; 都是组件基本用法。这是要做什么东西。 [/quote]我换了一个方法。兄台,说出来不怕你笑一下,就是做一个数据展示,点击可以删除当前行或者展示当前行的详细内容。。。。[/quote]控件是包装好的,有现成的属性、方法,很方便。也可以自己绘制复杂的界面,关键是熟练。
qq_33802316 2017-02-08
  • 打赏
  • 举报
回复
引用 2 楼 santiaodahan 的回复:
在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
这个是屏蔽鼠标滚轮的点击么?情况是滚轮滚动的时候会自动选中其他的单元格而且会触发click事件,我想禁用的是这个时候触发的click事件。请问这个怎么做呢??
santiaodahan 2017-02-08
  • 打赏
  • 举报
回复
在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
qq_33802316 2017-02-08
  • 打赏
  • 举报
回复
或者能用个其他适当的组件代替也行,本人对各个组件了解的不多,求教。
qq_33802316 2017-02-08
  • 打赏
  • 举报
回复
引用 13 楼 santiaodahan 的回复:
引用 12 楼 qq_33802316 的回复:
[quote=引用 11 楼 santiaodahan 的回复:] [quote=引用 10 楼 qq_33802316 的回复:] [quote=引用 2 楼 santiaodahan 的回复:] 在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
谢谢,谢谢方便留个qq么,或者麻烦加我也行啊,我的qq是305343159,我delphi新手,经常卡壳,还像朋友多学习埃
我很少用QQ。学会搜索,看帮助,多看书会比较系统。[/quote]深深地感觉做界面时候挺费脑的,做java的时候数据显示用html和js太方便了,这个。。。。。。。再麻烦问下,如何动态设置获取焦点的单元格埃。。。[/quote] 指定行列数就行。StringGrid1.Row:=2; StringGrid1.Col:=4; 都是组件基本用法。这是要做什么东西。 [/quote]我换了一个方法。兄台,说出来不怕你笑一下,就是做一个数据展示,点击可以删除当前行或者展示当前行的详细内容。。。。
santiaodahan 2017-02-08
  • 打赏
  • 举报
回复
引用 12 楼 qq_33802316 的回复:
引用 11 楼 santiaodahan 的回复:
[quote=引用 10 楼 qq_33802316 的回复:] [quote=引用 2 楼 santiaodahan 的回复:] 在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
谢谢,谢谢方便留个qq么,或者麻烦加我也行啊,我的qq是305343159,我delphi新手,经常卡壳,还像朋友多学习埃
我很少用QQ。学会搜索,看帮助,多看书会比较系统。[/quote]深深地感觉做界面时候挺费脑的,做java的时候数据显示用html和js太方便了,这个。。。。。。。再麻烦问下,如何动态设置获取焦点的单元格埃。。。[/quote] 指定行列数就行。StringGrid1.Row:=2; StringGrid1.Col:=4; 都是组件基本用法。这是要做什么东西。
qq_33802316 2017-02-08
  • 打赏
  • 举报
回复
引用 11 楼 santiaodahan 的回复:
引用 10 楼 qq_33802316 的回复:
[quote=引用 2 楼 santiaodahan 的回复:] 在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
谢谢,谢谢方便留个qq么,或者麻烦加我也行啊,我的qq是305343159,我delphi新手,经常卡壳,还像朋友多学习埃
我很少用QQ。学会搜索,看帮助,多看书会比较系统。[/quote]深深地感觉做界面时候挺费脑的,做java的时候数据显示用html和js太方便了,这个。。。。。。。再麻烦问下,如何动态设置获取焦点的单元格埃。。。
santiaodahan 2017-02-08
  • 打赏
  • 举报
回复
引用 10 楼 qq_33802316 的回复:
引用 2 楼 santiaodahan 的回复:
在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
谢谢,谢谢方便留个qq么,或者麻烦加我也行啊,我的qq是305343159,我delphi新手,经常卡壳,还像朋友多学习埃
我很少用QQ。学会搜索,看帮助,多看书会比较系统。
qq_33802316 2017-02-08
  • 打赏
  • 举报
回复
引用 2 楼 santiaodahan 的回复:
在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
谢谢,谢谢方便留个qq么,或者麻烦加我也行啊,我的qq是305343159,我delphi新手,经常卡壳,还像朋友多学习埃
santiaodahan 2017-02-08
  • 打赏
  • 举报
回复
引用 8 楼 qq_33802316 的回复:
[quote=引用 7 楼 santiaodahan 的回复:] [quote=引用 6 楼 qq_33802316 的回复:] [quote=引用 5 楼 santiaodahan 的回复:] [quote=引用 4 楼 qq_33802316 的回复:] [quote=引用 2 楼 santiaodahan 的回复:] 在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
有效果,只是这样后滚动滚轮StringGrid不滚动了,要是能滚动但是不自动选中cell就完美了[/quote] 这里的滚动正是通过连续改变选中单元格实现的,要滚动而又不选中是不能同时成立的。但是可以直接发消息改变滚动条实现滚动。Handled:=True;仍然需要。OnMouseWheelDown事件中添加一行: SendMessage(TStringGrid(Sender).Handle, WM_VSCROLL,SB_LINEDOWN,0); 在OnMouseWheelUp事件中添加一行: SendMessage(TStringGrid(Sender).Handle,WM_VSCROLL,SB_LINEUP,0); 即可。[/quote]多谢多谢,我现在碰到个新问题,当动态删除一行时则自动聚焦到上一行同列的cell上。怎么随意改变被选中的cell呢[/quote]我没看懂最后这个是什么问题,你要达到什么效果。[/quote]每行数据单独实现点击删除该行的效果,我想用onselect实现。上一个问题解决了,现在遇到的问题就是现在通过键盘方向键选中cell会触发事件,我想在窗体获取焦点时屏蔽键盘方向键。。[/quote] 屏蔽方向键,在StringGrid的OnKeyDown事件中添加 if Key in [VK_LEFT, VK_RIGHT,VK_UP, VK_DOWN] then KEY:=0;
qq_33802316 2017-02-08
  • 打赏
  • 举报
回复
引用 7 楼 santiaodahan 的回复:
[quote=引用 6 楼 qq_33802316 的回复:] [quote=引用 5 楼 santiaodahan 的回复:] [quote=引用 4 楼 qq_33802316 的回复:] [quote=引用 2 楼 santiaodahan 的回复:] 在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
有效果,只是这样后滚动滚轮StringGrid不滚动了,要是能滚动但是不自动选中cell就完美了[/quote] 这里的滚动正是通过连续改变选中单元格实现的,要滚动而又不选中是不能同时成立的。但是可以直接发消息改变滚动条实现滚动。Handled:=True;仍然需要。OnMouseWheelDown事件中添加一行: SendMessage(TStringGrid(Sender).Handle, WM_VSCROLL,SB_LINEDOWN,0); 在OnMouseWheelUp事件中添加一行: SendMessage(TStringGrid(Sender).Handle,WM_VSCROLL,SB_LINEUP,0); 即可。[/quote]多谢多谢,我现在碰到个新问题,当动态删除一行时则自动聚焦到上一行同列的cell上。怎么随意改变被选中的cell呢[/quote]我没看懂最后这个是什么问题,你要达到什么效果。[/quote]每行数据单独实现点击删除该行的效果,我想用onselect实现。上一个问题解决了,现在遇到的问题就是现在通过键盘方向键选中cell会触发事件,我想在窗体获取焦点时屏蔽键盘方向键。。
santiaodahan 2017-02-08
  • 打赏
  • 举报
回复
引用 6 楼 qq_33802316 的回复:
[quote=引用 5 楼 santiaodahan 的回复:] [quote=引用 4 楼 qq_33802316 的回复:] [quote=引用 2 楼 santiaodahan 的回复:] 在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
有效果,只是这样后滚动滚轮StringGrid不滚动了,要是能滚动但是不自动选中cell就完美了[/quote] 这里的滚动正是通过连续改变选中单元格实现的,要滚动而又不选中是不能同时成立的。但是可以直接发消息改变滚动条实现滚动。Handled:=True;仍然需要。OnMouseWheelDown事件中添加一行: SendMessage(TStringGrid(Sender).Handle, WM_VSCROLL,SB_LINEDOWN,0); 在OnMouseWheelUp事件中添加一行: SendMessage(TStringGrid(Sender).Handle,WM_VSCROLL,SB_LINEUP,0); 即可。[/quote]多谢多谢,我现在碰到个新问题,当动态删除一行时则自动聚焦到上一行同列的cell上。怎么随意改变被选中的cell呢[/quote]我没看懂最后这个是什么问题,你要达到什么效果。
qq_33802316 2017-02-08
  • 打赏
  • 举报
回复
引用 5 楼 santiaodahan 的回复:
[quote=引用 4 楼 qq_33802316 的回复:] [quote=引用 2 楼 santiaodahan 的回复:] 在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
有效果,只是这样后滚动滚轮StringGrid不滚动了,要是能滚动但是不自动选中cell就完美了[/quote] 这里的滚动正是通过连续改变选中单元格实现的,要滚动而又不选中是不能同时成立的。但是可以直接发消息改变滚动条实现滚动。Handled:=True;仍然需要。OnMouseWheelDown事件中添加一行: SendMessage(TStringGrid(Sender).Handle, WM_VSCROLL,SB_LINEDOWN,0); 在OnMouseWheelUp事件中添加一行: SendMessage(TStringGrid(Sender).Handle,WM_VSCROLL,SB_LINEUP,0); 即可。[/quote]多谢多谢,我现在碰到个新问题,当动态删除一行时则自动聚焦到上一行同列的cell上。怎么随意改变被选中的cell呢
santiaodahan 2017-02-08
  • 打赏
  • 举报
回复
引用 4 楼 qq_33802316 的回复:
[quote=引用 2 楼 santiaodahan 的回复:] 在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
有效果,只是这样后滚动滚轮StringGrid不滚动了,要是能滚动但是不自动选中cell就完美了[/quote] 这里的滚动正是通过连续改变选中单元格实现的,要滚动而又不选中是不能同时成立的。但是可以直接发消息改变滚动条实现滚动。Handled:=True;仍然需要。OnMouseWheelDown事件中添加一行: SendMessage(TStringGrid(Sender).Handle, WM_VSCROLL,SB_LINEDOWN,0); 在OnMouseWheelUp事件中添加一行: SendMessage(TStringGrid(Sender).Handle,WM_VSCROLL,SB_LINEUP,0); 即可。
qq_33802316 2017-02-08
  • 打赏
  • 举报
回复
引用 2 楼 santiaodahan 的回复:
在StringGrid的OnMouseWheelDown和OnMouseWheelUp事件中添加一行Handled:=True; 就可以屏蔽鼠标滚轮事件了。
有效果,只是这样后滚动滚轮StringGrid不滚动了,要是能滚动但是不自动选中cell就完美了

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧