procedure TCariHesapAcilisIslemFrm.DateTimePicker1Change(Sender: TObject);
var
key:Char;
begin
if DBGrid1.DataSource.State in [dsEdit, dsInsert] Then
IBDataSet1TARIH.Value := DateTimePicker1.Date;
end;
if (DBGrid1.SelectedField.FieldName = 'TARIH') Then
Begin
DateTimePicker1.SetFocus;
SendMessage(DateTimePicker1.Handle, WM_Char, Word(Key), 0);
End;
if (DBGrid1.SelectedField.FieldName = 'TARIH') Then
Begin
DateTimePicker1.Visible := True;
DateTimePicker1.SetFocus;
SendMessage(DateTimePicker1.Handle, WM_Char, Word(Key), 0);
End
Else
Begin
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex + 1].Field.FocusControl;
DateTimePicker1.Visible := False;
Button3.Visible := False;
End;
if (gdFocused in State) Then
if (Column.Field.FieldName = 'TARIH') Then
with DateTimePicker1 do
Begin
left := Rect.Left + DBGrid1.Left + 1;
Top := Rect.Top + DBGrid1.Top + 1;
width := Rect.Right - Rect.Left + 2;
Height := Rect.Bottom - Rect.Top + 2;
if not IBDataSet1.FieldByName('Tarih').IsNull Then
DateTimePicker1.Date := IBDataSet1.FieldByName('Tarih').AsDateTime
Else
DateTimePicker1.Date := Now;
Visible := True;
End;
Hocam yine aynı, DateTimePicker den tarih girerek tab ile diğer Column a geçmek istediğimde DBGrid den çıkıyor, ikinci satıra geçtiğimde append yapmadığından tarih girerken birinci satıra geçiyor.
DBGrid2ColExit de DateTimePicker1.Visible := False olmassa diğer hücreye geçtiğimde kapatmıyor.
DbGirid'de bu tip yapılandırma olayları biraz kasar Keypress ve Keydow nlarda sınırlama koyman gerekir ben tabda kayıt atlamasına izin vermiyorum sadece aynı kayıtta dolaştırıyorum çünkü bu şekilde kontrolü elime aldım aslında ben projem de benzer bir programın çalışma mantığını izlerim yazdığım kodu komple vericem birazdan. Ben projemde yeni kayıt ekleme olayını DBGrid de Enter tuşuna yükledim tabda ki olayı sınırladım sebebine gelince LKS bu mantıkda neden LKS sorusunu sorarsan algoritma çıkarmam kolay oluyor herneyse neyi neden yaptığımı anlaman için kodu komple incelersen mantığı kavrarsın. Bende bunu ilk yaptığım zaman çok kasmıştı açık konuşmak gerekirse Projem araya giren işlerim yüzünden 6 aydır dokunmuyordum sayen de baktım
implementation
uses AnaProgUni, CHTUni, Degiskenlerim, FonksiyonlarUni;
{$R *.dfm}
procedure TCariHesapAcilisIslemFrm.FormCreate(Sender: TObject);
begin
with IBDataSet1 Do
Begin
Close;
SelectSQL.Clear;
SelectSQL.Add('Select * From NAKITISLEMLER Where ISLEMTURU = ''ACILIS'' Order By CARIKOD');
Open;
End;
// Numarator tablosuna bak bakalım değer içeriyormu ?
with NumaratorDataset Do
Begin
Close;
SelectSQL.Clear;
SelectSQL.Add('select * from NUMARATOR');
Open;
End;
if NUMARATORDATASET.FieldByName('NAKIT_DEVIR_NO').IsNull Then
Begin
NumaratorDataset.Edit;
NUMARATORDATASET.FieldByName('NAKIT_DEVIR_NO').AsString := '0000000000';
NumaratorDataset.Post;
End;
//******************************
end;
procedure TCariHesapAcilisIslemFrm.IBDataSet1BORCChange(Sender: TField);
begin
if (DBGrid1.Columns[3].FieldName = 'BORC') And ((IBDataSet1.FieldByName('BORC').AsFloat <> 0) And (not (IBDataSet1.FieldByName('BORC').IsNull))) Then
IBDataSet1.FieldByName('ALACAK').AsFloat := 0;
end;
procedure TCariHesapAcilisIslemFrm.IBDataSet1ALACAKChange(Sender: TField);
begin
if (DBGrid1.Columns[4].FieldName = 'ALACAK') And ((IBDataSet1.FieldByName('ALACAK').AsFloat <> 0) And (not (IBDataSet1.FieldByName('ALACAK').IsNull))) Then
IBDataSet1.FieldByName('BORC').AsFloat := 0;
end;
procedure TCariHesapAcilisIslemFrm.Button1Click(Sender: TObject);
begin
{ if (IBDataSet1.State = dsInsert) Or (IBDataSet1.State = dsEdit) Then
IBDataSet1.Post;
}
//Toplu onayla koçum
//UpdateRecord;
Try
Screen.cursor:= crhourglass;
IbDataSet1.DisableControls;
//Boş Kayıt Kontrolü
IbDataSet1.First;
While Not IbDataSet1.Eof do
Begin
if IbDataSet1.FieldByName('CARIKOD').IsNull Then
IbDataSet1.Delete
Else
Begin
{ IbDataSet1.Edit;
IbDataSet1.FieldByName('SAAT').AsDateTime := Now;
IbDataSet1.Post;}
IbDataSet1.Next;
End;
End;
IBDataset1.ApplyUpdates;
AnaProgFrm.IBTransaction1.CommitRetaining;
Close;
Finally;
IbDataSet1.EnableControls;
screen.cursor:=crdefault;
End;
end;
procedure TCariHesapAcilisIslemFrm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if (gdFocused in State) Then
Begin
if (Column.Field.FieldName = 'CARIKOD') Then
with Button3 do
Begin
left := Rect.Right + DBGrid1.Left + 1;
Top := Rect.Top + DBGrid1.Top + 1;
width := Rect.Right + Rect.Left - 125;
Height := Rect.Bottom - Rect.Top + 2;
Visible := True;
End
Else
if (Column.Field.FieldName = 'TARIH') Then
with DateTimePicker1 do
Begin
left := Rect.Left + DBGrid1.Left + 1;
Top := Rect.Top + DBGrid1.Top + 1;
width := Rect.Right - Rect.Left + 2;
Height := Rect.Bottom - Rect.Top + 2;
if not IBDataSet1.FieldByName('Tarih').IsNull Then
DateTimePicker1.Date := IBDataSet1.FieldByName('Tarih').AsDateTime
Else
DateTimePicker1.Date := Now;
Visible := True;
End;
End;
end;
procedure TCariHesapAcilisIslemFrm.BORC(Sender: TObject);
begin
if DBGrid1.SelectedField.FieldName = 'CARIKOD' Then
Button3.Visible := False
Else
if DBGrid1.SelectedField.FieldName = 'TARIH' Then
DateTimePicker1.Visible := False;
end;
procedure TCariHesapAcilisIslemFrm.DBGrid1KeyPress(Sender: TObject;
var Key: Char);
begin
if (DBGrid1.SelectedField.FieldName = 'CARIKOD') Then
Case key Of
'a' : Key := 'A';
'b' : Key := 'B';
'c' : Key := 'C';
'ç' : Key := 'Ç';
'd' : Key := 'D';
'e' : Key := 'E';
'f' : Key := 'F';
'g' : Key := 'G';
'ğ' : Key := 'Ğ';
'ı' : Key := 'I';
'i' : Key := 'İ';
'j' : Key := 'J';
'k' : Key := 'K';
'l' : Key := 'L';
'm' : Key := 'M';
'n' : Key := 'N';
'o' : Key := 'O';
'ö' : Key := 'Ö';
'p' : Key := 'P';
'r' : Key := 'R';
's' : Key := 'S';
'ş' : Key := 'Ş';
't' : Key := 'T';
'u' : Key := 'U';
'ü' : Key := 'Ü';
'v' : Key := 'V';
'y' : Key := 'Y';
'z' : Key := 'Z';
'x' : Key := 'X';
End
Else
if (DBGrid1.SelectedField.FieldName = 'BORC') or (DBGrid1.SelectedField.FieldName = 'ALACAK') Then
if not (key in ['0'..'9',#8, #13]) then
key := #0;
if (key = Chr(9)) Then
Exit;
if (DBGrid1.SelectedField.FieldName = 'TARIH') Then
Begin
DateTimePicker1.SetFocus;
SendMessage(DateTimePicker1.Handle, WM_Char, Word(Key), 0);
End;
if Key = #13 then { Eğer Enter basılmışsa}
if (ActiveControl is TDBGrid) then // TDBGridd ise
with TDBGrid(ActiveControl) do
if selectedindex < (fieldcount - 1) then// Alanı bir arttır
Begin
if (DBGrid1.SelectedField.FieldName = 'TARIH') Then
Begin
DateTimePicker1.Visible := True;
DateTimePicker1.SetFocus;
SendMessage(DateTimePicker1.Handle, WM_Char, Word(Key), 0);
End
Else
Begin
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex + 1].Field.FocusControl;
DateTimePicker1.Visible := False;
Button3.Visible := False;
End;
end
else
Begin
IBDataSet1.Next;
if IBDataSet1.Eof Then
Begin
IBDataSet1.Append;
IBDataSet1.FieldByName('CARIKOD').AsString := '';
IBDataSet1.Post;
End;
DBGrid1.Columns[0].field.FocusControl;
End
Else
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex + 1].Field.FocusControl;
if key = #40 Then
Begin
key := #0;
IbDataSet1.next;
if IbDataSet1.Eof Then
Begin
IbDataSet1.Append;
IbDataSet1.FieldByName('CariKod').AsString := '';
IbDataSet1.Post;
End;
End;
end;
procedure TCariHesapAcilisIslemFrm.DateTimePicker1Change(Sender: TObject);
var
key:Char;
begin
if DBGrid1.DataSource.State in [dsEdit, dsInsert] Then
IBDataSet1TARIH.Value := DateTimePicker1.Date;
end;
procedure TCariHesapAcilisIslemFrm.DateTimePicker1DropDown(
Sender: TObject);
begin
DBGrid1.DataSource.Edit;
end;
procedure TCariHesapAcilisIslemFrm.FormShow(Sender: TObject);
begin
DateTimePicker1.Date := Now;
DBGrid1.SelectedIndex := 0;
end;
procedure TCariHesapAcilisIslemFrm.Button3Click(Sender: TObject);
begin
FormBul := 'ACILIS';
CHTFrm.Button9.Visible := True;
CHTFrm.ShowModal;
DBGrid1.DataSource.Edit;
if KapanisSorgula = True Then
Begin
DBGrid1.Fields[0].Text := CHTFrm.IBDataSet1.fieldByName('CARIKOD').AsString;
DBGrid1.Fields[1].Text := CHTFrm.IBDataSet1.fieldByName('CARIUNVAN').AsString;
DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1;
End;
Dbgrid1.SetFocus;
CHTFrm.Button9.Visible := False;
end;
procedure TCariHesapAcilisIslemFrm.DBGrid1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
Var
CariKodu:String;
begin
{ if (Key = VK_DOWN) or ((Key = VK_TAB) and (DBGrid1.SelectedIndex = DbGrid1.Columns.Count-1)) then
begin
IbDataSet1.DisableControls;
IbDataSet1.Next;
if IbDataSet1.EOF then
Key := 0
else
IbDataSet1.Prior;
IbDataSet1.EnableControls;
end
Else }
if key = VK_DOWN Then
Begin
key := 0;
IbDataSet1.next;
if IbDataSet1.Eof Then
Begin
IbDataSet1.Append;
IbDataSet1.FieldByName('CariKod').AsString := '';
IbDataSet1.Post;
End;
End
Else
if (Key = VK_TAB) and (DBGrid1.SelectedIndex = DbGrid1.Columns.Count-1) Then
Begin
Key := 0;
DBGrid1.SelectedIndex := 0;
End
Else
if (Key = VK_INSERT) Then
Begin
Key:= 0;
End
Else
if (Key = VK_ESCAPE) Then
Begin
if DBGrid1.SelectedField.FieldName = 'CARIKOD' Then
Begin
IBDataSet1.Edit;
IBDataSet1.FieldByName('CARIKOD').AsString := '';
IBDataSet1.Post;
End;
Key := 0;
End
Else
// F10 Formları bul
if (Key = VK_F10) Then
if DBGrid1.SelectedField.FieldName = 'CARIKOD' Then
Begin
if (DBGrid1.DataSource.State = dsInsert) or (DBGrid1.DataSource.State = dsEdit) Then
DBGrid1.DataSource.DataSet.Post;
FormBul := 'ACILIS';
CHTFrm.Button9.Visible := True;
CHTFrm.ShowModal;
DBGrid1.DataSource.DataSet.Edit;
if KapanisSorgula = True Then
Begin
DBGrid1.Fields[0].Text := CHTFrm.IBDataSet1.fieldByName('CARIKOD').AsString;
DBGrid1.Fields[1].Text := CHTFrm.IBDataSet1.fieldByName('CARIUNVAN').AsString;
DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1;
End;
CHTFrm.Button9.Visible := False;
End
Else
if DBGrid1.SelectedField.FieldName = 'CARIUNVAN' Then
Begin
if (DBGrid1.DataSource.State = dsInsert) or (DBGrid1.DataSource.State = dsEdit) Then
DBGrid1.DataSource.DataSet.Post;
FormBul := 'ACILIS1';
CHTFrm.Button9.Visible := True;
CHTFrm.ShowModal;
DBGrid1.DataSource.DataSet.Edit;
if KapanisSorgula = True Then
Begin
DBGrid1.Fields[0].Text := CHTFrm.IBDataSet1.fieldByName('CARIKOD').AsString;
DBGrid1.Fields[1].Text := CHTFrm.IBDataSet1.fieldByName('CARIUNVAN').AsString;
DBGrid1.SelectedIndex := DBGrid1.SelectedIndex + 1;
End;
CHTFrm.Button9.Visible := False;
End;
end;
procedure TCariHesapAcilisIslemFrm.Button2Click(Sender: TObject);
begin
IBDataset1.Close;
IBDataset1.CancelUpdates;
Close;
end;
procedure TCariHesapAcilisIslemFrm.DBGrid1ColEnter(Sender: TObject);
var
DateTime : TDateTime;
CariKodu:String;
CariUnvan:String;
begin
//0 İNDEX ÇIKIŞINDA KONTROL ET
if DBGrid1.SelectedIndex = 1 Then
Begin
//CariKod işlemleri
CariKodu := DBGrid1.Columns[0].Field.Text;
if CariKodu = '' Then
Begin
IBDataSet1.Edit;
IBDataSet1.FieldByName('CARIUNVAN').AsString := '';
IBDataSet1.Post;
End
Else
Begin
with IBQuery1 do
Begin
Close;
Sql.Clear;
Sql.Add('Select * From CARIKART Where CARIKOD = '''+cariKodu+'''');
Open;
End;
if IBQuery1.RecordCount < 1 Then
Begin
ShowMessage('Cari Hesap Kodu Yanlış');
DBGrid1.SelectedIndex := 0;
End
Else
Begin
IBDataSet1.Edit;
IBDataSet1.FieldByName('CARIUNVAN').AsString := IBQuery1.fieldByName('CARIUNVAN').AsString;
IBDataSet1.Post;
End;
End;
End
Else
//1 İNDEX ÇIKIŞINDA KONTROL ET
if DBGrid1.SelectedIndex = 2 Then
Begin
if DBGrid1.Columns[0].Field.Text = '' Then
CariUnvan := DBGrid1.Columns[1].Field.Text;
if CariUnvan <> '' Then
Begin
with IBQuery1 do
Begin
Close;
Sql.Clear;
Sql.Add('Select * From CARIKART Where CARIUNVAN = '''+CariUnvan+'''');
Open;
End;
if IBQuery1.RecordCount > 0 Then
Begin
IBDataSet1.Edit;
IBDataSet1.FieldByName('CARIKOD').AsString := IBQuery1.fieldByName('CARIKOD').AsString;
IBDataSet1.Post;
End
Else
Begin
ShowMessage('CARİ ÜNVAN YANLIŞ');
DBGrid1.SelectedIndex := 1;
End;
End;
End;
end;
procedure TCariHesapAcilisIslemFrm.DateTimePicker1Exit(Sender: TObject);
begin
DBGrid1.DataSource.Edit;
IBDataSet1TARIH.AsDateTime := DateOf(DateTimePicker1.Date);
DateTimePicker1.Visible := False;
end;
procedure TCariHesapAcilisIslemFrm.IBDataSet1BeforeScroll(
DataSet: TDataSet);
var
DateTime : TDateTime;
CariKodu:String;
begin
CariKodu := DBGrid1.Columns[0].Field.Text;
if CariKodu <> '' Then
Begin
with IBQuery1 do
Begin
Close;
Sql.Clear;
Sql.Add('Select * From CARIKART Where CARIKOD = '''+cariKodu+'''');
Open;
End;
if IBQuery1.RecordCount > 0 Then
Begin
IBDataSet1.Edit;
IBDataSet1ISLEMTURU.AsString := 'ACILIS';
IBDataSet1.Post;
End
Else
Begin
ShowMessage('Cari Hesap Kodu Yanlış');
Abort;
DBGrid1.SelectedIndex := 0;
End;
End;
end;
procedure TCariHesapAcilisIslemFrm.DateTimePicker1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN Then
DBGrid1.SetFocus;
end;
procedure TCariHesapAcilisIslemFrm.IBDataSet1AfterDelete(
DataSet: TDataSet);
begin
{
with ibQuery2 do
begin
close;
sql.Clear;
sql.Add('Select max(ISLEM_NO ) From NAKITISLEMLER Where ISLEMTURU = ''ACILIS''');
open;
End;
if IbQuery2.Eof = False Then
Begin
ShowMessage(IbQuery2.Fields[0].AsString);
if NUMARATORDATASET.FieldByName('NAKIT_DEVIR_NO').AsString >= ibQuery2.Fields[0].AsString Then
Begin
NUMARATORDATASET.Edit;
NUMARATORDATASET.FieldByName('NAKIT_DEVIR_NO').AsString := ibQuery2.Fields[0].AsString;
NUMARATORDATASET.Post;
End;
NUMARATORDATASET.Edit;
NUMARATORDATASET.FieldByName('NAKIT_DEVIR_NO').AsString := '';
NUMARATORDATASET.Post;
End;
}
end;
procedure TCariHesapAcilisIslemFrm.IBDataSet1BeforePost(DataSet: TDataSet);
begin
if not IbDataSet1.FieldByName('CARIKOD').IsNull Then
if IbDataSet1.FieldByName('ISLEM_NO').IsNull Then
begin
with ibQuery2 do
begin
close;
sql.Clear;
sql.Add('Select max(ISLEM_NO) From NAKITISLEMLER Where ISLEMTURU = ''ACILIS''');
open;
End;
if IbQuery2.Eof = False Then
Begin
if NUMARATORDATASET.FieldByName('NAKIT_DEVIR_NO').AsString <= ibQuery2.Fields[0].AsString Then
Begin
NUMARATORDATASET.Edit;
NUMARATORDATASET.FieldByName('NAKIT_DEVIR_NO').AsString := ibQuery2.Fields[0].AsString;
NUMARATORDATASET.Post;
End;
IbDataSet1.FieldByName('ISLEM_NO').AsString := Numarator(NUMARATORDATASET.FieldByName('NAKIT_DEVIR_NO').AsString);
NUMARATORDATASET.Edit;
NUMARATORDATASET.FieldByName('NAKIT_DEVIR_NO').AsString := IbDataSet1.FieldByName('ISLEM_NO').AsString;
NUMARATORDATASET.Post;
End;
End;
end;
procedure TCariHesapAcilisIslemFrm.Button4Click(Sender: TObject);
begin
with ibQuery2 do
begin
close;
sql.Clear;
sql.Add('Select max(ISLEM_NO ) From NAKITISLEMLER Where ISLEMTURU = ''ACILIS''');
open;
End;
if IbQuery2.Eof = False Then
Begin
ShowMessage(IbQuery2.Fields[0].AsString);
End;
end;
procedure TCariHesapAcilisIslemFrm.Button5Click(Sender: TObject);
var
TextDosya:TextFile;
Sayac : Integer;
Satir : String;
begin
Sayac := 0;
Satir := '';
AssignFile(TextDosya,'C:\HUSONET.TXT');
ReWrite(TextDosya);
IbDataSet1.First;
While not IbDataSet1.Eof do
begin
Satir := '';
For Sayac := 0 to IbDataSet1.Fields.Count -1 do
begin
Satir := Satir + IbDataSet1.Fields[Sayac].Text + ' ';
End;
IbDataSet1.Next;
WriteLn(TextDosya, Satir);
End;
CloseFile(TextDosya);
end;
Son olarak birşey söyliyecem aklında olsun benim yaptığımı yapmak zorunda değilsin ve mantıklı bir akışla bütün kontrollere hakim olabilirsin unutma!
Kolay Gelsin.......
En son husonet tarafından 11 Eki 2004 10:41 tarihinde düzenlendi, toplamda 1 kere düzenlendi.