名前 題名 ▼ Mr.XRAYさん > ▼ takiさん > > > 「11_public 部と published 部の違い」の説明中に > > これなんですが,まず,TForm は特別でして,published に書いても > オブジェクトインスペクタには表示されません.で, > > > ファイルに保存すると,その設定値もファイルに保存されます.public 部の値は保存されません.」 > > これなんですが,コンポーネントの保存は,ストリームとして保存します. > 上のサンプルの Button1 クリックを以下のように変更し, > TButton を 1 つ追加して,この Button2 のクリックイベントを以下のようにします. > > procedure TForm1.Button1Click(Sender: TObject); > var > LMethod : TMethod; > LFileStream : TFileStream; > begin > MyButton := TButton.Create(Self); > MyButton.Parent := FindControl(Panel1.Handle); > MyButton.Top := 20; > MyButton.Left := 20; > MyButton.Caption := '私のボタン'; > > LMethod.Data := Self; > LMethod.Code := Self.MethodAddress('MyEvent'); > if Assigned(LMethod.Code) then begin > MyButton.OnClick := TNotifyEvent(LMethod); > end; > > //コンポーネントの保存 > LFileStream := TFileStream.Create('AAA.bin', fmCreate); > try > LFileStream.WriteComponent(MyButton); > finally > FreeAndNil(LFileStream); > end; > end; > > procedure TForm1.Button2Click(Sender: TObject); > var > LFileStream : TFileStream; > LMyButton : TButton; > begin > //同名のコンポーネントは作成できないので別の名前にする > //Button1クリックの直後に実行することも考慮 > LMyButton := TButton.Create(Self); > > //コンポーネントの読み込み > //イベント用のメソッドはTForm1のメンバなので保存はされていない > //イベントを保存するには,TButtonの継承クラスを作成して,そのイベントを作成する > LFileStream := TFileStream.Create('AAA.bin', fmOpenRead); > try > LFileStream.ReadComponent(LMyButton); > //親(コンテナ)を設定しないと表示できないでエラー > LMyButton.Parent := Panel1; > LMyButton.Update; > > Sleep(1000); > LMyButton.Top := 100; > finally > FreeAndNil(LFileStream); > end; > end; > > そして,以下の手順でコンポーネントが保存されたことを確認できます. > > (1) EXE を起動して Button1 をクリック > AAA.bin というファイルができる > (2) EXE を閉じる > (3) 再度 EXE を起動して Button2 をクリック > > 動作確認は Windows 7 U64(SP1) + Delphi XE(UP1) Pro でござんす. > > > 下の図は Buttpm2 をクリックして 1 秒後の状態 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link