Konuyu Oyla:
  • Derecelendirme: 3.67/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FMX Scrool Keyboard Form..
#1
Merhaba Arkadaşlar.

Mobil ekranlarda Klavye çıktığı zaman Bazı kontroller (Edit,memo vs) klavye arkasında/altında kalıyor.

bu konuda delphiinn bir kaç örneği var.. o bile düzgün çalışmıyor.

Bu konuda reel bir çözümü olan varmıdır?

Teşekkürler Şimdiden
Cevapla
#2
Merhabalar,


Eskiden bu konuyu bende araştırıp denemeler yapmıştım, arşivimde şöyle bir kaydedilmiş site buldum isterseniz inceleyin;


procedure TControlMover.FormVirtualKeyboardHidden(Sender: TObject; KeyboardVisible: Boolean; const Bounds: TRect);
begin
FVKVisible := False;
if Assigned(FSaveProps.Control) then
begin
FSaveProps.Control.AnimateFloat('Position.Y', FSaveProps.Position.Y, 0.1);
FSaveProps.Control.Align := FSaveProps.Align;
end;
end;

procedure TControlMover.FormVirtualKeyboardShown(Sender: TObject; KeyboardVisible: Boolean; const Bounds: TRect);
begin
FVKVisible := True;
FVKBounds := Bounds;
if FocusedControl = nil then
Exit;
DoGetMoveControl;
if Assigned(FSaveProps.Control) then
begin
FSaveProps.Control.Align := TAlignLayout.alNone;
FSaveProps.Position.Y := FSaveProps.Control.Position.Y;
SlideControl;
end;
end;



procedure TFormMain.FormVirtualKeyboardHidden(Sender: TObject;
KeyboardVisible: Boolean;
const Bounds: TRect);
begin
FKBBounds.Create(0, 0, 0, 0);
FNeedOffset := False;
RestorePosition;
end;

procedure TFormMain.FormVirtualKeyboardShown(Sender: TObject;
KeyboardVisible: Boolean;
const Bounds: TRect);
begin
FKBBounds := TRectF.Create(Bounds);
FKBBounds.TopLeft := ScreenToClient(FKBBounds.TopLeft);
FKBBounds.BottomRight := ScreenToClient(FKBBounds.BottomRight);
UpdateKBBounds;
end;


Kodların İngilizce açıklaması için bu adresi ziyaret edebilirsiniz.


Saygılarımla,
İyi çalışmalar.
kisisel_logo_dark.png
WWW
Cevapla
#3
yok dostum bu olmuyor..
http://blog.qdac.cc/?p=2541 burdaki uygulamayı indirip uygulamana vkbdhelper.pas dosyasını ekleyip uses kısmına da bunu "vkbdhelper" eklersen, hiç bir ayar kod yazmana gerek kalmadan direk bu işi yapıyor..
Cevapla
#4
Merhaba, daha önce yapmış olduğum sanal klavye yönetim prosedürlerini GitHub üzerine yükledim. İşinize yarayacaktır.

Erişim: https://github.com/ilgazdc/MyVirtualKeyboard

İyi günler.
Cevapla
#5
(30-10-2017, Saat: 10:18)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: Merhaba, daha önce yapmış olduğum sanal klavye yönetim prosedürlerini GitHub üzerine yükledim. İşinize yarayacaktır.

Erişim: https://github.com/ilgazdc/MyVirtualKeyboard

İyi günler.

Abdullah Bey tokyo için desteğinden bhsetmişsiniz? Acaba bu test etme fırsatı bulamadığınızdan mıdır yoksa gerçekten yokmu tokyo desteği?

(30-10-2017, Saat: 10:18)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: Merhaba, daha önce yapmış olduğum sanal klavye yönetim prosedürlerini GitHub üzerine yükledim. İşinize yarayacaktır.

Erişim: https://github.com/ilgazdc/MyVirtualKeyboard

İyi günler.

