Delphi Can

Orjinalini görmek için tıklayınız: FMX Mimarisinde - TFrame Kullanmak
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
Merhaba,
Uygulamalarda birden fazla modül kullanılması durumunda, her bir modül için ek bir pencere ihtiyacı olmaktadır. Bu durumda en çok başvurulan yöntem Form'lardır.
Mobil uygulamalarda birden fazla Form kullanılması, sistem kaynaklarının (işlemci mimarisi ve diğer cihaz donanımlarına bağlı olarak) tüketimini arttırmakta, Form'lar arası geçişler oldukça yavaşlamaktadır.
Bu noktada sistem kaynaklarını minimum düzeyde kullanacak Form benzeri yapıların kullanılmasında fayda vardır. Bunların başında; TFrame, TLayout, TTabControl ve benzeri bileşenler vardır. 
Bu makalede örnek bir uygulama ile Mobil platform projelerinde, TFrame yapılarının nasıl kullanılacağını kavrayacağız.

1- Yeni bir Multi-Device Application projesi oluşturalım ve projemizi kaydedelim.
2- Projemize Frame eklemek için File / New / Other menüsünden Delphi Projects / Delphi Files penceresini açalım ve FireMonkey Frame nesnesini seçerek OK butonuna tıklayalım. 
3- Bu yöntemle formumuza ikinci bir Frame daha ekleyelim. Makalede iki Frame ile çalışma gösterilecektir. Siz istediğiniz kadar Frame ekleyerek devam edebilirsiniz.
4- Interface / Uses bölümüne Frame Unit'lerini referans olarak ekleyelim.
uses
  Unit2, Unit3;
 
5- Her iki Frame (modüllerimiz)'i belirtecek bir enum tip oluşturalım. 
type
 TModulTipi = (Ornek1, Ornek2);
6- Her iki Frame'in Interface kısmında Frame adlarını tanımlayalım.
Frame1 tanımı:
var
 Frame1: TFrame1;
Frame2 tanımı:
var
 Frame2: TFrame2;
7- Ana formun private bölümünde Frame tiplerimizi tanımlayalım.
  private
   FfrmFrame1: TFrame1;
   FfrmFrame2: TFrame2;
8- Ana form üzerine her iki Frame'in gösterileceği bir TLayot yerleştirelim. 
9- Forma ait diğer tasarım ve nesne yerleşimleri aşağıda gösterildiği gibidir.

01.png

10- Frame tasarımlarını dilediğiniz gibi yapabilirsiniz. Örnek Frame tasarımımız aşağıda gösterilmiştir.

02.png

11- Frame üzerindeki Geri butonunun kodu:
Self.Visible := False;

12- Layout üzerinde gösterilen tüm Frame'leri gizleyecek bir medod yazalım. 
procedure TForm1.SetFrameGizle();
var
 I: Integer;
begin
 for I := 0 to Layout1.ControlsCount - 1 do
   if Layout1.Controls[i] is TFrame then
     TFrame(Layout1.Controls[i]).Visible := False;
end;

13- Frame gösteren bir metod yazalım.
procedure TForm1.SetFrameGoster(Frame: TFrame; ModulTipi: TModulTipi);
begin
 if Frame = Nil then
 begin
   case ModulTipi of
     Ornek1:
       begin
         FfrmFrame1 := TFrame1.Create(Self);
         Frame := FfrmFrame1;
       end;
     Ornek2:
       begin
         FfrmFrame2 := TFrame2.Create(Self);
         Frame := FfrmFrame2;
       end;
   end;
 end;
 Frame.Parent := Self.Layout1;
 Frame.Align := TAlignLayout.Client;
 SetFrameGizle();
 Frame.Visible := True;
end;

Metodumuzda, Frame oluşturulmamış ise TModulTipi parametresine bağlı olarak ilgili Frame tipi oluşturup, diğer özellikleri Set edilmektedir. Frame gösterilmeden hemen önce Layout üzerinde yer alan tüm Frame'ler gizlenmektedir.

14- Buton olarak kullandığımız Rectangle1'in OnClick olayında Frame1'i çağıralım.
SetFrameGoster(FfrmFrame1, TModulTipi.Ornek1);

15- Rectangle2'in OnClick olayında Frame2'i çağıralım.
SetFrameGoster(FfrmFrame2, TModulTipi.Ornek2);





