Form.create icinde zaman alan islemler

Başlatan bunalmis, 29 Ocak 2010, 12:39:13

z

Program tiklaninca form.create isliyor ve icinde yaklasik 3-4 sn suren islem yurutuluyor.

Haliyle programin tiklanmasi ile programin ekranda belirmesi arasinda 3-4 sn zaman geciyor.

Program tiklanir tiklanmaz ekrana en azindan bir goruntu gelsin daha sonra bekleme olsun istiyorum.


Bu nasil yapilir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Bunun için TAboutBox  kullanabilirsiniz.  Bunun için "File>New>other" menüsünden "Forms>AboutBox"  ile yeni bir aboutbox formu açarsınız. Formun adının "AboutBox" yaparsınız. Eğer formun adını başka birşey yapacaksanız , aşağıdaki düzenlemeyi de ona göre değiştirirsiniz. Proje dosyanızın içerisinde aşağıdaki gibi bir düzenleme yaparsınız.  

Not: AboutBox formunun diğer formlardan hiçbir farkı yok.  Tek fark , Genel kabul görmüş about kutusu özelliklerine göre düzenlenip boyutlandırılmış  ve şablonlar içerisine atılmış olmasıdır.

program LoadMonitor;

uses
  Forms,sysutils,
  LoadMonitorUnit in 'LoadMonitorUnit.pas' {Form1},
  LoadMonDtMdlunt in 'LoadMonDtMdlunt.pas' {DtMdl: TDataModule},
  CalibrationUnt in 'CalibrationUnt.pas' {frmCalibration},
  ValReportUnt in 'ValReportUnt.pas' {valueReport: TQuickRep},
  ChartReportUnt in 'ChartReportUnt.pas' {ChartReport: TQuickRep},
  About in 'About.pas' {AboutBox};

{$R *.res}
Var
   OpenAbout:TAboutBox;
begin
  Application.Initialize;
 Try
  OpenAbout:=TAboutBox.Create(Application);
  Application.Title := 'LoadMon Ölçüm Monitörü';
  OpenAbout.Show;
  OpenAbout.Update;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TDtMdl, DtMdl);
  Application.CreateForm(TfrmCalibration, frmCalibration);
  Application.CreateForm(TvalueReport, valueReport);
  Application.CreateForm(TChartReport, ChartReport);
  Application.CreateForm(TAboutBox, AboutBox);
  Application.Run;
 Finally
  AboutBox.Free;
 End;
end.

z

Hocam cevabin icin teşekkürler fakat ben beceremedim.

Cok sade bir ornek verebilirmisin?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Hocam:
Yeni bir "Application" oluşturun. Bu ygulamanın doğal formu "Form1" dir.  Uygulamaya yeni bir form ekleyin. Bu da "Form2" olsun.  Açılışta göstereceğimiz form bu formun kopyası olacak.
Bu haliyle projemizin kaynak kodu
program Project3;

uses
  Forms,
  Unit4 in 'Unit4.pas' {Form1},
  Unit3 in 'Unit3.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.


Şeklinde olacaktır.  Biz bu koda aşağıdaki gibi ekleme yapacağız.

uses  kısmına  "sysutils" dosya adını ekliyoruz. Bunu   "sleep()" rutini bu unitte olduğu için ekliyoruz. Örnek kodda açılış çok hızlı olduğu için araya sleep koydum.

Daha sonra "OpenForm" isimli bir değişken ekliyoruz. Bu değişkenin tipini de "TForm2" olarak seçiyoruz. çünkü Açılış formumuzu  Form2  den türeteceğiz.  
Daha sonrasında  diğer formları yaratmadan önce  "OpenForm" formumuzu yaratıyoruz. ve ekranda gösteriyoruz.  Try - Finally bloğu kullanmak zorunlu değil. Ama bu işlemler esnasında bir sorun oluşursa , her  şart altında teni oluşturduğumuz formu  öldürebilmek için , koymakta fayda var.

program Project3;

