ListView Image Click

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

ListView Image Click

Mesaj gönderen RADCoder »

Merhabalar..
Herkese kolay gelsin arkadaşlar.
Listview"le ilgili küçük bir peoje yapıyordum restoran için.
Listview"de detaylı menü gösterme ve saire için aynı anda bir kaç event kullanmaktayım.
Ama şöyle bir sıkıntım var, ButtonClick olayını tetiklediğimde çoğu zaman OnClick olayıda tetikleniyor.. :(
Bu olayların sanki hepsi bir birine bağlı gibi, sorun yaratanda sanırsam budur..

Şöyle anlatayım:
Listview"in OnİtemClick ve ButtonClick olaylarını kullanıyorum. TextButton"a dokunduğumda malesef çoğu zaman OnİtemClick olayıda çalışıyor.
OnİtemClick olayını resmin click olayına atamak istedim ve lakin böyle bir eventi bulamadım.
Muharrem beyin verdiği Listview örneklerinden yola çıkarak:

Kod: Tümünü seç

var AImage : TListItemImage

TListItemImage olarak resim atayıp olayını yakalamaya çalıştığımda yinede İtemin her hangi kısmına dokunursam Resimdeki OnCheng olayı çalışmaya başladı..

Kullanıcı TextButton-a bastığında her zaman doğru tutduramıyor malesef. Drek butona basmak her defasında münkün olmayan bir şeydir.
Bu sebeple Fikirleriniz ve yardımlarınıza ihtiyacım var..
Herkese önceden teşekkür ve saygılar dilerim..
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: ListView Image Click

Mesaj gönderen AliZairov »

İyi akşamlar. Ben Muharrem abinin örneğini kullanıyorum. Sizin tasarım nasıl bilemiyorum.

Resim

Listeye klikleme kodum

Kod: Tümünü seç

procedure TMain.ChannelListItemClick(const Sender: TObject;
  const AItem: TListViewItem);
var
  SName, SLink: string;
begin
  MenuList.Visible := False;
  if App.Network = True then
  begin
    if ChannelList.ItemIndex <> - 1 then
    begin
      App.ShowToast(IntToStr(Main.ChannelList.ItemIndex + 1) + '. ' + (AItem.Objects.FindObject('name') as TListItemText).Text, False);
      SName := (AItem.Objects.FindObject('name') as TListItemText).Text;
      SLink := (AItem.Objects.FindObject('url') as TListItemText).Text;
      App.Play(SName, SLink);
    end;
  end else
  begin
    App.ShowToast('İnternet bağlantsı yoxdur!', False);
  end;
end;
Listeye item ekleme

Kod: Tümünü seç

procedure TApp.ObjectC(AItem: TListViewItem; LItem: TListItemText; strRefKod,
  strText: string; iOffsetX, iOffsetY: Integer);
begin
  LItem := TListItemText.Create(AItem);
  LItem.Name := strRefKod;
  LItem.PlaceOffset.X := iOffsetX;
  LItem.PlaceOffset.Y := iOffsetY;
  LItem.Text := strText;
  if strRefKod = 'url' then
    LItem.Visible := False;
end;

procedure TApp.AddList(ListView: TListView; Query: TFDQuery);
var
  LItem: TListViewItem;
  LImage: TListItemImage;
  LI1, LI2: TListItemText;
  I: Integer;
  MS: TMemoryStream;
begin
  ListView.Items.Clear;
  ListView.BeginUpdate;
  with Query do
  begin
    SQL.Clear;
    SQL.Text := 'Select * From channels';
    Open();
  end;
  Query.First;
  for I := 0 to Query.RecordCount - 1 do
  begin
    LItem := ListView.Items.Add;
    LItem.Height := 62;
    LItem.Text := '';
    LImage := TListItemImage.Create(LItem);
    LImage.Align := TListItemAlign.Leading;
    LImage.VertAlign := TListItemAlign.Center;
    LImage.Width := 48;
    LImage.Height := 48;
    LImage.OwnsBitmap := True;
    LImage.Bitmap := TBitmap.Create(0, 0);
    MS := TMemoryStream.Create;
    MS.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'tv.png'));
    MS.Seek(0, soFromBeginning);
    LImage.Bitmap.LoadFromStream(MS);
    MS.Free;
    ObjectC(LItem, LI1, 'name', Query.FieldByName('name').Text, 54,  20);
    ObjectC(LItem, LI2, 'url', Query.FieldByName('url').Text, 54,  20);
    Query.Next;
  end;
  ListView.EndUpdate;
  Query.Active := False;
