Form Kullanımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Form Kullanımı

Mesaj gönderen m_ekici »

Merhaba arkadaşlar
Proje içerisinde farklı yerlerde sürekli ihtiyaç duyduğum ekranlar oluyor. Bu ekranları tek bir form üzerinde PageControl üzerindeki sayfalara ekleyerek kullanıyorum. Bu formu proje create edildiğinde oluşturuyorum ve istediğimde hangi sayfadaki ekran lazım ise kullanıyorum. Fakat page üzerindeki sayfa sayısı gittikçe artıyor. Performan açısından bu şekilde kullanmak doğrumudur? (Formu her çağırdığımda sadece ilgili tablolar açılıyor, çıkışta kapatılıyor). Diğer seçenek ise her pagedeki elemanlar için bir form tasarlamak ve ihtiyaç duyulduğunda bu formu çağırmak.
Performans açısından sizin fikrinizi almak isterim.
Kolay gelsin
Senat0r
Üye
Mesajlar: 80
Kayıt: 13 Tem 2014 09:30
Konum: Antalya

Re: Form Kullanımı

Mesaj gönderen Senat0r »

Merhabalar;
Ben ihtiyac anında unitlerden create edip kulanıyorum performansa etkisi pek gözle görülür derecede yok
Tavsiye ederim hocam .
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...

Kod: Tümünü seç

Delete from hayat where cins="çıkarcılar"
3ddark
Üye
Mesajlar: 89
Kayıt: 14 Eyl 2010 10:55
Konum: İstanbul

Re: Form Kullanımı

Mesaj gönderen 3ddark »

Kod: Tümünü seç

Application.CreateForm(TFormYardimciPencere, FormYardimciPencere);

dpr dosyası içinden bu satır silerek otomatik create edilmesini iptal edeceksin. Proje açılırken form otomatik olarak yaratılmayacak.

Kod: Tümünü seç

TFormYardimciPencere.Create(Application).Show;
kullanacağın zaman Create edersen sorun olmaz. senat0r ' de aynı şeyi söylemiş
PostgreSQL - Delphi - Linux :!:
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Form Kullanımı

Mesaj gönderen esistem »

selam,
m_ekici yazdı:Merhaba arkadaşlar
Proje içerisinde farklı yerlerde sürekli ihtiyaç duyduğum ekranlar oluyor. Bu ekranları tek bir form üzerinde PageControl üzerindeki sayfalara ekleyerek kullanıyorum. Bu formu proje create edildiğinde oluşturuyorum ve istediğimde hangi sayfadaki ekran lazım ise kullanıyorum. Fakat page üzerindeki sayfa sayısı gittikçe artıyor. Performan açısından bu şekilde kullanmak doğrumudur? (Formu her çağırdığımda sadece ilgili tablolar açılıyor, çıkışta kapatılıyor). Diğer seçenek ise her pagedeki elemanlar için bir form tasarlamak ve ihtiyaç duyulduğunda bu formu çağırmak.
Performans açısından sizin fikrinizi almak isterim.
Kolay gelsin
Her defasında PageControl deki sayfaları visible false true yapmak yerine, üşenmeyin bence her birine form oluşturun, gerektiğinde create edip release yaparsınız, hem daha kolay anlaşılabilir olur projeniz bence. Her zaman kullandığım yöntem budur benimde.
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: Form Kullanımı

Mesaj gönderen m_ekici »

Kod: Tümünü seç


for I:= 0 to cxPageControl1.PageCount - 1 do
    begin
    if I=SAYFA then cxPageControl1.Pages[I].TabVisible := true else
                          cxpageControl1.Pages[I].TabVisible := false;
    end;
cxPageControl1.ActivePageIndex := SAYFA;
Açıp kapamada problem yok. Benim öğrenmek istediğim hangi metodda performans problemi olur/olmaz. Üşenmekten değil, aynı işlemi formda yapıyor olacağım. Ama projede ekstradan 20-25 form olacak.
3ddark
Üye
Mesajlar: 89
Kayıt: 14 Eyl 2010 10:55
Konum: İstanbul

Re: Form Kullanımı

Mesaj gönderen 3ddark »

Her Input penceren ve Output penceren ayrı olursa formların kodları daha sade ve anlaşılır olur. Düzenleme yaparkende ilerde birşey eklemek değiştirmek istediğinizde de çok kolaylık sağlar.

Kullanım anında Create ve Free etmenizde performans açısından sadece kullanacağız zaman bellek kullanımı olacağı için. Bu şekilde kullanmak mantıklı. Diğer türlü proje ilk açılırken bütün formları veya ne kadar bilgi varsa hepsini create ederek belleğe dolduruyor böylece kullandığınız veya kullanmadığınız bütün bilgiler belleğe alınmış oluyor. Gereksiz gereksiz iş yükü.
PostgreSQL - Delphi - Linux :!:
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Form Kullanımı

