Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Transparenz eines Fensters einstellen (https://www.delphipraxis.net/72530-transparenz-eines-fensters-einstellen.html)

sacred 2. Jul 2006 13:40


Transparenz eines Fensters einstellen
 
Hallo mal wieder,
war ja lange Zeit nicht mehr da.

Ich möchte gerne die Transparenz von einer Form einstellen. Nur wie?
Ich besitze Delphi 7 Personal. Bisher, wenn ich wollte, habe ich das Fenster total transparent bekommen
indem ich form.color:=clblack; form.transparency:=true; und die transparenzfarbe:=clblack gesetzt habe.
Aber dann ist die Opazität ja 100%. Wie bekomme ich z.b. 50 % hin?

Danke für alle Antworten,

Moritz

Neutral General 2. Jul 2006 13:42

Re: Transparenz eines Fentsters einstellen
 
Delphi-Quellcode:
Form1.Alphablend := true;
Form1.AlphaBlendValue := 100; // 0-255
Das ist die Lösung ;)

Gruß Neutral General

Nils_13 2. Jul 2006 13:46

Re: Transparenz eines Fensters einstellen
 
Das läuft aber nicht in allen Windows-Systemen.
Der folgende Code sollte das besser erledigen:
Delphi-Quellcode:
unit trans;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

procedure MakeTransparent(AHandle : THandle; AValue : byte = 0);

implementation

type
    TSetLayeredWindowAttributes = function (
    hwnd : HWND;
    crKey : TColor;
    bAlpha : byte;
    dwFlags : DWORD
    ): BOOL; stdcall;

const
  WS_EX_LAYERED = $80000;
  LWA_COLORKEY = 1;
  LWA_ALPHA = 2;

procedure MakeTransparent(AHandle : THandle; AValue : byte = 0);
var
  Info: TOSVersionInfo;
  SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
begin
  Info.dwOSVersionInfoSize := SizeOf(Info);
  GetVersionEx(Info);
  if (Info.dwPlatformId = VER_PLATFORM_WIN32_NT) and
    (Info.dwMajorVersion >= 5) then
  begin
    SetLayeredWindowAttributes := GetProcAddress(GetModulehandle(user32),'SetLayeredWindowAttributes');
    if Assigned(SetLayeredWindowAttributes) then
    begin
      SetWindowLong(AHandle, GWL_EXSTYLE, GetWindowLong(AHandle, GWL_EXSTYLE) or WS_EX_LAYERED);
      SetLayeredWindowAttributes(AHandle, 0, AValue, LWA_ALPHA);
    end;
  end;
end;

end.




uses
  ..., trans;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MakeTransparent(Handle, 120);
end;
Du kannst damit auch Dialoge transparent machen:
Delphi-Quellcode:
procedure TForm1.FontDialogShow(Sender: TObject);
begin
  MakeTransparent(FontDialog.Handle, 100);
end;

sacred 2. Jul 2006 13:52

Re: Transparenz eines Fensters einstellen
 
wow vielen dank klappt super :D

THX

SirThornberry 2. Jul 2006 16:54

Re: Transparenz eines Fensters einstellen
 
Zitat:

Zitat von Nils_13
Das läuft aber nicht in allen Windows-Systemen.
Der folgende Code sollte das besser erledigen:
....

Der Source den du gepostet hast bewirkt auch nicht bei allen Systemen die Transparenz. Denn das Property "Alphablend" des Forms verwendet genau die gleichen Funktionen.

Nils_13 2. Jul 2006 18:24

Re: Transparenz eines Fensters einstellen
 
Wie kann man es bei allen Systemen zum laufen bringen ?

turboPASCAL 2. Jul 2006 18:46

Re: Transparenz eines Fensters einstellen
 
Gar nicht, Transparentz wird erst ab Win 2000 unterstützt. Um Transparenz bei Win 95..98 zu bekommen kan man nur trixen und das bild der der Form mit den daunter liegenden Elementen Blenden (programier und rechenaufwendig). Was geht sind Unförmige Formen ;) , dazu hab ich hier irgend wo schon mal was geposted.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz