che*_*sen 19 forms delphi resize
有没有办法阻止用户调整表单大小?
目前我正在使用:
当表格大小改变....
MainForm.Height := 761;
MainForm.Width := 777;
Run Code Online (Sandbox Code Playgroud)
但这看起来很可怕,因为当用户试图改变表单大小时它会闪烁.
Pau*_*sik 39
修复大小很简单,您有两种选择:
德尔福表格BorderStyle有财产和BorderIcons财产.如果设置BorderStyle到bsDialog,并BorderIcons以biSystemMenu唯一的,用户不能调整的形式.
您可以为Constraints属性指定值.如果您将相同的数字写入MinWidth和MaxWidth,则宽度将固定.
防止移动更加棘手.我现在只能提出这些解决方案:
设置BorderStyle为bsNone.如果需要,您需要自己绘制表单标题.
写一个消息处理程序WM_NCHITTEST,先调用inherited,然后检查Message.Resultfor HTCAPTION.如果是HTCAPTION,请将其设置为HTCLIENT.这样,你愚弄Windows认为用户没有点击标题,所以他将无法拖动.如果用户仍然可以移动打开系统菜单的窗口,并选择移动,请尝试.如果是这样,您还必须隐藏系统菜单(BorderIcons).
答案在这里找到.
如果您希望表单根本不调整大小,那么将表单边框样式设置bsSingle为正确的操作,因为当在表单边框上移动时,鼠标光标不会更改为其中一个大小调整游标,因此很明显用户无法调整此表单的大小.
如果要为表单设置最小和/或最大大小,则bsSizeable表示正确的边框样式,您可以使用Constraints表单指定限制.然而,存在这样的问题:该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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36906 次 |
| 最近记录: |