嗨,我如何保存功能区的当前状态,以便下次使用 Delphi 打开 exe 时可以加载具有相同状态的功能区?
问问题
444 次
2 回答
0
我从未在 Delphi 中使用过标准功能区。但在我对@Ljubomir 的回答发表评论后,我决定进行一些调查以帮助您。
从源代码中,查看自定义对话框的工作方式,我发现 Ribbon 与 TActionManager 相关联,这也是我之前从未使用过的。同样,查看 TCustomActionManager 的来源,我注意到 SaveToFile/SaveToStream LoadFromFile/LoadFromStream 方法,我认为是保存/加载功能区(操作管理器)状态信息的方法。
另一方面,TActionManager 有一个 FileName 属性。如果您设置它,它会在适当的时间自动加载和保存 ActionManager 状态。
希望这能给你带来光明。
于 2010-09-10T01:19:38.223 回答
0
您可以使用 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。
如果您的应用程序有其他用户管理方式(数据库),请将 Ribbon 的状态保存在数据库中。
于 2010-09-09T08:27:23.453 回答