Form Create and Free nasıl yapmalı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Form Create and Free nasıl yapmalı

Mesaj gönderen greenegitim »

Merhaba,
Formları create ederken şöyle bir kod kullanıyorum

Kod: Tümünü seç

frm_stoklar := Tfrm_stoklar.Create(Self);
try
frm_stoklar.ShowModal;
finally
frm_stoklar.Free;
end;
Örnek senaryoda:
Kullanıcı Stok ekranına girdi burada seçtiği stok kartının hareketlerini aşağı kısımda farklı bir gride gördü ve üzerine çift tıklayarak bağlı bulunduğu faturayı açtı // sıkıntı yok
Faturayı inceledi ama fatura formunu kapatmadan üsten hızlı erişim buttonlarının olduğu stok buttonuna basıp geldiği bir önceki ekran olan stok ekranını yeniden açtı burada bir ürünün kalan stok miktarına baktı ve stok formunu kapatı arkada kalan fatura formu göründü onuda kapatı ilk geldiği stok formuna tekrar d onu kapatığında access violation at address hatasına düştü.
Formlardan Gidiş Yönü Stok.show-Fatura.show-Stok.show
Dönüş Stok.close- fatura.close-stok.close;

Bu tür aynı formun birden fazla kez çağırılıp kapatılması durumunda nasıl yol izlemeliyiz? uygulama SDI uygulama.
Mücadele güzelleştirir!
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen freeman35 »

Fatura, irsaliye formları olduğunu varsay, bu class ların private kısımlarında, "frm_stoklar: Tfrm_stoklar" tanımla. bu sana her fatura ve iraliye içinde stokkart için ayrı handle verir, yani birbirinden bağımsız stok kartı açmanı sağlar.
sadece Class.Free; Kullanma. FreeAndNil Kullan, ve fatura ve irsaliyede create işleminde bu frm_stoklar değişkenini ilkle yani nil ata, ayrıca garanti olması için (gerek yoktur ama ben yazarım) OnClose eventine değişkenleri queryleri vs gibi önemli olanların kontrollerini eklerim.
If Assigned(frm_stoklar)then FreeAndNil(frm_stoklar); gibi

Kod: Tümünü seç

try
  //Try içinde olsun ki hata durumunda program kırılmasın
  if not Assigned(frm_stoklar)then frm_stoklar := Tfrm_stoklar.Create(Self)
  else frm_stoklar.bringtoFront;
  frm_stoklar.ShowModal;
except
  Showmessage('hata oluştu !!!');
end;
If Assigned(frm_stoklar)then FreeAndNil(frm_stoklar);
frm_stoklar sadece tek kullanılacaksa yani yukarıda yazdığım gibi değilde tek değişken ile(kendi unit i içindeki default isim ile) kullanılacaksa, form un destroy eventinde kendi adını nil verin. Ama bu formu modal kullanacaksanız vermeyin, yukarıda yazdığım gibi kullanmanızı öneririm. Değişkenleri formların initialization bölümünde ilk leyin, yada class a dahil ise class ın creatinde ilkleyin. Yani frm_stoklar:= nil; gibi Idx:= 0; yada her ne ise, sonra code unuzda bu ilk değerlere göre yönlendirmeler yapabilirsiniz.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen xozcanx »

Merhaba;
Hayırlı Ramazanlar,
Benzer bir konu o yüzden yeni konu açmak istemedim.
benim yaşadığım sıkıntı ise form açıldığında hafızaya belleğe yerleşen bilgilerin, formu kapattığında hala hafıza yeralması, yada ben çok yanlış bir gözlem yapıyorum :? (Sürüm XE10)

Formu açmak için kullandığm yöntem.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Begin
  If Assigned(frm_islem)then frm_islem.Close; // Close deme sebebim frm_islem formunun close olayı,
  if not Assigned(frm_islem)then frm_islem := Tfrm_islem.Create(nil);
  frm_islem.Show;
End;
frm_islem içieriği

Kod: Tümünü seç

var
  frm_islem: Tfrm_islem;
  Mem,Mem1:TMemo;
implementation
{$R *.dfm}
procedure Tfrm_islem.Button1Click(Sender: TObject);
var i:integer;
begin
  Try
    if Assigned(mem)  then FreeAndNil(Mem);
    ShowMessage('memo silindi!');// panel üzerinden kaldırıldığını gözlemlemek için
    Mem:=TMemo.Create(nil);
    with Mem do
    begin
      Parent:=Panel1;
      Align :=alClient;
      Clear;
      for i  := 0 to 5000 do
      Lines.Add('Sayı :'+IntToStr(i));
    end;
  except on E: Exception do
    ShowMessage(PChar(E)+ ' Hata oluştu!');
  End;
end;
procedure Tfrm_islem.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(mem)  then FreeAndNil(mem);
  if Assigned(mem1) then FreeAndNil(mem1);
  FreeAndNil(frm_islem);
end;
Procces Explorer ile yaptığım gözlemlemede aşağıdaki değerleri alıyorum sırası ile, bu örnek bir çalışma ana uygulamada değerler çok daha yüksek çıkıyor.Bu durum normal midir?

1. Resim : Uygulamanın ilk açıldığı durum bilgisi
2. Resim : frm_islem formunun açıldığı durum bilgisi
3. Resim : frm_islem formunda Button1Click sonrası durum bilgisi
4. Resim : frm_islem formunun Close sonrası durum bilgisi

Resim
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen freeman35 »

Her create işlemi, memory den yer tutmak demektir. Free; bunu geri bırakmak demektir. Ama Free dedim sisteme direk bırakıldı diye düşünmeyin. "Memoryleak" en önemli kontrol, Application sonlandırıldığında alınan tüm memory geri verildi mi? buna göre değerlendirme yapın, eğer fark varsa yani uygulamanın her açılıp kapanmasından sonra free memory azalıyorsa, sorun var demektir, buda genellikle, create edilen class lar free lenmemiş demektir. Bu sisden kaynaklıda olmayabilir, kullandığınız bir bileşende buna sebep olabilir.

Kod: Tümünü seç

  If Assigned(frm_islem)then frm_islem.Close; // Close deme sebebim frm_islem formunun close olayı,
  if not Assigned(frm_islem)then frm_islem := Tfrm_islem.Create(nil);
Bana göre hatan, Uygulama ilk çalıştığında "frm_islem" neden açık ? auto create e gerek yoksa manual create herzaman iyidir. sondan başa gitmek yerine düz mantık kullanın. Önceki mesaj da yazdım, unit in initialization ı kullanın, bu işler için var.
.Create(nil); boşlukta oluşturmayın, en azından Application a bağlayın ki, uygulama sonlanırken en azından o free liyebilsin.

bu kullanımda yanlış,

Kod: Tümünü seç

procedure Tfrm_islem.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeAndNil(frm_islem);
olması gereken:

Kod: Tümünü seç

procedure Tfrm_islem.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;

Kod: Tümünü seç

procedure Tfrm_islem.FormOnDestroy(Sender: TObject
begin 
    frm_islem:= Nil;// Modal değil ise,
frm_islem.ShowModal; şeklinde active edildiyse satırından sonra, duruma göre FreeAndNil(frm_islem);

ben, illaki kontrol bende olsun isterim,

Kod: Tümünü seç

if Assigned(mem)  then begin
 mem.Lines.Clear; // içeriğinide sileyim, kendisi hata verse bile en azından satırlar memoryden silinsin. Gerek yok, ama ben eklerim
 FreeAndNil(mem);
end;
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen xozcanx »

freeman35 yazdı:

Kod: Tümünü seç

ben, illaki kontrol bende olsun isterim,
[code]if Assigned(mem)  then begin
 mem.Lines.Clear; // içeriğinide sileyim, kendisi hata verse bile en azından satırlar memoryden silinsin. Gerek yok, ama ben eklerim
 FreeAndNil(mem);
end;
Formlar hiçbir zaman autoCreate değil uygulamada sadece gerektiği zaman create ediliyor. elimden geldiğince form ve nesneleri kodlama ile yapmaya çalışıyorum.

bu kısmı ilk okuduğumda gözden kaçırdım sanırım mem.lines.clear; dediğimde ilk görüntülerde de olan şişme olmuyor.

Buradaki makalenizi de okudum, mevcut uygulamada pek çok Memory Leak var, yeni sürümde daha dikkatli olmaya çalışacağım.

Sıkılmadan sabırla okuyup cevap verdiğiniz için teşekkürler.
Allah razı olsun.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen freeman35 »

Hemen düzelteyim, ben "Tuğrul helvacı" değilim. verdiğin linkte benim herhangi bir yazım yok. Hak geçmesin :)
Yazarken hep genele hitap etmeye çalışıyorum, cümlelerim o yüzden karışık olabilir :)
mem.lines.clear; bu seni yanıltmasın, mem i free lediğindede satırların silinmesi yani memory nin geri verilmesi gerekir, ama bu kontrolü uygulama kapandıktan sonra yap. rakkam olarak memory düşmeyebilir, ama os un memory manager ı o kısmı free olarak adreslemiştir (kodda hata yoksa) ama senin baktığın program o kısmı hala kullanılanlara dahil ediyor olabilir.
Memory leak işi en sıkıcı kısımdır, ve hep en sona bırakılır yada önemsenmez, windows memory bitti hatası vermez kolay kolay, swapfile var ;) ama performans düşer. heleki bir server uygulaması ise. makine resetlenmediği sürece memory şişer durur.
O yüzdendir ki, bence her form yada class la iş bittikten sonra temizlik yapılmalı ve kontrol edilmeli.
Cümlemizden inşAllah
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen xozcanx »

