0

我正在使用显示为全屏的模态表单。ShowModal()我设法通过覆盖虚拟方法来做到这一点。

function TfrmComptoir.ShowModal: Integer;
begin
  FullScreen := ReadFromIni('Config.ini', Self.Name, 'FullScreen', False);
  if FullScreen then
  begin
    BorderStyle := bsNone;
    WindowState := wsMaximized;
    width := Screen.Width;
    Height := Screen.Height;
  end else
  begin
    BorderStyle := bsSizeable;
    WindowState := wsMaximized;
  end;

  Result := inherited;
end;

这是我显示表单的过程:

procedure TfrmPrincipal.btnComptoirClick(Sender: TObject);
begin
  frmComptoir := TfrmComptoir.Create(nil);
  try
    frmComptoir.ShowModal;
  finally
    FreeAndNil(frmComptoir);
  end;
end;

在我的模态表单上,我有一个按钮可以让用户在全屏和普通模式之间切换。这是问题所在。我无法ShowModal()再次调用该方法,因为出现错误:

无法制作可见的窗口模式

我能做些什么来解决这个问题?

4

1 回答 1

3

ShowModal()当表格已经显示时,您不能打电话。与Show(),ShowModal()一次只能调用一次不同,Form 必须关闭才能ShowModal()调用。

您可以做的是将属性旋转代码移动到它自己的方法中,然后在两者ShowModal()和按钮的OnClick处理程序中调用该方法,例如:

function TfrmComptoir.ShowModal: Integer;
begin
  SetFullScreen(ReadFromIni('Config.ini', Self.Name, 'FullScreen', False));
  Result := inherited;
  WriteToIni('Config.ini', Self.Name, 'FullScreen', FullScreen);
end;

procedure TfrmComptoir.Button1Click(Sender);
begin
  SetFullScreen(not FullScreen);
end;

procedure TfrmComptoir.SetFullScreen(Value: Boolean);
begin
  FullScreen := Value;
  if FullScreen then
  begin
    BorderStyle := bsNone;
    WindowState := wsMaximized;
    Width := Screen.Width;
    Height := Screen.Height;
  end
  else
  begin
    BorderStyle := bsSizeable;
    WindowState := wsMaximized;
  end;
end;
于 2019-03-05T16:39:31.173 回答