我创建了一个模态形式,用户可以在其中设置(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 Rio 3.中。只有一个真正的解决方案。而不是使用模式形式,而是创建一个不会失去焦点,允许用户单击控件并使用“保存”按钮将更新主应用程序注册表的迷你应用程序。然后在主应用程序中使用某种方案来恢复执行,读取注册表,并在需要时读取TrySetStyle。