16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"レジストリにコンポを読み書き"
この発言に対し以下のコメントが寄せられています
#00832 本田勝彦 さん Ini ファイルにコンポを読み書き
みなさんこんにちは。や〜っとできました。(^^)/
TComponent を丸ごとレジストリに読み書き出来ます。
Color, Font.Name, Font.Size, Font.Color 等々などややこしかった
保存復帰を一気にこなしてくれます。
//----------------------------------------------------------------------
uses
Registry;
type
TComponentReg = class(TRegIniFile);
procedure RegWriteComponent(const RegRoot, Section, Ident: String;
Component: TComponent);
var
Reg: TComponentReg;
Key, OldKey: HKEY;
Ms: TMemoryStream;
begin
Reg := TComponentReg.Create(RegRoot);
try
Reg.CreateKey(Section);
Key := Reg.GetKey(Section);
if Key <> 0 then
try
OldKey := Reg.CurrentKey;
Reg.SetCurrentKey(Key);
try
Ms := TMemoryStream.Create;
try
Ms.WriteComponent(Component);
Ms.Position := 0;
Reg.WriteBinaryData(Ident, Ms.Memory^, Ms.Size);
finally
Ms.Free;
end;
finally
Reg.SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end;
finally
Reg.Free;
end;
end;
procedure RegReadComponent(const RegRoot, Section, Ident: String;
Component: TComponent);
var
Reg: TComponentReg;
Info: TRegDataInfo;
Key, OldKey: HKEY;
Ms: TMemoryStream;
begin
Reg := TComponentReg.Create(RegRoot);
try
Reg.CreateKey(Section);
Key := Reg.GetKey(Section);
if Key <> 0 then
try
OldKey := Reg.CurrentKey;
Reg.SetCurrentKey(Key);
try
if Reg.GetDataInfo(Ident, Info) then
begin
Ms := TMemoryStream.Create;
try
Ms.SetSize(Info.DataSize);
Reg.ReadBinaryData(Ident, Ms.Memory^, Info.DataSize);
Ms.Position := 0;
Ms.ReadComponent(Component);
finally
Ms.Free;
end;
end;
finally
Reg.SetCurrentKey(OldKey);
end;
finally
RegCloseKey(Key);
end;
finally
Reg.Free;
end;
end;
//----------------------------------------------------------------------
// 使用例
const
RegRootName = '\Software\katsuhiko.honda\test';
SectionName = 'TComponent read write';
IdentName = 'property';
procedure TForm1.Button1Click(Sender: TObject);
var
Memo: TMemo;
begin
Memo := TMemo.Create(Self);
try
Memo.Parent := Self;
Memo.Top := 0;
Memo.Left := 0;
Memo.Color := clRed;
Memo.Font.Name := 'MS 明朝';
Memo.Font.Size := 20;
Memo.ScrollBars := ssBoth;
Memo.Lines.Add('レジストリに書き込まれた TMemo');
RegWriteComponent(RegRootName, SectionName, IdentName, Memo);
finally
Memo.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Memo: TMemo;
begin
Memo := TMemo.Create(Self);
Memo.Parent := Self;
RegReadComponent(RegRootName, SectionName, IdentName, Memo);
end;
本田勝彦
Original document by 本田勝彦 氏 ID:(VYR01647)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|