Listbox item click sorunu

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
yakupbaser
Üye
Mesajlar: 11
Kayıt: 29 Haz 2013 01:07

Listbox item click sorunu

Mesaj gönderen yakupbaser »

Merhabalar,

Xe7 de listboxtaki tüm itemlerın onclick eventını kullanarak bir uygulama hazırladım ve şöyle bir sorunla karşılaşıyorum.
Parmağımızla sürükleyip listboxun alt satırlarına gitmek istediğimizde parmağımızın dokunduğu itemın istemeden onclick metodunu çağırmış oluyoruz.
Bunun önüne geçmek için ondblclick kullanayım dedim. Malum firemonkeyde mobil için double click çalışmıyor ve bu bug henüz fixlenmiş değil.
Ben de manuel olarak kodlarla double click metodu geliştirdim fakat istediğim performansı vermiyor.

Bu istemeden tıklama olayına en stabil nasıl çözüm geliştirebiliriz? Listboxun onmousedown eventındaki TShiftState le ya da farklı bir yöntemle sorunu çözebilmemiz mümkün mü?
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Re: Listbox item click sorunu

Mesaj gönderen barisatalay »

Değişik bir çözüm önerebilirim.

formun private bölümüne "FTimeStamp: TDateTime;" şeklinde bir değişken tanımlayın ve geliştirmenize şu şekilde devam edin.

Listbox itemin onMouseDown eventine:

Kod: Tümünü seç

FTimeStamp := Now;
Aynı itemin onMouseUp eventine:

Kod: Tümünü seç

  if (MilliSecondOf(Now-FTimeStamp) < 200) then
  begin
    //Tıklanınca yapılmasını istediğiniz şeyler.
  end;
Biz burada ne yapmıs olduk saniyenin 10/2 si bir zaman aralığında Listboxun o iteminden parmak havaya kalkarsa tıklanma olayını gerçekleştirmesini istedik. Yani test edebilirsiniz kaydırırken bu zaman aralığına düşmemesi gerekir istediğiniz ölçüde değiştirebilirsinizde şirketteki projemizde bu şekilde çözüm getirebildik.
Kullanıcı avatarı
yakupbaser
Üye
Mesajlar: 11
Kayıt: 29 Haz 2013 01:07

Re: Listbox item click sorunu

Mesaj gönderen yakupbaser »

teşekkürler,

Double click olayı için de benzer bir çözüm üretmiştim:

Kod: Tümünü seç

//global değişkenler
var 
dbl: integer;
time: TDateTime;

procedure TForm2.btn1Click(Sender: TObject); 
begin
  // ondblclick
  if dbl mod 2 <> 1 then
  begin
    Inc( dbl );
    time := GetTime;
    Exit;
  end;
  if MillisecondsBetween(  GetTime, time ) > 400 then
  begin
    dbl := 0;
    Exit;
  end;

  Inc( dbl ); 
  // İşletmek istediğimiz kodlar buraya

Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

Re: Listbox item click sorunu

Mesaj gönderen mustafasoy »

bende buna benzer bir sorunu farklı bir şekilde çözdüm listview için edit mode dışında ise itemclick çalışsın aksi taktirde çalışmasın diye

procedure TMainScreen.lw_spamlistItemClick(const Sender: TObject;
const AItem: TListViewItem);
begin
if not lw_spamlist.EditMode=true then
ShowMessage(lw_spamlist.Items[lw_spamlist.ItemIndex].Detail);
end;
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Kullanıcı avatarı
yakupbaser
Üye
Mesajlar: 11
Kayıt: 29 Haz 2013 01:07

Re: Listbox item click sorunu

Mesaj gönderen yakupbaser »

Baris hocam çözüm kısmen işe yaradı hatta biraz daha düşürdüm 1.3 milisaniye yaptım. Fakat şu var Whatsappi inceledim. listbox iteminde 1 milisaniye bile kalsam click metodunu çağırmıyor. Demekki daha sağlıklı bir çözümü olmalı. Bulabilirsem burdan paylasirim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Listbox item click sorunu

Mesaj gönderen mrmarman »

Zaman tutma işlemini son tıklanan item indexini de tutarak güçlendirebilir, istediğiniz sonuca ulaşabilirsiniz.

Son item değişirse zamanı yenisiyle resetlersiniz, aynı item tıklanmış ise zamanı gözeterek çift tıklama olarak yorumlayabilirsiniz.
Resim
Resim ....Resim
Kullanıcı avatarı
aytunccankir
Üye
Mesajlar: 6
Kayıt: 10 Ara 2014 03:59
Konum: Istanbul
İletişim:

Re: Listbox item click sorunu

Mesaj gönderen aytunccankir »

Kod: Tümünü seç

procedure TfrmMain.btnBilisimClick(Sender: TObject);
begin
TabActionBrowser.ExecuteTarget(nil);
browser.Navigate('http://xxxx);
end;
Benim kullandıklarım bunlar. on modunu engellemenin başka bir yolu var mı ? Ben sanırım yapamadım.
Software Engineering Stu @ BAU
Cevapla