根据您所写的内容,我假设您已经知道如何将要记住的值添加到列表框中,所以我不会在这里处理这部分。从这个答案开始,您应该已经知道在 delphi 帮助文件中要查看的内容。请注意,我没有测试示例,因此其中可能存在拼写错误。
为了在计算机注册表中存储数据,delphi 为您提供了单元Registry
,其中包含一个类TRegistry
。
TRegistry
具有检索和存储值所需的所有方法。以下是一个没有任何实际用途的简短示例,只是为了给您提供图片。请注意,就像评论中提到的那样,还有足够的空间供您优化。例如,最好只创建一次 TRegistry 对象,然后重复调用这些方法。而且 - 虽然我写的这个普通的旧德尔福单元在语法上是有效的 - 你可能最好使用更面向对象的方法,比如从 TRegistry 派生一个新类。还请检查文档以获取方法的返回值,因为一些(如)在无法满足您的请求时OpenKey
简单地返回,而另一些(如)可能会抛出异常。false
ReadString
unit Unit1;
interface
uses TRegistry, Windows;
procedure saveStringToRegistry(name : String; value : String);
function readIntegerFromRegistry(name : String) : Integer;
implementation
procedure saveStringToRegistry(name : String; value : String);
var r : TRegistry;
begin
r := TRegistry.Create;
try
r.RootKey := HKEY_CURRENT_USER; // Defined in unit Windows, as well as HKEY_LOCAL_MACHINE and others.
r.OpenKey('Software\Manufacturer Name\Produkt Name\Other\Folders',true); // TRUE allows to create the key if it doesn't already exist
r.WriteString(name,value); //Store the contents of variable 'value' in the entry specified by 'name'
r.CloseKey;
finally
r.Free;
end;
end;
function readIntegerFromRegistry(name : String) : Integer;
var r : TRegistry;
begin
r := TRegistry.Create;
try
r.RootKey := HKEY_LOCAL_MACHINE; // Defined in unit Windows
r.OpenKey('Software\Manufacturer Name\Produkt Name\Other\Folders',false); // FALSE: do not create the key, fail if it doesn't already exist
result := r.ReadInteger(name);
r.CloseKey;
finally
r.Free;
end;
end;
end.
好的,现在您可以for
在应用程序中使用循环来处理列表框的所有项目,并使用上述过程将其保存到注册表中,如下所示:
for i := 0 to ListBox1.Count -1 do
saveStringToRegistry('Entry' + IntToStr(i),ListBox1.Items[i];
然后,您可能会保存您拥有的项目数(当然您必须定义过程 saveIntegerToRegistry):
saveIntegerToRegistry('NumberOfEntries',ListBox1.Count);
当您需要重新加载数据时,您可以执行以下操作:
ListBox1.Clear;
for i := 0 to readIntegerFromRegistry('NumberOfEntries') -1 do
ListBox1.Items.Add(readStringFromRegistry('Entry' + IntToStr(i));
好的,这是一个非常基本的示例,但应该为您指明正确的方向。它当然可能需要一些异常处理(想象一下用户不小心Entry42
从注册表中删除了,但NumberOfEntries
仍然说有 55 个条目)。