Ayrıca tüm formda aktif olması için Form Show yada create inde ShowKeyboardOnForm  prosedürünü çağırmamız yetiyormu? yoksa her control ün onenter event'ında ShowKeyboardOn(edit1), onexit event'ında HideKeyboardOn(edit1) şeklindemi kullanmak daha iyi?
Cevapla
#6
(30-10-2017, Saat: 22:42)mcuyan Adlı Kullanıcıdan Alıntı: Abdullah Bey tokyo için desteğinden bhsetmişsiniz? Acaba bu test etme fırsatı bulamadığınızdan mıdır yoksa gerçekten yokmu tokyo desteği?

Ayrıca tüm formda aktif olması için Form Show yada create inde ShowKeyboardOnForm  prosedürünü çağırmamız yetiyormu? yoksa her control ün onenter event'ında ShowKeyboardOn(edit1), onexit event'ında HideKeyboardOn(edit1) şeklindemi kullanmak daha iyi?

Merhaba,

Henüz Tokyo'ya geçmediğim için test etme imkanı bulamadım. Github'da bahsi geçen bu versiyonlarla derlenmiş uygulamalarda sorun yaşatmadığı üzerineydi. Tokyo'da denendiği zaman bildirirseniz onu da ekleriz.

Projenin DPR dosyasında VKAutoShowMode özelliğini el ile atayabilirsiniz. Onun dışında aynı form içinde kullanım sağlayacaksanız tüm inputlara referans alabileceğiniz bir metod oluşturun. Mesela her input bittiğinde validation yapacaksanız onun içerisinde kapat-aç işlemlerini yapabilirsiniz.

Eğer sizi çok yormayacaksa her kontrolün kendi event'larında yönetmek daha sağlıklı olur. 

Örnek olması açısından;


procedure TEntTransaction.txtProcessDescEnter(Sender: TObject);
begin
  ShowKeyboardOn(txtProcessDesc);
end;

procedure TEntTransaction.txtProcessDescExit(Sender: TObject);
begin
  HideKeyboardOnForm;
end;
Cevapla
#7
(30-10-2017, Saat: 10:18)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: Merhaba, daha önce yapmış olduğum sanal klavye yönetim prosedürlerini GitHub üzerine yükledim. İşinize yarayacaktır.

Erişim: https://github.com/ilgazdc/MyVirtualKeyboard

İyi günler.

Abdullah bey,  ben durumu tam anlayamadım, zaten edit nesnesine focus olunduğunda klavye otomatik çıkıyor, bütün bu procedurlere ne gerek var?
ayrıca nesneler klavyenin yine altında kalıyor,  mantığını anlayamadım ?
Cevapla
#8
(30-10-2017, Saat: 01:58)mcuyan Adlı Kullanıcıdan Alıntı: yok dostum bu olmuyor..
http://blog.qdac.cc/?p=2541 burdaki uygulamayı indirip uygulamana vkbdhelper.pas dosyasını ekleyip uses kısmına da bunu "vkbdhelper" eklersen, hiç bir ayar kod yazmana gerek kalmadan direk bu işi yapıyor..

Malesef bu yöntemde olmadı.. 

Grid layoutpanel i ilk olarak sıkıştırıyor fakat klavye gizlendiğinde tekrar eski halini almıyor..

(31-10-2017, Saat: 09:21)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı:
(30-10-2017, Saat: 22:42)mcuyan Adlı Kullanıcıdan Alıntı: Abdullah Bey tokyo için desteğinden bhsetmişsiniz? Acaba bu test etme fırsatı bulamadığınızdan mıdır yoksa gerçekten yokmu tokyo desteği?

Ayrıca tüm formda aktif olması için Form Show yada create inde ShowKeyboardOnForm  prosedürünü çağırmamız yetiyormu? yoksa her control ün onenter event'ında ShowKeyboardOn(edit1), onexit event'ında HideKeyboardOn(edit1) şeklindemi kullanmak daha iyi?

Merhaba,

