お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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