XE8 Android ContextMenu Sorunu

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
PunisherZ
Üye
Mesajlar: 7
Kayıt: 06 Eki 2012 08:54
Konum: Konya

XE8 Android ContextMenu Sorunu

Mesaj gönderen PunisherZ »

Selamün Aleyküm,

XE8 android ile bir uygulama geliştiriyorum ancak TEdit, TMemo gibi nesnelerin üzerine tıklandığında direkt olarak "Yapıştır" menüsü açılmakta.
Normalde bunu üzerine basılı tuttuğumuz zaman yani LongTap eventı ile tetiklenmesi ve ekrana gelmesi gerekiyor. Eclipse veya XE7 ortamında da yaptığımız çalışmalarda normal şekilde çalışmakta. XE8 ile uygulama geliştiren yabancı kaynakların uygulamalarını inceledim bu uygulamalarda da durum aynı (Yapıştır çıkıyor). Clipboard'ta bir veri mevcut ise sürekli olarak herhangi bir Edit Memo yada veri girişi yapılabilecek "ReadOnly" olmayan nesnelerin hepsinde Karşımıza çıkmakta. Biraz inceledim sorun FMX.Platform.Android dosyasından kaynaklı gibi. Bu konuyla alakalı fikirlerinizi, önerilerinizi almak istedim.
Ayrıca bu konuyla alakalı bir düzenleme hotfix mevcut mu?

Şimdiden teşekkür ederim.
Kullanıcı avatarı
barisatalay
Üye
Mesajlar: 398
Kayıt: 02 Nis 2013 05:43
İletişim:

Re: XE8 Android ContextMenu Sorunu

Mesaj gönderen barisatalay »

Eğer controlün bir eventi yok ise HitTest özelliğini false yaparak bir deneyebilir misiniz.
PunisherZ
Üye
Mesajlar: 7
Kayıt: 06 Eki 2012 08:54
Konum: Konya

Re: XE8 Android ContextMenu Sorunu

Mesaj gönderen PunisherZ »

Barış Bey Merhaba,
Öncelikle Faydalı bir blog açtığınız ve yorumunuz için teşekkürler.

Dediğiniz şekilde HitTest := False olarak CheckBox ayarladım.
Focus özelliği de dahil olmak üzere bütün özellikleri gitti. Hiç bir şekilde seçilmiyor.
ReadOnly yapmakta aslında bir seçim.
Örnekte Herhangi bir Style kullanılmadı. Sadece iki adet TEdit var.

FMX.Platform.Android.pas dosyası üzerinde bir değişiklik yaptım.
Kısmi olarak başarılı gibi Ancak sadece sorun bu gibi görünmüyor.

FMX.Platform.Android içerisinde SingleTap diye bir procedure bulunmakta.
Bu kısmın içeriğini Comment {..} yaptığımda bahsetmiş olduğum problem ortadan kalkıyor.
Üzerine dokunur dokunmaz gelmiyor ContextMenü. LongTap veya DoubleTap olduğu zaman geliyor.

Aynı dosya içerisinde SendCMGestureMessage diye bir fonksiyon daha var.
Bu fonksiyonda LongTap ve DoubleTap yapıldığının ayrımı yapılıyor.

if (AEventInfo.GestureID = igiLongTap) and Supports(TmpControl, ITextInput, TextInput) and
Supports(TmpControl, ITextActions, TextActions) then
begin
//TextActions.SelectWord; //<-- Bu kısım
TTextServiceAndroid(TextInput.GetTextService).InternalUpdateSelection;
ShowContextMenu;
end;

Fonksiyon içerisinde işaretlediğim kısmı Açıklama şekline çevirdiğimde bir kelimenin arasında bir yere de yapıştır diyebiliyorum.
Buraya kadar normal görünüyor her şey.

Sırada TextService ile alakalı kısımlar var, Üzerine çift tıkladığımızda seçilen veri, Geri tuşu ile sil dediğimizde silinmiş gibi görünüyor.
Ama aslında silinmedi. Veri tutuluyor ve klavyeden bir tuşa bastığımızda "Ortadan kaybolan kelime" + "son girilen karakter" komple tekrar çıkıyor.

XE7de benzer bir kodlama söz konusu ne gibi değişiklikler var neler eklenmiş incelemeye çalışıyorum.
Belki de gözümden basit bir şey kaçırıyorum.

Sadece problem TEdit nesnesinde olsa bu durum için alternatif bir TEdit geliştirilebilir yada başka bir komponent kullanılabilir.
Ancak TEdit gibi aynı kökten türeyen başka nesnelerde var.
Onun için kök problemi gidermek daha mantıklı olacağı kanaatindeyim.
Cevapla