Henüz Tokyo'ya geçmediğim için test etme imkanı bulamadım. Github'da bahsi geçen bu versiyonlarla derlenmiş uygulamalarda sorun yaşatmadığı üzerineydi. Tokyo'da denendiği zaman bildirirseniz onu da ekleriz.

Projenin DPR dosyasında VKAutoShowMode özelliğini el ile atayabilirsiniz. Onun dışında aynı form içinde kullanım sağlayacaksanız tüm inputlara referans alabileceğiniz bir metod oluşturun. Mesela her input bittiğinde validation yapacaksanız onun içerisinde kapat-aç işlemlerini yapabilirsiniz.

Eğer sizi çok yormayacaksa her kontrolün kendi event'larında yönetmek daha sağlıklı olur. 

Örnek olması açısından;


procedure TEntTransaction.txtProcessDescEnter(Sender: TObject);
begin
  ShowKeyboardOn(txtProcessDesc);
end;

procedure TEntTransaction.txtProcessDescExit(Sender: TObject);
begin
  HideKeyboardOnForm;
end;
Abdullah bey sizin yöntemde olmuyor.. Standart formlarda işe yarayabiliyor fakat ben biraz daha complex yapılar kullanıp, apk ya yükleniyoruum sanırım.. yani gridpanellayout nesnesini diğer yöntemlede sizin yöntemlede denediğimde ilk olaak küçültsedesornasında şaşmalar yapıyor.. mesela bir ikonu küçültüyor sonrasında büyütmüyor vs.vs. sanırım delphi XE versiyonları için bir BUG bu..
Cevapla
#9
Ben de internette epeyce aradım. Bulduğum her örneği denedim, hiçbiri düzgün çalışmıyor.
Bir de bazı konularda şöyle bir şaşkınlığım var. Sanki bu tip sorunları sadece ben ve bir kaç kişi yaşıyor, diğerleri hiç bu tip bir sorun yaşamamış gibi bir izlenime kapılıyorum. Mobil bir uygulama yapıyorsanız, ekranda bir editbox ınız varsa bu sorunla herkesin karşılaşması ve bu konuda bir çok örnek olması gerekmez mi?
Kendimce bir şeyler yaptım, ancak her control için ayrı kod yazmak saçma geliyor bana. Bunun pratik bir yolu olmalı diye düşünüyorum...
Cevapla
#10
(25-11-2017, Saat: 17:05)nehirnnn Adlı Kullanıcıdan Alıntı: Ben de internette epeyce aradım. Bulduğum her örneği denedim, hiçbiri düzgün çalışmıyor.
Bir de bazı konularda şöyle bir şaşkınlığım var. Sanki bu tip sorunları sadece ben ve bir kaç kişi yaşıyor, diğerleri hiç bu tip bir sorun yaşamamış gibi bir izlenime kapılıyorum. Mobil bir uygulama yapıyorsanız, ekranda bir editbox ınız varsa bu sorunla herkesin karşılaşması ve bu konuda bir çok örnek olması gerekmez mi?
Kendimce bir şeyler yaptım, ancak her control için ayrı kod yazmak saçma geliyor bana. Bunun pratik bir yolu olmalı diye düşünüyorum...

Sizinle aynı fikirdeyim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi 12 Boş Form Derleme Hatası [Çözüldü] codder71 4 536 21-02-2024, Saat: 22:09
Son Yorum: codder71
  Form Boyutlandırma Altıner 7 442 25-01-2024, Saat: 12:31
Son Yorum: Altıner
  PAServer Manager form ölçek sorunu delphi.developer 0 221 12-11-2023, Saat: 01:43
Son Yorum: delphi.developer
  Form minimize Altıner 2 578 05-06-2023, Saat: 17:54
Son Yorum: Altıner
  Mobile Uygulama Çoklu Form 3ddark 8 1.521 12-01-2023, Saat: 11:45
Son Yorum: RAD Coder



Konuyu Okuyanlar: 1 Ziyaretçi