3

透明な画像を表示するために、リストビューに画像リストを割り当てています。

追加される一部の透明な画像に関しては、これにわずかな問題があります。つまり、リストビューで表示/検索するのが難しい場合があります。

このサンプル画像を参照してください。

ここに画像の説明を入力してください

画像(特にマウス)がほとんど見えないことに気付くでしょう。実際、空の画像が追加された場合、それも表示されません。数字のキャプションがここで助けになり、実際に何かがあることを示します。

しかし、私は画像を視覚的に見やすくしたいと思います。透明な画像の下に別の画像があるとうまくいくのではないかと思いました。もちろん、実際の画像には影響しませんでした。

それを念頭に置いて、チェス盤グリッドのビットマップを作成しました。

ここに画像の説明を入力してください

これは、Paint.NETなどと同じように、画像の透明な領域を表現するのに最適な方法だと思います。

この例をさらに説明するために、元の画像を変更して、下にある画像としてチェス盤のビットマップがある場合にどのように見えるかを示しました。

ここに画像の説明を入力してください

そこにチェス盤があるということは、そもそもそこにリストアイテムがあることを示し、チェス盤グリッドのビットマップはより暗いか、まったく異なる種類の画像である可能性があります。前に言ったように、画像がない場合は何も表示されないので、何もないよりも空のチェスグリッドまたは他のビットマップを表示する方がよいでしょう。

では、画像リストを使用して元の画像の下に2番目の画像を表示し、上記の例のような結果を得るにはどうすればよいですか?下の画像は何でもかまいません。たとえば、ロードされた別のビットマップです。

4

2 に答える 2

4

チェス盤を最初の画像(インデックス0)として保存し、イベントハンドラーで現在の画像からオーバーレイ画像を作成すると、必要な処理が実行されます。ただし、イベントが発生するたびにオーバーレイ画像を作成するOnGetImageIndexのがどれほど効率的かはわかりません。

procedure TForm1.ListView1GetImageIndex(Sender: TObject; Item: TListItem);
begin
  // make the overlay (with overlay index 1) from the 
  // image with index Item.Index + 1
  ImageList1.Overlay(Item.Index + 1, 1);
  // use the first image from the list as a background
  Item.ImageIndex := 0;
  // and assign just created overlay index for overlay
  Item.OverlayIndex := 1;
end;
于 2012-07-15T19:04:39.097 に答える
1

必要なのは、追加機能を備えたTImageListのようです。

出発点として、InsideDelphi2006の本で説明されているTImageListExを検討することをお勧めます

抜粋:

TImageListExコンポーネントはTImageListの子孫であり、別の画像リストの画像を使用して無効な画像を生成できます。これは、ツールバーやその他のユーザーインターフェイス要素で使用できます。

TImageListExコンポーネントはTImageListの子孫であり、別の画像リストの画像を使用して無効な画像を生成できます。これは、ツールバーやその他のユーザーインターフェイス要素で使用できます。

TImageListExコンポーネントにはいくつかの利点があります。

  • 無効なグリフを作成する必要がなくなります。

  • これにより、設計時に無効なグリフを追加のTImageListコンポーネントに追加する必要がなくなります。

  • 特に多くのグリフを使用する大規模なアプリケーションでは、.dfmファイルとアプリケーション全体のサイズを大幅に削減できます。

  • 画像の数が多い場合でも、画像リスト内のすべての画像を無効にするのに数ミリ秒しかかからないため、非常に高速です。

  • 非常に軽量です。(すでに標準のTImageListコンポーネントを使用しているアプリケーションに追加した場合、実行可能ファイルのサイズはまったく増加しません。また、標準のTImageListコンポーネントを使用していないアプリケーションに追加した場合、オーバーヘッドは次のようになります。わずか2KB。)

要件からはほど遠いですが、TImageListを拡張する方法を示すのに十分詳細です。

于 2012-07-16T05:14:58.070 に答える