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
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.
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
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;
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.
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;