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.