![]() |
|
TFlowLayout ile TVertScrollbox Kullanımı - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7) +--- Konu Başlığı: TFlowLayout ile TVertScrollbox Kullanımı (/showthread.php?tid=1427) |
TFlowLayout ile TVertScrollbox Kullanımı - Abdullah ILGAZ - 20-10-2017 İlk cevap veren +10 puanı götürür ![]() TFlowLayout'un Alignment'ı Client olarak uygulama menüsü olarak kullanılacak. İçinde çeşitli komponentlerden aynı merkezli ve ebatlı olarak yerleştirildi. Ancak, tasarlanan yükseklik doğrultusunda bazı küçük ekranlı cihazlarda muhtemelen Scroll ihtiyacı ortaya çıkacak. Form ebatını küçülttüğüm zaman dahili scroll olmadığını gördüm. Harici Scroll girersek FlowLayout içindeki bir Item gibi algılanıp son komponentin arkasına yerleştiriyor. Soru: En pratik şekilde FlowLayout içinde scroll özelliği nasıl aktif edilir? Cvp: TFlowLayout ile TVertScrollbox Kullanımı - Mr.Developer - 15-02-2021 Merhaba, Mezarından çıkarttığım bir konu daha ve bu konu da cevaplanmayı hak ediyor. ![]() İlk olarak sorunuza cevap vererek başlamak isterim : Edilemez! Ama cevaptan ziyade soruya yönelelim ; Soru mantık hatası içeriyor. Flowlayout içerisinde ya da varsayılanın da scroll zaten aktif edilemezken “en pratik şekilde” diye başlanması kabul edilemez. Ayrıca izlediğiniz deneme yollarına baktığımızda da hatalarla karşılaşıyoruz. Harici bir scroll eklemesinden sonra flowlayout’un onu da bir eleman olarak algıladığını gözlemlemişsiniz. Bu durum öyle olmasa bile yani düz mantıkta scroll, flowlayout’un içerisinde kaydırma işlevi sunmuş olsa bile siz, Elemanları scroll içerisine eklemek durumunda kalacaksınız. Yani yine flowlayout’un özelliklerinden mahrum olmuş olacaksınız. Çünkü ikisi birbirinden bağımsız... Ve son olarak flowlayout’un uygulama menüsü olarak kullanılması da pek doğru değil çünkü maksimum eleman kullanımına uygun bir bileşen değil. Gözle görülür ve scroll ihtiyacı doğurmayacak bir şekilde kullanılması bileşenden tam verim almanızı sağlayacaktır. Bunların dışında benim merak ettiğim ve sormak istediğim husus ; Neden GridPanelLayout değil de Flowlayout için sordunuz ? GridPanelLayout ile Flowlayout arasındaki tek temel fark (GridPanelLayout’un hücrelerinin bağımsız olmasını saymaz isek) ızgara görünümü. GridPanellayout da çevre ve hücrelerinde manuel düzenleme mevcut iken Flowlayout’da bu, içerisindeki elemanın sayısı, genişlik değerleri ve yüksekliklerine bağlı tutulmuş. Yani aralarındaki benzerlik bu denli yüksek iken sadece flowlayout için bu soru ve sonuca gitmek yine mantıklı bir yaklaşım olmayacaktır. Neyin elverişsiz ya da neyin daha verimli olacağını, yine o bileşenin ailesinde bulunan kardeşlerine bakarak anlamak mümkün. Bu sonuç bize her bileşenin her elemanla uyumlu olmayacağını/olamayacağını gösteriyor. Aksi bir durum da Trectangle bileşeni ile palet menüsündeki neredeyse tüm görsel bileşenleri var etmek mümkün. Ama hangisi daha verimli ya da pratik ? Önemli olan bu. Gerçi ben pratik olsa da olmasa da hep rectangle kullanırım Ayrıca pratiklik ya da uyum konusunda ; Tasarımlar sadece bir adet scaledLayout içerisinde sürükle- bırak, istediğin yere konumlandır mantığında da tasarlanabilir. Hiçbir ek uğraşa gerek kalmadan yani align, anchors, margins,padding gibi hiçbir detaya gerek kalmadan ama buradaki sihir scaledlayout içerisine bir Tedit eklediğinizde ya da uygulamanın portrait durumu değiştiğinde bozulacaktır... Yine vardığımız sonuç ; Hangisi elverişli hangisi değil ? Sorusuna yöneltecektir. Ve asıl cevap ise ; her bileşen her elemanla uyumlu değildir... Şimdi kendimle çeliştiğim duruma gelelim ve Flowlayout’la bahsi geçen durum mümkün mü ona değinelim ; Madem ki bir bileşenle bir çok bileşen üretilebiliyor ( Trectangle ) dedim. O zaman flowlayout ile de neden bahsi geçen durum var edilmesin ? En pratik şekilde yapımına geçelim ; Form üzerine bir adet vertical scroll eklenir ve align özelliği client yapılır. İçerisine bir adet flowlayout eklenir ve align özelliği top yapılır. Böylece genişlik vertical scroll ile orantılı fakat yükseklik değiştirilebilir olacaktır. Flowlayout’un genişliği ve içerisindeki elemanların sayısı alınır. İçerisindeki elemanların genişlikleri, flowlayout’un genişliğine denk ya da büyük gelene kadar döngü vasıtasıyla toplanır ( vertical cap ve horizontal cap değerleri var ise onlarda dahil edilerek ) ve sınıra ulaşıldığında kaç elemanın genişlik toplamı sayesinde ulaşıldı ise o elemanlardan sonra flowlayout’un alt satıra indiği belirlenir. O ulaşılan eleman sayısı bir sıradaki eleman sayısını bize vermiş olur. Daha sonra zaten elemanların toplam sayısı elimizde idi. Bu baz alınarak kaç satır olduğuna ulaşılır ve artık hangi yönden matematiksel işleme tabii tutarsınız bilmem, flowlayout’un yüksekliği o oranda arttırılır. Böylece flowlayout’a scroll özelliği kazandırılmış olur. FlowlayoutBreak kullanıldı ise orada işler daha da değişir tabiki. Düz mantığımın bana sunduğu yol bu şekilde. Peki gerek var mı ? Bence yok. Ayrıca ufak bir ekleme ; Flowlayout, label mantığında işler. Ama label’dan ayrılan ve olmamasından yakındığımız özelliği autosize’ın olmaması. Benim ise merak ettiğim de bu ; Neden yok ? ... Eğer buna bir çözüm buldu iseniz bilmek isterim. Yukarıda yazdığım onca şeyi savunmaktansa “aaaa evet varmış” demeyi ve yanılmayı tercih ederim. Ayrıca da puanı hak etti isem güncel kur değerleri ile yeniden düzenlenip verilmesini istiyorum.
TFlowLayout ile TVertScrollbox Kullanımı - engerex - 15-02-2021 TFlowLayout'un Alignment'ı Client olarak kullanmazsak ne olur? Cvp: TFlowLayout ile TVertScrollbox Kullanımı - yanniosman - 15-02-2021 Merhaba, Yakın zamanda bende FlowPanel ile ilgili benzer durumlar yaşadım. Ekteki örnekten kendim için geliştirdiğim en pratik yöntemi inceleyebilirsiniz :-) Ayrıca mouse ile FlowPanel üzerindeyken sayfa kaydırma işlevi gerçekleşmiyordu, onu da çözdüm. Not: Bu yöntem FlowPanel içerisinde 100-200 küsür adetten fazla bileşen barındıracaksa ciddi performans sorunları yaratabilir! |