?
對話框控件的制作
Delphi中有很多對話框組件,例如TopenDialog、TfontDialog等。這些控件的特點(diǎn)就是雖然是不可視控件,但是在運(yùn)行時都有一個可視化的效果,比如TopenDialog的可視化效果就是一個打開對話框。我們這次將開發(fā)一個日期對話框控件,當(dāng)我們調(diào)用控件的Execute方法(不一定非要使用Execute方法,不過大部分對話框控件都是使用這個方法,我們也就按照慣例來了)時,就會彈出一個可以選擇日期的對話框,我們選擇一個日期后,點(diǎn)擊“確定”則Execute返回True,點(diǎn)擊“取消”則Execute返回False。我們可以讀取Date屬性來得到用戶選擇的日期,也可以修改此屬性來改變對話框的初始日期。
1、新建一個對話框。在對話框窗體上放置一個TmonthCalendar組件,命名為Cal,窗體名稱改為FormDate。在窗體上放置兩個按鈕,一個按鈕的Caption為“確定(&O)”,ModalResult為mrOk,一個按鈕的Caption為“取消(&C)”,ModalResult為mrCancel。設(shè)計(jì)好的窗體如下圖所示:

2、為窗體添加兩個Public訪問級的方法:
??? function GetSelDate: TDate;
??? procedure SetInitDate(AValue: TDate);
代碼如下:
function TFormDate.GetSelDate: TDate;
begin
? result := cal.Date;
end;
?
procedure TFormDate.SetInitDate(AValue: TDate);
begin
? cal.Date := AValue;
end;
3、新建一個控件,派生自Tcomponent。
代碼如下:
unit DateDialog;
?
interface
?
uses
? SysUtils, Classes, Controls, frmDlg;
?
type
? TDateDialog = class(TComponent)
? private
??? FDlg: TFormDate;
??? function GetDate: TDate;
??? procedure SetDate(AValue: TDate);
? protected
? public
??? constructor Create(AOwner: TComponent);override;
??? function Execute: Boolean;
? published
??? property Date: TDate read GetDate write SetDate;
? end;
?
procedure Register;
?
implementation
procedure Register;
begin
? RegisterComponents('Linco', [TDateDialog]);
end;
constructor TDateDialog.Create(AOwner: TComponent);
begin
? inherited Create(AOwner);
? FDlg := TFormDate.Create(self);
end;
?
function TDateDialog.Execute: Boolean;
begin
? result := (FDlg.ShowModal = mrOK);
end;
?
function TDateDialog.GetDate: TDate;
begin
? result := FDlg.GetSelDate;
end;
?
procedure TDateDialog.SetDate(AValue: TDate);
begin
? FDlg.SetInitDate(AValue);
end;
end.
代碼比較簡單就不多解釋了。
思考題:
1、做一個模仿TcolorDialog的對話框控件。