画像の置換
グラフィック ファイルの読み込みと保存 への移動
イメージ コントロール内の画像は、いつでも置き換えることができます。新しいグラフィックを、すでにグラフィックが入っている画像に割り当てると、その新しいグラフィックが既存のものと置き換わります。
イメージ コントロール内の画像を置き換えるには、新しいグラフィックをイメージ コントロールの Picture オブジェクトに割り当てます。
新しいグラフィックの作成は、初期グラフィックを作成する際に使用する手順を同じですが、初期グラフィックはデフォルト サイズを使用するのに対し、今度はユーザーにサイズを指定する手段を用意しなければなりません。このオプションを提供する簡単な方法は、ダイアログ ボックスを表示することです。
そのようなダイアログ ボックスをプロジェクト内に入れるには、メイン フォームのユニット内の uses 句に追加します。それから、イベント ハンドラを、[ファイル|新規作成]メニュー項目の OnClick イベントにアタッチします。次に例を示します:
procedure TForm1.New1Click(Sender: TObject);
var
Bitmap: TBitmap; { temporary variable for the new bitmap }
begin
with NewBMPForm do
begin
ActiveControl := WidthEdit; { make sure focus is on width field }
WidthEdit.Text := IntToStr(Image.Picture.Graphic.Width);
{ use current dimensions... }
HeightEdit.Text := IntToStr(Image.Picture.Graphic.Height); { ...as default }
if ShowModal <
>
idCancel then { continue if user doesn"t cancel dialog box }
begin
Bitmap := TBitmap.Create; { create fresh bitmap object }
Bitmap.Width := StrToInt(WidthEdit.Text); { use specified width }
Bitmap.Height := StrToInt(HeightEdit.Text); { use specified height }
Image.Picture.Graphic := Bitmap; { replace graphic with new bitmap }
CurrentFile := " "; { indicate unnamed file }
Bitmap.Free;
end;
end;
end;
void __fastcall TForm1::New1Click(TObject *Sender) {
Graphics::TBitmap *Bitmap;
// make sure focus is on width field
NewBMPForm->ActiveControl = NewBMPForm->WidthEdit;
// initialize to current dimensions as default ...
NewBMPForm->WidthEdit->Text = IntToStr(Image->Picture->Graphic->Width);
NewBMPForm->HeightEdit->Text = IntToStr(Image->Picture->Graphic->Height);
if (NewBMPForm->ShowModal() != IDCANCEL)
{ // if user does not cancel dialog...
Bitmap = new Graphics::TBitmap(); // create a new bitmap object
// use specified dimensions
Bitmap->Width = StrToInt(NewBMPForm->WidthEdit->Text);
Bitmap->Height = StrToInt(NewBMPForm->HeightEdit->Text);
Image->Picture->Graphic = Bitmap; // replace graphic with new bitmap
CurrentFile = EmptyStr; // indicate unnamed file
delete Bitmap;
}
}
メモ: 新しいビットマップを画像オブジェクトの Graphic プロパティに割り当てると、画像オブジェクトが新しいグラフィックに現れますが、まだその所有権は持っていません。画像オブジェクトは、自分自身の内部グラフィック オブジェクトは所有したままになります。このため、先のコードでは、割り当てを行った後、ビットマップ オブジェクトの解放を行っています。