0

Image1コンポーネントをクリックして、Image1にロードされた画像を1active.pngという画像から2番目の1inactive.pngという画像に、またはその逆に変更したいと思います。

それを行う方法はありますか?

4

3 に答える 3

5

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;
于 2009-06-11T21:40:49.883 に答える
3

材料

  • 1ブール変数
  • 1TImageコンポーネント
  • OnCreateイベントハンドラーを形成するために1行が追加されました
  • 1TImage.OnClickイベントハンドラー

指示

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;
于 2009-06-11T18:33:51.283 に答える
0

両方の画像をプロジェクトのリソースファイルにロードする必要があります。実行時に、リソースファイルから写真を読み取り、OnClickのtimageにロードできます。私が現在使用しているDelphiのバージョン(6)は、PNGファイルをネイティブでサポートしていませんが、後者のバージョンはサポートしていると思います

于 2009-06-11T16:50:47.613 に答える