Delphi:写入注册表在 FormDestroy 上不起作用

标签 delphi forms registry

procedure TMainForm.FormDestroy(Sender: TObject);
var
  Registry: TRegistry;
begin
  Registry := TRegistry.Create;
  try
    Registry.RootKey := HKEY_CURRENT_USER;
    if Registry.OpenKey('...', True) then
    begin
      Registry.WriteInteger('MainLeft', Self.Left);
      Registry.CloseKey;
    end;
  finally
    Registry.Free;
  end;
end;

类似的代码适用于FormCreate,但在应用程序关闭时无效(即没有任何内容保存到注册表中)。我错过了什么?

“...”代表注册表项名称。由于它适用于 FormCreate,所以我认为这不是问题。

如果我将MainForm.Destroy添加到程序代码中:

begin
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
  MainForm.Destroy;
end.

没有任何改变。如果我还将 FormDestroy 设置为 MainForm 的 OnDestroy 事件,则在关闭应用程序时会收到“访问冲突”错误。

最佳答案

你真的曾经破坏过表格吗?

默认情况下,表单是自动创建的,“关闭”它们不会破坏它们,只是隐藏它们。

如果您实际上没有在 OnClose 事件中调用“MyForm.Free”或将 Action 设置为 caFree,则表单永远不会被销毁,因此 OnDestroy 事件永远不会被触发,并且您的代码也永远不会被调用。

关于Delphi:写入注册表在 FormDestroy 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1101484/

相关文章:

delphi - 使用泛型类型数组的类成员调整类实例大小

delphi - 如何将指向类型的指针视为指向该类型数组的指针

php - 从包含 HTML 标记的 SQL 数据库填充 HTML 表单

javascript - 根据按下的按钮更改表单方法

c# - 我添加了注册表项,但无法以编程方式找到它

Delphi XE - RawByteString 与 AnsiString

delphi - Google 喜欢 Delphi 的编辑/组合控件吗?

php - 将不同的输入值插入一列 (MySQL)

powershell - 如何使用 Powershell 获取并更改注册表中 "(Standard)"项的值

c++ - 如何从注册表中读取本地化名称?