2010-12-03 60 views
5

Estoy queriendo escribir un componente que use la rueda del mouse para acercar algo similar a Google Earth.Evento Delphi Mouse wheel en el componente

tengo un componente utilizando onMouseWheel y tengo propiedades MaxZoom minZoom y Zoom hay una mejor opción que StretchDraw con el mapa de bits estoy tratando de obtener la ubicación de la zona de los componentes en forma

Lo que entiendo Tengo que encontrar a cada padre hasta que encuentre el tCustomform y agregue todos los componentes y la parte superior del Component que quedan para obtener la ubicación de los objetos para encontrar la ubicación de mis objetos. ¿Hay una mejor manera?

una vez que tengo la ubicación, puedo acercar un mapa desde la ubicación del cursor del mouse si el mouse está sobre mi objeto y desde dónde acercarme.

tiene cualquiera visto ningún código favor

+0

No creo que esto se pueda realizar de forma fiable en un componente, porque los mensajes de la rueda del mouse no siempre van a la ventana debajo de los mouse. A partir de mis observaciones, los mensajes de las ruedas a veces se envían solo a la ventana "formulario", a veces solo a la ventana debajo de los ratones, ¡a veces se envían a ambos! Mi solución al problema fue reenviar mensajes de la ventana de Formulario a los componentes secundarios relevantes, y en los componentes secundarios escribí algunos códigos para intentar evitar la activación duplicada. El problema es que mi solución requiere colaboración del formulario, por lo que no es "independiente". –

+0

Consulte [Cómo agregar la compatibilidad de la rueda del mouse a un componente que se baja de TGraphicControl?] (Http://stackoverflow.com/a/34463279/757830), y [¿Cómo dirigir la entrada de la rueda del mouse para controlar debajo del cursor en lugar de enfocar? ] (http://stackoverflow.com/a/34386680/757830). – NGLN

Respuesta

2

Depende de qué tipo de contenido que se va a enfocar; sólo voy a publicar aquí cómo conseguir el tiempo que la rueda se ha movido

en la declaración privada

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

en crear o cualquier otro procedimiento a partir

OnMouseWheel := formMouseWheel; // depends on you 

El FormMouseWheel se presenta de este

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; 

Lo comprobé mediante el formulario vcl (no ins componente IDE), Si desea utilizar el zoom en Estados Unidos Publica qué tipo de contenido que desea acercar

1

Si está escribiendo un componente continuación, usted debe tratar de anular estos 2 métodos en su componente:

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

cuales son métodos dinámicos protegidos de TControl. Se llaman cuando se gira la rueda del mouse.

Cuestiones relacionadas