Konuyu Oyla:
  • Derecelendirme: 3.67/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FMX Scrool Keyboard Form..
#31
(20-12-2017, Saat: 22:00)mcuyan Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar.. Acaba IOS da test etme fırsatı buldunuz mu? Ayrıca Ben formumun zeminine renk yada resim eklediğimde, Bu prosedür çalışır çalışmaz zemin beyaz oluyor Smile) ona halen çözüm bulamadım..

Merhaba,
Test etmedim, fakat kod kısmı çalışabildiğini gösteriyor.
{$IFDEF ANDROID}, FMX.Platform.Android, FMX.Helpers.Android,
 FMX.VirtualKeyboard.Android, Androidapi.JNI.GraphicsContentViewText,
 Androidapi.JNI.Embarcadero
{$IF RTLVersion>=32}
   , Androidapi.NativeActivity, Androidapi.AppGlue
{$ENDIF}
{$ENDIF}
{$IFDEF IOS}
   , Macapi.Helpers, FMX.Platform.iOS, FMX.VirtualKeyboard.iOS,
 iOSapi.Foundation, iOSapi.UIKit
{$ENDIF}
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#32
keşke birisi denese de bilgi verebilse Smile
Cevapla
#33
Bu pazar günü deneyebilirim. Geri dönüşü buraya yaparım.
Cevapla
#34
Bunu bende çok aramıştım ve delphi örnek projeleri arasında eklenmiş bir örnek buldum. test ettim ve çalışıyor projemde ;

isterseniz ; bu linkten orjinal proje örneğini indirebilirsiniz isterseniz de aşağıdaki kodları direkt ekleyebilirsiniz ;


Form'a bir vertscrollBox ve edit ekleyin.


not : edit bileşenini forma bottom olarak sabitlerseniz ya da diğer sabitleme işlemlerini kullanırsanız sağlıklı olacaktır.

orjinalinde layout da vardı fakat ben de olmadığı için koddan ufak kodları çıkarttım. ( toplam iki satır kod  )
orjinal proje dosyasında fark edeceksinizdir.
uses kısmına ;

System.Math 



private

   FKBBounds: TRectF;
   FNeedOffset: Boolean;
   procedure CalcContentBoundsProc(Sender: TObject;
                                   var ContentBounds: TRectF);
   procedure RestorePosition;
   procedure UpdateKBBounds;







procedure Tkisiselbolumu.CalcContentBoundsProc(Sender: TObject;
                                      var ContentBounds: TRectF);
begin
 if FNeedOffset and (FKBBounds.Top > 0) then
 begin
   ContentBounds.Bottom := Max(ContentBounds.Bottom,
                               2 * ClientHeight - FKBBounds.Top);
 end;
end;

procedure Tkisiselbolumu.RestorePosition;
begin
 VertScrollBox1.ViewportPosition := PointF(VertScrollBox1.ViewportPosition.X, 0);
 VertScrollBox1.RealignContent;
end;

procedure Tkisiselbolumu.UpdateKBBounds;
var
 LFocused : TControl;
 LFocusRect: TRectF;
begin
 FNeedOffset := False;
 if Assigned(Focused) then
 begin
   LFocused := TControl(Focused.GetObject);
   LFocusRect := LFocused.AbsoluteRect;
   LFocusRect.Offset(VertScrollBox1.ViewportPosition);
   if (LFocusRect.IntersectsWith(TRectF.Create(FKBBounds))) and
      (LFocusRect.Bottom > FKBBounds.Top) then
   begin
     FNeedOffset := True;
     VertScrollBox1.RealignContent;
     Application.ProcessMessages;
     VertScrollBox1.ViewportPosition :=
       PointF(VertScrollBox1.ViewportPosition.X,
       LFocusRect.Bottom - FKBBounds.Top);
   end;
 end;
 if not FNeedOffset then
   RestorePosition;
end;





procedure TFrom1.FormFocusChanged(Sender: TObject);
begin
UpdateKBBounds;
end;



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

procedure TForm1.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;


