Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ListView - DynamicAppearance
#1
Merhaba,
ListView nesnesinde, her kayıt içerisinde birden fazla Item ekleme ve bu Item'ları kullanama konusunda kısa bir anlatım yapalım.
Bilindiği gibi Delphi'nin önceki sürümlerinde ListView içerisinde, kayıtlar klasik olarak Text, Detay Text, Image ve Accessory olarak gösterilebiliyordu. 
Üstelik bu Item'lar her kayıtta yalnızca bir defa kullanılabiliyordu.
Delphi'nin yeni sürümü olan; Berlin 10.1 ve daha üst sürümlerinde DynamicAppearance özelliği ile ListView'e istenildiği kadar Text, Image, Accessory, TextButton ve GlyphButton eklenebilmektedir.
Ayrıca her kayıtta eklenebilecek Item için sayı sınırı belirtilmemiştir. Bu özellik, ListView nesnesinin daha etkin ve daha özgün kullanılmasını sağlamaktadır.

ListView Item olarak eklenebilecek nesne tipleri;
  • TTextObjectAppearance
  • TImageObjectAppearance
  • TAccessoryObjectAppearance
  • TTextButtonObjectAppearance 
  • TGlyphButtonObjectAppearance

Şimdi bir örnekle ListView'in DynamicAppearance özelliğini kullanarak, neler yapılabileceğine bir göz atalım.

1- Form üzerine bir adet ListView yerleştirelim.
2- Structure penceresinden ListView > ItemAppearance > Item'ı seçelim.
3- Object Inspector'dan Appearance özelliğinden DynamicAppearance 'ı seçelim.

LvD1.jpg

4- Yine ListView > ItemAppearance > Item seçili iken, Object Inspector'dan Add new... penceresini açalım.

LvD2.jpg

5- Açılan pencerede Text, Image, Accessory, TextButton ve GlyphButton nesnelerinden herhangi birini seçerek ListView Item'a yerleşmesini sağlayabilirsiniz. 
Burada yer alan Item türlerinden istediğiniz sayıda ekleme yaparak, konumlandırabilir ve boyutunu değiştirebilirsiniz.

Örnek:
LvD3.jpg

6- Eklediğiniz MultiDetail Item'ları tasarlamak için; ListView üzerinde sağ tuşa basalım ve açılan menüden Toggle DesignMode menü elemanını seçelim.

LvD4.jpg

7- İster Structure penceresinden isterseniz doğrudan ListView üzerinden bir Item elemanı seçerek Object Inspector'dan pozisyon, boyut, font ve diğer bir çok özelliğini düzenleyebilirsiniz.

Örnek:
LvD5.jpg


ListView'in, FindDrawable yöntemi ile TListItemDrawable tipini bulunup, TTextObjectAppearance, TImageObjectAppearance, TAccessoryObjectAppearance, TTextButtonObjectAppearance veya TGlyphButtonObjectAppearance tiplerine dönüştürülmesi ile bu Item'ların tüm özellikleri kullanılabilir.

Bir örnekle Item özelliklerinin kullanılmasını anlatarak daha açıklayıcı olmasını sağlayalım.

1- Örnek bir proje açalım ve bir ListView ile bir button ekleyelim. 

2- ListView'de kullanacağımız bir adet ImageList yerleştirelim ve 3 adet icon ekleyelim.

3- Uses bölümüne Utils referansını ekleyelim.

Uses
FMX.Utils;

4- Yukarıda anlatıldığı gibi ListView'in Appearance özelliğnde DynamicAppearance seçelim ve bir TTextObjectAppearance ile 3 adet TImageObjectAppearance Item'ı yerleştirelim.

LvD6.png

5- Yerleştirdiğiniz Item'ların pozisyon ve boyutunu belirleyelim.

LvD7.png

6- Butonun OnClick olayında örnek kayıtları oluşturacak ve gerekli atamaları yapacak kodları yazalım.

procedure TForm2.SpeedButton1Click(Sender: TObject);
var
  I: Integer;
  LItem: TListViewItem;