Mesaj gönderen thelvaci »

Form kullanımı ile alakalı tartışmanıza ben de küçük bir eklenti ile renk katmak isterim. Arkadaşların da bahsettiği üzere; uygulamanızda kullanacağınız form'ları sadece ihtiyacınız olduğunda Create edip işiniz bittiğinde Free etmeniz uygulama performansı açısından ideal bir davranış olur. Böylece uygulamanız daha az virtual memory kaplayacak ve virtual memory commit işlemleri daha hızlı olabilecektir.

Ekstra olarak; kendi uyguladığım bir sistemi sizlere de önerebilirim. Uygulamalarımda, ortak kullanım sahasına sahip olacağına inandığım formlarım var ise bu formları XForm adında taban bir formdan türetiyorum. Bu sayede, form'larım için bir ara katmanım oluyor. Uygulamamdaki tüm formları etkileyebilecek bazı güncellemeler gerektiğinde; gereken değişikliği XForm üzerinde yapıyor ve onlarca formda güncelleme yapmaktan kurtuluyorum. Aynı zamanda XForm'unuz için bir de ileride kullanılabilme ihtimaline karşı; bir interface tanımlayıp XFormumuzu bu interface'i implemente eder hale getirmemiz de faydalı olacaktır. Örneğin;

Kod: Tümünü seç

type
  IFormInterface = interface
  // Ctrl+Shift+G'ye basınız
  end;

  TXForm = class(TForm, IFormInterface)
  protected
    procedure LoadData; virtual; // Bu form'dan türeyecek formların veritabanlarından bilgi yükleyecekleri metod.
    procedure SaveData; virtual; // Bu formdan türeyecek formların veritabanına kayıt yapacakları metod.
  end;
gibi.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Gömülü (Embedded) Form Kullanımı

Mesaj gönderen csunguray »

Formu uygulamanın başlangıcında bir kez oluşturup daha sonra hep aynı formu kullanmak bence iyi bir fikir değil. Mantıksal yapı olarak programın her birimi mümkün olduğunca diğer birimlerden bağımsız olmalıdır. Bu durumda her bir formun içerisindeki gömülü olan form da kendine ait olmalıdır. Hız sorununa çözüm olarak ise her şeyi form create edildiğinde oluşturmak yerine sadece o sekme (tab) tıklandığında gerekli formu oluşturdum. Böylece sekmek tıklandığında bir kez form oluşturuluyor. Sonraki işlemlerde ise sadece güncelleme yapılıyor. Bu sistem özellikle çok fazla sekmen varsa daha da yararlı olur.

Kod: Tümünü seç

unit Form1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, QueryF, DB, ADODB, Menus, ImgList, ActnList, ComCtrls, DetaylarG;

type
  TForm1 = class(TForm)
    PageControl1: TcxPageControl;
    TabSheetDetay: TcxTabSheet;
  private
    FormDetaylarG1: TFormDetaylarG;
  public
  end;

implementation

uses DataM;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FormDetaylarG1 := nil;
end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin
  inherited;
  if PageControl1.ActivePage = TabSheetDetay then
  begin
    if FormDetaylarG1= nil then
    begin
      EmbedForm(Self, TFormDetaylarG, FormDetaylarG1, TabSheetGecmis);
    end;
    FormDetaylarG1.ADOQuery1.Close;
    FormDetaylarG1.ADOQuery1.Parameters.ParamByName('MASTER_REFERANS').Value := ADOQuery1.FieldByName('REFERANS').AsInteger;
    FormDetaylarG1.ADOQuery1.Open;
  end;
end;

procedure TForm1.EmbedForm(AOwner: TForm; InstanceClass: TComponentClass; var Reference; AParent: TWinControl);
var
  Instance: TComponent;
begin
  Instance := TComponent(InstanceClass.NewInstance);
  TComponent(Reference) := Instance;
  try
    Instance.Create(AOwner);
    TForm(Instance).BorderStyle := bsNone;
    TForm(Instance).Parent := AParent;
    TForm(Instance).Align := alClient;
    TForm(Instance).Constraints.MaxHeight := 0;
    TForm(Instance).Constraints.MinHeight := 0;
    TForm(Instance).Constraints.MaxWidth := 0;
    TForm(Instance).Constraints.MinWidth := 0;
    TForm(Instance).Show;
  except
    TComponent(Reference) := nil;
    raise;
  end;
end;

C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Cevapla