Forum > Russian

Как Компоненту перехватить сообщения, адресованные окну?

(1/3) > >>

Alexandr R:
 Здравствуйте.
 Есть окно (TForm), на нём, к примеру, расположен TEdit и есть ещё ErrMsg:THintWindow. ErrMSG ругается на Пользователя при вводе некорректных данных - Пользователь психует и перемещает окно (TForm) по экрану монитора. ErrMSG остаётся на месте, но должен последовать за TEdit.
 Как перехватиь сообщение WM_Move (LM_MOVE) компоненту TEdit. Использовать события TForm или послать сообщение из TForm - не вариант, использовать таймер для опроса местоположения TEdit на  мониторе - крайний случай. Отцы программирования есть мысли? Всем заранее Спасибо. 

Otto:
Hello Alexandr R.
I'm not sure I understand your problem.
If I understand correctly you could use a custom form instead of a Message-Box to report the error (surely there could be better solutions).
Try checked these links.

https://wiki.freepascal.org/Form_Tutorial#Difference_between_Show_and_ShowModal
https://www.freepascal.org/~michael/articles/customform/customform.pdf

If you could post a small project someone could respond more accurately to you.

skalogryz:

--- Quote from: Alexandr R on March 03, 2020, 10:59:14 am ---ак перехватиь сообщение WM_Move (LM_MOVE) компоненту TEdit.
--- End quote ---
не надо перехватывать, надо оповещать.
При создании ErrMsg, он должен искать родительское окно (TForm) (или TForm на котором лежит TEdit)
Регистрироваться у него на оповщение о смещении.

TForm при своём передвижении (о котором TForm знает) будет оповещать список зарегестрированным компонентов, о том, что произошёл сдвиг.

Alexandr R:
Re Скалогрызу:
"TForm при своём передвижении (о котором TForm знает) будет оповещать список зарегестрированным компонентов, о том, что произошёл сдвиг."
 Я лет 30 не занимался программированием (мне 58), нужда заставила. Но как это сделать? Пример какой-нибудь посмотреть. Пытаюсь создать компонент TDegreeEdit в связке с THintWindows. По отдельности всё работает (орфографию исправить шероховатости убрать).
Re Отто, Скалогрызу:
ССылка  присуствует ( https://yadi.sk/d/tSgE1a9vRbc-Lg  ), создать окно с сообщением не проблема но хотелось бы использовать Hint.

skalogryz:
а в чём проблема с текущим подходом? вполне себе нормально работает.
я бы только SetBounds переписал бы следующим образом:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.SetBounds(ALeft, ATop, AWidth, AHeight: integer);begin inherited; if Form1.IsVisible then  begin   if MsgError <> '' then     SetRectHint(MsgError)       //и включаем если подсказка существует}   else if (FMyHintWindow<>nil) then     FMyHintWindow.Hide;  end;end; и все места, где FMyHintWindow.ReleaseHandle, заменить на FMyHintWindow.Hide;

да, и вместо SetBounds лучше исползовать событие фотрмы OnChangeBounds.

Navigation

[0] Message Index

[#] Next page

Go to full version