begin
  ListView1.Items.Clear;
  ListView1.BeginUpdate;
  for I := 1 to 10 do
  begin
    LItem := ListView1.Items.Add;
    LItem.Data['Text1'] := I.ToString() + '. Kayıt';
    TListItemImage(LItem.Objects.FindDrawable('Image2')).ImageIndex:= 0;
    TListItemImage(LItem.Objects.FindDrawable('Image3')).ImageIndex:= 1;
    TListItemImage(LItem.Objects.FindDrawable('Image4')).ImageIndex:= 2;
  end;
  ListView1.EndUpdate;
end;

Yukarıdaki kod yapısından da anlaşıldığı gibi bir TListViewItem tanımlaması ile bu tip diğer temel tiplere dönüştürülebilmektedir. Bu dönüşüm sonucunda elde edilen asıl tipin tüm özellikleri kullanılabilir. 
Örneğimizde TTextObjectAppearance'ın Text özelliği,  TImageObjectAppearance'ın ise ImageIndex özelliği kullanılmıştır.
Kod içerisinde Data özelliğinde kullanılan Text1, Image2, Image3 ve Image4 isimleri Structure penceresinde ListView1 > ItemAppearance > Item altındaki nesne adlarıdır.

Örneğimizin ekran görüntüsü:

LvD8.png


İyi çalışmalar...
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#2
Makalenizden çok şey öğrendim teşekkürler.


Takıldığım yer TTextButtonObjectAppearance eklediğim zaman yüksekliği konusunda değişim yapamıyorum. her zaman ıtem yüksekliğinde oluyor. Buna yapabileceğimiz bir çözüm varmı. 


Mesela alt alta iki buton koymak istiyorum ama olmuyor nedense. önizlemede görünse dahi çalıştığı zaman yine ıtem boyutunda oluyor. bu arada 10.1 berlin kullanıyorum.
Cevapla
#3
Teşekkür için REP puanı verebilirsiniz:
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
There's no place like 127.0.0.1
WWW
Cevapla
#4
Thumbs Up 
tabiki
Cevapla
#5
(30-11-2017, Saat: 14:17)webprog Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMakalenizden çok şey öğrendim teşekkürler.


Takıldığım yer TTextButtonObjectAppearance eklediğim zaman yüksekliği konusunda değişim yapamıyorum. her zaman ıtem yüksekliğinde oluyor. Buna yapabileceğimiz bir çözüm varmı. 


Mesela alt alta iki buton koymak istiyorum ama olmuyor nedense. önizlemede görünse dahi çalıştığı zaman yine ıtem boyutunda oluyor. bu arada 10.1 berlin kullanıyorum.

Rica ederim.
Delphi 10.2.1 sürümünde de aynı sorun var. Muhtemelen bug olabilir.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#6
Bu konuda bir yere daha takıldım yardımcı olursanız çok memnun olurum. Araştırdım ama internette pek net bişey bulamadım.

Daha önceden listview de resmi 
ListView1.Items.Add.Bitmap.LoadFromStream(memStream);
şeklinde bellekten alıyordum.  

Şu anda DynamicAppearance ile "image3" isimli resim yerleştirdim. Bu resme yukarıdaki gibi bellekten nasıl alabilirim. Ne denediysem olmadı.
Cevapla
#7
Teşekkür ederim kıymetli bilgilendirme için.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ListView - CheckBox Kullanmak Fesih ARSLAN 10 2.050 07-09-2018, Saat: 21:25
Son Yorum: engerex
  Class Helper ile Listview Loop witalihakko 2 784 20-03-2017, Saat: 00:42
Son Yorum: witalihakko
  AnonymousThread ile ListView'e Veri Yükleme witalihakko 3 910 15-03-2017, Saat: 11:54
Son Yorum: Tuğrul HELVACI
  ListView - ImageList Icon Almak Fesih ARSLAN 3 1.941 18-10-2016, Saat: 09:35
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi