あなたが書いたことから、覚えておくべき値をリスト ボックスに追加する方法をすでに知っていると思います。そのため、ここではこの部分については扱いません。この回答から始めて、Delphi ヘルプ ファイルで何を見ればよいかについての手がかりがすでにあるはずです。この例はテストしていないため、タイプミスがある可能性があることに注意してください。
コンピュータ レジストリにデータを格納するために、delphi はRegistry
クラスを含むユニットを提供しますTRegistry
。
TRegistry
値を取得して保存するために必要なすべてのメソッドがあります。以下は、実際の使用を伴わない短い例です。画像を提供するだけです。コメントで述べたように、最適化する余地が十分にあることに注意してください。たとえば、TRegistry オブジェクトを 1 回だけ作成してから、メソッドを繰り返し呼び出す方がよいでしょう。そして、私が書いたこの単純な古い Delphi ユニットは構文的に有効ですが、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));
OK、これは非常に基本的な例ですが、正しい方向へのポインタを提供する必要があります。もちろん、何らかの例外処理が必要になる可能性があります (ユーザーが誤っEntry42
てレジストリから削除したにもかかわらず、NumberOfEntries
まだ 55 個のエントリがあると言っているとします)。