Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Runtime TPanel Arkaplanının Transparent Yapılması
#1
Merhaba,

TPanel komponentini kullanarak geliştirdiğim birkaç alternatif komponent yer alıyor. OnPaint aksiyonunda yeniden boyama işlemi yapıyorum. Default Windows çıktısında her şey yolunda gözüküyor. Runtime arayüz temalarını uyguladığı zaman TPanel, benim işlemlerimi gerçekleştirmiyor. 

Runtime arayüz temalarının spesifik olarak belirteceğim TWinControl komponentlerine müdahale etmemesi için bir öneriniz var mı? (Hatta mümkünse doğrudan komponent bazlı kısıtlama)
Cevapla
#2
Panelin StyleElements  property'sinden dilediğiniziz boşaltabilirsiniz.

Örneğin 


Normal hali şu iken....
Panel1.StyleElements  := [seFont,seClient,seBorder];


Font ve Border style tarafından yönetilsin ancak Client'e dokunmasın demek için....seClient silebilirsiniz.
Panel1.StyleElements  := [seFont, seBorder];


Herşeyi ben yöneteyim Style Panel'e etki etmesin derseniz
Panel1.StyleElements  := [];

Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
(31-05-2020, Saat: 15:33)mrmarman Adlı Kullanıcıdan Alıntı: Panelin StyleElements  property'sinden dilediğiniziz boşaltabilirsiniz.

Örneğin 


Normal hali şu iken....
Panel1.StyleElements  := [seFont,seClient,seBorder];


Font ve Border style tarafından yönetilsin ancak Client'e dokunmasın demek için....seClient silebilirsiniz.
Panel1.StyleElements  := [seFont, seBorder];


Herşeyi ben yöneteyim Style Panel'e etki etmesin derseniz
Panel1.StyleElements  := [];



@mrmarman Harika bir bilgi! Çok teşekkürler. 

SoF'da bu konu daha önce tartışılmış ve David H. bunun yanlış olduğunu veya transparan = (visible=false) anlamına geldiğini söylemiş. Son çare TPanel'den inherit olan ve arkaplanı transparan olan bir panel komponenti oluşturacaktım ama gerek kalmadı. 

Runtime temalarını kullanıp kendi komponent arabirimlerini kodlayanlar eğer bu tarz tasarımın sizin kodlarınızı ezdiği bir durumla karşılaşırsanız sadece TPanel değil, TLabel, TImage vb. temel komponentlerin tamamı için StyleElements özelliklerini yönetebilirsiniz.

Pratik İpucu: İlgili formun *.DFM dosyasını kompakt bir kod editörü (VS Code gibi) ile açın ve ilgili komponent tanımlarına Üstad @mrmarman ın belirttiği gibi tanımı yazın, noktalı virgül kullanmadan.
Cevapla
#4
(31-05-2020, Saat: 15:08)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: Merhaba,

TPanel komponentini kullanarak geliştirdiğim birkaç alternatif komponent yer alıyor. OnPaint aksiyonunda yeniden boyama işlemi yapıyorum. Default Windows çıktısında her şey yolunda gözüküyor. Runtime arayüz temalarını uyguladığı zaman TPanel, benim işlemlerimi gerçekleştirmiyor. 

Runtime arayüz temalarının spesifik olarak belirteceğim TWinControl komponentlerine müdahale etmemesi için bir öneriniz var mı? (Hatta mümkünse doğrudan komponent bazlı kısıtlama)

Merhaba panel transpare işlemine ihtiyacım var nasıl yaptınız acaba, bilgi paylaşabilir misiniz,

Teşekkürler.
Cevapla
#5
(12-07-2021, Saat: 13:51)serdal_aksoy Adlı Kullanıcıdan Alıntı:
(31-05-2020, Saat: 15:08)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: Merhaba,

TPanel komponentini kullanarak geliştirdiğim birkaç alternatif komponent yer alıyor. OnPaint aksiyonunda yeniden boyama işlemi yapıyorum. Default Windows çıktısında her şey yolunda gözüküyor. Runtime arayüz temalarını uyguladığı zaman TPanel, benim işlemlerimi gerçekleştirmiyor. 

Runtime arayüz temalarının spesifik olarak belirteceğim TWinControl komponentlerine müdahale etmemesi için bir öneriniz var mı? (Hatta mümkünse doğrudan komponent bazlı kısıtlama)

Merhaba panel transpare işlemine ihtiyacım var nasıl yaptınız acaba, bilgi paylaşabilir misiniz,

Teşekkürler.

İnternette biraz araştırma yaptıysanız delphinin standart panel componentti ile saydamlık yapılamadığını göreceksiniz
onun yerine yapmak istediğinizi 3. firma bileşenleri ile yapmalısınız (Ücretlidir)
 veya  
@mrmarman beyin güzel sözü olan  Programcılık biraz sihir biraz illizyon sihir beynimizde illizyon her yerde deyişi ile 
madem panel ile saydamlık olmuyor farkı komponentlere yönelerek çözüm üretmelisiniz.
Yukarda yazmışlar oluyor demeyin orada @Abdullah ILGAZ bey zaten onpaint tarafında kendi çözümünü üretmiş.
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#6
Delphi'nin son versiyonları ile Windows 10 'da aşağıdaki kod vasıtası ile tüm TWinControl türevlerine yarı saydamlık kazandırılabilir.

  
type
TWinControlHelper = class helper for TWinControl
  public
   procedure AlphaBlendEx(const AlphaBlendValue : Byte); 
 end;

...
...
...

procedure TWinControlHelper.AlphaBlendEx(const AlphaBlendValue: Byte);
var
 AHandle   : HWND;
 AExStyle  : NativeInt;
begin
 AHandle := Self.Handle;

 AExStyle := GetWindowLongPtr(AHandle, GWL_EXSTYLE);
 if AlphaBlendValue = 255
 then AExStyle := AExStyle and (not WS_EX_LAYERED)
 else AExStyle := AExStyle or WS_EX_LAYERED;

 SetWindowLongPtr(AHandle, GWL_EXSTYLE, AExStyle);
 SetLayeredWindowAttributes(AHandle, 0, AlphaBlendValue, LWA_ALPHA);
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
 Panel1.AlphaBlendEx(128);
end;

Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Information Uygulama yönetici olarak mı çalışıyor? (runtime tespit etme) bakyuz 0 397 28-04-2025, Saat: 17:22
Son Yorum: bakyuz
Video runtime packages deposizm 5 960 05-02-2025, Saat: 09:54
Son Yorum: damert6
  Runtime ile SpinEdit toplamı alma denizfatihi 7 1.151 04-12-2024, Saat: 12:28
Son Yorum: yhackup
  Runtime Form Oluşturmak ermanispir@gmail.com 5 2.063 02-08-2023, Saat: 09:31
Son Yorum: SimaWB
  Delphi ile paintdeki renkle doldur özelliğinin yapılması JavaCiva 1 1.168 25-04-2023, Saat: 22:27
Son Yorum: quiet1day



Konuyu Okuyanlar: 1 Ziyaretçi