procedure TForm1.FormCreate(Sender: TObject);
begin
  VKAutoShowMode := TVKAutoShowMode.Always;

  VertScrollBox1.OnCalcContentBounds := CalcContentBoundsProc;
end;




kodlar az önce tekrar test edilmiştir ve çalışmaktadır...

iyi günler dilerim...
       Sorgulamak
 Varolanın Farkındalığını
       Düşünmek
Varolmayanı Ortaya Çıkartır...
Cevapla
#35
(04-12-2017, Saat: 15:14)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı:
(04-12-2017, Saat: 14:49)nehirnnn Adlı Kullanıcıdan Alıntı: Abdullah bey, benim mantığımın almadığı konu şu. Alt alta 100 tane editbox bulunan bir sayfayı WebBrowser ile çağırdığımda, tarayıcı bunu çok kolay bir şekilde ayarlayabiliyor. Ekranın küçük ya da büyük olması önemli değil. Vertical scroll box ile alt alta yüzlerce edit de ekleyebiliriz. Delphi mobil uygulamalar konusuna el attıysa, mobil cihazda bir editbox içine girildiğinde sanal klavyenin açılacağını da biliyordur. Bu tip basit ve herkesin, her aşamada karşılaşabileceği sorunlar için günlerce uğraşmamızı mantıklı bulmuyorum sadece. Yani herkesçe aşikar olan konular için bir sürü fonksiyon yazmamıza gerek var mı?

Ayrıca açıklamalar için teşekkürler... Bahsettiniz componentler ile ilgili önerebileceğiniz isimler var mı....

İsminizi bilmediğim için doğrudan hitap edemiyorum kusura bakmayın. Sayın nehirnnn,

Şüphesiz ki cross-platform'un bazı dezavantajları olacaktır. Burada Android'e Java'dan daha iyi müdahale edebilecek kadar yetkinlikte bir dil, platform yada framework beklemek hata olur. Önce bunu netleştirirseniz, beklentilerinizi daha iyi karşılayacağı konusunda mental olarak hazır olursunuz.

Netice itibariyle Delphi, Object Pascal programlama dilinin kullanıldığı Bütünleşik (Entegre edilmiş) Yazılım Geliştirme Çevresidir. Geliştiricisi olan Embarcadero'nun ise eş zamanlı yürüttüğü 8~12 arasında projesi/ürünü bulunuyor.

Bahse konu olan ürün Delphi ve kullanılan görsel kütüphane FMX olduğunu öngörüp şöyle bir şeyler söyleyebilirim sadece; Embarcadero firmasının bu işe ayırdığı bütçe, şüphesiz ki orjinal yazılım kullanan kişilerin vereceği destek, geri-bildirim ve istekler doğrultusunda ilerleyebiliyor. Eugene isimli meşhur bir Rus geliştiricinin özel projesi olan FMX, Embarcadero'nun ilgisini çekerek VCL'e bir alternatif olarak ortaya çıkmış ve Delphi üzerine implement edilmiş bir kütüphaneden ibarettir.

Henüz kararlı mıdır, değil midir, tartışılır. Netice itibariyle bugün Eclipse adındaki Java geliştirme ortamının kararlılığı konusunda hiçkimse konuşamaz. Aynı şey, birçok programlama dili için geçerlidir. Delphi'yi diğer tüm programlama dilleri ve geliştirme çevrelerinden ayıran unsur gelişmiş bir yönetim ve geliştirme arayüzü sağlıyor olmasıdır. Yani dünya üzerindeki en gelişmiş yazılım geliştirme ortamını kullanıyorsunuz.

Şüphesiz ki bu ortamın bu seviyelere gelmesi öyle 2 günde olan bir şey değildi. 30 yılın üzerinde bir deneyim söz konusu. Peki ya Android platformu kaç yıldır alemimizde? (2004 proje çıkışı, 2006 Abd yayılması, 2008 Avrupa, 2009 Türkiye) Peki iOS? (2007 Abd, 2008 Avrupa-Türkiye)


