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.
XE8 Android ContextMenu Sorunu
- barisatalay
- Üye
- Mesajlar: 398
- Kayıt: 02 Nis 2013 05:43
- İletişim:
Re: XE8 Android ContextMenu Sorunu
Eğer controlün bir eventi yok ise HitTest özelliğini false yaparak bir deneyebilir misiniz.
Yeni bloğum: http://brsatalay.blogspot.com.tr/
Re: XE8 Android ContextMenu Sorunu
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.
Ö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.