关于delphi中的Ribbon控件

发布于 2024-09-17 23:49:29 字数 61 浏览 6 评论 0原文

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

Hi How can i save the current state of Ribbon So that i can load ribbon with the same state while opening the exe next time using Delphi?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

友谊不毕业 2024-09-24 23:49:29

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

这是与注册表一起使用的代码:

      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。

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

You could use Windows Registry to save state of Ribbon when application closes, and then restore when opening Application.

This is code for work with Registries:

      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;

State Registry in uses list.

Sample:

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

If you want to save state for each individual user of Windows use HKEY_CURREN_USER instead of HKEY_LOCAL_MACHINE.

If your application have other way of user management (Database), save state of Ribbon in database.

热鲨 2024-09-24 23:49:29

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

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

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

希望这能给你带来光明。

I never used the standard Ribbon in Delphi.. but after my comment to @Ljubomir answer, I decided to investigate a bit to help you.

From source code, looking at the way the customize dialog works I discovered Ribbon is tied to TActionManager, which also I never used beforehand. Again, Looking at the source of TCustomActionManager, I noticed the SaveToFile/SaveToStream LoadFromFile/LoadFromStream methods I suppose is the way to save/load the ribbon (action manager) state information.

ON the other hand, the TActionManager have a FileName property. If you set it, it automatically loads and saves the ActionManager state at proper times.

Hope this brings light to you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文