:alsana: bu bana :)
4 gündür bir denetime tabi kalıp, Mübarek ramazan ayı oruçlu oruçlu enerji düşüyor bu vakitler :) bu 2 etken kişileri karıştırmama sebebiyet verdi sanırım. şuan bende resetlendim diyebilirim :oops:

dediklerinizi de çok iyi anladım, sizinde dediğiniz gibi belkide benim baktığım uygulama bu rakamsal değerleri düşürmüyor olabilir test çalışması açıkken bir süre hiçbirey yapmadığımda da değerlerin değiştiğini gözlemlemiştim.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen greenegitim »

@freeman35 hocam private de frm_stoklar: Tfrm_stoklar; olarak tanımladığım zaman E2003 Undeclared identifier: 'Tfrm_stoklar' hatası veriyor bunun yerine frm_stoklar: TForm; dediğimde bir sıkıntı görünmüyor bu şekilde kullanmamın bir sakıncası varmıdır.
Mücadele güzelleştirir!
edo
Üye
Mesajlar: 40
Kayıt: 05 Haz 2005 11:12

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen edo »

Undeclared identifier hatasını muhtemelen; çağırdığınız ekranın uses kısmına TFrm_Stoklar'ı barından unit'i eklemediğiniz içindir. Ayrıca TForm'dan türetirseniz sadece TForm'dan gelen özelliklere erişebilirsiniz ya da sürekli olarak Tfrm_Stoklar'a cast etmeniz gerekir ama siz zaten ilgili classtype'ı göremiyorsunuz hata başa sarar :)

Uses kısmını gözden geçirin
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen freeman35 »

1-) ben tahmin ettim sadece Tfrm_stoklar; senin classın adı o kısmını sen bileceksin.
2-) Tfrm_stoklar class ı hangi unitte ise onu implementation altındaki uses a eklemişsindir, ordan silip yukarıdaki uses a eklemen gerek. unutmayın, kodlar yönlendirme olmadıktan sonra yukarıdan aşağıya doğru çalışır. çağırmak istenen herhangi bir değişken yada yordam, Class içerinde değil ise, çağrılmak istenen satırdan yukarıda olması zorunludur.
3-) neden private e yazdın da public e yazmadın ? ezbere mi bilerek mi? hiç farkı merak eden oldu mu?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen xozcanx »

freeman35 yazdı:1-) ben tahmin ettim sadece Tfrm_stoklar; senin classın adı o kısmını sen bileceksin.
2-) Tfrm_stoklar class ı hangi unitte ise onu implementation altındaki uses a eklemişsindir, ordan silip yukarıdaki uses a eklemen gerek. unutmayın, kodlar yönlendirme olmadıktan sonra yukarıdan aşağıya doğru çalışır. çağırmak istenen herhangi bir değişken yada yordam, Class içerinde değil ise, çağrılmak istenen satırdan yukarıda olması zorunludur.
3-) neden private e yazdın da public e yazmadın ? ezbere mi bilerek mi? hiç farkı merak eden oldu mu?
fırsat bulmuşken bilgiyi doğrulamakfa fayda var :)