Yani; henüz 10 yaşını devirmemiş ve bu 10 yıl içinde çok radikal değişikliklere gitmiş platformlardan bahsediyoruz. Buraya kadar tamamsanız devam edebiliriz.

Cross-platform dediğimiz şey temelde Java ve Swift kodlarından ibaret olmasa da, geliştirdiğiniz dildeki kodların muadil karşılıklarını çeviren, ve kaynak kodu java-swift gibi davranan bir Platform çevirisi sayesinde native kodların işlevlerini sizin geliştirdiğiniz dile kazandırma çalışmasından başka bir şey değildir. Bunu Delphi'nin gündeme getirmesi XE2 ile oldu. 2011-2012 yıllarında gündemin içine girdiler. XE4-5 ile 2013 yılında bir yükseliş oldu ancak Google Play üzerinde Delphi tarafından üretilen proje miktarı iki eldeki parmak adedini geçmedi. 2015 yılı itibariyle çok ciddi bir ivme kazandılar. XE7 ve XE8 sürümleri ile Android 4.0 ve 4.5 arasındaki tüm sürümlere karşı desteğini sağladı.

10 sürümü ile birlikte Android 5.0, 6.0 (her gelişen sürümde ara sürümler çıktı) destekleri sağlandı. Marshmallow'a geçişte XE8 kodları sorun vermeye başlamıştı. 10 Seattle ve 10.1 Berlin ile bu sorunlar aşıldı. Şuanda halâ Berlin kullanan birisi olarak; Embarcadero'yu takdir ve tebrik ediyorum. Google ve Apple'ın maymun iştahlılığına rağmen, öyle bir gün çıkıp "artık versiyonumuz şudur, yapılacak budur, hadi görüşürüz" felsefesi ile tabiri caizse pimi çekip bombayı bırakıp ortadan kaybolmalarına karşılık, en hızlı mukavemet ve hamleyi yapan firmaların başında gelmesi benim için ayrı bir gurur meselesi.

Şimdi dilerseniz verdiğiniz örnek üzerinden olayı ele alalım.

100 inputluk bir form doldurmayı ben hiç görmedim. Tuik yıllık şirket veri formlarında bile 40 soruyu geçmiyor. Hadi 100 soru olduğunu varsayalım, böyle bir ekrana aşırı fazla ihtiyaç duyduk. Başka çaremiz de yok. Ne yapacağız?

WebBrowser ile çok kolay pratik olabiliyor dediniz. Ancak ıskaladığınız şey Web uygulama Post işlemini gerçekleştirene kadar hiçbir veriyi muhafaza etmez, hiçbir veri üzerinde işlem yapmaz. Sadece client-side belki komponent görünümlerini ve seçimleri yönetebilir. Onda da 100 soruluk bir form için bu neredeyse imkansız demektir.

Eğer çok fazla veri girdisi yapacaksanız, bunun mobilde bir bedeli var. Hatta 100 input işin içine girince bunu Windows'ta yaparken bile bir bedeli var. Üstelik virtual keyboard ihtiyacı olmadığı halde.

Burada tüm suçu ve günahı Delphi'ye yıkmak kesinlikle yanlış olur. Neticede kullanıcı deneyimlerini ele aldığınız zaman karşınıza çıkan şey kullanıcıların çok kabiliyetli insanlar olmadığıdır. Bahsettiğiniz formu tıkır tıkır kullanacak kullanıcı bulamayacağınız gibi, o formu böyle müthiş akıcı kullandıracak bir platform da ben bilmiyorum. Varsa söyleyin, ben de kullanmaya başlayayım. Bilgileri de sizlerle yine paylaşırım.

Sözü çok uzattım, kusura bakmayın. Sonuç olarak yapacağınız işler sizlerle alakalı ve siz ne kadar olaya hakimseniz o kadar kolay yönetebilirsiniz. Yazmış olduğum fonksiyonu 100 tane inputa bağlayıp, tüm inputların isimlerini elinizde muhafaza ederek sadece SENDER ile tek metod içinde yönetimi gerçekleştirebilirsiniz. Kolay anlaşılır olması adına o şekilde iletmiştim.

