StringGrid編集中に矢印キー(←→)でセル移動するには

解決


ボヤッキー  2004-10-08 20:02:06  No: 11332

各セルに入力できる文字数を2文字として、
ある2文字入力したとします。(3文字目は入力不可)
次に、Enterを押せば編集が終了してセル移動できるようになりますが、
このEnterを押さないで、編集中(2文字入力した後)に矢印キー
(←と→)を押したら隣のセルへ移動させたいのですが、何か
良い方法はありますでしょうか?


jok  2004-10-08 23:08:39  No: 11333

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;


ボヤッキー  2004-10-09 04:19:07  No: 11334

特に変更する部分もなく目的のものが完成しました。
動いたときに感動してしまいました。^^;
どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加