OnExitイベントの条件追加


ちょっちゅね  2008-10-22 23:24:45  No: 32335  IP: 192.*.*.*

Edit1のOnExitイベントについてです。
Edit1からカーソルが抜けてなおかつButton1が押されなかった場合
という処理はどう書けばいいのでしょうか?

編集 削除
igy  2008-10-23 00:19:29  No: 32336  IP: 192.*.*.*

ボタンをクリックしたかどうかを記憶するフラグを用意し、

  TForm1 = class(TForm)
  private
    { Private 宣言 }
    flg: Boolean;  // <==これ
  public
    { Public 宣言 }
  end;

フォームのOnCreateイベントで、
     flg := false;
のように初期化し、

ボタンのOnClickイベントで、
     flg := true;
を追加しておき、

そのフラグの値で、ボタンをクリックしたかどうか判断するのは
どうですか?

編集 削除
igy  2008-10-23 00:38:44  No: 32337  IP: 192.*.*.*

訂正です。

先ほど挙げた方法だと、
ボタンをクリックしてEdit1のOnExitイベントが発生した場合

ボタンのOnClickイベントで
     flg := true;
になる前に、Edit1のOnExitイベントが発生してしまうので、

>そのフラグの値で、ボタンをクリックしたかどうか判断するのは
>どうですか?

というのは、無理みたいですね。

編集 削除
ofZ  2008-10-23 12:06:47  No: 32338  IP: 192.*.*.*

こういうことかな?
フォームにEdit2個とボタンを置いて・・・

  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    ActiveControl,
    LastActiveControl  :TWinControl;
    procedure OnChangeActiveControl(aSender: TObject);
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.OnActiveControlChange := OnChangeActiveControl;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if LastActiveControl <> Edit1 then begin
    Button1.Caption := 'OK';
  end
  else begin
    Button1.Caption := 'False!!';
  end;
end;

procedure TForm1.OnChangeActiveControl(aSender: TObject);
begin
  LastActiveControl := ActiveControl;
  ActiveControl := Screen.ActiveControl;
end;

編集 削除