喫茶XRAYトップページ

[▲前のスレッド]

[7242] Enterキーでフォーカスを移動返信 削除
2014/2/20 (木) 23:16:34 taki
Editに数字を入力後、Enterキーで次のEditへ移動するという事を
したくてコードを書いたのですが以前に使っていた方法が使えません。

環境
Delphi XE4 Starter(Update1) + Windows7(32bit)+SP1

新規作成、VCLフォームアプリケーションにて新しいプロジェクトを作成

FormにEditを2つ配置
以下にソース

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// 機能する ただしEdit1の時のみ
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = #13) then
  begin
    Perform(WM_NEXTDLGCTL,0,0);
    Key := #0;
  end;
end;

// 機能しない 以前に使っていた方法
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = #13) then
  begin
    Perform(WM_NEXTDLGCTL,0,0);
    Key := #0;
  end;
end;

end.

愛読書である「Delphi5 裏技170…」では
TForm1.FormKeyPress(Sender: TObject; var Key: Char);にコードが
書いてあり、そのフォーム全体で機能していたような記憶があるのですが、
フォーカスは移動せず、beep音が出るだけです。

でも、TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);に
同じコードを書くとEdit1ではEnterキーで移動できます。

まあ、機能するんだからEdit毎にコードを書いたらいいのですが、
なんだかな〜。

Delphi XE4 Starter(安物)では動きが違うのかなぁ。


[7243] Re:Enterキーでフォーカスを移動返信 削除
2014/2/20 (木) 23:36:43 igy
▼ takiさん
> Delphi XE4 Starter(安物)では動きが違うのかなぁ。

関係ないかもしれませんが・・
フォームのKeyPreview プロパティはTrueになってますか?


[7244] Re2:Enterキーでフォーカスを移動返信 削除
2014/2/21 (金) 09:09:01 taki
▼ igyさん
 
> 関係ないかもしれませんが・・
> フォームのKeyPreview プロパティはTrueになってますか?


関係ありました。
フォームのKeyPreviewプロパティをTrueにすると、以前に使っていた方法が
使えるようになりました。

ありがとうございます。

愛読書にもメモしておきます。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82