AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Grafik / Sound / Multimedia Delphi Ein beliebiges Fenster transparent schalten
Thema durchsuchen
Ansicht
Themen-Optionen

Ein beliebiges Fenster transparent schalten

Ein Thema von s-off · begonnen am 26. Sep 2007
Antwort Antwort
s-off
(Gast)

n/a Beiträge
 
#1

Ein beliebiges Fenster transparent schalten

  Alt 26. Sep 2007, 13:23
Basierend auf diesem Beitrag möchte ich ein Codebeispiel zeigen, mit welchem ein beliebiges Fenster transparent geschaltet werden kann.

Ein beliebiges Fenster transparent schalten
Funktion:
Delphi-Quellcode:
function MakeWindowTransparent(Wnd: HWND; nAlpha: Integer = 10): Boolean;
type
  TSetLayeredWindowAttributes = function(hwnd: HWND; crKey: COLORREF; bAlpha: Byte;
    dwFlags: Longint): Longint;
  stdcall;
const
  // Use crKey as the transparency color.
  LWA_COLORKEY = 1;
  // Use bAlpha to determine the opacity of the layered window..
  LWA_ALPHA = 2;
  WS_EX_LAYERED = $80000;
var
  hUser32: HMODULE;
  SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
begin
  Result := False;
  // Here we import the function from USER32.DLL
  hUser32 := GetModuleHandle('USER32.DLL');
  if hUser32 <> 0 then
  begin @SetLayeredWindowAttributes := GetProcAddress(hUser32, 'SetLayeredWindowAttributes');
    // If the import did not succeed, make sure your app can handle it!
    if @SetLayeredWindowAttributes <> nil then
    begin
      // Check the current state of the dialog, and then add the WS_EX_LAYERED attribute
      SetWindowLong(Wnd, GWL_EXSTYLE, GetWindowLong(Wnd, GWL_EXSTYLE) or WS_EX_LAYERED);
      // The SetLayeredWindowAttributes function sets the opacity and
      // transparency color key of a layered window
      SetLayeredWindowAttributes(Wnd, 0, Trunc((255 / 100) * (100 - nAlpha)), LWA_ALPHA);
      Result := True;
    end;
  end;
end;
Beispielaufruf, um das Fenster mit dem Handle 67034 mit einer AlphaBlendValue von 150 transparent zu schalten:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   MakeWindowTransparent(67034, 150);
end;
Die Transparenz eines beliebigen Fensters entfernen
Funktion:
Delphi-Quellcode:
procedure MakeWindowOpaque(Wnd: HWND);
const
  WS_EX_LAYERED = $80000;
Begin
   // remove the layer from our window
   SetWindowLong(Wnd, GWL_EXSTYLE, GetWindowLong(Wnd, GWL_EXSTYLE) And Not WS_EX_LAYERED);

   // redraw complete window
   RedrawWindow(Wnd, nil, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
End;
Beispielaufruf, um die Transparenz des Fensters mit dem Handle 67034 zu entfernen:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
   MakeWindowOpaque(67034);
end;
Hinweis: getestet unter WindowsXP Pro SP2

[edit=Matze]Ergänzungen von shmia, basierend auf Source-Code des SDC eingefügt. MfG, Matze[/edit]
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz