Panelin transparent özelliği

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Panelin transparent özelliği

Mesaj gönderen Lord_Ares »

Merhaba formumda panel bileşenleri kullandım . Sorunum şu ki panelleri bir türlü transparent yapamadım. Ana formumda image bileşeni ile arkaplana resim atadım dolayısı ile üstünde kullandığım tüm panellerin transparent olmasını istiyorum veya renksiz. Fakat panel bileşenlerinin transparent özelliğini bulamadım. Harici komponentte kullanmak istemedim. Nasıl yapabileceğim hakkında fikirlerinizi payaşırsanız sevinirim.
Teşekürler.
Senat0r
Üye
Mesajlar: 80
Kayıt: 13 Tem 2014 09:30
Konum: Antalya

Re: Panelin transparent özelliği

Mesaj gönderen Senat0r »

Abilerimiz yememiş içmemiş bizler için unit yazmış güle güle kullanın :)

Kod: Tümünü seç

unit uAlphaTransPanel;

interface

uses
  windows, graphics, classes, ExtCtrls, messages;

type
  TPanel = class(ExtCtrls.TPanel)
  protected
    procedure Paint; override;
  private
    fAlphaVal : Byte;
    fBmpParent: TBitmap;
    fBmpOwn : TBitmap;
    procedure FSetAlphaVal(AValue: Byte);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property AlphaBlendValue: Byte read fAlphaVal write FSetAlphaVal default 255;
  end;

implementation

constructor TPanel.Create(AOwner: TComponent);
begin
  fAlphaVal := 255;
  fBmpParent := TBitmap.Create;
  fBmpOwn := TBitmap.Create;
  inherited Create(AOwner);
end;

destructor TPanel.Destroy;
begin
  inherited Destroy;
  fBmpOwn.Free;
  fBmpParent.Free;
end;

procedure TPanel.FSetAlphaVal(AValue: Byte);
begin
  if (AValue <> fAlphaVal) then
  begin
    fAlphaVal := AValue;
    Invalidate;
  end;
end;

procedure TPanel.Paint;
var LOldCanvas: TCanvas;
    LBlendFunc: TBlendFunction;
begin
  if (fAlphaVal < 255) and HandleAllocated and Assigned(Parent) then
  begin
    fBmpOwn.Width := Width;
    fBmpOwn.Height := Height;
    LOldCanvas := Canvas;
    PPointer(@Canvas)^ := fBmpOwn.Canvas;
    inherited Paint;
    PPointer(@Canvas)^ := LOldCanvas;

    fBmpParent.Width := Parent.Width;
    fBmpParent.Height := Parent.Height;
    Parent.Perform(WM_ERASEBKGND, fBmpParent.Canvas.Handle, 0);
    Parent.Perform(WM_PAINT, fBmpParent.Canvas.Handle, 0);

    LBlendFunc.BlendOp := AC_SRC_OVER;
    LBlendFunc.BlendFlags := 0;
    LBlendFunc.SourceConstantAlpha := not(fAlphaVal);
    LBlendFunc.AlphaFormat := 0;

    AlphaBlend(fBmpOwn.Canvas.Handle, 0, 0, Width, Height,
               fBmpParent.Canvas.Handle, Left, Top, Width, Height, LBlendFunc);

    BitBlt(Canvas.Handle, 0, 0, Width, Height, fBmpOwn.Canvas.Handle, 0, 0, SRCCOPY);
  end else
    inherited;
end;

end.

Kod: Tümünü seç

Panel1.AlphaBlendValue := 127;// default 255 tam görünüm
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...

Kod: Tümünü seç

Delete from hayat where cins="çıkarcılar"
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Panelin transparent özelliği

Mesaj gönderen Lord_Ares »

Yardım için teşekkürler fakat o abilerin yazdığını ben bir türlü kullanamadım :D
Denediğim şeyler
1) Yeni bir unit yaratıp verdiğin kodu ekledim ve programın olduğu klasöre kaydettim. Projemde uses ekleyerek çağırmayı denedim olmadı.
2) Yaratmış olduğum pas dosyasını delphi xe6 nın lib klasörüne attım. İnstall component diyerek hata almadan yükledim fakat komponent çubuğunda bulamadım. :D
( Delhixe6 ya bir türlü alışamadım komponent yüklemek, arayüz hepsi resmen değişmiş ordan onu yap burdan bunu yap şeklinde tam eziyet. )
Acaba hatam nerde ? nasıl yapmam gerekli.

Teşekürler
Senat0r
Üye
Mesajlar: 80
Kayıt: 13 Tem 2014 09:30
Konum: Antalya

Re: Panelin transparent özelliği

Mesaj gönderen Senat0r »

uniti oluşturup kaydedin daha sonra

Kod: Tümünü seç

unit uReportDetayAktar;

interface

uses
burdaki uses e dahil edip deneyin çalıştığını göreceksiniz olmazsa bağlanığp bakabilirim .
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...

Kod: Tümünü seç

Delete from hayat where cins="çıkarcılar"
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Panelin transparent özelliği

Mesaj gönderen Lord_Ares »

Şuan çalıştı teşekkürler. Gariptir ki implementation altında uses ile çağırdığımda çalışmadı yukarıdaki uses ta ekleyince çalıştı. :D
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Panelin transparent özelliği

Mesaj gönderen SimaWB »

Lord_Ares yazdı:Şuan çalıştı teşekkürler. Gariptir ki implementation altında uses ile çağırdığımda çalışmadı yukarıdaki uses ta ekleyince çalıştı. :D
Aslında garip değil: implementation altında uniti eklediğinizde, kendi panelinizin tanımı daha önce olduğu için bu ayarlar geçersiz oldu. Önce unit'i ekleyip sonra kendi panelinizi tanımladığınızda bu unit'teki ayarlar sizin panele eklenmiş olur.
There's no place like 127.0.0.1
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Re: Panelin transparent özelliği

Mesaj gönderen barisatalay »

SimaWB yazdı:
Lord_Ares yazdı:Şuan çalıştı teşekkürler. Gariptir ki implementation altında uses ile çağırdığımda çalışmadı yukarıdaki uses ta ekleyince çalıştı. :D
Aslında garip değil: implementation altında uniti eklediğinizde, kendi panelinizin tanımı daha önce olduğu için bu ayarlar geçersiz oldu. Önce unit'i ekleyip sonra kendi panelinizi tanımladığınızda bu unit'teki ayarlar sizin panele eklenmiş olur.

+1
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Panelin transparent özelliği

Mesaj gönderen Lord_Ares »

SimaWB bu bilgi için çok teşekkürler yeni bir şey daha öğrenmiş oldum. Ellerine sağlık. Eğer başarabilirsem bu uniti component olarak eklemeyi deneyeceğim.
Cevapla