ウィンドウを透過する

解決


トウカ  2008-10-21 01:51:08  No: 32281  IP: [192.*.*.*]

指定したウィンドウのハンドルを取得して透過処理を行いたいのですが

var
  hw: HWND;
begin
  hw := FindWindow(nil,'無題 - メモ帳');
//**********
//ここに透過処理
//**********
end;

透過処理のやり方がいまいちわかりません
そもそも透過APIのようなものは存在するのでしょうか?

編集    削除
 2008-10-21 03:41:13  No: 32282  IP: [192.*.*.*]

検索すればサンプルは出てくると思いますが。

ttp://homepage1.nifty.com/MADIA/delphi/Win32API/Toumei.htm

編集    削除
にしの  2008-10-21 20:37:13  No: 32283  IP: [192.*.*.*]

透過処理=半透明化でしょうか。
SetLayeredWindowAttributesというAPIでできます。対応OSは2000以降だと思います。

var
  memoWnd: HWND;
  Style: Integer;
begin
  memoWnd := FindWindow(nil,'無題 - メモ帳');
  Memo1.Lines.Add(IntToHex(memoWnd, 8));

  Style := GetWindowLong(memoWnd, GWL_EXSTYLE);
  Style := Style or WS_EX_LAYERED;
  SetWindowLong(memoWnd, GWL_EXSTYLE, Style);
  SetLayeredWindowAttributes(memoWnd, 0, 128, LWA_ALPHA);
end;

編集    削除
Manbon  2008-10-21 20:38:36  No: 32284  IP: [192.*.*.*]

http://www2.big.or.jp/~osamu/Delphi/tips.cgi?index=0289.txt
の中の Handle を 上記 hw に置き換えればいいと思いますが・・・。

編集    削除
Manbon  2008-10-21 21:00:04  No: 32285  IP: [192.*.*.*]

簡潔にまとめてみました。

type
  TSetLayeredWindowAttributes = function(hWnd : HWND; crKey : DWORD; bAlpha : Byte; dwFlags : DWORD) : BOOL; stdcall;

function SetLayeredWindowAttributes(hWindow: HWND; crKey: DWORD; bAlpha: Byte; dwFlags: DWORD): BOOL; stdcall; external user32 name 'SetLayeredWindowAttributes';

procedure TForm1.Button1Click(Sender: TObject);
var
  SLWA: TSetLayeredWindowAttributes;
  hUser32: HINST;
  H: HWnd;
  ibAlpha: Byte;
const
  WS_EX_LAYERED = $80000;
begin
  ibAlpha := random(256); //透明度

  H := FindWindow(nil,'無題 - メモ帳');

  if H <> 0 then begin
    hUser32 := LoadLibrary('user32.dll');
    if hUser32 <> 0 then begin
      SetWindowLong(H, GWL_EXSTYLE, GetWindowLong(H, GWL_EXSTYLE) or WS_EX_LAYERED);
      try
        SLWA := GetProcAddress(hUser32, 'SetLayeredWindowAttributes');
        if Assigned(@SetLayeredWindowAttributes) then SLWA(H, 0, ibAlpha, 2);
      finally
        FreeLibrary(hUser32);
      end;
    end;
  end;
end;

編集    削除
トウカ  2008-10-21 21:51:21  No: 32286  IP: [192.*.*.*]

?さん、にしのさん、Manbonさんが教えてくれた事で実現できました
ありがとうございました

編集    削除