Forum > Russian
Как Компоненту перехватить сообщения, адресованные окну?
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