- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Delphi

はじめに Edit

UpdateLayeredWindowなどを使ったLayeredWindowについて。
このAPIを使うとアルファをもったビットマップをFormの変わりに画面に表
示できます。

上手く使うためには、いろいろ小細工と言うか注意点があります。
それらをまとめたメモ。
簡単ポンなコンポーネントにしてみたいなあ。

現在ライブラリ化中→../O3LayeredWindow

注意点 Edit

ビットマップのピクセル値にアルファを掛けてからUpdateLayeredWindowに渡すこと Edit

UpdateLayeredWindowにビットマップを渡すときに、各Pixelはアルファをかけた値にしておかないとおかしくなります。

なので、

  • オフスクリーンBitmap
  • UpdateLayeredWindowに渡す用Bitmap

を用意して、
UpdateLayeredWindowを呼ぶときに「オフスクリーンBitmap」→「渡す用Bitmap」への変換ルーチンをかませてやるといいです。

(これ、最初ハマりまくってしまいました(´д`)何で上手く表示されないんだーって)

参考は以下、

形の元となるビットマップは、以下のことに気をつけてください。
R=255, G=127, B=63 の点を ALPHA=100(0なら透明、255なら不透明)
で抜きたいときは、32BIT BITMAPのその点のデータを
 R = 255 * 100 div 255 = 100
G = 127 * 100 div 255 = 49
B = 63 * 100 div 255 = 24
Alpha = 100
にしてください。単純にR=255,G=127,B=63,ALPHA=100としても予期
した形で描画されません(しばらく私はこれで嵌ってました)。
via: サンプル: "不定形なフォーム(Windows2000専用)"

この記述がないと解決しなかった。何で他のサイトには書いてないんだろう。

参考リンク Edit


No comment. Comments/Delphi/LayeredWindow?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2008-09-15 Mon 12:40:58 JST (3049d)