イベントの各パラメータの意味

解決


Kremlin  2007-04-13 19:13:28  No: 25769

イベントや手続きなどのときについているパラメータ(というのかな?)が、
何のことをさしているのかが分からないのです。
例えば今分からないのは
TFormDBMaker.GridMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
これのWheelDeltaやMousePosは(他のもなんですが)何を指しているのかが分かりません。
またそういったことを紹介してあるとこなんかもありましたら教えてもらいたいと思います。


大洋ホエールズ  2007-04-13 19:22:22  No: 25770

WheelDelta:ホイールがどのくらい回ったか?
MousePos:マウスカーソルがどこにあるか?
ついでに、
Handled:イベントをキャンセルするか?(Trueならキャンセルされる)

だと思います。


Kremlin  2007-04-13 19:38:34  No: 25771

大洋ホエールズさん、ありがとうございます。
ということは、
if WheelDelta < 0
    これはホイールを手前にやったとき
else
    ホイールを奥にやったとき
ということでいいのでしょうか。  それと、
「Handled:イベントをキャンセルするか?(Trueならキャンセルされる)」
イベントをキャンセルするとはどういうことでしょうか。


大洋ホエールズ  2007-04-13 19:50:14  No: 25772

と、思います。

TForm の OnShortCut の Handled みたいなもんだと思います。
ただし、イベントハンドラ内で行った処理は有効になると思います。

TFormのOnShortCutとはKeyが押されたときに発生しますが、
Hadled=True とすると、Keyが押されなかったことになります。
(子コントロールのOnKeyDownなどが発生しません。)

だから、この場合、ホイールが回らなかったことになるのかな?


Kremlin  2007-04-13 21:07:42  No: 25773

OnShortCutを使ったことがないので分かりませんが、
例えばこういうコードがあったとしたら、
[OnMouseWheelイベント]
begin
  with Sender as TDBGrid do
  begin
    if not DataSource.DataSet.Active then
      Exit;
    if WheelDelta < 0 then
      DataSource.DataSet.Next
    else
      DataSource.DataSet.Prior;
  end;

  Handled := True;
end;

どこかから持ってきたコードですけど、Handled := True;  こうすることで
何か意味があるのでしょうか。


大洋ホエールズ  2007-04-13 22:42:16  No: 25774

↑は意味ない?と思います。

これに似た機能はいくつかあって、

TStringGrid  の OnSelectCell の CanSelect

Canselect = False にすれば、
イベントハンドラ内の処理は実行されるが、セルは動かない。
『セルを動かせ』というメッセージがグリッドに送られなくなるんじゃないでしょうか。
それと同じだと思うよ。

マウスホイールのメッセージがグリッドに送られなかったことになる
んじゃないでしょうか?
スクロールバーの移動などコーディングしなくても機能するデフォルトの動作が
キャンセルされちゃったりするんじゃないですかね?


Kremlin  2007-04-13 23:56:55  No: 25775

実際にやってみましたけど、
[BD2006] DBGrid1→DataSource1→Table1
procedure TForm1.DBGrid1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  if not DataSource1.DataSet.Active then
    Exit

  if WheelDelta < 0 then
      DataSource1.DataSet.Next
  else
      DataSource1.DataSet.Prior;

  Handled := True;
end;

Hndled := True;があってもなくても変わらないみたいです。
でも同じようなものを探していると、大抵書いてあります。やっぱり何かあるような気が。
とりあえず題名の内容は解決?ということで。
大洋ホエールズさん、ありがとうございました。


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

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






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