お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"透明ウィンドウの使用例"






スクリーン画面などのイメージをキャプチャーするプログラムを作ろうと
した時にぶつかる問題は次の2つかと思います。

(1)自アプリのウィンドウ外にあるマウスのイベントが捕まらない。
(2)逆に他のアプリがマウスイベントに反応してしまう。

これらを解決するにはフォームを「透明なウィンドウ」にして画面全体を
覆ってしまう方法がよく使われます。
「透明なウィンドウ」とはもちろん比喩で、実際はスクリーン画面をキャ
プチャーしたイメージを持つウィンドウです。

以下のサンプルプログラムは画面の左上隅に現在のマウスカーソル座標を
表示しますが、他のアプリはマウスイベントに反応しません。
プログラムを終了するには「Alt + F4」を押して下さい。

var
  hdcScreen: HDC;
  FBitmap: TBitmap;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // フォームのスタイルなどを設定
  BorderStyle:= bsNone;
  WindowState:= wsMaximized;
  // デバイスコンテキストの取得/ビットマップの作成
  hdcScreen := GetDC(0);
  FBitmap:= TBitMap.Create;
  // スクリーン画面のキャプチャー
  FBitmap.Handle :=
    CreateCompatibleBitmap(hdcScreen, Screen.Width, Screen.Height);
  BitBlt(FBitmap.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
    hdcScreen, 0, 0, SRCCOPY);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FBitmap.Free;
  ReleaseDC(0, hdcScreen);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Draw(0, 0, FBitmap);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Canvas.TextOut(0, 0, Format('X=%.4D Y=%.4D',[X,Y]));
end;


           ○ 心を打つ美しい文書作りは「えるの〜と」 ○
                 http://member.nifty.ne.jp/h-triton/
        Avalon's Friendly Crew #80008  H-Triton (^^) since 1996

Original document by H-Triton        氏 ID:(QZV11422)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum