【发布时间】:2010-09-08 07:47:39
【问题描述】:
您好,如何保存 Ribbon 的当前状态,以便下次使用 Delphi 打开 exe 时可以加载相同状态的 Ribbon?
【问题讨论】:
-
我觉得标题不好……你能编辑一下更具体的吗?
标签: delphi ribbon-control
您好,如何保存 Ribbon 的当前状态,以便下次使用 Delphi 打开 exe 时可以加载相同状态的 Ribbon?
【问题讨论】:
标签: delphi ribbon-control
您可以使用 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 中使用过标准功能区。但在我对 @Ljubomir 的回答发表评论后,我决定进行一些调查以帮助您。
从源代码中,查看自定义对话框的工作方式,我发现 Ribbon 与 TActionManager 相关联,而我之前也从未使用过它。同样,查看 TCustomActionManager 的来源,我注意到 SaveToFile/SaveToStream LoadFromFile/LoadFromStream 方法,我认为是保存/加载功能区(操作管理器)状态信息的方法。
另一方面,TActionManager 有一个 FileName 属性。如果您设置它,它会在适当的时候自动加载和保存 ActionManager 状态。
希望这能给你带来光明。
【讨论】: