Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于delphi中的功能区控件_Delphi_Ribbon Control - Fatal编程技术网

关于delphi中的功能区控件

关于delphi中的功能区控件,delphi,ribbon-control,Delphi,Ribbon Control,您好,我如何保存Ribbon的当前状态,以便下次使用Delphi打开exe时加载具有相同状态的Ribbon?您可以在应用程序关闭时使用Windows注册表保存Ribbon的状态,然后在打开应用程序时还原 这是使用注册表的代码: function LoadStringFromRegistry(sKey, sItem, sDefVal: string; RootKey : HKEY = HKEY_CURRENT_USER): string; var Reg : TRe

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

您可以在应用程序关闭时使用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的状态。

我从未在Delphi中使用过标准Ribbon。。但在我对@Ljubomir答案发表评论之后,我决定做一些调查来帮助你

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

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


希望这能给您带来启示。

-1因为问题是关于ribbon,而不是关于如何在注册表中存储信息。此外,您建议将信息存储在HKEY_LOCAL_机器下,您不需要提及这一点,因为普通用户(甚至管理员)没有足够的权限写入HKLM)我认为标题不好。。。你能编辑一个更具体的吗?