D6 Personalで勉強中です。
マウスホイールを使って画像を拡大/縮小するようにしました。そうしたらComboboxが同時にスクロールしてしまいました。プロパティーをいろいろと変更して試しましたが解決できていません。comboboxでマウスホイールを使えなくなっても構いませんので解決法を教えてください。なお画像の拡大/縮小はFormMouseWheelでやっています。よろしくお願いします。
こんにちは.
イベントにはいろいろな引数があります.それを利用すれば可能です.
[Vcl.Controls.TMouseWheelEvent]
http://docwiki.embarcadero.com/Libraries/XE2/ja/Vcl.Controls.TMouseWheelEvent
MousePosがマウスポイントの座標値です.
この座標値がどのコントロールにあるか調査して,そのコントロールでスクロール動作を
禁止したいのであれば,Handled プロパティの値をFalseにします.
例えば次のコードは,Form1にある ScrollBox1のスクロールを禁止する例です.
イベントの引数が何故定義してあるのかを考えてみると,プログラミングの幅が広がると思いますよ.
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
SB : TScrollingWinControl;
begin
SB := Form1.ScrollBox1;
if FindVCLWindow(MousePos) = SB then Handled := False;
end;
FindVCLWindow のヘルプ記事です.
[Vcl.Controls.FindVCLWindow]
http://docwiki.embarcadero.com/Libraries/ja/Vcl.Controls.FindVCLWindow
おっと,追加です,Senderで判定してもいいです.
Mr.XRAY様 いつもありがとうございます。今まで私たちのレベルをご配慮いただき何度お助けいただいたことか・・・
今回の問題で試行錯誤しながらいろいろ試している最中ですがComboboxの場合は極めてシンプルに
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
Handled := False;
end;
と書いても一度ComboboxをChangeしてしまった以降はホイールを回す度にComboboxが再度ハイライトして反応してしまいます。まずこの基本的な問題が解決できないとこの方法によるプログラミングは先に進めないように思いますが対応策はあるのでしょうか。プロパティーの設定が正しくないとか? よろしくお願いいたします。
Handled := True;
じゃないか?
> Handled := True;
ほげ.失礼しました.
このイベントで処理する場合ですから,Trueですね.
動作が逆のコードを提示してしまいました.
いつも人に言っておきながらゴメンなさい.
Mr.XRAY様 KHE00221様 アドバイスをありがとうございました。
>スクロール動作を禁止したいのであれば,Handled プロパティの値をFalseに>します.
この文から見てMouseWheelのところにHandled:=False;を入れるとMouseWheelイベントで動くオブジェクトの動きを止めるのではないかと解釈して何度もテストしてみましたがComboBoxの場合は一度Changeしてしまった以降はホイールを回す度にComboboxが再度ハイライトして反応してしまいます。この解釈が間違っているのか、またはComboBoxは例外なのかわからないまま何度もテストを続けてきましたが理解不足で思うように動きませんでした。
邪道なのかもしれませんがComboBoxの近くにマウスを移動するとCombobox.Enabled:=trueにし、遠くなるとFalseにして目的に近いものができました。 勉強不足で理解ができず折角のアドバイスでしたが申し訳ありませんでした。
ツイート | ![]() |