求教StringGrid光标问题(50分)

  • 主题发起人 主题发起人 popogens
  • 开始时间 开始时间
P

popogens

Unregistered / Unconfirmed
GUEST, unregistred user!
无用用键、鼠,进入StringGrid的任何一格时,它总是自动选中该格全部文字,我要让它点进,或用方向键移入该格时,光标设在文字尾部,该怎么做?谢谢。
 
在进入编辑的时候,向当前的Cell模拟输入向右的光标键。
如:在OnGetEditText事件中,加入:
keybd_event(VK_RIGHT,0,0,0);
keybd_event(VK_RIGHT,0,KEYEVENTF_KEYUP,0);
注意,进入编辑,用 回车 键,而不要用空格键。
(暂时没有想到 空格 键如何处理)
 
谢谢,我是在一直处理编辑状态下的。
这个办法可以让光标设于最后一列的最右处,但造成了我无法编辑左边列的内容了,有办法解决吗?谢谢。
 
刚刚测试
先发一个Home键,再发一个End键
试试看。
 
有问题,==
 
看看这样解决怎么样:
当StringGrid变更行、列时,再执行那个发Home及End的动作。
可以考虑在OnDrawCell的时候做这个检查的动作。
我刚刚测试过,应该是可以实现的,还是贴一下代码吧:
var
OldCol, OldRow: Integer;
procedure TForm1.StringGrid1DrawCell(Sender: TObject;
ACol, ARow: Integer;
Rect: TRect;
State: TGridDrawState);
begin
if ((OldCol <> StringGrid1.Col) or (OldRow <> StringGrid1.Row))
and (StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] <> '') then
begin
keybd_event(VK_HOME,0,0,0);
keybd_event(VK_HOME,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_END,0,0,0);
keybd_event(VK_END,0,KEYEVENTF_KEYUP,0);
OldCol := StringGrid1.Col;
OldRow := StringGrid1.Row;
end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
OldCol := StringGrid1.Col;
OldRow := StringGrid1.Row;
end;
 
非常感谢!
 
朋友,再帮个忙好吗?我想在窗体建完成后,直接将光标设在cell[2, 1]的文字最末好吗?谢谢。
 
后退
顶部