5

マウスホイールを使用してGoogleEarthに似たものをズームするコンポーネントを作成したいと思います。

onMouseWheelを使用するコンポーネントがあり、プロパティMaxZoom MinZoomとZoomがあります。フォーム内のコンポーネント領域の場所を取得しようとしているビットマップを使用して、StretchDrawよりも優れたオプションがあります。

私が理解していることは、tCustomformが見つかるまで各親を見つけ、残りのすべてのコンポーネントの上部とコンポーネントを追加して、オブジェクトの場所を取得し、オブジェクトの場所を見つける必要があることを理解しています。より良い方法はありますか

場所が決まったら、マウスがオブジェクトの上にある場合はマウスカーソルの位置からマップをズームでき、どこからズームできますか。

誰かがコードを見たことがありますか

4

2 に答える 2

3

コンポーネントを作成している場合は、コンポーネントで次の 2 つのメソッドをオーバーライドしてみてください。

function DoMouseWheelDown( Shift :TShiftState; MousePos :TPoint ) :Boolean; オーバーライド;
function DoMouseWheelUp( Shift :TShiftState; MousePos :TPoint ) :Boolean; オーバーライド;

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

于 2010-12-03T07:48:50.487 に答える
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フォームを使用して確認しました。ズームする場合は、ズームするコンテンツの種類を投稿してください。

于 2010-12-03T04:35:05.373 に答える