フレームを使用してプログラムを作成しているのですが、
OnMouseWheelのイベントで画像の拡大・縮小をさせようとしているのですが、
このイベントが発生しませんでした。
テストとして下記の作業をしてみましたがダメでした。
1.Frameを1つ作成し、FrameのOnMouseWheelイベントでShowMessageでメッセージボックスを表示
2.1で作成したFrameをFormに貼り付け
3.Formに貼り付けたFrameのOnMouseWheelイベントでShowMessageでメッセージボックスを表示
4.Form自体のOnMouseWheelイベントでShowMessageでメッセージボックスを表示
1と3のメッセージボックスは表示されませんでしたが、4のメッセージボックスは表示されました。
ちなみに、OnMouseWheelUp、OnMouseWheelDownも発生しませんでした。
開発環境はDelphi XE4です。
OnMouseWheelイベントを発生させる方法を教えてください。
よろしくお願いします。
TApplicationEventsを使用した例です
TApplicationEventsのイベントOnMessageをいじくってください
エリア判定はしていません
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
StdCtrls, Unit2, ExtCtrls, AppEvnts;
type
TForm1 = class(TForm)
Frame1: TFrame1;
ApplicationEvents1: TApplicationEvents;
procedure FormCreate(Sender: TObject);
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
private
{ Private 宣言 }
protected
public
{ Public 宣言 }
procedure DecZoom;//縮小
procedure IncZoom;//拡大
end;
var
Form1: TForm1;
implementation
uses
Dialogs;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Frame1.Image1.Canvas.TextOut(1,1,'拡大');
end;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
//Re: HRESULT;
fwKeys: LOWORD;
zDelta: ShortInt;
begin
if Msg.message = WM_MOUSEWHEEL then
begin
//if IsChild(Frame1.Image1.Canvas.Handle, GetFocus) then
begin
fwKeys := LOWORD(Msg.wParam);
//if fwKeys = 8 then //Ctrlキー
begin
zDelta := HIWORD(Msg.wParam);
if zDelta > 0 then
begin
//拡大
IncZoom;
end
else
begin
//縮小
DecZoom;
end;
end;
Handled := true;
end;
end;
end;
procedure TForm1.DecZoom;//縮小
begin
if Frame1.Image1.Canvas.Font.Height < -1 then
begin
Frame1.Image1.Canvas.Font.Height := Frame1.Image1.Canvas.Font.Height + 1;
Frame1.Image1.Canvas.TextOut(1, 1, '拡大');
end;
end;
procedure TForm1.IncZoom;//拡大
begin
if Frame1.Image1.Canvas.Font.Height > -96 then
begin
Frame1.Image1.Canvas.Font.Height := Frame1.Image1.Canvas.Font.Height - 1;
Frame1.Image1.Canvas.TextOut(1, 1, '拡大');
end;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TFrame1 = class(TFrame)
Image1: TImage;
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
implementation
{$R *.dfm}
end.
>OnMouseWheelイベントを発生させる方法を教えてください。
フォームに配置したフレームで OnMouseWheelイベントが検出されればいいのでしょうか.
でしたら,
(1) 以下の手順で新規にプロジェクトを作成するものとします.
http://mrxray.on.coocan.jp/Delphi/plSamples/030_CaptionBar_Button.htm#01
(2) フレームを配置した Form1 の OnMouseWheelイベントを作成する
(3) イベントのコードを次のようにする
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
aPos : TPoint;
begin
aPos := Frame11.ScreenToClient(MousePos);
if PtInRect(Frame11.ClientRect, aPos) then begin
Memo1.Lines.Add('AAAA')
end else begin
Handled := True;
end;
end;
というのはどうでしょうか.
Memo1 は確認用に配置した TMemo コンポーネントです.
マッコ様、Mr.XRAY様返信遅くなり、すみません。
Mr.XRAY様の方法で作業をしました。
これで、目的は達成できました。
ありがとうございます。
ホイールのイベントは色々大変なようですね。
ツイート | ![]() |