C++Builder XE でウィンドウを透明・半透明にする

Normalウィンドウの透明化・半透明化あれこれ。

元々は右のような普通の(不透明な)ウィンドウの透過度を、いくつかの方法で変化させてみる。

動作は Windows 7 (64bit) / C++Builder XE で行っているが、別の環境では別の動作になるかも。

* クライアント領域のみ透明化

クライアント領域のみを透明化させるには、フォームの TransparentColor/TransparentColorValue プロパティを使う。
void	TFormTest01::Test01()
{
	TransparentColor = true;
	TransparentColorValue = TColor(0x000001);
	Canvas->Brush->Color = TColor(0x000001);
	Canvas->FillRect(TRect(0, 0, 300, 300));
	Panel2->Color = TColor(0x000001);
}
TransparentColorTransparentColor プロパティを true にすることで透過モードとなり、フォーム上の TransparentColorValue プロパティで指定した色(コンポーネント同士の重なりに関係なく、指定した色で塗られている部分はすべて)が完全透過となる。半透明にすることはできない。

Windows API で言えば、SetLayeredWindowAttributes() を LWA_COLORKEY でコールした状態だと思われる。ただし、Windows API の場合、透過部分ではマウスイベント等を受け取れない(透明と言うよりはウィンドウに穴が空いて、背後のデスクトップ等にイベントが行く)ようだが、C++Builder の場合はイベントを受け取れる。

* ウィンドウ全体を半透明化

ウィンドウ全体を半透明にするには、フォームの AlphaBlend/AlphaBlendValue プロパティを使う。
void	TFormTest01::Test02()
{
	AlphaBlend = true;
	AlphaBlendValue = 128;
}
AlphaBlendAlphaBlendValue = 0 で完全透明、AlphaBlendValue = 255 で完全不透明、その中間で半透明となる。

コンポーネントも含め、ウィンドウ内がすべて一律で透明になる。

Windows API で言えば、SetLayeredWindowAttributes() を LWA_ALPHA でコールした状態だと思われる。

* グラスフレーム(ガラス効果)の拡張

Windows Vista から導入された Aero において、グラスフレーム(タイトルバーのもやもやした半透明)をクライアント領域にまで広げるには、GlassFrame プロパティを使う。
void	TFormTest01::Test07()
{
	GlassFrame->Enabled = true;
	GlassFrame->SheetOfGlass = true;
}
GlassFrameGlassFrame->Enabled を true にするとグラスフレーム拡張モードとなり、GlassFrame->SheetOfGlass も true にすることで、クライアント領域全体でガラス効果を得られる。GlassFrame->SheetOfGlass を false にして、GlassFrame->Bottom などのプロパティで任意の範囲でガラス効果を得るようにすることもできる。

Windows API で言えば、Desktop Window Manager の DwmExtendFrameIntoClientArea() をコールした状態と思われる。

液晶モニター処分

壊れた液晶モニターを処分。

リサイクル法施行前に買ったモニターなので、捨てるにはお金がかかる。そこで、パソコンファームというサービスを利用してみた。

連絡も何もせずにいきなりモニターを送りつけるだけで、無料で引き取ってくれる。送料 1,500 円ほどの負担で済むので、廃棄(3,150 円)の半額で済む。

パソコンの引き取りだと HDD 等のデータ漏洩が心配だけど、モニターならそういう心配は無い。

新しいモニターを買った時の梱包材に包んで、コンビニから発送。うんともすんとも連絡は無いが、送り返されても来ないので、無事に引き取ってもらえたのだろう。

BCommandPipe

どこかへのレス記事みたいだけど、BCommandPipe なんてクラスがあるのか。標準入力からデータを取り込むのだとか。便利そう。

Daiku はどうやって標準入力を取得してたんだっけな……。もう忘れちゃった。

山手線・総武線における WiMAX 速度を地図上で視覚化

VisualMapYamanoteMini WiMAX 鉄道スピードテスト(WiMAX レール)に寄せられたデータ活用の一環として、駅や駅間の速度を地図上にプロットし、視覚化してみた。

低速エリアは赤で、早くなるにつれて、黄色、緑という色分けにしてある。

元のサイズの画像や解説など、詳しくは WiMAX レールのビジュアルマップをご覧ください。

突如モニターが

マウスに引き続き、液晶モニターがお亡くなりになった。何か憑きものがいるのだろうか? 画面が点滅して実用にならない。

せっかく買い換えるなら、普通の液晶モニターではなくテレビにしようかと、機種を探してみた。

パソコンデスクが小さめなので、大きなテレビは置けないが、REGZA の 19V 型(19RE2)が USB HDD 録画もできて良さそう。

しかし解像度を見てがっかり。お亡くなりの 17 インチモニターは 1280×1024 の解像度があるのだが、19V 型の縦の解像度は 768 しかない。さらに、19RE2 は 36,000 円くらいするが、もうちょっとお金を出せばだいぶ大きなテレビが買えるので、なんか勿体ない気がした。

今まで通り 17 インチモニターでいいやと思ったが、今時 17 インチはラインナップがほとんど無い。無駄な機能が付いてやたら高いやつか(17 インチなのに 3 万以上)、あやしげなメーカーか、究極の選択みたいになってる。

仕方ないので、21.5W 型にした。IO DATA の LCD-MF223XS で、1920×1080 ピクセル、約 2 万円。横幅が長いのでスピーカーが置けなくなってしまい、画面の手前にスピーカーを配置するはめに。

あと、画面出力が有効範囲全面に広がらず、無駄なフチが生じている。たぶんこのフチの分だけ画像が縮小になっており、小さな字が汚い。マニュアルや公式サイトの Q&A に解決策が見当たらなかったので、現在サポートに問い合わせ中。
カウンター


カンパのお願い
Amazon でお買い物の際は、下記で検索して頂けたら幸いです。
記事検索
最新コメント
  • ライブドアブログ