3

良い一日

これが可能かどうかについての指示をウェブで検索しましたが、役に立ちませんでした。別のアプリケーションを選択できるようにするアプリケーションを作成する必要があります。これにより、選択したアプリケーションが半透明になり、上に表示されます (ゴースト イメージ オーバーレイのように)。

Delphiでこれはまったく可能ですか? Delphi XE と Lazarus を使用しています。誰かがどこから始めるべきかの一般的な方向性を教えていただければ幸いです.

前もって感謝します、

4

2 に答える 2

4

これは可能ですが、この種の動作は独自のアプリケーションで処理する必要があるため、お勧めしません。とにかく、これを行う非常に正当な理由があるために主張する場合は、ここでコードを残してウィンドウの透明度を設定し、ウィンドウを最上位にする方法を示します。

透明性

透明度を設定するには、フラグ付きの関数とを使用するSetWindowLong関数を使用する必要があります。WS_EX_LAYEREDSetLayeredWindowAttributesLWA_ALPHA

Procedure SethWndTrasparent(hWnd: HWND;Transparent:boolean);
var
 l        : Longint;
 lpRect   : TRect;
begin
    if Transparent then
    begin
      l := GetWindowLong(hWnd, GWL_EXSTYLE);
      l := l or WS_EX_LAYERED;
      SetWindowLong(hWnd, GWL_EXSTYLE, l);
      SetLayeredWindowAttributes(hWnd, 0, 180, LWA_ALPHA);
    end
    else
    begin
      l := GetWindowLong(hWnd, GWL_EXSTYLE);
      l := l xor WS_EX_LAYERED;
      SetWindowLong(hWnd, GWL_EXSTYLE, l);
      GetWindowRect(hWnd, lpRect);
      InvalidateRect(hWnd, lpRect, true);
    end;
end;

Windowsを最上位にする

最上位以外のすべてのウィンドウの上にウィンドウを配置SetWindowPosする値を渡す関数を使用する必要があります。HWND_TOPMOSTウィンドウは、非アクティブ化されている場合でも最上位の位置を維持します。

Procedure SethWndOnTop(hWnd: HWND);
var
  lpRect   : TRect;
begin
  if GetWindowRect(hWnd,lpRect) then
  SetWindowPos(hWnd , HWND_TOPMOST, lpRect.left, lpRect.top, lpRect.Right-lpRect.left, lpRect.Bottom-lpRect.Top, SWP_SHOWWINDOW);
end;
于 2011-04-08T18:15:26.773 に答える
3

Windows はこれを実行できますが、アプリがこれを確実に実行できる見込みはありません。

于 2011-04-07T19:44:24.457 に答える