Ve sadece acizane tavsiyem; Step-to-step mantığını kullanmanız sizin için sağlıklı olacaktır. Bir ilan sisteminde mesela ilan bilgileri, kategori bilgileri, fiyat bilgileri, fotoğraf-detay bilgileri, ilan veren bilgileri gibi aşama aşama ilerleyen ekranları sizde mobilde yapabilirsiniz. Bunu da TTabControl ile tek bir form üzerinde pratik bir şekilde gerçekleştirebilirsiniz.

Platform, süreç ve geliştirme hakkında sormak istediğiniz tüm soruları sormakta özgürsünüz. Dilediğiniz şekli ile sorun. Dilimiz döndüğünce sizlere yanıt vermeye çalışacağız. İyi günler diliyorum.

1994 yılından beri pascal-delphi uygulama geliştiren biri olarak, seni tebrik ve takdir ederim kardeşim (Abdullah ILGAZ). Muazzam güzel bir yazı olmuş, ellerine aklına emeğine sağlık.
Cevapla
#36
Merhabalar;

 Delphi XE 10.2 projemde vkbdhelper.pas dosyasını ekleyerek bu sorunu çözmüştüm. Aynı projede Delphi XE 10.3 versiyonunda vkbdhelper.pas dosyasında hata alıyorum.

 


mMb7n8.png
Cevapla
#37
Merhaba,
ConvertPixelToPoint metodu, FMX.Platform.UI.Android unit'inde tanımlıdır.
Uses bölümüne bu unit'i ekleyerek hatayı düzeltebilirsiniz.
uses ....
{$IF CompilerVersion > 32}
   ,FMX.Platform.UI.Android
{$ENDIF}
   ;
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#38
(14-03-2019, Saat: 10:41)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
ConvertPixelToPoint metodu, FMX.Platform.UI.Android unit'inde tanımlıdır.
Uses bölümüne bu unit'i ekleyerek hatayı düzeltebilirsiniz.
uses ....
{$IF CompilerVersion > 32}
   ,FMX.Platform.UI.Android
{$ENDIF}
   ;

Teşekkür ederim Fesih hocam oldu.
Cevapla
#39
bu kodu ekleyince hata vermiyor ama yapması gereken işlemi de yapmıyor bende, iOS tarafında sorun yok her şekilde çalışıyor. inş yayın zamanda sorunu çözeler
Cevapla
#40
(14-03-2019, Saat: 11:09)mcansız Adlı Kullanıcıdan Alıntı:
(14-03-2019, Saat: 10:41)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
ConvertPixelToPoint metodu, FMX.Platform.UI.Android unit'inde tanımlıdır.
Uses bölümüne bu unit'i ekleyerek hatayı düzeltebilirsiniz.
uses ....
{$IF CompilerVersion > 32}
   ,FMX.Platform.UI.Android
{$ENDIF}
   ;

Teşekkür ederim Fesih hocam oldu.

Şimdi derleme yapıyor ama splash ekranından sonra uygulama kapanıyor ana ekran açılmıyor, vkbdhelper.pas dosyasını silince düzeliyor. IOS tarafıdan deneyemedim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android Form Close Sorunu barox 3 83 15-03-2019, Saat: 23:19
Son Yorum: barox
  delphi 10.2 form nesnelerinin yavaş çalışması mcansız 23 698 03-03-2019, Saat: 22:56
Son Yorum: mcansız
  Form oluşturma (Çözüldü) Orhanlar 3 450 10-09-2018, Saat: 10:48
Son Yorum: Orhanlar
  Scrollable Form Problem malitutuncu 5 607 20-07-2018, Saat: 15:49
Son Yorum: malitutuncu
  form tasarımı arsl01 0 363 10-07-2018, Saat: 09:39
Son Yorum: arsl01



Konuyu Okuyanlar: 1 Ziyaretçi