Faydalı olması dileğiyle...
FMX' e başladığımda kullanacağım bir yapı. Elinize sağlık. Teşekkürler...
Teşekkürler , rica etsem kodu da paylaşır mısınız ? Bir şeyler yanlış sanırım bir türlü çalıştıramadım.
(15-02-2018, Saat: 18:22)Bay_Y Adlı Kullanıcıdan Alıntı: [ -> ]Teşekkürler , rica etsem kodu da paylaşır mısınız ? Bir şeyler yanlış sanırım bir türlü çalıştıramadım.

Merhaba,
Özellikle adım adım ve hiçbir ayrıntıyı atlamadan anlatmaya çalıştım. 
Kaynak kodum maalesef yok. Örnek bir çalışma yapıp, kodu silmiştim, diye hatırlıyorum.
Bundaki asıl kastım ise hazıra alıştırmamaktır.
Fakat bir DelphiCan bu makale doğrultusunda örnek bir uygulama hazırlayıp, size yardımcı olabilirse iyi olur.
Böylece farklı bir çalışmaya da imza atmış oluruz: Makale bir DelphiCan tarafından hazırlanır, diğer DelphiCan'lar da bu makaleden yola çıkarak birkaç farklı demo paylaşır.  Smile
Teşekkür ederim atladığım birşey olduğu kesin bende tekrar deneyeceğim çalıştırabilirsem bende kodu paylaşırım.
Merhaba hocam. Framelerde onshow gibi frame açıldığında görev yapacak komut nedir? Araştırdım, uyguladım. Fakat istediğim kodu bulamadım. Çoğu kodlar Create gibi ilk oluşumda ya da ilk gösterimde çalışıyor. HideFrame, ReturnFrame den sonra bu kodlar çalışmıyor.

Sepete eklenen ürünler;
Sepet frame güncellesi için kullanacağım.
Şimdiden teşekkür ederim.
TFrame'in AfterConstruction adlı virtual metodunu kullanabilirsiniz.
  class TMyFrame=Class(TFrame)
    ...
    public
      procedure AfterConstruction; override;
      ...
  end;

Veya Create metodunu ezersiniz,

  class TMyFrame=Class(TFrame)
    ...
    public
      constructor Create(AOwner: TComponent); override;
      ...
  end;
...
implementation
...
constructor TMyFrame.Create(AOwner: TComponent); override;
begin
  inherited;
  ...
  {İstediğiniz işlemler}
end;
Merhaba
Frameleri modal olarak göstermek mümkünmü?
Merhaba
Main form üzerinde bir kaç frame sayfa açtıktan sonra bir tane frame daha açıp burda kayıtı gösterip,düzenleyip kaydedip kapatacağım.
Hittest kullanarak arkadaki form elemanlarına dokunmayı engellemek istiyorum ama olmuyor.
En alttan üste kapatıp açtım hittestleri yine olmadı.
DesignTime da dokunamıyorum ama runtimeda hittest sanki çalışmıyor gibi davranıyor.
Başına gelen konuyla alakalı önerisi olan varmı arkadaşlar.
(10-02-2021, Saat: 15:01)ilhanim Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba
Main form üzerinde bir kaç frame sayfa açtıktan sonra bir tane frame daha açıp burda kayıtı gösterip,düzenleyip kaydedip kapatacağım.
Hittest kullanarak arkadaki form elemanlarına dokunmayı engellemek istiyorum ama olmuyor.
En alttan üste kapatıp açtım hittestleri yine olmadı.
DesignTime da dokunamıyorum ama runtimeda hittest sanki çalışmıyor gibi davranıyor.
Başına gelen konuyla alakalı önerisi olan varmı arkadaşlar.

framenin içine bir adet trectangle koy, alphasını 70 rengini siyah ver, aliginini client yap.
frameyi ana formuna koyduğunda ekranı kaplasın yani aligin client ver.
frameni.brigintofront yap.

böylece formunun önünde modal efektini elde edeceksin, kullanıcı formundaki objeler dokunduğunda aslında senin framedeki trectanglene dokunmuş olacak.

trectanglenin içine bir tanede tlayout ekle, onunda aliginini client yap, soldan sağdan üstten alttan margin 25 ver,
buda senin içine objelerini koyacağın eleman olacak, ve açıldığı formun tam ortasında duracak.

form1 den hardwarekeyback e basıldığınıda algılattığında veya framedeki trectangleye onclick yapıldığında anlaki kullanıcı parmağı ile arkaya dokundu çıkmak istiyor, veya üstte geri tuşu koyabilirsin, frameni gizletmelisin.

anlamadım veya beni aşar dersen sana bir demo yapabilirim.
Sayfalar: 1 2