各セルに入力できる文字数を2文字として、
ある2文字入力したとします。(3文字目は入力不可)
次に、Enterを押せば編集が終了してセル移動できるようになりますが、
このEnterを押さないで、編集中(2文字入力した後)に矢印キー
(←と→)を押したら隣のセルへ移動させたいのですが、何か
良い方法はありますでしょうか?
2文字って全角半角がわかりませんのでここでは2バイト以上で移動できるように
しました。適宜変更してください。
{ Private 宣言 }
public
ctrl:TControl;
procedure InplaceEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.InplaceEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Length(TEdit(ctrl).Text) >= 2 then
case Key of
VK_LEFT:begin
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_LEFT,0,0,0);
keybd_event(VK_LEFT,0,KEYEVENTF_KEYUP,0);
end;
VK_RIGHT:begin
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_RIGHT,0,0,0);
keybd_event(VK_RIGHT,0,KEYEVENTF_KEYUP,0);
end;
end;
end;
procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol,
ARow: Integer; var Value: String);
begin
ctrl := StringGrid1.Controls[0];
if ctrl is TInplaceEdit then
TEdit(ctrl).OnKeyDown := InplaceEditKeyDown;
end;
特に変更する部分もなく目的のものが完成しました。
動いたときに感動してしまいました。^^;
どうもありがとうございました。
ツイート | ![]() |