mdichild kapatılan formun aynısı tekrar açılıyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cvheneburi
Üye
Mesajlar: 95
Kayıt: 07 Eki 2010 03:55

mdichild kapatılan formun aynısı tekrar açılıyor

Mesaj gönderen cvheneburi »

arkadaşlar mdıform child form ile çalışıyorum
child formu çağırırken şu kodu kullanıyorum

Kod: Tümünü seç

 if not Assigned(F_faturaekle) then
    begin
     Application.CreateForm(TF_faturaekle, F_faturaekle);
     fatduzenle:=0;
     f_faturaekle.Caption:='Fatura İşlemleri - ALIŞ FATURASI';
     f_faturaekle.Label22.Caption:='Alış Faturası';
     F_faturaekle.Show;
    end
  else TF_faturaekle(F_faturaekle).BringToFront;
kapatırken ise onclose olayına Action.Cafree; destroy olayına da f_faturaekle:=Nil;

açılan formun onshow veya oncreate olayına formun yenimi yoksa düzenleme mi olduğunu kontrolunu yapan kod var formduzenle değişkeni 0 ise boş form 1 ise dolu form gelmesi lazım ama programı ilk açtığım zaman düzenle komutunu kullandığımda formduzenle 0 değerini alıyor ve boş form getiriyor kapatığ tekrar düzenle dediğim zaman bu kez normal çalışıyor ve bundan sonra da sürekli formdüzenle değişkeni 1 değerini almış olarak kalıyor ve her yeni form dediğim zaman dolu form geliyor
boreas
Üye
Mesajlar: 120
Kayıt: 05 Tem 2007 12:39
Konum: Ankara

Re: mdichild kapatılan formun aynısı tekrar açılıyor

Mesaj gönderen boreas »

formu destroy ederken formduzenle değerini 0 yaparak destroy olsalar öncelikle kapandığı zaman 1 kalma osıkıntısını çözmüş olursun
....
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: mdichild kapatılan formun aynısı tekrar açılıyor

Mesaj gönderen ertank »

cvheneburi yazdı:arkadaşlar mdıform child form ile çalışıyorum
child formu çağırırken şu kodu kullanıyorum

Kod: Tümünü seç

 if not Assigned(F_faturaekle) then
    begin
     Application.CreateForm(TF_faturaekle, F_faturaekle);
     fatduzenle:=0;
     f_faturaekle.Caption:='Fatura İşlemleri - ALIŞ FATURASI';
     f_faturaekle.Label22.Caption:='Alış Faturası';
     F_faturaekle.Show;
    end
  else TF_faturaekle(F_faturaekle).BringToFront;
kapatırken ise onclose olayına Action.Cafree; destroy olayına da f_faturaekle:=Nil;

açılan formun onshow veya oncreate olayına formun yenimi yoksa düzenleme mi olduğunu kontrolunu yapan kod var formduzenle değişkeni 0 ise boş form 1 ise dolu form gelmesi lazım ama programı ilk açtığım zaman düzenle komutunu kullandığımda formduzenle 0 değerini alıyor ve boş form getiriyor kapatığ tekrar düzenle dediğim zaman bu kez normal çalışıyor ve bundan sonra da sürekli formdüzenle değişkeni 1 değerini almış olarak kalıyor ve her yeni form dediğim zaman dolu form geliyor
fatduzenle değişkeni anladığım kadarıyla F_FaturaEkle formuna ait değil. Başka bir formda tanımlanmış bir değişken. Eğer durum böyle ise değişkeni F_FaturaEkle formunun public kısmında tanımlak gerekli. Böylece kullanımı F_FaturaEkle.fatduzenle := 0 benzeri olacaktır. Form Free edildiği zaman hafızadan silinecektir. Son olarak F_FaturaEkle formunun OnCreate olayının içine standart hangi değeri almasını istiyor iseniz kod ile bunu sağlayabilirsiniz.
cvheneburi
Üye
Mesajlar: 95
Kayıt: 07 Eki 2010 03:55

Re: mdichild kapatılan formun aynısı tekrar açılıyor

Mesaj gönderen cvheneburi »

dediğniz gibi fatduzenle başka bir formda tanımlı dediğiniz gibi public alanına tanımladım fakat sıkıtım hala düzelmedi. fatura ekle formunun oncreate olayına dediğiniz gibi kodlarım var zaten

Kod: Tümünü seç

case fatduzenle of
0:
begin

dmodul.kontrol.Close;
dmodul.kontrol.SQL.Clear;
dmodul.kontrol.SQL.Add('select * from belge where BELGETUR=:F and AKTIF=1');
dmodul.kontrol.Params[0].Value:='Fatura';
dmodul.kontrol.Open;
end;// 0 biti
1:
begin
 Label9.Caption:=dmodul.faturaMUSTERIID.AsString;
 Label10.Caption:=dmodul.faturaMUSTERIADI.AsString;

  dmodul.kontrol.Close;
  dmodul.kontrol.SQL.Clear;
  dmodul.kontrol.SQL.Add('select hesapno,sum(BORC) AS BRC,SUM(ALACAK) AS ALCK FROM HESAPCARI');
  dmodul.kontrol.SQL.Add('where hesapno='+QuotedStr(Label9.Caption)+' and DURUM<>"İptal"');
  dmodul.kontrol.Open;
  Label21.Caption:=FloatToStrf(dmodul.kontrol.FieldByName('BRC').AsFloat-dmodul.kontrol.FieldByName('ALCK').AsFloat,ffCurrency,8,2);

    if dmodul.kontrol.FieldByName('BRC').AsFloat>dmodul.kontrol.FieldByName('ALCK').AsFloat then
    Label21.Caption:=Label21.Caption+' Borçlu';
    if dmodul.kontrol.FieldByName('BRC').AsFloat<dmodul.kontrol.FieldByName('ALCK').AsFloat then
    Label21.Caption:=Label21.Caption+' Alacaklı';
