16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"インテリマウスに対応する"
この発言に対し以下のコメントが寄せられています
#00225 折井 哲 さん RE:インテリマウスに対応する
インテリマウスのホイール回転に対応させようとしてMSホームページに
行ったのですがMSDNに入らなきゃならんみたいだったので自力で何とか調べて
対応させました。
【分かった事】
・基本は単純なメッセージ処理の追加でオッケー。
・ホイール回転メッセージはMSWHEEL_ROLLMSGの文字列登録。
・wParam 120で上回転、-120で下回転。
・lParamは何だろ?使ってないので分からんがTPointポインタかな?
・クリックとかは中央ボタンとして認識。
・戻り値は何でもよいみたい。
MSDNに入っていて「いや、それは違う」というのがありましたらフォロー
お願いします。結果オーライでやってますんで。とりあえず下記の通りでも
動作には支障ありません。
【実装の考え方】
MSWHEEL_ROLLMSGは定数では無いのでセッション毎に違います。なので
なのでTFormのprivate関数としてmessage定義は出来ません。起動時に
RegisterWindowMessage('MSWHEEL_ROLLMSG')で取得し、TFormのWndProc
をオーバーライドする必要があります。
【サンプルソース】
Form1にStringGridを乗せてRowCountを 100くらいにしておいて下さい。
FixedRowは1です。
----------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
private
{ Private 宣言 }
procedure WndProc(var Msg: TMessage);override;//←これを追加
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var MSWHEEL_ROLLMSG: UINT;//←これを追加
{このプロシージャは全部手書き}
procedure TForm1.WndProc(var Msg: TMessage);
begin
if Msg.Msg= MSWHEEL_ROLLMSG then
begin
Msg.Result:= -1;
with StringGrid1 do
begin
if Msg.wParam= 120 then
begin
if TopRow> 4
then TopRow:= TopRow-4
else TopRow:= 1;
Msg.Result:= 1;
end else
if Msg.wParam= -120 then
begin
if TopRow< RowCount-4
then TopRow:= TopRow+4
else TopRow:= RowCount-1;
Msg.Result:= 1;
end;
end;
end else
inherited WndProc(Msg);
end;
initialization//←これとこれも手書きで追加。詳しくはDelphiのヘルプで
// ↓ 「initialization」を調べて下さい。
MSWHEEL_ROLLMSG:= RegisterWindowMessage('MSWHEEL_ROLLMSG');
end.
----------------------------------------------------------------------
折井 哲
VZX00324
Original document by 折井 哲 氏 ID:(VZX00324)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|