保存delphi例程和内存

这个问题是关于能够保存例程,并能够从列表中选择它们....当你选择一个,它知道在哪里链接等等只是为了理解。不是实际的程序 假设我想以Delphi形式创建例程。我想创建几个不同的。它们不会完全相同,但有些可能相似。我想知道如何在Delphi中保存东西,当你关闭或终止应用程序时,它们会在你重新打开时被记住。我不知道从哪里开始以及如何工作。任何帮助都会很棒。只是一个提示或方向,也许是一个包含更多信息甚至示例的网站。我将尝试在下面给出一个更简单的描述,说明它在表格上的外观......只是为了这个想法,我认为如果我明白这一点就足够了,或者至少是一个好的开始。 该表单将包含一个列表框,一个保存按钮和4个不同的编辑框。让我们说我输入edit1; 1和edit2; 2和edit3; 3和edit4; 4。然后单击保存按钮,它会记住每个编辑框中的这4个值,然后在≔edit1.text+'到'+ edit4.text的列表框中的值下保存。希望它到目前为止有意义,然后我在编辑框中输入错误的方法。 edit1; 4和edit2; 3和edit3; 2和edit4; 1。然后单击“保存”按钮,它再次(≔edit1.text+'到'+ edit4.text)进入列表框。然后我想关闭应用程序。再次打开它仍然有这个在那里仍然能够添加更多这些奇怪的样品.... 谁能帮我? 编辑问题,可能会更清楚...... 我将在表单上放置以下元素:2个列表框(每个3行,在第一个列表框中:木材,塑料和玻璃。在第二个列表框中:树,杯子,窗口。) 现在我想链接正确的,它们在这里是有序的,但它们不是。在应用程序的表格或内存中,我希望链接它们在表单上不可见。 然后,如果我要在表单上放置两个编辑框,并输入第一个木头或树,它将另一个放在另一个编辑框中。因此,在某种程度上,我认为您正在创建一个表,该表知道哪一个与哪个相关,但在您输入编辑框时也会查找。希望有道理     
已邀请:
根据您的编写,我假设您已经知道如何将值保存到列表框中,因此我不会在此处理此部分。从这个答案开始,您应该已经知道了在delphi帮助文件中要查看的内容。请注意,我没有测试该示例,因此可能存在拼写错误。 为了将数据存储在计算机注册表中,delphi为您提供了单元
Registry
,其中包含一个类
TRegistry
TRegistry
具有检索和存储值所需的所有方法。以下是一个没有任何实际用途的简短示例,只是为了给你提供图片。请注意,就像评论中提到的那样,您还有足够的空间来优化它。例如,最好只创建一次TRegistry对象,然后重复调用这些方法。而且 - 虽然我写的这个普通的旧delphi单元在语法上是有效的 - 你可能最好使用更加面向对象的方法,比如从TRegistry派生一个新类。请同时检查文档中的方法返回值,因为有些方法(如
OpenKey
)在无法满足您的请求时只返回
false
而其他方(如
ReadString
)可以抛出一个execption。
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('SoftwareManufacturer NameProdukt NameOtherFolders',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('SoftwareManufacturer NameProdukt NameOtherFolders',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个条目)。     

要回复问题请先登录注册