【问题标题】:Regarding Ribbon controls in delphi关于delphi中的功能区控件
【发布时间】:2010-09-08 07:47:39
【问题描述】:

您好,如何保存 Ribbon 的当前状态,以便下次使用 Delphi 打开 exe 时可以加载相同状态的 Ribbon?

【问题讨论】:

  • 我觉得标题不好……你能编辑一下更具体的吗?

标签: delphi ribbon-control


【解决方案1】:

您可以使用 Windows 注册表在应用程序关闭时保存 Ribbon 的状态,然后在打开应用程序时恢复。

这是用于注册管理机构的代码:

      function LoadStringFromRegistry(sKey, sItem,
sDefVal: string; RootKey : HKEY = HKEY_CURRENT_USER): string;
    var
      Reg : TRegistry;
    begin
      Reg := TRegistry.Create(KEY_READ);  // REMOVE
      try
        Reg.RootKey := RootKey;
        if Reg.OpenKey(sKey, false) then
        begin
          Result:=Reg.ReadString(sItem);
          Reg.CloseKey;
        end
        else
          Result:='';
      finally
        Reg.Free;
      end;
    end;


    procedure SaveStringToRegistry(sKey, sItem, sVal : string; RootKey : HKEY = HKEY_LOCAL_MACHINE);
    var
      Reg: TRegistry;
    begin
      Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
      try
        Reg.RootKey := RootKey;
        if Reg.OpenKey(sKey, true) then
        begin
            reg.WriteString(sItem, sVal);
            Reg.CloseKey;
        end;
      finally
        reg.Free;
      end;
    end;

使用列表中的国家登记处。

示例:

  SaveStringToRegistry('Software\Company\Application', 'Left','20',HKEY_LOCAL_MACHINE);
  left := LoadStringFromRegistry('Software\Company\Application', 'Left','',HKEY_LOCAL_MACHINE);

如果您想为每个 Windows 用户保存状态,请使用 HKEY_CURREN_USER 而不是 HKEY_LOCAL_MACHINE。

如果您的应用程序有其他用户管理方式(数据库),请将 Ribbon 的状态保存在数据库中。

【讨论】:

  • -1 因为问题是关于功能区,而不是关于如何在注册表中存储信息。此外,您建议将信息存储在 HKEY_LOCAL_MACHINE 下,并且您没有提到这需要在现代 Windows 中提升应用程序,因为普通用户(甚至是管理员)没有足够的权限写入 HKLM)
【解决方案2】:

我从未在 Delphi 中使用过标准功能区。但在我对 @Ljubomir 的回答发表评论后,我决定进行一些调查以帮助您。

从源代码中,查看自定义对话框的工作方式,我发现 Ribbon 与 TActionManager 相关联,而我之前也从未使用过它。同样,查看 TCustomActionManager 的来源,我注意到 SaveToFile/SaveToStream LoadFromFile/LoadFromStream 方法,我认为是保存/加载功能区(操作管理器)状态信息的方法。

另一方面,TActionManager 有一个 FileName 属性。如果您设置它,它会在适当的时候自动加载和保存 ActionManager 状态。

希望这能给你带来光明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多