....
dmodul.faturalar.First;
 with  cxGrid1TableView1.DataController do
 begin
  for i := 0 to dmodul.faturalar.RecordCount-1 do
    begin
     cxGrid1TableView1.DataController.RecordCount:=cxGrid1TableView1.DataController.RecordCount+1;
      Values[FocusedRecordIndex,0]:=dmodul.faturalarBARCOD.AsString;
      Values[FocusedRecordIndex,1]:=dmodul.faturalarURUNADI.AsString;
      Values[FocusedRecordIndex,2]:=dmodul.faturalarBIRIM.AsString;
      Values[FocusedRecordIndex,4]:=FloatToStr(dmodul.faturalarMIKTAR.AsFloat);
      Values[FocusedRecordIndex,3]:=FloatToStr(dmodul.faturalarBIRIMFIYATI.AsFloat);
      //Values[FocusedRecordIndex,5]:=FloatToStr(dmodul.faturalarTUTAR.AsFloat);
      Values[FocusedRecordIndex,6]:=FloatToStr(dmodul.faturalarISKORAN.AsFloat);
     // Values[FocusedRecordIndex,7]:=FloatToStr(dmodul.faturalarISKTUTAR.AsFloat);
      Values[FocusedRecordIndex,9]:=FloatToStr(dmodul.faturalarKDVORAN.AsFloat);
    //  Values[FocusedRecordIndex,10]:=FloatToStr(dmodul.faturalarKDVTUTAR.AsFloat);
   //   Values[FocusedRecordIndex,11]:=FloatToStr(dmodul.faturalarTOPLAMTUTAR.AsFloat);
      dmodul.faturalar.Next;
      end;
 end;
end;
end;
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: mdichild kapatılan formun aynısı tekrar açılıyor

Mesaj gönderen ertank »

Merhaba,

Delphi'de Form oluşturulur iken çalışma sırası OnCreate, OnShow şeklinde ilerler. Siz daha önceki global değişken kullanımından dolayı OnCreate kısmında zaten ne yapacağınıza karar vermiş durumda oluyorsunuz. Şimdi formun kendi değişkeni var. OnCreate kısmında çalışan kod sizin diğer tarafta (formu çağırdığınız yerde) değişkene atama yapmadan çalışmış olacak. Dolayısı ile sürekli sıfır olacaktır.

Mevcut OnCreate kısmındaki kodlarınızı OnShow içine taşıyın. OnCreate kısmında sadece fatduzenle için standart değer istiyorsanız bunun atamasını yapın. Eğer herhangi bir standart değer istemiyor iseniz OnCreate kısmı boş kalabilir.

Formu çağırma kodunuzu uygun şekilde düzenlemeniz gerekli. Siz değişiklik veya yeni fatura kısmına nasıl karar veriyorsunuz? Bu kontrolü formu Create ettikten hemen sonra yapıp gerekli değişken atamalarını yapmalısınız.

Kod: Tümünü seç

  if not Assigned(F_faturaekle) then
  begin
    Application.CreateForm(TF_faturaekle, F_faturaekle);

    // Burası uygun bir kontrol şekline getirilmeli.
    case FATURA_SEKLI of
      YENI_ALIS_FATURASI:  
      begin
        f_faturaekle.fatduzenle := 0;
        f_faturaekle.Caption := 'Fatura İşlemleri - ALIŞ FATURASI';
        f_faturaekle.Label22.Caption := 'Alış Faturası';
      end;
      ALIS_FATURASI_DUZENLE: 
      begin
        f_faturaekle.fatduzenle := 1;
        f_faturaekle.Caption := 'Fatura İşlemleri - ALIŞ FATURASI DÜZENLE';
        f_faturaekle.Label22.Caption := 'Alış Faturası Düzenle';
      end;
      ALIS_FATURASI_IZLEME: 
      begin
        f_faturaekle.fatduzenle := 2;
        f_faturaekle.Caption := 'Fatura İşlemleri - ALIŞ FATURASI İZLEME';
        f_faturaekle.Label22.Caption := 'Alış Faturası İzleme';
      end;
      YENI_SATIS_FATURASI: 
      begin
        f_faturaekle.fatduzenle := 3;
        f_faturaekle.Caption := 'Fatura İşlemleri - SATIŞ FATURASI';
        f_faturaekle.Label22.Caption := 'Satış Faturası';
      end;
      else
      begin
        MessageDlg('HATA: Fatura şekli belirsiz.', mtError, [mbOk], 0);
        Exit();
      end;
    end;

    F_faturaekle.Show();
  end
  else
    TF_faturaekle(F_faturaekle).BringToFront; // Burada zaten daha önce gösterilen fatura şekli ne ise o gözükecek.
  end;
Cevapla