Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
OrangeUI SkinFMXDBGrid Satırlara Resim Ekleme Hk.
#1
Merhaba,

OrangeUI SkinFMXDBGrid'te herhangi bir field'e satıra resim ekleme işlemi için aşağıdaki işlemi uygulayarak ekleye biliyorum, fakat her satırda aynı resim geliyor her satırda istediğim resmi nasıl getirebilirim.

Formadaki  SkinFMXDBGrid ile birlikte SkinFMXItemDesignerPanel ekleyip içerisine SkinFMXImage nesnesi ekleyip sonrada SkinFMXDBGrid ilgili fields gelip ItemDesignerPanel'i seçiyorum. Böylelikle tek resim olarak tüm satırlarda aynı resim gözükmüş oluyor, fakat ben belirli şartlara göre farklı resimlerin gelmesini istiyorum bunu nasıl yapabilirim, kendi örneklerinde de bulamadım.

Teşekkürler.
Cevapla
#2
Merhaba,

Designer içinde yer alan bileşenlerin özelliklerini duruma göre değiştirebilirsiniz, OnPrepareDrawItem eventini kullanarak. (uses bölümüne uDrawCanvas, uSkinItems eklenmeli)


Örnek; 
(burda label ve butonun özelliklerini değiştirdim fakat SkinFMXImage nesnesinin de özellikleri aynı şekilde değiştirilebilir, 
örneğin SkinFMXImage1.Prop.Picture.SkinImageList atanmış ise SkinFMXImage1.Prop.Picture.ImageIndex istenilen şartlara göre değiştirilebilir)


procedure TForm28.SkinFMXListBox1PrepareDrawItem(Sender: TObject;
 ACanvas: TDrawCanvas; AItemDesignerPanel: TSkinFMXItemDesignerPanel;
 AItem: TSkinItem; AItemDrawRect: TRect);
begin

 SkinFMXListBox1.BeginUpdate;

 if AItem.Detail='EASY' then
 begin
   l_duel_zorluk_taban.Material.BackColor.FillColor.Color:=$FF27BA27; //YEŞİL
   b_duel_accept.enabled:=true;
 end;

 if AItem.Detail='HARD' then
 begin
   l_duel_zorluk_taban.Material.BackColor.FillColor.Color:=$FFE1442B; //KIRMIZI
   b_duel_accept.enabled:=true;
 end;

 if AItem.Detail='MASTER' then
 begin
   l_duel_zorluk_taban.Material.BackColor.FillColor.Color:=$FF8A2BE1; //MOR
   b_duel_accept.enabled:=FALSE;
 end;


 SkinFMXListBox1.EndUpdate;

end;

Sonuç;

   
Cevapla
#3
(12-03-2020, Saat: 14:23)egeven Adlı Kullanıcıdan Alıntı: Merhaba,

Designer içinde yer alan bileşenlerin özelliklerini duruma göre değiştirebilirsiniz, OnPrepareDrawItem eventini kullanarak. (uses bölümüne uDrawCanvas, uSkinItems eklenmeli)


Örnek; 
(burda label ve butonun özelliklerini değiştirdim fakat SkinFMXImage nesnesinin de özellikleri aynı şekilde değiştirilebilir, 
örneğin SkinFMXImage1.Prop.Picture.SkinImageList atanmış ise SkinFMXImage1.Prop.Picture.ImageIndex istenilen şartlara göre değiştirilebilir)


procedure TForm28.SkinFMXListBox1PrepareDrawItem(Sender: TObject;
 ACanvas: TDrawCanvas; AItemDesignerPanel: TSkinFMXItemDesignerPanel;
 AItem: TSkinItem; AItemDrawRect: TRect);
begin

 SkinFMXListBox1.BeginUpdate;

 if AItem.Detail='EASY' then
 begin
   l_duel_zorluk_taban.Material.BackColor.FillColor.Color:=$FF27BA27; //YEŞİL
   b_duel_accept.enabled:=true;
 end;

 if AItem.Detail='HARD' then
 begin
   l_duel_zorluk_taban.Material.BackColor.FillColor.Color:=$FFE1442B; //KIRMIZI
   b_duel_accept.enabled:=true;
 end;

 if AItem.Detail='MASTER' then
 begin
   l_duel_zorluk_taban.Material.BackColor.FillColor.Color:=$FF8A2BE1; //MOR
   b_duel_accept.enabled:=FALSE;
 end;


 SkinFMXListBox1.EndUpdate;

end;

Sonuç;

Cevap için teşekkür ederim. Evet SkinFMXDBGrid'te bu olay varmış. AItem ile nesneye nasıl ulaşabileceğimi inceleyip bulduğumda çözümü yazacağım.

İyi çalışmalar.
Cevapla
#4
AItem ile image bileşeninin bağlantılı olmasına ihtiyaç yok, OnPrepareDrawItem eyleminde designer içinde yer alan tüm bileşenlere erişebilirsiniz (bileşenler Binding yapılmamış olsalar dahi)

