-1

アプリケーションのアイコンをいくつかのイメージ リストに保存しています。

次のことを行います。

X16

X24

X48

X32

TActions と、TButton に ICO を配置するための直接アクセス、または TImage は、このいくつかのイメージ リストから取得されました。

私の問題は、悪夢のようなものを削除する必要があることです

CONST 値を全員に設定することを考えましたが、一部は TActions で使用されているため、完全な解決策ではありません。

皆さんはこれをどのように行っていますか?また、これを解決または少なくとも改善するために必要なソリューションは何ですか? DELPHI2007を使用しています。

4

2 に答える 2

4

私がしていることは、実行時にすべてのアイコンをリソースからロードして追加することです。それらを追加すると、追加されたアイコンのインデックスがグローバル変数に保存されます。また、これらのグローバル変数を参照して、実行時に各アクションの ImageIndex プロパティを割り当てます。

これにより、番号付けの問題を抱えることなく、プロジェクトにアイコンを柔軟に追加および削除できます。このアプローチは、フォントのスケーリングに基づいて実行時のアイコン サイズの決定に対応します。欠点は、設計時に画像を表示できないことです。これは欠点です。上記の柔軟性をすべて備えたい場合、これ以上の解決策はありません。理想的な世界では、画像は、配列への連続したインデックスではなく、名前または ID によって識別されます。しかし、それを実現するには、VCL の上に多くのコードを実装する必要があります。

于 2011-12-21T15:31:36.527 に答える
3

この問題にはいくつかの解決策があります。

定数を使用したいが、画像を削除するたびにそれらをすべて変更したくない場合。次のことができます。

const
  idImgA   =   0;
  idImgB   =   idImgA + 1;
  idImgC   =   idImgB + 1;
  idImgD   =   idImgC + 1;
  idImgE   =   idImgD + 1;
  idImgF   =   idImgE + 1;
  idImgG   =   idImgF + 1;

画像 D を削除する場合は、次の 2 行を変更するだけです。

const
  idImgA   =   0;
  idImgB   =   idImgA + 1;
  idImgC   =   idImgB + 1;
  idImgE   =   idImgC + 1;
  idImgF   =   idImgE + 1;
  idImgG   =   idImgF + 1;

別の方法は、列挙型を操作することです。

type
  TImgEnum = (imgA, imgB, imgC, imgD, imgE, imgG);

Ord 演算子を使用して、イメージ インデックスを取得できます。

index := Ord(Enum);
于 2011-12-21T17:08:13.350 に答える