掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ビットマップとテキストを1つのファイルに保存したいのですが (ID:36431)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Mr.XRAYです. monaaさんのコードがシンプルでいいと思いますが, >これであればいろんな種類を自由に混ぜ込むことが出来ます。 ということで私も1つの方法として. Delphiのクラスを使用した方法です.データを格納するクラスを用意します. いろいろな型のプロパティが追加できます. //============================================================================= // 変数やオブジェクト型の保存読出しの一つの方法 // Presented by Mr.XRAY //============================================================================= unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type //目的のデータを格納するクラス TData = class(TComponent) private FText : String; FBitmap : TBitmap; procedure SetBitmap(const Value: TBitmap); protected public constructor Create(AOwner: TComponent);override; destructor Destroy; override; published property Text : String read FText write FText; property Bitmap : TBitmap read FBitmap write SetBitmap; end; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Memo1: TMemo; Image1: TImage; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private 宣言 } TestData : TData; AFileName : TFileName; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.DFM} { TData } //----------------------------------------------------------------------------- // TDataクラスのCreate // オブジェクト型のプロパティはここで生成 //----------------------------------------------------------------------------- constructor TData.Create(AOwner: TComponent); begin inherited Create(AOwner); FBitmap := TBitmap.Create; end; //----------------------------------------------------------------------------- // TDataクラスのDestroy // 生成したオブジェクトを破棄 //----------------------------------------------------------------------------- destructor TData.Destroy; begin FreeAndNil(FBitmap); inherited; end; //----------------------------------------------------------------------------- // オブジェクト型の設定メソッド //----------------------------------------------------------------------------- procedure TData.SetBitmap(const Value: TBitmap); begin if Value<>nil then FBitmap.Assign(Value); end; //============================================================================= // Formを生成したらTDataクラスのオブジェクトTestDataも生成 // AFileNameは保存ファイル名 //============================================================================= procedure TForm1.FormCreate(Sender: TObject); begin TestData := TData.Create(Self); AFileName := ExtractFilePath(Application.ExeName) + 'ATest.dat'; end; //============================================================================= // 動作確認用のデータをセット //============================================================================= procedure TForm1.Button1Click(Sender: TObject); begin if Assigned(TestData) then begin TestData.Bitmap.LoadFromFile('Samp1.bmp'); TestData.Text := 'テスト文字列'; //セットしたデータを表示 Image1.Picture := nil; Memo1.Lines.Clear; Image1.Picture.Assign(TestData.Bitmap); Memo1.Lines.Add(TestData.Text); end; end; //============================================================================= // 現在のデータを保存 // WriteComponentだけでOK //============================================================================= procedure TForm1.Button2Click(Sender: TObject); var FileStream : TFileStream; begin FileStream := TFileStream.Create(AFileName,fmCreate); try if Assigned(TestData) then FileStream.WriteComponent(TestData); finally FreeAndNil(FileStream); end; end; //============================================================================= // 保存してあるデータを読出して表示 // ReadComponentだけでOK //============================================================================= procedure TForm1.Button3Click(Sender: TObject); var FileStream : TFileStream; begin if not FileExists(AFileName) then exit; if Assigned(TestData) then FreeAndNil(TestData); TestData := TData.Create(Self); FileStream := TFileStream.Create(AFileName,fmOpenRead); try FileStream.ReadComponent(TestData); finally FreeAndNil(FileStream); end; //読出したデータを表示 Image1.Picture := nil; Memo1.Lines.Clear; Image1.Picture.Assign(TestData.Bitmap); Memo1.Lines.Add(TestData.Text); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.