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)
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 := [];
(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.
(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.
(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ş.
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;