end;
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: ListView Image Click

Mesaj gönderen RADCoder »

Cevabın için teşekkür ederim Zairov.
Biraz geç oldu ama iş yoğunluğu nedeniyle sık giremiyorum siteye..

Şimdi derdimi şöyle anlatayım.
Senin yukarda örnek paylaştığın resmi ele alırsak şöyle anlata bilirim.. ListView itemlerinde resim kullanmışsın, fakat o resmede tıklasan bir sayfaya geçecek "İçtimai TV" yazısınada. Yani sonuçta bir İtemClick kullanmışsın. Benim yapmak istediyimse şudur, Resme tıkladığımda farklı bir olay tetiklemek İteme tıkladığımda ise farklı bir olay..

İnşallah anlata bilmişimdir.. Tekrar teşekkür ederim..
beklentili
Üye
Mesajlar: 86
Kayıt: 21 Ara 2013 09:05
İletişim:

Re: ListView Image Click

Mesaj gönderen beklentili »

Hocam anladığım kadarıyla metin de ayrı resimde ayrı bir olayı çalıştırmak istiyorsunuz. Listview'de bu yapılabilir mi bilmiyorum ana Listbox nesnesinde bu dediğiniz yapılabilir. Tabi biraz zahmetli.

Yapmanız gerekenler çalışma zamanında (runtime) işleri halletmek. Şöyle ki, örneğin verileri web servisten çekiyorsunuz. Çektiğiniz her veri gurubu için Listbox nesnesinde;

1 - item oluşturunuz;
1a - http://c2design5sh.blogspot.com.tr/2014 ... e5xe7.html adresindeki gibi olayları oluşturup bu itemdeki olaylar ile eşleştiriniz. Buradaki olaylar item üzerinde resim haricinde herhangi bir yere tıklandığında çalışacak ve listboxtaki click sorununu ortadan kaldıracaktır.

2 - image nesnelesi yerleştiriniz;
2a - İmage içine resmi bir adresten indirip ekleyebilirsiniz. Veya hepsi aynı resim olacaksa bir form içerisindeki önceden attığınız bir resmi çektirebilirsiniz.
2b - Burada dikkat edeceğiniz husus image nesnesine resmi alırken Assign methodunu kullanmanız. Image1.Bitmap.Assign(Image2.Bitmap); gibi.
2c - Bu image nesnesinin click olayına istediğiniz olayı ekleyebilirsiniz.
2d - Listbox nesnesinde listeyi aşağı yukarı kaydırırken üzerindeki nesnelerin clik olayı anlamsız bir şekilde çalışmaktadır. Bunu http://c2design5sh.blogspot.com.tr/2014 ... e5xe7.html adresindeki methot ile aşabileceğinizi düşünüyorum.
2e - İmage nesnesinin HitTest:=True; ve Locked:=False; olduğuna dikkat edin.

3 Label nesnesi yerleştirin;
3a - Label nesnesinin Text özelliğine webservisten gelen metni aktarınız.
3b - Label nesnesinin HitTest:=True; ve Locked:=True; olduğuna dikkat edin.

Şu an platformu açma şansım olmadığı için ufak tefek hatalar olabilir. Bu yöntemi denerseniz ve hata ile karşılaşırsanız buradan iletirseniz yadırmcı olurum.
[/size]http://www.componentler.com | Türkçe component sitesi
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: ListView Image Click

Mesaj gönderen ikra »

Onclick olayinda mousepos ile resmin mi yoksa itemin mi üzerine tiklandigini kontrol edebilir, resime tiklandiysa bir event, iteme tiklandiysa inherited ile itemclickevent'i tetikleyebilirsin.
kıdemsiz üye
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: ListView Image Click

Mesaj gönderen RADCoder »

Beklentili uzun uzun cevap yazdığın için çok çok teşekkür ediyorum. Allah razı olsun.
Artık yapamazsam ListBoxla denerim.. Tekrar teşekkür ederim..
Kullanıcı avatarı
RADCoder
Üye
Mesajlar: 129
Kayıt: 21 Ara 2013 04:03

Re: ListView Image Click

Mesaj gönderen RADCoder »

ikra cevabınız için çok sağolun, hemen deniyorum.. Çok sağolun..
Cevapla