イベントや手続きなどのときについているパラメータ(というのかな?)が、
何のことをさしているのかが分からないのです。
例えば今分からないのは
TFormDBMaker.GridMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
これのWheelDeltaやMousePosは(他のもなんですが)何を指しているのかが分かりません。
またそういったことを紹介してあるとこなんかもありましたら教えてもらいたいと思います。
WheelDelta:ホイールがどのくらい回ったか?
MousePos:マウスカーソルがどこにあるか?
ついでに、
Handled:イベントをキャンセルするか?(Trueならキャンセルされる)
だと思います。
大洋ホエールズさん、ありがとうございます。
ということは、
if WheelDelta < 0
これはホイールを手前にやったとき
else
ホイールを奥にやったとき
ということでいいのでしょうか。 それと、
「Handled:イベントをキャンセルするか?(Trueならキャンセルされる)」
イベントをキャンセルするとはどういうことでしょうか。
と、思います。
TForm の OnShortCut の Handled みたいなもんだと思います。
ただし、イベントハンドラ内で行った処理は有効になると思います。
TFormのOnShortCutとはKeyが押されたときに発生しますが、
Hadled=True とすると、Keyが押されなかったことになります。
(子コントロールのOnKeyDownなどが発生しません。)
だから、この場合、ホイールが回らなかったことになるのかな?
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; こうすることで
何か意味があるのでしょうか。
↑は意味ない?と思います。
これに似た機能はいくつかあって、
TStringGrid の OnSelectCell の CanSelect
Canselect = False にすれば、
イベントハンドラ内の処理は実行されるが、セルは動かない。
『セルを動かせ』というメッセージがグリッドに送られなくなるんじゃないでしょうか。
それと同じだと思うよ。
マウスホイールのメッセージがグリッドに送られなかったことになる
んじゃないでしょうか?
スクロールバーの移動などコーディングしなくても機能するデフォルトの動作が
キャンセルされちゃったりするんじゃないですかね?
実際にやってみましたけど、
[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;があってもなくても変わらないみたいです。
でも同じようなものを探していると、大抵書いてあります。やっぱり何かあるような気が。
とりあえず題名の内容は解決?ということで。
大洋ホエールズさん、ありがとうございました。
ツイート | ![]() |