örnek form1 in private kısmında yapılan tanımlamalar ilgili form1 içerisinde erişilebilirken, public kısmında yapılan tanımlamalara ise, form2 nin Uses kısmında form1 tanımlandığında puplic kısmındaki tanımlamalara buradan da erişim sağlayabiliyoruz. kısaca diğer formlardan buralara yapılan tanımlamalara erişim için kullanırız.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen greenegitim »

yukarıda tanımladığımda da bu hatayı veriyor F2046 Out of memory compile edemiyor.
Mücadele güzelleştirir!
ertank
Kıdemli Üye
Mesajlar: 1711
Kayıt: 12 Eyl 2015 12:45

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen ertank »

Merhaba, Senin kod örneklerine istinaden benim kod tercihim aşağıdaki gibi olacaktır.
xozcanx yazdı: Formu açmak için kullandığm yöntem.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Begin
  If Assigned(frm_islem)then frm_islem.Close; // Close deme sebebim frm_islem formunun close olayı,
  if not Assigned(frm_islem)then frm_islem := Tfrm_islem.Create(nil);
  frm_islem.Show;
End;
Yukarıdaki kodu ben aşağıdaki şekilde yazıyor olurdum.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Begin
  Screen.Cursor := crHourGlass;  // Kullanıcı uygulamanın bir iş yaptığını anlasın
  frm_islem := Tfrm_islem.Create(Self);
  try
    frm_islem.ShowModal();
  finally
    frm_islem.Free();  // Hata oluşsa dahi frm_islem hafızadan silinsin.
    Screen.Cursor := crDefault;  // Hata oluşsa dahi fare imleci eski haline dönsün
  end;
End;
xozcanx yazdı: frm_islem içieriği

Kod: Tümünü seç

var
  frm_islem: Tfrm_islem;
  Mem,Mem1:TMemo;
implementation
{$R *.dfm}
procedure Tfrm_islem.Button1Click(Sender: TObject);
var i:integer;
begin
  Try
    if Assigned(mem)  then FreeAndNil(Mem);
    ShowMessage('memo silindi!');// panel üzerinden kaldırıldığını gözlemlemek için
    Mem:=TMemo.Create(nil);
    with Mem do
    begin
      Parent:=Panel1;
      Align :=alClient;
      Clear;
      for i  := 0 to 5000 do
      Lines.Add('Sayı :'+IntToStr(i));
    end;
  except on E: Exception do
    ShowMessage(PChar(E)+ ' Hata oluştu!');
  End;
end;
procedure Tfrm_islem.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(mem)  then FreeAndNil(mem);
  if Assigned(mem1) then FreeAndNil(mem1);
  FreeAndNil(frm_islem);
end;

Öncelikle GUI (kullanıcının form üzerinde göreceği) nesneleri form üzerine dizayn aşamasında yerleştirmeyi tercih ederim. Ancak kod kullanarak nasıl yapacağımı göstermek açısından aşağıdaki örneği gönderiyorum.

Kod: Tümünü seç

var
  Mem, Mem1: TMemo;
  frm_islem: Tfrm_islem;
  
implementation

{$R *.dfm}

procedure Tfrm_islem.FormCreate(Sender: TObject); // Form açık olduğu sürece kullanmak için bu olayı tercih etmek lazım
begin
  Mem1 := TMemo.Create(Self);  // Mem1 için hiç kod örneği yoktu. O sebepten Parent vb atamalarını yapmadım
  Mem := TMemo.Create(Self);
  Mem.Parent := Panel1;
  Mem.Align := alClient;
end;
  
procedure Tfrm_islem.FormDestroy(Sender: TObject);  // Form hafızadan silinmeden hemen önce manuel hafıza kullanan kendi değişkenlerimizi silmemiz gerekli
begin
  Mem.Free();  // FormCreate edilir iken oluşturulduğunu biliyorum. IF ile kontrol etmeme gerek yok.
  Mem2.Free();
end;

procedure Tfrm_islem.Button1Click(Sender: TObject);
var 
  i: Integer;