örneğin 10 kayıtlı bir listeniz var, ilk kayıtta 1 numaralı resmi geri kalan 9 kayıtta 2 numaralı resmi göstersin isteyelim, designer içerisine 1 adet SkinFMXImage bileşeni ekleyin herhangi bir binding işlemi yapmayın sadece SkinImageList atamasını yapın (bu örnekte imagelist kullanılıyor farklı yollarla image yüklenebilir, dosyadan veya urlden)

OnPrepareDrawItem içinde bu şekilde yapabilirsiniz, AItem yalnızca şartlarınızı oluşturmanız için gerekli 

 if AItem.Index=0 then
 begin
   SkinFMXImage1.Prop.Picture.ImageIndex:=1;
 end else
 begin
   SkinFMXImage1.Prop.Picture.ImageIndex:=2;
 end;
Cevapla
#5
(12-03-2020, Saat: 20:18)egeven Adlı Kullanıcıdan Alıntı: AItem ile image bileşeninin bağlantılı olmasına ihtiyaç yok, OnPrepareDrawItem eyleminde designer içinde yer alan tüm bileşenlere erişebilirsiniz (bileşenler Binding yapılmamış olsalar dahi)

örneğin 10 kayıtlı bir listeniz var, ilk kayıtta 1 numaralı resmi geri kalan 9 kayıtta 2 numaralı resmi göstersin isteyelim, designer içerisine 1 adet SkinFMXImage bileşeni ekleyin herhangi bir binding işlemi yapmayın sadece SkinImageList atamasını yapın (bu örnekte imagelist kullanılıyor farklı yollarla image yüklenebilir, dosyadan veya urlden)

OnPrepareDrawItem içinde bu şekilde yapabilirsiniz, AItem yalnızca şartlarınızı oluşturmanız için gerekli 

 if AItem.Index=0 then
 begin
   SkinFMXImage1.Prop.Picture.ImageIndex:=1;
 end else
 begin
   SkinFMXImage1.Prop.Picture.ImageIndex:=2;
 end;

Paylaşım için teşekkürler, yeni bir şey öğrenmiş olduk. 

Bu işlemi yaparken sadece şu ilginç geldi;
5 Kayıt olan bir tablo (grid) için gridListPrepareDrawItem olayına yukarıdaki kod yazdığımda alt kısımda Memo1.Lines.Add (AItem.Index.ToString); 0,1,2,3,4,5 şeklinde 2886 satır kayıt ekliyor performans açısında sakıncalı değil mi.
Cevapla
#6
(13-03-2020, Saat: 10:37)pro_imaj Adlı Kullanıcıdan Alıntı:
(12-03-2020, Saat: 20:18)egeven Adlı Kullanıcıdan Alıntı: AItem ile image bileşeninin bağlantılı olmasına ihtiyaç yok, OnPrepareDrawItem eyleminde designer içinde yer alan tüm bileşenlere erişebilirsiniz (bileşenler Binding yapılmamış olsalar dahi)

örneğin 10 kayıtlı bir listeniz var, ilk kayıtta 1 numaralı resmi geri kalan 9 kayıtta 2 numaralı resmi göstersin isteyelim, designer içerisine 1 adet SkinFMXImage bileşeni ekleyin herhangi bir binding işlemi yapmayın sadece SkinImageList atamasını yapın (bu örnekte imagelist kullanılıyor farklı yollarla image yüklenebilir, dosyadan veya urlden)

OnPrepareDrawItem içinde bu şekilde yapabilirsiniz, AItem yalnızca şartlarınızı oluşturmanız için gerekli 

 if AItem.Index=0 then
 begin
   SkinFMXImage1.Prop.Picture.ImageIndex:=1;
 end else
 begin
   SkinFMXImage1.Prop.Picture.ImageIndex:=2;
 end;

Paylaşım için teşekkürler, yeni bir şey öğrenmiş olduk. 

Bu işlemi yaparken sadece şu ilginç geldi;
5 Kayıt olan bir tablo (grid) için gridListPrepareDrawItem olayına yukarıdaki kod yazdığımda alt kısımda Memo1.Lines.Add (AItem.Index.ToString); 0,1,2,3,4,5 şeklinde 2886 satır kayıt ekliyor performans açısında sakıncalı değil mi.

Teşekkürler. PrepareDrawItem çok fazla çalışıyor, içerisindeki kodları BeginUpdate - EndUpdate içerisine aldığımda gözle görülür performans düşüşü yaşamadım (100 kayıtlı liste mobilde hızlı bir şekilde scroll yapabiliyor) fakat bu kadar fazla çalışmasının başka zararları var mı bilmiyorum
Cevapla
#7
(13-03-2020, Saat: 12:58)egeven Adlı Kullanıcıdan Alıntı:
(13-03-2020, Saat: 10:37)pro_imaj Adlı Kullanıcıdan Alıntı: Paylaşım için teşekkürler, yeni bir şey öğrenmiş olduk. 

