麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

制作用于日期時(shí)間型字段的DELPHI數(shù)據(jù)感知控件

2019-11-17 05:09:24
字體:
供稿:網(wǎng)友
  用Delphi開發(fā)C/S應(yīng)用方便而快速,因?yàn)樗鼡碛写罅恳子谑褂玫臄?shù)據(jù)訪問和數(shù)據(jù)感知控件。然而萬事總是難以完美,DELPHI的DBEdit控件用于輸入日期時(shí)間型字段卻很不方便,為了改善這一缺點(diǎn),筆者開發(fā)了一個(gè)DBDateTime數(shù)據(jù)感知控件,大大方便了時(shí)間和日期的輸入。
  創(chuàng)建一個(gè)構(gòu)件時(shí),最重要的一步是選擇正確的父類,這樣可以減少代碼的編寫。DELPHI的構(gòu)件庫中已有一個(gè)TDateTimePicker構(gòu)件,可以以下拉日歷或利用SpinButton遞增、遞減的方式方便地輸入和改變?nèi)掌?、時(shí)間,但它沒有數(shù)據(jù)感知的能力。因此,我們可以以它為父類,派生出一個(gè)新的控件,加上能與數(shù)據(jù)集通信的數(shù)據(jù)感知功能。   數(shù)據(jù)感知控件通過DataLink對(duì)象與DataSource進(jìn)行交互,所以為控件增加數(shù)據(jù)感知能力需要?jiǎng)?chuàng)建一個(gè)TDataLink(或其派生類)對(duì)象作為控件的成員,并為控件創(chuàng)建公開的DataField和DataSource屬性;然后需響應(yīng)TDataLink對(duì)象的OnDataChange和OnUpdateData事件。下面是控件的主要源代碼,并帶有相應(yīng)的注釋: {定義從TDateTimePicker派生的TDBDateTime類。注重,在單元接口的Uses中應(yīng)加入DB,DBCTRLS引用}type
TDBDateTime=class(TDateTimePicker)
PRivate
FDataLink:TFieldDataLink;
//TFieldDataLink是TDataLink的派生類,處理單個(gè)字段與DataSource的交互
procedureDataChange(sender:Tobject);
//當(dāng)DataSet的記錄改變(如瀏覽記錄)時(shí)觸發(fā)OnDataChange事件,DataChange將作為該事件的事件處理句柄
procedureUpdateData(sender:Tobject);
//更新DataSet前觸發(fā)OnUpdateData事件,UpdateData將作為該事件的事件處理句柄
functionGetDataSource:TDataSource;
procedureSetdataSource(value:TDataSource);
FunctionGetDataField:String;
procedureSetdataField(Value:String);
procedureCMexit(varMessage:TCMExit);message CM_EXIT;//當(dāng)控件失去焦點(diǎn)時(shí)觸發(fā)CM_EXIT消息
protected
procedureChange;override;//控件中日期、時(shí)間改變時(shí)觸發(fā)OnChange事件
procedureNotification(AComponent:TComponent;
Operation:Toperation);override;
//當(dāng)某一控件從FORM上移走時(shí)DELPHI的IDE調(diào)用該方法通知其它控件
public
constrUCtorCreate(AOwner:Tcomponent);override;
destructorDestroy;override;
lished
propertyDataSource:TDataSourcereadGetDataSource
writeSetDataSource;//為控件增加DataSource屬性,使它能與DataSource構(gòu)件連接
propertyDataField:StringreadGetDataField
writeSetDataField;
end;//為控件增加DataField屬性,
使它指向代表某一字段的TField對(duì)象

procedureRegister;//注冊(cè)構(gòu)件

implementation

procedureTDBDateTime.CMExit;
begin
try
FDataLink.UpdateRecord;
//控件失去焦點(diǎn)時(shí)更新DataSet,這將觸發(fā)OnUpdateData事件
except
Setfocus;
raise;
end;
DoExit;
end;

constructorTDBDateTime.Create(Aowner:Tcomponent);
begin
inheritedCreate(Aowner);
//創(chuàng)建DataLink對(duì)象,掛接OnDataChange、
OnUpdateData事件處理句柄
FDataLink:=TFieldDataLInk.Create;
FDataLink.OnDataChange:=DataChange;
FDataLink.OnUpdateData:=Updatedata;
end;

DestructorTDBDateTime.Destroy;
begin
FDataLink.OnDataChange:=nil;
FDataLink.OnUpdateData:=nil;
FDataLink.Free;
inheritedDestroy;
end;

functionTDBDateTime.GetdataSource:TdataSource;
begin
result:=FDataLink.DataSource;
end;

ProcedureTDBDateTime.SetDataSource(Value:TDataSource);
begin
FDataLink.DataSource:=Value;
end;

functionTDBDateTime.GetDatafield:String;
begin
result:=FDataLink.FieldName;
end;

procedureTDBDateTime.SetDataField(value:String);
begin
FdataLink.FieldName:=value;
end;

procedureTDBDateTime.DataChange(Sender:Tobject);
begin
DateTime:=now;
//若控件連了活動(dòng)的DataSet則數(shù)據(jù)集變動(dòng)時(shí)
控件顯示當(dāng)前記錄的相應(yīng)字段值
ifFDataLink.Field nilthen
ifFDataLink.Field.Text then
DateTime:=FDatalink.Field.AsDateTime;
end;

ProcedureTDBDateTime.UpdateData(sender:Tobject);
begin
FDatalink.Field.AsDateTime:=DateTime;
//用控件中的日期、時(shí)間更新相應(yīng)字段
end;

procedureTDBDateTime.Change;
begin
//當(dāng)用戶改變了控件中的內(nèi)容時(shí)將DataSet置為編輯狀態(tài)
FDataLink.Modified;
ifnotFDataLink.Editingthen
FdataLink.Edit;
inheritedChange;
end;

procedureTDBDateTime.Notification(AComponent:
TComponent;Operation:TOperation);
begin
inheritedNotification(Acomponent,Operation);
//當(dāng)與控件相連的TdataSource
被刪除時(shí)將控件的DataSource屬性置為空
if(Operation=opRemove)and(FDataLink nil)
and(AComponent=Datasource)then
DataSource:=nil;
end;

procedureRegister;
begin
RegisterComponents(DataControls,
[TDBDateTime]);//控件注冊(cè)后安裝于DataControls頁
end;

end.
  本控件安裝后能以下拉日歷和遞 增遞減方式改變數(shù)據(jù)庫的日期時(shí)間型字段,并能以長(zhǎng)、短兩種格式顯示日期,方便實(shí)用。控件在DELPHI3、DELPHI4中使用安全可靠。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 国产亚洲精品久久久久久久久 | 大奶一级片 | 国产精品成人一区二区三区电影毛片 | av噜噜在线| 羞羞视频免费网站日本动漫 | 91亚洲免费视频 | 欧美特黄特色视频 | 国产精品一区二区三区在线 | 国产一区二区精彩视频 | 欧洲黄视频 | 在线成人av | 狠狠操人人干 | 销魂美女一区二区 | 国产好片无限资源 | jizzyouxxxx | 午夜天堂在线 | 久久久久久亚洲国产精品 | 日韩精品羞羞答答 | 毛片免费观看日本中文 | 久草在线小说 | 日本高清一级片 | 精品在线视频观看 | 最新中文字幕第一页视频 | www.91sp| 中文在线日韩 | 成年人在线视频 | 双性精h调教灌尿打屁股的文案 | 久久久成人免费视频 | 国产精品亚洲欧美 | 久草在线观看首页 | 99麻豆久久久国产精品免费 | 中文字幕在线播放不卡 | 久久一级| 精品一区二区三区免费看 | 免费观看黄视频 | 羞羞电影在线观看www | 综合97 | 午夜视频你懂的 | 欧美三级日本三级少妇99 | 黄色大片网 | 久久成年网 |