172 / 62 / 11
Регистрация: 22.12.2015
Сообщений: 2,461
|
||||||
1 | ||||||
Как управлять разрешением перемещать форму из программы?24.04.2018, 08:32. Просмотров 923. Ответов 6
Метки нет Все метки)
(
Всем здравствуйте.
В режиме разработки установив Form1->Align->alCustom можно запретить перемещение формы за заголовок. Стоит задача: сделать это из программного кода на этапе выполнения приложения. Клик по Command1 - запрещаем перемещать форму. Клик по Command2 - разрешаем перемещать форму. Вопрос поднимался здесь Запретить перемещать форму но уж очень давно, вряд ли кто-то отзовётся продолжить обсуждение. Заинтересовал случай с использованием TApplicationEvents как пример перехвата сообщений Windows:
Что я не так делаю?
0
|
|
24.04.2018, 08:32 | |
Как управлять/перемещать кнопкой на форме с клавиатуры? Как перемещать форму BorderStyle=None
|
|
60 / 55 / 34
Регистрация: 26.07.2015
Сообщений: 119
|
||||||
24.04.2018, 08:45 | 2 | |||||
Так почему бы не пойти по пути наименьшего сопротивления и воспользоваться свойством Align?
1
|
172 / 62 / 11
Регистрация: 22.12.2015
Сообщений: 2,461
|
|
24.04.2018, 09:05 [ТС] | 3 |
Si14, Всё работает, спасибо. Но всё-таки что не так в приведенном выше коде?
0
|
60 / 55 / 34
Регистрация: 26.07.2015
Сообщений: 119
|
|||||||||||
24.04.2018, 11:50 | 4 | ||||||||||
![]() Решение
Я попробовал сделать через ApplicationEvents1 и сообщение WM_MOVING вообще не приход
Кликните здесь для просмотра всего текста
А если бы сообщение приходило, то правильный код был бы
1
|
Супер-модератор
![]() ![]() |
||||||
24.04.2018, 11:54 | 5 | |||||
Во-первых - название параметра, во вторых - логика: при получении сообщения WM_MOVING через lparam передается указатель на структуру, хранящую позицию окна, то есть, делать нужно вот что:
1
|
Практикантроп
4643 / 2572 / 484
Регистрация: 23.09.2011
Сообщений: 5,507
|
||||||
24.04.2018, 14:41 | 6 | |||||
...кстати, о логике. У меня сегодня с этим проблемы.
Я порешал проблему "заморозки" формы на экране аналогичным способом (через ApplicationMessage). НО! пришлось корректировать. Числа подбирались и они примерно соответствуют двойной ширине бордюра (left) и двойной ширине шапки (top). Не могу понять - почему. Почему программа сохраняет "неправильные" величины??
Впрочем, как оказалось, в режиме Form-Position Designed всё нормально; коррекция не требуется. А для DesktopCenter (другие не проверял) без коррекции отскакивает. Добавлено через 14 минут Я, кажется, догадался. В момент Form-Show, когда окно еще в той области, где было в процессе компиляции программы, эти координаты и запоминаются. А уже по CanResize, Resize окно помещается туда, куда задано (Form->Position). А "двойная ширина" как мне казалось - это совпадение.
1
|
172 / 62 / 11
Регистрация: 22.12.2015
Сообщений: 2,461
|
|
24.04.2018, 15:00 [ТС] | 7 |
0
|
24.04.2018, 15:00 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |