2010-12-03 21 views
5

私はマウスホイールを使用してズームするために Google Earthに類似したコンポーネントを書きたいと思っています。コンポーネント内のDelphiマウスホイールイベント

StretchDrawは、ビットマップと私は理解してどのような形

に部品領域の位置を取得しようとしていることをより良いオプションがあり、私はonMouseWheelを使用してコンポーネントを持っていると私はプロパティMaxZoom MinZoomとズームを持っていますtCustomformが見つかるまで各親を見つけて、オブジェクトの位置を見つけるためにオブジェクトの位置を取得するためにすべてのコンポーネントの上部とコンポーネントを追加します。もっと良い方法があります

私はその場所をいったん持っています。マウスが私のオブジェクトの上にあってズームする場所なら、マウスカーソルの位置からズームすることができます。

は、それはあなたがズームしようとしているコンテンツの種類に依存するコード下さい

+0

マウスホイールメッセージが常にマウスの下のウィンドウに移動するとは限らないため、これはコンポーネントで確実に実行できるとは思いません。私の観察では、ホイールメッセージは「フォーム」ウィンドウにのみ送信されることがあり、マウスの下のウィンドウにのみ表示されることもあります。この問題に対する私の回避策は、フォームウィンドウから関連する子コンポーネントにメッセージを転送することでした。子コンポーネントでは、重複した起動を避けるためにいくつかのコードを書きました。問題は、私の解決策にはフォームからのコラボレーションが必要なため、「自己完結」ではないということです。 –

+0

[TGraphicControlを継承したコンポーネントにマウスホイールを追加する方法](http://stackoverflow.com/a/34463279/757830)、[フォーカスの代わりにカーソルの下でマウスホイールの入力を制御する方法は? ](http://stackoverflow.com/a/34386680/757830)。 – NGLN

答えて

2

を見いずれかを持っています。 私はホイールが上のプライベート宣言

private 
{ Private declarations } 
procedure FormMouseWheel(Sender: TObject; Shift: TShiftState; 
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); 

を移動しているどのくらいの時間を取得する方法をここに掲載します作成したり、

OnMouseWheel := formMouseWheel; // depends on you 

FormMouseWheelこの

のように来て、他の起動手順
procedure FormMouseWheel(Sender: TObject; Shift: TShiftState; 
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); 
begin 
// your code here 
// WheelDelta returns you - or + values (in my computer -120 and + 120 ; 
// It depends on control panel mouse wheel settings) 

// If it is a font make the font size bigger or 
// if it is a image 
// strech := true; 
// increase width and height of the Timage 
//and put them inside a scrollbox 
// 
end; 

私はそれをvclフォームでチェックしました。 IDE成分)、 あなたがコンポーネントを書いている場合は、

1

を拡大したいコンテンツの種類達を投稿ズームしたいなら、あなたはあなたのコンポーネントでこれらの2つの方法オーバーライド試してみてください:

 
function DoMouseWheelDown(Shift :TShiftState; MousePos :TPoint) :Boolean; override; 
function DoMouseWheelUp(Shift :TShiftState; MousePos :TPoint) :Boolean; override; 

TControlの保護された動的メソッドです。マウスホイールを回すたびに呼び出されます。

関連する問題