stringgrid fixedrows 行, 不能触发事件, 该怎么做?

qazwsxhai 2014-05-17 12:49:33
双击stringgrid fixedrows 行,发生什么事件
stringgrid
fixedrows:=1
我想在双击第一行时,做指定的事情.
现在发现,当设置了fixedrows=1时,无论,单击或双击第一行,都不会引发click或dbclick事件,该如何做?
...全文
266 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
金卯刀 2014-05-19
  • 打赏
  • 举报
回复
引用 2 楼 qazwsxhai 的回复:
[quote=引用 1 楼 Avan_Lau 的回复:] 在StringGrid.onClick或dblClick事件中获取StringGrid.MouseCoord;其中X代表列序号,Y代表行序号。由xy判断所点击的位置。
非常感谢你的回复. 我现在遇到的问题是 fixedrows 的行 触发不了事件, 不是在找事件发生的位置的. [/quote] 找到点击的位置,就可以做你想做的事情了。说白点,就是把你想做的事情发在StringGrid.onClick或dblClick事件中
qazwsxhai 2014-05-19
  • 打赏
  • 举报
回复
引用 1 楼 Avan_Lau 的回复:
在StringGrid.onClick或dblClick事件中获取StringGrid.MouseCoord;其中X代表列序号,Y代表行序号。由xy判断所点击的位置。
非常感谢你的回复. 我现在遇到的问题是 fixedrows 的行 触发不了事件, 不是在找事件发生的位置的.
金卯刀 2014-05-19
  • 打赏
  • 举报
回复
在StringGrid.onClick或dblClick事件中获取StringGrid.MouseCoord;其中X代表列序号,Y代表行序号。由xy判断所点击的位置。
金卯刀 2014-05-19
  • 打赏
  • 举报
回复
代码可以简洁点(未测试)

procedure TForm1.StringGrid1DblClick(Sender: TObject); 
var
  lpPoint: TPoint;
  Coord: TGridCoord;
begin       
  lpPoint:= StringGrid1.ScreenToClient(Mouse.CursorPos);   
  Coord:=  StringGrid1.MouseCoord(lpPoint.X, lpPoint.Y);                 
  Showmessage(IntToStr(Coord.X) + ':' + IntToStr(Coord.Y));
end; 
金卯刀 2014-05-19
  • 打赏
  • 举报
回复
引用 5 楼 yyfhz 的回复:
Double Click事件是可以用的,但是要自己在Double Click事件里通过鼠标位置查找鼠标所在的行列 随便扔一个StringGrid (StringGrid1)在窗体Form1上,然后StringGrid1的 Double Click事件里

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
        lpPoint: TPoint;
        nRow, nCol: Integer;
begin
        if getCursorPos(lpPoint) then
        begin
                StringGrid1.MouseToCell(lpPoint.x-self.Left-StringGrid1.Left,lpPoint.y-self.Top-StringGrid1.Top, nCol,nRow);
                showMessage(intToStr(nRow)+','+intToStr(nCol));
        end ;

end;
就是这样的啦。目的就是:既然在Fix行无法触发,就退到Grid自身的Click事件来做。
yyfhz 2014-05-19
  • 打赏
  • 举报
回复
Double Click事件是可以用的,但是要自己在Double Click事件里通过鼠标位置查找鼠标所在的行列 随便扔一个StringGrid (StringGrid1)在窗体Form1上,然后StringGrid1的 Double Click事件里

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
        lpPoint: TPoint;
        nRow, nCol: Integer;
begin
        if getCursorPos(lpPoint) then
        begin
                StringGrid1.MouseToCell(lpPoint.x-self.Left-StringGrid1.Left,lpPoint.y-self.Top-StringGrid1.Top, nCol,nRow);
                showMessage(intToStr(nRow)+','+intToStr(nCol));
        end ;

end;
qazwsxhai 2014-05-19
  • 打赏
  • 举报
回复
引用 3 楼 Avan_Lau 的回复:
[quote=引用 2 楼 qazwsxhai 的回复:] [quote=引用 1 楼 Avan_Lau 的回复:] 在StringGrid.onClick或dblClick事件中获取StringGrid.MouseCoord;其中X代表列序号,Y代表行序号。由xy判断所点击的位置。
非常感谢你的回复. 我现在遇到的问题是 fixedrows 的行 触发不了事件, 不是在找事件发生的位置的. [/quote] 找到点击的位置,就可以做你想做的事情了。说白点,就是把你想做的事情发在StringGrid.onClick或dblClick事件中[/quote] 非常感谢你的回复~ 你的意思可能我理解不到, 也可能是你未理解我的意思. fix 的行是 触发不了 click事件. 其它不是固定的行 照你的方法是可以的. 但我的操作是在fix的行里.

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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