2010-12-03 5 views
5

Я хочу написать компонент, который использует колесико мыши для увеличения что-то похожее на Google earth.Событие колеса мыши Delphi в компоненте

У меня есть компонент, используя OnMouseWheel и у меня есть свойства MaxZoom MinZoom и масштабирование есть лучший вариант, который StretchDraw с растровым Я пытаюсь получить расположение области компонентов в виде

Что я понимаю Я должен найти каждого родителя, пока не найду tCustomform и не добавлю все компоненты Component и компоненты, оставшиеся, чтобы получить местоположение объектов, чтобы найти местоположение моих объектов. есть лучший способ

Как только у меня есть местоположение, я могу увеличить карту с местоположения курсора мыши, если мышь находится над моим объектом и где увеличить масштаб.

имеет какой-либо один видел какой-либо код, пожалуйста,

+0

Я не думаю, что это можно надежно выполнить в компоненте, потому что сообщения колеса мыши не всегда идут в окно под мышами. Из моих наблюдений сообщения колесика иногда отправляются только в окно «формы», иногда только в окно под мышами, иногда они отправляются к обоим! Мое обходное решение проблемы заключалось в том, чтобы пересылать сообщения из окна формы в соответствующие дочерние компоненты, а в дочерних компонентах я написал код, чтобы избежать дублирования активации. Проблема в том, что мое решение требует сотрудничества от формы, поэтому оно не «самосохраняется». – 2010-12-07 10:01:02

ответ

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 (не входит в комплект) компонент язь), Если Вы хотите, чтобы увеличить возможность отправлять нам какой контент вы хотите, чтобы увеличить

1

Если вы пишете компонент, то вы должны попытаться переопределить эти 2 метода в компоненте:

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

который являются защищенными динамическими методами TControl. Они вызываются всякий раз, когда колесико мыши вращается.