Mega Code Archive

 
Categories / Delphi / VCL
 

Ozel bir dbgrid

Codec By GeNiUS ! genius@turkiye.com Tarih alanlarına veri girişi herzaman problemdir. Bilgisayarların tarih formatları farklı olabileceği gibi, kullanıcıların tarih kullanma alışkanlıklarındaki farklılıklar da, veri tabanına tarih girişi işlemlerinde, hata mesajlarına sebep olur. Aşağıdaki bileşen, DBGrid bileşeninden türetilmiş olup, Tarih alanına çift tıklandığında, otomatik olarak açılan bir takvimden seçim yapmak suretiyle bilgi girişini sağlamaktadır. unit ExtDbGrid; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,Db, DBTables,buttons, StdCtrls, DBGrids,ComCtrls, WinTypes, WinProcs, ExtCtrls, Menus, Calendar,DBCtrls; const Tdatefieldtype=9; type TExtDbGrd = class(TDBGrid) private { Private declarations } f_message:string; f_about:string; protected { Protected declarations } public { Public declarations } published property About:string read f_about write f_about; procedure DblClick;override; procedure Takvimyap; procedure Takvimkapat; procedure mybtnclick(sender:tobject); constructor create(aowner:tcomponent);override; destructor destroy;override; { Published declarations } end; implementation {$R *.RES} var takvimform:tform; takvimpanel:tpanel; takvim:tcalendar; takvimbtn:array [1..6] of tspeedbutton; takvimedit:tedit; msgid:integer; oneinstance:boolean; constructor TExtDbGrd.create(aowner:tcomponent); begin inherited; color:=clyellow; font.color:=clblue; about:='Written by Faruk DEMİREL (fdemirel@kkk.tsk.mil.tr) 01.02.1998 Turkey'; end; destructor TExtdbgrd.destroy; begin inherited; end; procedure TExtDbGrd.dblclick; begin inherited; if not oneinstance then begin if ord(fields[selectedindex].datatype)=11 then SHOWMESSAGE('TarihSaat tipindeki alanlarda takvim açılmaz'); if (ord(fields[selectedindex].datatype)=TdateFieldType) then begin oneinstance:=true; takvimyap; takvim.calendardate:=strtodate(fields[selectedindex].asstring); end; end; end; procedure TEXTDBGRD.Takvimyap; var i:integer; begin takvimform:=tform.create(self); takvimform.width:=267; takvimform.height:=195; takvimform.borderstyle:=bstoolwindow; takvimform.formstyle:=fsstayontop; takvimform.visible:=false; takvimform.BORDERICONS:=[]; {takvim paneli} takvimpanel:=tpanel.create(self); takvimpanel.width:=250; takvimpanel.height:=160; takvimpanel.parent:=takvimform; takvimpanel.left:=5 ; takvimpanel.top:=5; {takvim} takvim:=tcalendar.create(takvimpanel); takvim.parent:=takvimpanel; takvim.left:=10; takvim.top:=10; takvim.width:=200; takvim.color:=color; takvim.font.color:=font.color; {takvim butonları} for i:=1 to 6 do begin takvimbtn[i]:=tspeedbutton.create(self); takvimbtn[i].parent:=takvimpanel; takvimbtn[i].left:=215; takvimbtn[i].width:=25; takvimbtn[i].height:=22; takvimbtn[i].top:=10+25*(i-1); takvimbtn[i].onclick:=mybtnclick; takvimbtn[i].tag:=i; takvimbtn[i].showhint:=true; end; takvimbtn[1].GLYPH.Handle := LoadBitmap(HInstance,'PY'); takvimbtn[1].hint:='Önceki Yıl'; takvimbtn[2].GLYPH.Handle := LoadBitmap(HInstance,'PM'); takvimbtn[2].hint:='Önceki Ay'; takvimbtn[3].GLYPH.Handle := LoadBitmap(HInstance,'NM'); takvimbtn[3].hint:='Sonraki Ay'; takvimbtn[4].GLYPH.Handle := LoadBitmap(HInstance,'NY'); takvimbtn[4].hint:='Sonraki Yıl'; takvimbtn[5].GLYPH.Handle := LoadBitmap(HInstance,'CHOOSE'); takvimbtn[5].hint:='Seç'; takvimbtn[6].GLYPH.Handle := LoadBitmap(HInstance,'QUIT'); takvimbtn[6].hint:='Çık'; {takvim editi} takvimedit:=tedit.create(self); takvimedit.parent:=takvimpanel; takvimedit.left:=75 ; takvimedit.top:=130; takvimedit.width:=70; takvimedit.text:=datetostr(takvim.calendardate); takvimedit.readonly:=true; takvimform.formstyle:=fsstayontop; takvimform.visible:=true; takvimform.show; end; procedure TExtDbGrd.Takvimkapat; var i:integer; begin for i:=1 to 5 do takvimbtn[i].free; takvim.free; takvimedit.free; takvimpanel.free; takvimform.visible:=false; takvimform.Free; oneinstance:=false; end; procedure TExtDbGrd.mybtnclick(sender:tobject); begin case (sender as tspeedbutton).tag of 1:{- yıl}begin takvim.prevyear; takvimedit.text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate); end; 2:{- ay}begin takvim.prevmonth; takvimedit.text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate); end; 3:{+ yıl}begin takvim.nextmonth; takvimedit.text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate); end; 4:{+ ay} begin takvim.nextyear; takvimedit.text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate); end; 5:{kapat}begin datasource.dataset.edit; text:=FormatDateTime('DD.MM.YYYY',takvim.CalendarDate); fields[selectedindex].value:=text; datasource.dataset.post end; 6:{İptal}begin takvimkapat; end; end; end; initialization oneinstance:=false; end.