更改应用样式后的表单损失模态属性

问题描述 投票:1回答:1

我创建了一个模态形式,用户可以在其中设置(vcf)样式。

我使用此代码:

procedure TfrmMain.btnChangeSkinClick(Sender: TObject);
begin
  frmSkins:= TfrmSkins.Create(NIL);
  frmSkins.ShowModal;
end;

procedure TfrmSkins.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action:= caFree;
end;

然后在frmSkins中,我在列表框中列出所有可用的vcf文件。当用户单击一种样式时,我将这样加载该样式:

procedure TfrmSkins.lBoxClick(Sender: TObject);
VAR  StyleInfo : TStyleInfo;
begin
    ...
    sSkinFile:= lBox.Items[lBox.ItemIndex];
    if TStyleManager.IsValidStyle(sSkinFile, StyleInfo) then
      begin
       TStyleManager.LoadFromFile(sSkinFile);
       TStyleManager.SetStyle(StyleInfo.Name);
      end;

    // this will 'fix' half of the problem, bringing the form up. But it won't make the form modal again.
    Application.ProcessMessages;
    BringToFront;
end;

调用SetStyle之后,frmSkins被发送回(以主要形式)并永久失去模式属性!

我在做什么错?

delphi delphi-xe7
1个回答
0
投票

此问题仍然存在于Delphi Rio 3.中。只有一个真正的解决方案。而不是使用模式形式,而是创建一个不会失去焦点,允许用户单击控件并使用“保存”按钮将更新主应用程序注册表的迷你应用程序。然后在主应用程序中使用某种方案来恢复执行,读取注册表,并在需要时读取TrySetStyle。

© www.soinside.com 2019 - 2024. All rights reserved.