Transparan Form yapmak (ayarlanabilir)

PAIN_KILLER
13-10-2006, 12:19   |  #1  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
149 mesaj
Kayıt Tarihi:Kayıt: Mar 2006

Procedure Transparan(pencere: HWND; deger:integer);
var //POWERED BY KAMIL YESIL
   FColorKey: TCOLOR;
{} function MakeWindowTransparent(Wnd: HWND; nAlpha: Integer = 10): Boolean;
   type  //POWERED BY KAMIL YESIL
    TSetLayeredWindowAttributes = function(hwnd: HWND; crKey: COLORREF; bAlpha: Byte;
     dwFlags: Longint): Longint;
    stdcall;
    const
     LWA_ALPHA     = 2;
     WS_EX_LAYERED = $80000;
    var      hUser32: HMODULE;
      SetLayeredWindowAttributes: TSetLayeredWindowAttributes;
    begin
      Result := False;
      hUser32 := GetModuleHandle('USER32.DLL');
      if hUser32 <> 0 then
       begin @SetLayeredWindowAttributes := GetProcAddress(hUser32, 'SetLayeredWindowAttributes');
         if @SetLayeredWindowAttributes <> nil then
         begin
          SetWindowLong(Wnd, GWL_EXSTYLE, GetWindowLong(Wnd, GWL_EXSTYLE) or WS_EX_LAYERED);
          SetLayeredWindowAttributes(Wnd, 0, Trunc((255 / 100) * (100 - nAlpha)), LWA_ALPHA);
          Result := True;
         end;   
       end;
    end;
BEGIN //temel
  SetWindowLong(pencere, GWL_EXSTYLE, GetWindowLong(pencere, GWL_EXSTYLE) or WS_EX_LAYERED);
  SetLayeredWindowAttributes(pencere, ColorToRGB(FColorKey), Deger, LWA_ALPHA);
END;//temel  //POWERED BY KAMIL YESIL


kullanımı:
//forma bir trackbar ekleyin

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Transparan(handle,trackbar1.Position);
end;

3DART
13-10-2006, 13:15   |  #2  
Yeni Üye
Teşekkür Sayısı: 0
36 mesaj
Kayıt Tarihi:Kayıt: Eki 2006

Bu kodların farklı bir özelliği de var mı anlayamadım ama forma transparan özelliği vermenin daha pratik bir yolu var, o da Form'un "AlphaBlend" ve "AlphaBlendValue" parametrelerini kullanmaktır...


Forma bir TrackBar koy, TrackBar'ın max değerini 255 yap ve position değerini de 255 yap:

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
AlphaBlendValue:=TrackBar1.Position;
end;

PAIN_KILLER
13-10-2006, 14:13   |  #3  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
149 mesaj
Kayıt Tarihi:Kayıt: Mar 2006

Bende senin söylediğini çalıştramadım benim dediğim formun arkası görülebiliyor.TrackBar'ın max değerini 255 yap, örneğini gönderiyom bir bak
http://www.sendmefile.com/00472268

3DART
13-10-2006, 14:40   |  #4  
Yeni Üye
Teşekkür Sayısı: 0
36 mesaj
Kayıt Tarihi:Kayıt: Eki 2006

Örneğe baktım, benim kodlar da aynı işlemi yapıyor...
AlphaBlend özelliği Delphi 6 ve sonrası için geçerlidir...

Benim örnek de burda...

Download Linki: http://www.hemenpaylas.com/download/1862734/Transparan.zip.html

Son Düzenleme: 3DART ~ 13 Ekim 2006 14:43
3DART
13-10-2006, 16:25   |  #5  
Yeni Üye
Teşekkür Sayısı: 0
36 mesaj
Kayıt Tarihi:Kayıt: Eki 2006

Aşağıdaki kodlar da sadece formun içini saydam yapar...
Formun üzerindekilere ve formun kenarlarına dokunmaz...

procedure TForm1.FormCreate(Sender: TObject);
var
MyRgn, ClientRgn, ButtonRgn: THandle;
Margin, X, Y: Integer;
begin
Margin := (Width - ClientWidth) div 2;
MyRgn := CreateRectRgn(0, 0, Width, Height);
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);
CombineRgn(MyRgn, MyRgn, ClientRgn, RGN_XOR);
X := X + Button1.Left;
Y := Y + Button1.Top;
ButtonRgn := CreateRectRgn(X, Y, X + Button1.Width, Y + Button1.Height);
//-----------!!-----------
CombineRgn(MyRgn, MyRgn, ButtonRgn, RGN_XOR);
SetWindowRgn(Handle, MyRgn, True);
end;

PAIN_KILLER
18-10-2006, 15:23   |  #6  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
149 mesaj
Kayıt Tarihi:Kayıt: Mar 2006

Ben DELPHI 7 kullanıyorum. AlphaBlendValue özelliğini denedim çalışmıyo.
Paylaştığın örneğe bugün erişemedim 5 gün oldu daha!
Daha iyi bir paylasım sitesi:  

bu site daha iyi
Benim gönderdiğim örnek hala duruyor!

3DART
19-10-2006, 09:35   |  #7  
Yeni Üye
Teşekkür Sayısı: 0
36 mesaj
Kayıt Tarihi:Kayıt: Eki 2006

Benim örnek de link de hala duruyor, üstelik baktım 1 kişi indirmiş.
Ayrıca ben de denemek için indirdim.

Neyse aynısını senin verdiğin paylaşım sitesine de yükledim:

file link: http://www.sendmefile.com/00474222

PAIN_KILLER
26-10-2006, 09:56   |  #8  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
149 mesaj
Kayıt Tarihi:Kayıt: Mar 2006

Tamam indirdim Örneği baktım benim yapamamamın sebebi formun AlphaBlend özelliğini true yapmamışım.

PAIN_KILLER
26-10-2006, 10:12   |  #9  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
149 mesaj
Kayıt Tarihi:Kayıt: Mar 2006

Ancak benim gönderdiğim transparan() özelliğinde windowsta çalışan tüm pencereleri transparan  yapabiliyorsunuz Örn: bir hesap makinesi Çalışır durumda olsun trackbarın max ve position değerleri 255 olsun trackbarın change olayına:

var
pen:hwnd;
begin
pen:=findwindow(nil,'Hesap Makinesi');
if pen<=0 then pen:=findwindow('Hesap Makinesi',nil);
if pen>0 then
    transparan(pen,trackbar1.position);
end;

Bu yöntem ile görevcubuğunu,masaüstünü... hemen hemen çalışan  tüm pencereleri transparan yapabilirsiniz..

İyi Çalışmalar