Kendi uyguladığım yöntem :
Amaç : Process hafıza yönetimini ekonomik hale getirip kolaylaştırmak. Kullanıcı ilgili form(lar)a girmediği sürece hafızada yer işgal etmez, içlerindeki olası process üreten işler kapalı kalır.
Bir projemden örnek :
1. Splash form Create yöntemi : Sizin belirttiğiniz ile aynı şekilde... Sadece OnClose ve OnDestroy olayları (4) ve (5) nolu adımdaki gibidir.
2. Projeye eklenen formları (ana form hariç) DPR dosyasından mutlaka kaldırıyorum. ( bilgi için başlarına // comment tag ekliyorum )
4. Eriştiğim form içerisinde ( tüm formlar için geçerli ) OnClose olayında aşağıdaki kod çalışıyor.
5. Eriştiğim form içerisinde ( tüm formlar için geçerli ) OnDestroy olayında aşağıdaki kod çalışıyor.
Amaç : Process hafıza yönetimini ekonomik hale getirip kolaylaştırmak. Kullanıcı ilgili form(lar)a girmediği sürece hafızada yer işgal etmez, içlerindeki olası process üreten işler kapalı kalır.
Bir projemden örnek :
1. Splash form Create yöntemi : Sizin belirttiğiniz ile aynı şekilde... Sadece OnClose ve OnDestroy olayları (4) ve (5) nolu adımdaki gibidir.
SplashForm := TFormSplash.Create(nil); SplashForm.BorderStyle := bsNone; SplashForm.Brush.Style := bsClear; SplashForm.Image1.Left := 0; SplashForm.Image1.Top := 0; SplashForm.Width := SplashForm.Image1.Width; SplashForm.Height := SplashForm.Image1.Height; SplashForm.AlphaBlend := True; SplashForm.AlphaBlendValue := 0; SplashForm.Show; With SplashForm do begin AlphaBlend := True; AlphaBlendValue := 0; While AlphaBlendValue < 255 do begin Forms.Application.ProcessMessages; AlphaBlendValue := AlphaBlendValue + 5; Sleep(10); end; end; SplashForm.Update; ... ... ... ... SplashForm.Close;
2. Projeye eklenen formları (ana form hariç) DPR dosyasından mutlaka kaldırıyorum. ( bilgi için başlarına // comment tag ekliyorum )
//Application.CreateForm(TFormArama, FormArama); //Application.CreateForm(TFormYapimHareketTarihDegistir, FormYapimHareketTarihDegistir); //Application.CreateForm(TFormAylikGrid, FormAylikGrid); //Application.CreateForm(TFormTalepOzeti, FormTalepOzeti); //Application.CreateForm(TFormBenzerTalepEkle, FormBenzerTalepEkle); //Application.CreateForm(TFormPreferences, FormPreferences); //Application.CreateForm(TFormYapimKoduModulu, FormYapimKoduModulu); //Application.CreateForm(TFormYapimTalep, FormYapimTalep); //Application.CreateForm(TFormStdTalep, FormStdTalep); //Application.CreateForm(TFormStdEkipman, FormStdEkipman); //Application.CreateForm(TFormYapimArama, FormYapimArama); //Application.CreateForm(TFormGorevliPersonel, FormGorevliPersonel); //Application.CreateForm(TFormPeriyodikTalep, FormPeriyodikTalep); //Application.CreateForm(TFormTalepIptal, FormTalepIptal); //Application.CreateForm(TFormPersonelBilgileri, FormPersonelBilgileri); //Application.CreateForm(TFormPersonelGorevSorgulama_TarihAraligi, FormPersonelGorevSorgulama_TarihAraligi); //Application.CreateForm(TFormYapimDagilimGrafigi, FormYapimDagilimGrafigi); //Application.CreateForm(TFormYolEmri_Ayarlar, FormYolEmri_Ayarlar); //Application.CreateForm(TFormYolYaziciNew, FormYolYaziciNew); //Application.CreateForm(TFormYolEmri, FormYolEmri); //Application.CreateForm(TFormStdPlnTarihler, FormStdPlnTarihler); //Application.CreateForm(TFormPersonelKayit, FormPersonelKayit); //Application.CreateForm(TFormKarsilastirmali, FormKarsilastirmali); //Application.CreateForm(TFormHizmetDegistir, FormHizmetDegistir); //Application.CreateForm(TFormHizmetTanimlari, FormHizmetTanimlari); //Application.CreateForm(TFormHizmet_YeniHizmet, FormHizmet_YeniHizmet); //Application.CreateForm(TFormSMSHarekeleri, FormSMSHarekeleri); //Application.CreateForm(TFormGorevlendirme, FormGorevlendirme); //Application.CreateForm(TFormSaatTashih, FormSaatTashih); //Application.CreateForm(TFormKisiyeSMS, FormKisiyeSMS); //Application.CreateForm(TFormHizmetFiyatlandirma, FormHizmetFiyatlandirma); //Application.CreateForm(TFormEkipmanAtama, FormEkipmanAtama); //Application.CreateForm(TFormKurguTarihSaat, FormKurguTarihSaat); //Application.CreateForm(TFormMaliyetRapor, FormMaliyetRapor); //Application.CreateForm(TFormSQLGen, FormSQLGen); //Application.CreateForm(TFormSaatTashih, FormSaatTashih); //Application.CreateForm(TForm1, Form1); //Application.CreateForm(TFormAyarlar, FormAyarlar); //Application.CreateForm(TForm2, Form2); //Application.CreateForm(TFormYapimYonetimYardimci, FormYapimYonetimYardimci);3. Proje içerisinde formlardan birine erişim olacaksa şöyle bir kod ile erişiyorum. ( @Mr.Developer ile aynı method )
if NOT Assigned(FormServis) then Application.CreateForm(TFormServis, FormServis); FormServis.ShowModal;
4. Eriştiğim form içerisinde ( tüm formlar için geçerli ) OnClose olayında aşağıdaki kod çalışıyor.
procedure TFormServis.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
5. Eriştiğim form içerisinde ( tüm formlar için geçerli ) OnDestroy olayında aşağıdaki kod çalışıyor.
procedure TFormServis.FormDestroy(Sender: TObject); begin FormServis := Nil; end;
Saygılarımla
Muharrem ARMAN
Muharrem ARMAN