Bu işlemi yaparken sadece şu ilginç geldi;
5 Kayıt olan bir tablo (grid) için gridListPrepareDrawItem olayına yukarıdaki kod yazdığımda alt kısımda Memo1.Lines.Add (AItem.Index.ToString); 0,1,2,3,4,5 şeklinde 2886 satır kayıt ekliyor performans açısında sakıncalı değil mi.

Teşekkürler. PrepareDrawItem çok fazla çalışıyor, içerisindeki kodları BeginUpdate - EndUpdate içerisine aldığımda gözle görülür performans düşüşü yaşamadım (100 kayıtlı liste mobilde hızlı bir şekilde scroll yapabiliyor) fakat bu kadar fazla çalışmasının başka zararları var mı bilmiyorum

gridListPrepareDrawItem olayında işlem yaparken grid'in bağlı olduğu tablodaki veriye nasıl ulaşabilirim, yani; Tablodaki ilgili satırdaki değer 1 ise şu resmi göster 2 ise şu resmi göster demek istiyorum.

*Listbox gibi Item tag özelliği olmadığından erişemiyorum.
Cevapla
#8
(13-03-2020, Saat: 14:13)pro_imaj Adlı Kullanıcıdan Alıntı:
(13-03-2020, Saat: 12:58)egeven Adlı Kullanıcıdan Alıntı: Teşekkürler. PrepareDrawItem çok fazla çalışıyor, içerisindeki kodları BeginUpdate - EndUpdate içerisine aldığımda gözle görülür performans düşüşü yaşamadım (100 kayıtlı liste mobilde hızlı bir şekilde scroll yapabiliyor) fakat bu kadar fazla çalışmasının başka zararları var mı bilmiyorum

gridListPrepareDrawItem olayında işlem yaparken grid'in bağlı olduğu tablodaki veriye nasıl ulaşabilirim, yani; Tablodaki ilgili satırdaki değer 1 ise şu resmi göster 2 ise şu resmi göster demek istiyorum.

*Listbox gibi Item tag özelliği olmadığından erişemiyorum.

Yaklaşım tarzınız hücre değeri şu ise şu resmi göster olmalı. Burada her veri bir hücre olduğu için tag ile işlem yapılamaz bence.
O anda işlem gören aktif kaydın (record no, col index gibi) değerine göre kontrol yapmalısınız
Cevapla
#9
(13-03-2020, Saat: 15:13)RAD Student Adlı Kullanıcıdan Alıntı:
(13-03-2020, Saat: 14:13)pro_imaj Adlı Kullanıcıdan Alıntı: gridListPrepareDrawItem olayında işlem yaparken grid'in bağlı olduğu tablodaki veriye nasıl ulaşabilirim, yani; Tablodaki ilgili satırdaki değer 1 ise şu resmi göster 2 ise şu resmi göster demek istiyorum.

*Listbox gibi Item tag özelliği olmadığından erişemiyorum.

Yaklaşım tarzınız hücre değeri şu ise şu resmi göster olmalı. Burada her veri bir hücre olduğu için tag ile işlem yapılamaz bence.
O anda işlem gören aktif kaydın (record no, col index gibi) değerine göre kontrol yapmalısınız

Bunu biliyoruz zaten. Sorun; gridListPrepareDrawItem olayında aktif kayıda erişememek!
Cevapla
#10
Bu konuyu çözemedim, ekli dosya olarak basit bir örnek ekledim, aklına bir fikir gelen olursa paylaşırsa memnun olurum.

*Ülke sıraları belli diye direk işlem yaparak değilde veri tabanında ülke adı 'Turkey' ise Türk bayrağı şeklinde yapmaya çalışıyorum.
*Örnek kaynak dosyalar ektedir.

Teşekkürler


Ek Dosyalar
.zip   OrangeUI_DBGrid.zip (Dosya Boyutu: 60,48 KB / İndirme Sayısı: 1)
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  JSON to OrangeUI Listview ikurt07 6 928 08-04-2020, Saat: 15:54
Son Yorum: Fesih ARSLAN
  OrangeUI Sorunları Hakkında. pro_imaj 10 315 01-04-2020, Saat: 23:46
Son Yorum: pro_imaj
  ( Çözüldü ) OrangeUI windows 64 bit yok mu? mfidan 10 627 20-03-2020, Saat: 23:44
Son Yorum: mfidan
  OrangeUI Component Çalıştırma seydigozegir@gmail.com 1 91 04-03-2020, Saat: 13:05
Son Yorum: Fesih ARSLAN
  Android Imagelist e resim ekleme,TBitmap 41linea41 2 213 01-03-2020, Saat: 00:55
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi