您好我如何保存Ribbon的当前状态这样我可以在下次使用Delphi打开exe时加载具有相同状态的功能区?
答案 0 :(得分: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。
如果您的应用程序具有其他用户管理方式(数据库),请在数据库中保存功能区的状态。
答案 1 :(得分:0)
我从未使用Delphi中的标准功能区..但在我对@Ljubomir的回答后,我决定调查一下以帮助你。
从源代码中,查看自定义对话框的工作方式,我发现Ribbon与TActionManager绑定,这也是我以前从未使用过的。再看一下,看看TCustomActionManager的来源,我注意到SaveToFile / SaveToStream的LoadFromFile / LoadFromStream方法,我想是保存/加载功能区(动作管理器)状态信息的方法。
另一方面,TActionManager具有FileName属性。如果设置它,它会在适当的时间自动加载并保存ActionManager状态。
希望这能为你带来光明。