我的主窗体使用WindowState作为wsMaximized和Position作为poDefault启动。当我点击最大化/最小化切换按钮时,我希望将缩小的表单放在桌面中心。所以在OnResize中我放置了以下内容:
if WindowState = wsMaximized then
Position := poDefault
else if WindowState = wsNormal then
Position := poScreenCenter;
当我的程序启动时,我得到以下异常:'无法在OnShow或OnHide中更改可见。
我应该怎么做才能使我的表格最大化或正常并居中?
答案 0 :(得分:4)
FormResize方法在您的表单第一次显示时发生。您必须检查表单的当前状态,并且在第一次创建或显示时不要尝试调整其大小
procedure TForm1.FormResize(Sender: TObject);
begin
if not(fsVisible in Self.FormState) then
Exit;
if WindowState = wsMaximized then
Position := poDefault
else
if WindowState = wsNormal then
Position := poScreenCenter;
end;
在http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TFormState
了解详情下表列出了表单状态中可包含的值:
价值含义
fsCreating - 表单的构造函数是当前的 执行。
fsVisible - 窗体的窗口可见。这个状态是 用于更新Visible属性。
fsShowing - 表单的WindowState属性正在改变。此状态用于防止WindowState更改干扰正在进行的转换。
fsModal - 表单创建为模式窗口。
fsActivated - 表单已获得焦点或应用程序变为活动状态但尚未调用Activate方法来生成OnActivate事件。