Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 3/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Uygulamamın açılışındaki siyah ekran Hakkında
#1
Merhaba arkadaşlar

Yaptığım uygulamayı android de test ettiğimde 12 saniye siyah ekrandan sonra program açılıyor. Bende kendimce splash ekran yapıp loading mantığı kurayım bu aradada formlar yüklensin istedim. Ama sanki bi yerlerde hata yaptım uygulama istediğim gibi olmadı. Toplam 7 form var.

project.dpr dosyasını aşağıdaki gibi düzenledim.

program Project1;

uses
  System.StartUpCopy,
  FMX.Forms,
  FMX.StdCtrls,
  Unit6 in 'Unit6.pas' {Form6};


{$R *.res}

begin

  Application.Initialize;
  Application.CreateForm(TForm6, Form6);
  Application.Run;
end.


unit6 içeriği aşağıdaki gibi

unit Unit6;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,
  FMX.StdCtrls,System.StartUpCopy;

type
  TForm6 = class(TForm)
    Rectangle1: TRectangle;
    AniIndicator1: TAniIndicator;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form6: TForm6;

implementation
uses
 Unit1,ayarlar,
  Unit2  {Form2},
  Unit3 {Form3},
  Unit4 {Form4},
  Unit5  {Form5},
  main {MainForm},
  Unit7 {Form7};
{$R *.fmx}

procedure TForm6.FormShow(Sender: TObject);
begin
  AniIndicator1.Visible := True;
  AniIndicator1.Enabled := True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm7, Form7);
  Application.CreateForm(TMainForm, MainForm);

  AniIndicator1.Enabled := False;
  AniIndicator1.Visible := False;
  Application.Run;
  form1.Show;

end;

end.


Yaptığım mantık komik gelebilir ama aklıma böyle geldi. Buna alternatif uyguladığınız yöntemler var mı. Daha yeni olduğum için ancak bunu düşünebildim. Muhtemelen farklı yöntemler vardır.
Cevapla
#2
Merhaba,
Açılışta varsayılan splash ekrandan hemen sonra oluşan siyah ekran bekleme sorunu (mantıksal bir sorundu; tüm formlar oluşturulduktan sonra beklemesi anlamsızdı), Delphi 10.2 Tokyo sürümü ile çözülmüş.
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
#3
Naçizhane bir öneride bulunayım; 
Ana formunuzun OnShow olayında geçen,
procedure TForm6.FormShow(Sender: TObject);
begin
 AniIndicator1.Visible := True;
 AniIndicator1.Enabled := True;
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.CreateForm(TForm2, Form2);
 Application.CreateForm(TForm3, Form3);
 Application.CreateForm(TForm4, Form4);
 Application.CreateForm(TForm5, Form5);
 Application.CreateForm(TForm7, Form7);
 Application.CreateForm(TMainForm, MainForm);

 AniIndicator1.Enabled := False;
 AniIndicator1.Visible := False;
 Application.Run;
 form1.Show;

end;
kod kısımlarında; 
* Initialize ve Run bildirimleri ve bunlar arasında geçen tüm yapıcı metodlarınız, zaten uygulamalarınız tarafından otomatik yönetiliyor.
OnShow olayında değil de kullanıcı davranışına bağlı olarak (örn. Kayıt ekle butonuna tıklanması durumunda formu oluştur), yaparsanız daha doğru olur.
Mevcut kodlarınızda OnShow olayı zaten açılışta çalıştığı için tüm formlarınız da oluşacaktır.
* Initialize ve Run OnShow olayında ise dpr dosyasındaki (Ctrl + V) Initialize ve Run ne iş yapıyor. Smile Onları sildiniz mi? Sildi iseniz Initalize olmayan bir uygulamanın OnShow olayı nasıl çalışıyor?  Blush
* Son bir husus, AniIndicator Thread olmadan görünmeyecektir.
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
#4
Teşekkür ederim Fesih bey deneyimlerinizi paylaştığınız için.

Söylediğiniz kodlar dpr dosyasında mevcut hocam. Diğer dosyada düzenleme yaptım ama kaydedince silinmiş sitede.


  
Application.Initialize;
  Application.CreateForm(TForm6, Form6);
  Application.Run;

Dediğiniz gibi tıklandığında oluşsun istersek aşağıdaki kod örnek olarak yeterli midir? Bu kodla birlikte form3.show da kullanmak lazım mı?

 Application.Initialize;
 Application.CreateForm(TForm3, Form3);
 Application.Run;
