Image1コンポーネントをクリックして、Image1にロードされた画像を1active.pngという画像から2番目の1inactive.pngという画像に、またはその逆に変更したいと思います。
それを行う方法はありますか?
Image1にpngファイルをロードできるので、D2009を使用していると思います。
(skamradtのソリューションが示すように)アプリケーションと一緒に画像を配布したくない場合は、それらをリソースとして含める必要があり
ます。プロジェクトにpngを追加します。メニュー[プロジェクト|リソース... ]を使用してファイルを追加します。 。
それに応じて名前を付けて、次のようにします。
1active.png RCData PngImage_Active
1inactive.png RCData PngImage_Inactive
Clickイベントでは、表示する状態インジケーター(skamradtなど)を知るための状態インジケーターが必要になります。
Image1.hintを使用して、どの画像がロードされているかを確認しました(デモの目的で、すばやくダーティです)。
以下のLoadImgFromPngResourceプロシージャを使用して、適切なpng画像をロードします。
procedure LoadImgFromPngResource(const AResName: string; DestImage: TImage);
var
png: TPngImage;
begin
png := TPngImage.Create;
try
png.LoadFromResourceName(HInstance, AResName);
DestImage.Picture.Assign(png);
finally
png.Free;
end;
end;
procedure TForm4.Image1Click(Sender: TObject);
begin
if Image1.Hint <> 'Active' then
begin
LoadImgFromPngResource('PngImage_Active', Image1);
Image1.Hint := 'Active';
end
else
begin
LoadImgFromPngResource('PngImage_Inactive', Image1);
Image1.Hint := 'Inactive';
end;
end;
材料:
指示:
1)フォーム宣言のプライベートセクションにブール変数を作成します。この例では、この変数をfImageActiveと呼びます。
private
fImageActive : boolean;
2)フォームデザイナから、フォームにTImageコンポーネントをドロップ(または既存のものを選択)してonClickイベントを選択し、ダブルクリックして編集に切り替えます。次に、次のコードを追加します。
fImageActive := not fImageActive;
if fImageActive then
Image1.Picture.LoadFromFile('1active.png')
else
Image1.Picture.LoadFromFile('1inactive.png')
3)フォームデザイナからpictureプロパティを見つけ、省略記号をクリックして、スターター用の1active.pngファイルをロードします。
4)フォームをクリックし、「OnCreate」という名前のイベントを見つけ、ダブルクリックして次のコードを追加します(これにより初期状態が設定されます)。
fImageActive := true;
両方の画像をプロジェクトのリソースファイルにロードする必要があります。実行時に、リソースファイルから写真を読み取り、OnClickのtimageにロードできます。私が現在使用しているDelphiのバージョン(6)は、PNGファイルをネイティブでサポートしていませんが、後者のバージョンはサポートしていると思います