ウィンドウを透過する

解決


トウカ  2008-10-21 01:51:08  No: 32281

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

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

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


  2008-10-21 03:41:13  No: 32282

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

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


にしの  2008-10-21 20:37:13  No: 32283

透過処理=半透明化でしょうか。
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

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


Manbon  2008-10-21 21:00:04  No: 32285

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加