begin
  // Nesnelerin oluşturulmuş olduğunu bildiğim için buton tıklandığında esas yapacağım işe odaklanırdım.
  Mem.Lines.Clear();
  for i  := 0 to 5000 do Mem.Lines.Add('Sayı :'+IntToStr(i));
end;
xozcanx yazdı: Procces Explorer ile yaptığım gözlemlemede aşağıdaki değerleri alıyorum sırası ile, bu örnek bir çalışma ana uygulamada değerler çok daha yüksek çıkıyor.Bu durum normal midir?
Normaldir. Bu durum senin uygulaman ile direk ilgili değildir. Windows yönetimindedir. Sen hafıza kullanmak istediğinde aslında arka planda işletim sisteminden "bana hafıza alanı ver" diye talepte bulunuyorsun. Aynı şekilde hafıza ile işin bittiğide (Free() ettiğinde) işletim sistemine "bana verdiğin o hafıza ile işim bitti" diyorsun.

Bundan sonrası tamamen işletim sistemi insiyatifine kalıyor. Gerekli görürse hemen o alanı boş hafıza olarak gösterir. Gerekmez ise daha sonra boş olarak gösterir.
ertank
Kıdemli Üye
Mesajlar: 1711
Kayıt: 12 Eyl 2015 12:45

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen ertank »

greenegitim yazdı:@freeman35 hocam private de frm_stoklar: Tfrm_stoklar; olarak tanımladığım zaman E2003 Undeclared identifier: 'Tfrm_stoklar' hatası veriyor bunun yerine frm_stoklar: TForm; dediğimde bir sıkıntı görünmüyor bu şekilde kullanmamın bir sakıncası varmıdır.
Örnek ile açıklamaya çalışayım.

Eğer sen eğer boş bir formu değişken kullanarak oluşturmak istersen, şöyle bir kod yazabilirsin.

Kod: Tümünü seç

var
  Degisken: TForm;
begin
  Degisken := TForm.Create(Self);  
  try
    Degisken.ShowModal();
  finally
    Degisken.Free();
  end;
end;
Ancak sen eğer daha önce dizayn aşamasında tasarladığın aşağıdaki gibi bir formu değişken olarak kullanmak istersen (UNIT kısmının kod örneği):

Kod: Tümünü seç

unit Unit11;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm11 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form11: TForm11;

implementation

{$R *.dfm}

procedure TForm11.Button1Click(Sender: TObject);
begin
  ShowMessage(Edit1.Text);
end;

end.
Bu defa şöyle yapmak gerekecek:

Kod: Tümünü seç

uses Unit11;  // Kullanmak istediğimiz formun UNIT adını USES ile bildirmeliyiz. Bunu yazmazsak kodu yazdığımız unit/form Form11 değişkenini bilemez. 

begin
  Form11 := TForm11.Create(Self);  // Uses içinde belirttiğimiz için Delphi artık Form11 değişkenini tanıyor. VAR ile farklı isimde değişken tanımlamama gerek kalmadı.
  try
    Form11.ShowModal();
  finally
    Form11.Free();
  end;
end;
Umarım sorunu doğru anlamışımdır. Yine umarım ifade etmek istediğim anlaşılır olmuştur.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Form Create and Free nasıl yapmalı

Mesaj gönderen greenegitim »

@ertank hocam dediğiniz şekilde kullanımda sıkıntı yok @freeman35 hocamızın ilk mesajda yazdığı "bu class ların private kısımlarında, "frm_stoklar: Tfrm_stoklar" tanımla. bu sana her fatura ve iraliye içinde stokkart için ayrı handle verir, yani birbirinden bağımsız stok kartı açmanı sağlar."
tam buna ihtiyacım vardı ve dediği şekilde private de tanımladığımda yukarıda yazdığım hata mesajları geliyordu uses a tanımlı değil usesa ekleyince yine E2003 Undeclared identifier hatası verdi @freeman35 hocamızın dediği gibi interface altındaki uses a eklediğimde F2046 Out of memory hatası veriyor ama implementation altındaki usesa ekleyip private da frm_stoklar: Tfrm_stoklar şeklinde değilde frm_stoklar: Tform; Tformdan üretiğimde hata almıyorum diğer şekilde olmama sebebini merak ettim.
Mücadele güzelleştirir!
Cevapla