Там какой-либо путь состоит в том, чтобы остановить пользователя, изменяющего размер формы?
В настоящее время я использую:
Когда измененный размер формы....
MainForm.Height := 761;
MainForm.Width := 777;
Но это выглядит ужасным, поскольку это мерцает, поскольку пользователь пытается изменить размер формы.
Установить размер легко, у вас есть два варианта:
Формы Delphi имеют свойство BorderStyle
и свойство BorderIcons
. Если вы установите BorderStyle
на bsDialog
, а BorderIcons
только на biSystemMenu
], пользователь не сможет изменить размер формы.
Вы можете указать значение для свойства Ограничения
. Если вы напишете одно и то же число в MinWidth
и MaxWidth
, ширина будет фиксированной.
Предотвратить ход сложнее. Сейчас я могу предложить только следующие решения:
Установить BorderStyle
на bsNone
. При необходимости вам нужно будет нарисовать подпись формы самостоятельно.
Напишите обработчик сообщений в WM_NCHITTEST
, вызовите сначала унаследованный, затем проверьте Message.Result
для HTCAPTION
. Если это HTCAPTION
, установите вместо него HTCLIENT
. Таким образом, вы обманываете Windows, думая, что пользователь не нажимал на заголовок, поэтому он не сможет перетащить. Пожалуйста, попробуйте, может ли пользователь по-прежнему перемещать окно, открывая системное меню и выбирая «Переместить». В таком случае вам также необходимо скрыть системное меню ( BorderIcons
).
Ответ найден здесь .
Если вы хотите, чтобы ваша форма вообще не изменяла размер, тогда установка стиля границы формы на bsSingle
- правильное решение, так как в этом случае курсор мыши не изменится на один из курсоров изменения размера при перемещении над границами формы, поэтому пользователю очевидно, что размер этой формы нельзя изменить.
Если вы хотите установить минимальный и / или максимальный размер для формы, тогда bsSizeable
- правильный стиль границы, и вы можете использовать Ограничения
формы, чтобы указать пределы. Однако существует проблема, заключающаяся в том, что свойство Constraints
не препятствует изменению размера формы, а только заставляет размеры корректироваться постфактум, чтобы ограничения не нарушались. Это будет иметь негативный побочный эффект: изменение размера формы с левой или верхней границей приведет к ее перемещению. Чтобы этого не произошло, вам нужно в первую очередь предотвратить изменение размера. Windows отправляет сообщение WM_GETMINMAXINFO
для получения минимального и максимального размеров отслеживания для окна верхнего уровня. Обработка этого и возврат правильных ограничений устраняет проблему с подвижной формой:
type
TForm1 = class(TForm)
private
procedure WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo);
message WM_GETMINMAXINFO;
end;
// ...
procedure TForm1.WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo);
begin
inherited;
with AMsg.MinMaxInfo^ do begin
ptMinTrackSize := Point(Constraints.MinWidth, Constraints.MinHeight);
ptMaxTrackSize := Point(Constraints.MaxWidth, Constraints.MaxHeight);
end;
end;