There will be success - I will unsubscribe to You.
"я тебе отпишусь" переводится как "i will let you know", ну или "will keep you posted!"
Поначитался разных книг ну и вот такое решение в голову пришло.
ну более менее решение. Там только тонкость в том, когда убирать WindowProc. Если таких DegreeEdit будет несколько, то узнать в каком порядке они ссылаются на FOldProc может быть сложно.
Задачу можно решить немного иным способом.
На момент
первого показа THintWindow выполнять следующее.
1. от DegreeEdit нужно проходить по йерархии Parent пока не найдётся TCustomForm
var
c : TControl;
c:=DegreeEdit.parent;
while Assigned(c) and not (c is TCustomForm) do c := c.Parent;
2. если c нашёлся. (c<>nil), до добавлять к нему обработчик, по изменению положения
c.AddHandlerOnChangeBounds( @hintwindow.HostWindowChangeBounds );
3. а в HostWindowChangeBounds соответственно менять координаты. Параметр "Sеnder" будет является тем самым окном
procedure TDegreeEditHintWindow.HostWindowChangeBounds(Sender: TObject);
var
Rect: TRect;
...
begin
Point:= ClientToScreen(TPoint.Create(EditDmsToDeg.Left, EditDmsToDeg.Top));
... вся та магия из примера...
Rect.Left := Point.x;
Rect.Top := Point.y-HeightStrInPixsel;
Rect.Right := Point.x+LenStrInPixel;
Rect.Bottom:= Point.y;;
Bounds := REct;
end;
4. ВАЖНО! при закрытии/уничтожении THintWindow обязательно нужно отписываться о нотификации сообщений
c.RemoveHandlerOnChangeBounds( @hintwindow.HostWindowChangeBounds );