uses
  Forms,sysutils,
  Unit3 in 'Unit3.pas' {Form1},
  Unit4 in 'Unit4.pas' {Form2};

{$R *.res}
Var
   OpenForm:TForm2;

begin
  Application.Initialize;
 Try
  OpenForm:=Tform2.Create(Application);
  OpenForm.Show;
  OpenForm.Update;
  sleep(2000);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
 finally
  OpenForm.Free;
 End;

end.

hasangurlek

Uygulamayı "Splash Screen" adıyla araştırabilirsiniz. Fakat sormak istediğim form.create içinde 3-4 saniye süren işlemleriniz nelerdir ? Bu süre en yavaş makineler için bile çok uzun bir zaman.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

z

Form create asmasinda FT232 initialize, ardindan usb hatta bagli kendi makinemin mevcut olup olmadigi, varsa mekanizmanin 0 pozisyonuna tasinmasi islemleri yapiliyor.

Eger bunlari form yaratildiktan sonra otormatik yaptirabilseydim goruntunun gec gelme sorunu olmayacakti.

Timer icinden de yapmak istemedim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

hasangurlek

Alıntı yapılan: "bunalmis"Form create asmasinda FT232 initialize, ardindan usb hatta bagli kendi makinemin mevcut olup olmadigi, varsa mekanizmanin 0 pozisyonuna tasinmasi islemleri yapiliyor.

Eger bunlari form yaratildiktan sonra otormatik yaptirabilseydim goruntunun gec gelme sorunu olmayacakti.

Timer icinden de yapmak istemedim.

Ok, anladım. Demekki mekanizmanın reset pozisyonuna gelmesini beklemeniz zaman alıyor. Mekanik kontrol formunuz yüklenmeden önce açacağınız splash screen de (Fakat buda bir form) görsellik içerecek şekilde hatta animasyonlarla;

Donanım bulundu,
Mekanizma 0 Noktasına taşınıyor,
Mekanizma resetlendi, Sistem kullanıma hazır vs.

gibi yaptığınız işleri sırasıyla kullanıcıya göstermeniz bu sürenin zevkle geçilmesine imkan tanıyabilir. Bir diğer yöntemde işlemlere geçmeden önce kontrol formunuzu gösterip, enable özelliğini false yapıp, arka planda işlerinizi yürütürken önde vereceğiniz bir mesajla kullanıcıya bilgi vermek olabilir. Fakat form oluşturulduktan sonra açılıştaki işlemleri yapmanıza engel olan nedir ?
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

OptimusPrime

fantazi niteliğinde bir çözüm olacak ama form create edilirken thread oluşturulamaz mı?
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

z

Alıntı YapFakat form oluşturulduktan sonra açılıştaki işlemleri yapmanıza engel olan nedir ?

Timer disinda, bu islemleri bir tusa basmadan nasil yaptirilir bilmiyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

OptimusPrime

veya daha fantazik bir çözüm;
init işlemlerini için farklı bir exe derleyin ve form create de bu exe dosyasını çalıştırın?
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

Klein

Alıntı yapılan: "bunalmis"
Alıntı YapFakat form oluşturulduktan sonra açılıştaki işlemleri yapmanıza engel olan nedir ?

Timer disinda, bu islemleri bir tusa basmadan nasil yaptirilir bilmiyorum.
FormCreate yerine FormShow olayında yaptırmayı bir deneyin. Form Show aşamasına gelindiğinde ,  form üzerindeki tüm koponentler oluşmuş durumda olduğu için , göstermede sorun olmayabilir.

Ama ilk aradığınız çözüm bence daha mantıklı.  Açılış beklenirken  tüm programlar  bir açılış formu gösteriyor.  Hatta solidworks gibi  her açılışta farklı bir resim veya animasyon gösterilirse , hem kullanıcı sıkılmaz , hem de   size  güzel bir reklam alanı açılmış olur.

orhanc

Form Show edildikten sonra bu işlemleri yapsanız daha uygun olmaz mı ?
i'm doing nothing... Giddy Up  http://www.drorhan.com