Cevapla
#5
(19-01-2018, Saat: 13:09)webprog Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlTeşekkür ederim Fesih bey deneyimlerinizi paylaştığınız için.

Söylediğiniz kodlar dpr dosyasında mevcut hocam. Diğer dosyada düzenleme yaptım ama kaydedince silinmiş sitede.


  
Application.Initialize;
  Application.CreateForm(TForm6, Form6);
  Application.Run;

Dediğiniz gibi tıklandığında oluşsun istersek aşağıdaki kod örnek olarak yeterli midir? Bu kodla birlikte form3.show da kullanmak lazım mı?

 Application.Initialize;
 Application.CreateForm(TForm3, Form3);
 Application.Run;

Rica ederim,
Initialize ve Run direktifleri her uygulama için bir defa kullanılır. Initialize, uygulamayı çalıştıracak şekilde ihtiyaç olan tüm referansların hazır hale getirilmesini, Run ise artık her şeyin hazır olduğunu uygulamanın çalışabilir olduğunu bildirir.
Bunlar zaten dpr dosyasında mevcut, diğer kod satırlarında kullanmanız, anlamsız olacaktır.
Formu dinamik oluşturmak için;
1- Sonradan oluşturacağınız tüm formları Project > Options > Forms penceresinde Available forms alanına taşıyın veya dpr dosyasından form oluşumu ile ilgili satırları silin.
2- Ana formunuzda Uses kısmına oluşturacağınız form Unit'lerinin isimlerini ekleyin (Alt + F11).
3- Daha sonra herhangi bir kod satırında formu aşağıdaki gibi oluşturun.
procedure TForm1.Button1Click(Sender: TObject);
begin
 if not Assigned(Form2) then { bir defa oluşturulacaktır. }
   Form2 := TForm2.Create(Nil);

 if Assigned(Form2) then
 begin
   Form2.Show;
   { Form2 oluşmuşsa diğer kodları gerçekleştir. }
 end;
end;
4- Oluşturduğunuz formu yok etmeyi de unutmayın
procedure TForm1.FormDestroy(Sender: TObject);
begin
 if Assigned(Form2) then
   Form2.Free;
end;
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
#6
TAm ben yazıcaktım ama Fesih hocam Noktayı koymuş Smile

Uygulama açılmasındaki gecikmeler, Diğer formları oluşturmasından (create) den dolayı oluşmaktadır. Bu konuda availeble Form kısmında ana formunuz haricindekileri sağa çekneiz olacaktır.. Sonrasında ise form çağırırken Create Form (Yine Fesih hocam yazmış zaten Smile ) ile çağırmanız olacaktır.
WWW
Cevapla
#7
Arkadaşlar dediklerinizi yaptım programımda artık bekleme kalmadı. Cevap yazmayı unutmuşum yeni farkettim. Fesih hocam özellikle sabrınızdan dolayı teşekkürler. Tecrübelerinizden ve aktardıklarınızdan çok şey öğrendim. delphi 10.2 de derleme , on click eventlarına TForm.Create(Nil); gibi komutları kullanarak sıkıntım kalmadı. Tekrardan sağolun
Cevapla
#8
Benim kullandığım genel bir procedure. Belki bir yararı olur.

try
 Application.CreateForm(TForm1, Form1);
Form1.showmodal;
finally
 FreeAndNil(Form1);
end;
Cevapla
#9
Teşekkür ederim faktoral . Bunu da deneyeceğim sonraki projemde
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Tokyo Android Kurulumunda aldığım hata hakkında adelphiforumz 8 263 01-08-2018, Saat: 10:56
Son Yorum: Fesih ARSLAN
  Tam ekran brs 2 188 23-07-2018, Saat: 19:01
Son Yorum: brs
Question SDK'lar hakkında ? BY-HAYALET 7 240 17-07-2018, Saat: 10:00
Son Yorum: BY-HAYALET
  Bildirim hakkında. Bay_Y 2 263 01-06-2018, Saat: 12:14
Son Yorum: Bay_Y
Question delphi - örnek projeler hakkında BY-HAYALET 6 408 27-05-2018, Saat: 10:35
Son Yorum: BY-HAYALET



Konuyu Okuyanlar: 1 Ziyaretçi