ListView ve ImageList

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

ListView ve ImageList

Mesaj gönderen AliZairov »

İyi akşamlar. Tv izleme projemin windows versiyonunu hazırlıyorum tek kanal simge olayı kaldı. Önce FireMonkey yapmıştım amma bazı sorunlardan dolayı VCL projeyi yeniden tasarlayıp kodladım. Şimdi ListView ImageList bağladım tek resim ekleyemiyorum. Hata vermiyo boş geliyo liste.

Sitedeki görnüş gibi yapmak istiyorum.
Resim

Şu anki görünüş.
Resim

Ekleme kod parçam.

Kod: Tümünü seç

procedure TApp.AddList(ListView: TListView; Query: TFDQuery);
var
  I: Integer;
  LItem: TListItem;
  LImage: TImageList;
  MS: TMemoryStream;
begin
  ListView.Items.Clear;
  ListView.Items.BeginUpdate;
  with Query do
  begin
    SQL.Clear;
    SQL.Text := 'Select * From channels';
    Open;
  end;
  LImage := TImageList.Create(nil);
  LImage.Width := 40;
  LImage.Height := 40;
  ListView.StateImages := LImage;

  Query.First;
  for I := 0 to Query.RecordCount - 1 do
  begin
    LItem := ListView.Items.Add;
    LItem.Caption := '';
    LItem.ImageIndex := LImage.Count - 1;
    LItem.StateIndex := LImage.Count - 1;

    LItem.SubItems.Add(Query.FieldByName('name').Text);
    LItem.SubItems.Add(Query.FieldByName('code').Text);
    Query.Next;
  end;
  ListView.Items.EndUpdate;
  Query.Active := False;
end;
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: ListView ve ImageList

Mesaj gönderen thelvaci »

İlk olarak TImageList create etmişsiniz ama onu free etmediğiniz için bir adet memory leak'iniz var demektir. İkinci olarak; create ettiğiniz ImageList'in içine hiç bir image yüklememişsiniz. Tavsiyem form üzerine bir TImageList koyup, içine image'ler ekleyip onu kullanmanız.
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: ListView ve ImageList

Mesaj gönderen AliZairov »

thelvaci yazdı:İlk olarak TImageList create etmişsiniz ama onu free etmediğiniz için bir adet memory leak'iniz var demektir. İkinci olarak; create ettiğiniz ImageList'in içine hiç bir image yüklememişsiniz. Tavsiyem form üzerine bir TImageList koyup, içine image'ler ekleyip onu kullanmanız.
Merhaba hocam. Aslında kodlarım biraz büyük düzenlerken silimişim her halde imagelist kısmını. Dediğiniz gibi yeni bir proje açıp denedim normalde imageliste bir resim ekleyip öyle test ettim sorun olmadı. Kodla yaptım sorun olmadı aslında. Amma benim resimleri netden çektiği için boyut misal 250x250 bunu imagelist 40x40 yaptığımdan sadece oraya kadar resmi kesip alıyor. Amma ben Stretch olarak resmi imageliste almak istiyorum kodlarda öyle bir fonksiyon göremedim.

Kod: Tümünü seç

var
  Bitmap: TBitmap;
  LItem: TListItem;
begin
  Bitmap := TBitmap.Create;
  Bitmap.Width := LImage.Width;
  Bitmap.Height := LImage.Height;
  Bitmap.LoadFromFile('tv.bmp');
  LImage.Add(Bitmap, nil);
  //LImage.Insert(0, Bitmap, nil);
  Bitmap.Free;

  LItem := ListView1.Items.Add;
  LItem.ImageIndex := LImage.Count - 1;
  LItem.StateIndex := LImage.Count - 1;
  LItem.Caption := '';
  LItem.SubItems.Add('test');
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: ListView ve ImageList

Mesaj gönderen thelvaci »

Bunun için; size TObjectDictionary<String, TBitmap> türünde bir liste nesnesi daha faydalı olabilir ;)
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: ListView ve ImageList

Mesaj gönderen AliZairov »

thelvaci yazdı:Bunun için; size TObjectDictionary<String, TBitmap> türünde bir liste nesnesi daha faydalı olabilir ;)
Selam hocam. Tamam öylede denerim. Teşekkürler.
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: ListView ve ImageList

Mesaj gönderen G.Arkas »

Imagelist streching yapamaz. Thumbnail boyutu ne ise onu vermeniz gerekir. Boş gelme sebebi boyutu. Image değişik boyutlarda resim eklenmeye çalışınca listeyi sıfırlar. Debug da bakın göreceksiniz. Bunun yerine dosyayı dowload edip krpma yapıp imageliste eklerseniz hepsi aynı boyut olur. Sonra indirilen silinir. Ancak mobil bu denli bir işlemi kaldırır mı bilemem.
Resim
Cevapla