Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Bileşen Özelliklerini Değiştirme
#1
Merhaba Arkadaşlar,

Bir projede BusinnesSkinForm Kullanıyorum. Kullananlar bilirler ki her BsskinForm elemanlarını forma koyunca özelliklerinden "SkinData" özelliğine "TbsSkinData" bileşenini göstermek gerekiyor. Yoksa tema çıkmıyor.

Ben bunu toplu olarak yapmak istiyorum. Aşağıdaki gibi bir kod yazdım ama başarılı olamadım. Kodu Create olayına bağladım. Nerede Hata Yaptığımıda anlamadım.

TbsSkinData bileşenim TemaData dır.

uses TypInfo;


procedure TAnaForm.SkinAtama;
var
  ElemanSayisi: Integer;
  ElemanObject: TObject;
  ElemanControl: TControl;
  Elemaninfo: PPropInfo;
begin
  for ElemanSayisi := 0 to ComponentCount - 1 do
  begin
    ElemanObject := AnaForm.Components[ElemanSayisi] as TObject;

    if ElemanObject is TControl then
    begin
      ElemanControl := (AnaForm.Components[ElemanSayisi] as TControl);
      Elemaninfo := GetPropInfo(ElemanControl.ClassInfo, 'SkinData');
      if Assigned(Elemaninfo) then
        SetStrProp(ElemanObject, 'SkinData', 'TemaData');
    end;
    ElemanControl.Refresh;
  end;

end;
Cevapla
#2
BusinnesSkin kullanmıyorum. Dolayısıyla test etme şansım yok:
BusinnesSkin bileşenlerinin SkinData özelliği barındıran en üst sınıf ismini biliyorsanız işinizi daha kolay yapabilirsiniz. 
Mesela; bileşenleriniz TbsSkinObject adında bir sınıftan türemiş diyelim(Bu sınıfın SkinData özelliği olmalı). O zaman siz yukarıdaki döngü içinde şöyle birşey kullanabilirsiniz:
   if ElemanObject is TbsSkinObject then
     TbsSkinObject(ElemanObject).SkinData := TemaData;
There's no place like 127.0.0.1
WWW
Cevapla
#3
@SimaWB

hocam cevap icin teşekkürler. Henüz deneme ve bakma fırsatım olmadı. Eger böyle bir sınıfı bulamaz isem nasıl bir yol izlemem gerekiyor? Otomatik sınıfı buldurup yaptırmam mümkün mü ? İlk baktığımdan her eleman icin farklı sınıflar vardı. Mesela tbsedit, tbsbutton, tbsribbon vsvs.. bunları tek tek yazınca oluyor ama amelelik.. ortak bir sınıf icin gözden  geçireceğim.
Cevapla
#4
@SimaWB 

halletim Hocam. Bsskin classlarını incelerken TbsSkinControl clasından türetildiklerini gördüm. kodu aşağıdaki gibi düzenleyince istediğim oldu. elemanların "skindata" özelliklerini kodla aktarabiliyor. Yol gösterdiğiniz için teşekkürler.

implementation

uses TypInfo;

procedure TAnaForm.SkinAtama(SkinData:TbsSkinData);
var
 ElemanSayisi: Integer;
 ElemanObject: TObject;
 ElemanControl: TControl;
 Elemaninfo: PPropInfo;
begin
 for ElemanSayisi := 0 to ComponentCount - 1 do
 begin
   ElemanObject := AnaForm.Components[ElemanSayisi] as TObject;
   if ElemanObject is TControl then
    begin
     ElemanControl := (AnaForm.Components[ElemanSayisi] as TControl);
     Elemaninfo := GetPropInfo(ElemanControl.ClassInfo, 'SkinData');
     if Assigned(Elemaninfo) then
        TbsSkinControl(ElemanObject).SkinData := SkinData;
    end;
 end;
end;

{$R *.dfm}

procedure TAnaForm.FormCreate(Sender: TObject);
begin
 SkinAtama(TemaData);
end;
Cevapla
#5
Ama benim dediğim gibi olmamış ki Big Grin
Benim tavsiyemde TypInfo'ya gerek yok.
Şu kadar basit:

procedure TAnaForm.SkinAtama(SkinData:TbsSkinData);
var
 I: Integer;
 Temp: TComponent;
begin
 for I := 0 to ComponentCount - 1 do
 begin
   Temp := Components[I];
   if Temp is TbsSkinControl then
     TbsSkinControl(Temp).SkinData := SkinData;
 end;
end;
There's no place like 127.0.0.1
WWW
Cevapla
#6
(25-10-2018, Saat: 13:49)SimaWB Adlı Kullanıcıdan Alıntı: Ama benim dediğim gibi olmamış ki Big Grin
Benim tavsiyemde TypInfo'ya gerek yok.
Şu kadar basit:

procedure TAnaForm.SkinAtama(SkinData:TbsSkinData);
var
 I: Integer;
 Temp: TComponent;
begin
 for I := 0 to ComponentCount - 1 do
 begin
   Temp := Components[I];
   if Temp is TbsSkinControl then
     TbsSkinControl(Temp).SkinData := SkinData;
 end;
end;

Haklısınız boşuna kodu uzatmışım. Tavsiyeniz için teşekkürler. Smile

Son Hali Aşağıdaki gibi. Kullanacağım elemanların bazılarının class ları farklı. gerekirse ekliyorum.

procedure TAnaForm.SkinAtama(SkinData:TbsSkinData);
var
I: Integer;
begin
for I := 0 to ComponentCount - 1 do
begin
  if Components[I] is TbsSkinControl then
    TbsSkinControl(Components[I]).SkinData := SkinData;

  if Components[I] is TbsSkinOpenDialog then
    TbsSkinOpenDialog(Components[I]).SkinData := SkinData;

  if Components[I] is TbsBusinessSkinForm then
    TbsBusinessSkinForm(Components[I]).SkinData := SkinData;

end;
end;
Cevapla
#7
Başıma geldi söylemek istedim, Mümkün olduğunca kullanmamanı tavsiye ederim. Sebebi , delphi7 kullandığım dönemlerde bu bileşen setini bende kullanmıştım. Gün geldiki Xe sürümleri cidden daha çekici ve kullanışlı gelmeye başlayınca, geçişi yaptım. Senmisin geçiş yapan , o bileşen setini xe sürümüne kurmadan eski çalışmalarda düzeltmek tam bir eziyet.  Onlarca formu ve bileşeni temel bileşenleri ile yer değiştirmek programı sıfırdan yazmaktan daha zor geldi Smile)  Bu da aklınızın bir köşesinde olsun istedim. ( çorludan iyi geceler Smile
Cevapla
#8
(26-10-2018, Saat: 01:04)Ok Lord_Ares Adlı Kullanıcıdan Alıntı: Başıma geldi söylemek istedim, Mümkün olduğunca kullanmamanı tavsiye ederim. Sebebi , delphi7 kullandığım dönemlerde bu bileşen setini bende kullanmıştım. Gün geldiki Xe sürümleri cidden daha çekici ve kullanışlı gelmeye başlayınca, geçişi yaptım. Senmisin geçiş yapan , o bileşen setini xe sürümüne kurmadan eski çalışmalarda düzeltmek tam bir eziyet.  Onlarca formu ve bileşeni temel bileşenleri ile yer değiştirmek programı sıfırdan yazmaktan daha zor geldi Smile)  Bu da aklınızın bir köşesinde olsun istedim. ( çorludan iyi geceler Smile

Tavsiyeniz icin teşekkürler. Genelde kullandığım bir şey değil ama basit bir uygulama icin kullanacağım. Delphi 10.2 Tokyo kullanıyorum. Hatta acık kaynak bile paylaşabilirim. TEKİRDAĞ süleymanpaşa dan hayırlı Cuma’lar..
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Exclamation dosya özellikleri değiştirme erdogan 1 321 09-10-2023, Saat: 16:09
Son Yorum: hi_selamlar
  Görsel Bileşen konusunda uzman arkadaşlar... baloglurecep 1 492 14-01-2023, Saat: 08:49
Son Yorum: cinarbil
  Tarih formatını değiştirme Nedim 3 718 12-10-2022, Saat: 08:28
Son Yorum: frmman
  Hangi bileşen tıklandı Aktolgali 8 2.434 10-08-2022, Saat: 22:56
Son Yorum: Aktolgali
  Devexpress cxgrid gruplama bilgisi değiştirme cinarbil 3 1.186 18-07-2022, Saat: 08:42
Son Yorum: m_ekici



Konuyu Okuyanlar: 1 Ziyaretçi