Cita:
Empezado por agustincs
la opcion hint no me sirve, ya que tengo avilitado un cuadrado especial para la ayuda y por tanto quiero que aparezca ahi.
|
No sé a qué te refieres exactamente con un "cuadrado especial" pero pienso que puedes lograr lo que deseas perfectamente con la propiedad Hint en lugar de complicarte la vida con OnMouseMove. Lo único que tienes que saber es cómo usar dicha propiedad.
La VCL de Delphi lleva un registro de por dónde va pasando el cursor del ratón y cada vez que pasa por un control genera el evento OnHint del objeto Application. En este evento tienes disponible la propiedad Application.Hint que contiene el Hint del control sobre el que estás. Si estás pasando sobre la imágen entonces Application.Hint contendrá el hint de la imagen. Al salir de la imagen, si el control al que llegas no tiene hint entonces Application.Hint estará vacío.
De esta forma, suponiendo que por "cuadrado especial" entiendes un label podrías poner el evento OnHint así:
Código Delphi
[-]
Label1.Caption := Application.Hint;
El problema aquí será si usas la propiedad Hint para otros controles además de las imágenes pues entonces tu "cuadrado especial" mostrará también los hints de dichos controles. Esto puede ser lo que quieres pero en caso contrario puedes determinar en el evento OnHint si el control sobre el que estás es o no una imagen:
Código Delphi
[-]
var
Control: TControl;
begin
Control := ControlAtPos(ScreenToClient(Mouse.CursorPos), true);
if Control is TImage then
Label1.Caption := Application.Hint
else
Label1.Caption := '';
end;
Lo que resta es saber cómo asignas este evento OnHint. En las últimas versiones de Delphi puedes usar el objeto TApplicationEvents (en la paleta Aditional) y asignar ahí el evento OnHint. En versiones anteriores tendrás que crear tú mismo un método de tu formulario:
Código Delphi
[-]
procedure AppHint(Sender: TObject);
y asignarlo manualmente en el evento OnCreate:
Código Delphi
[-]
Application.OnHint := AppHint;
// Saludos