Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2003年07月20日] [更新 2006年09月20日] 元号選択式日付時刻入力コンポーネント
   
元号選択式日付時刻入力コンポーネント
プロパティ
動作確認等 図は Windows XP(SP3) + Delphi 7 Pro で作成





凡例  published
 public
 ReadOnly



主なもの


主に本コンポーネント特有のプロパティの説明です.

 BaseDate TDateTime このコンポーネントで扱う下限の日付
1873年1月1日の値
 AutoSelect Boolean 各入力コントロールに移動した時に値を選択状態にするかどうかの論理型の値
デフォルトは True
False にすると,元号選択リストの配色が Ture の時と違うので注意
 DateTime TDateTime 日付または時刻の設定または取得
不正または範囲外の場合はサイレント例外が発生する
 Date TDateTime DateTime と同じ
前のバージョンとの互換性のために残している
 CanEmpty Boolean True にすると全ての入力欄が空白の場合でもエラーとならない
デフォルトは True
 ExitCheck Boolean フォーカスを失った時に入力値の正当性をチェックするかを設定する
デフォルトは False でチェックしない
 DisplayError Boolean コンポーネント内蔵のエラーダイアログ使用の有無
デフォルトは True で表示する設定
利用者が独自のダイアログを使用したい場合は False にして,サイレント例外を用いる
 DialogCaption String 内蔵のエラーダイアログのキャプション
デフォルトは [日付時刻入力]
 EditGengo Boolean 元号を選択するリスト表示用のコンボボックスを表示するかを設定
デフォルトは True で表示する
この値が False の場合は,西暦入力専用となる
 True
 False
 EditAmpm Boolean 午前午後を選択するリスト表示用のコンボボックスを表示するかを設定.デフォルトは False
この値が False の場合は,24 時間入力
True の時は 12 時間入力専用となる
 True
 False
EditStyle TplDateEditStyle 年月日の入力コントロール表示の有無
値については下方の説明参照
 Gengo Boolean 和暦,西暦表示の切換えフラグ
True で和暦表示
ただし,元号選択用のコンボボックスが表示されていない時は常に西暦表示となる
 Yeardigit TplYeardigitSet 西暦の年の表示桁数
2 桁の時は西暦の下 2 桁のみを表示する  yddigit4
 yddigit2
 SpaceWidth Integer 日付と時刻の両方を表示する時の間隔値
この値が正の時は,時刻部は日付の右側に,負の時は日付の下に表示する
デフォルトは 7
 0
 10
 EnterNext Integer

[Enter] キーで次の入力コントロール
[Shift] + [Enter] で前のコントロールに移動するかを設定する.デフォルトは True


[備考]
[Tab], [Shift] + [Tab] が Windows の標準動作

 DropDownKey Integer 元号選択のリストを [↓] キーで開くかを設定
デフォルトは True
 Color TColor コントロールの背景色
年月日のラベルの色は変更不可
 FocusedColor TColor 入力中のコントロールの背景色
 DisableColor TColor Enabeled プロパティが False の時のコントロールの背景色
 DisableFontColor TColor Enabeled プロパティが False の時のコントロールの文字の色
 LabelYear String 年入力コントロールの右のラベル文字
 LabelMonth String 月入力コントロールの右のラベル文字
 LabelDay String 日入力コントロールの右のラベル文字
 LabelHour String 時入力コントロールの右のラベル文字
 LabelMinute String 分入力コントロールの右のラベル文字
 LabelSecond String 秒入力コントロールの右のラベル文字
 ErrorKinds TplDateEditErrors 不正または範囲外の日付の場合に,そのエラー内容を意味する値の集合体
定数値につてはテストプログラム (DateEditTest) 内のコードを参照
 IsEmpty Boolean 入力欄が全て空白がどうかをチェックするためのプロパティ
True であれば全て空白
 Focused Boolean このコンポーネントにフォーカスがある時は True で,フォーカスを失うと False


元号選択時の AutoSelect プロパティ値による違い (結構悩みました).どちらも通常のコンボボックスとは配色が違います.通常のコンボボックスでは,リストの背景色が Color プロパティの値,選択中の Item の色は clHighlight となっています.


図1
AutoSelect = True の場合
  • リストの背景色は FocusedColor プロパティの色
  • リスト内の選択中の Item は clHighlight の値
  • 右は選択終了後
図2
AutoSelect = False の場合
  • リストの背景色は Color プロパティの色
  • リスト内の選択中の Item は FocusedColor の色
  • 右は選択終了後
  • FocusedColor が clWhite の時は通常のコンボボックスと同じ配色

EditStyle の値と入力表示コントロールの対応表です.
日付部 (年月日) だけを表示した場合は,DateTime には日付 (整数部) のみが格納されます.
時刻部のみを表示した場合は,DateTime には時刻の値 (小数点以下の値) のみを格納するようになっています.

desYearMonthDayHMS 年, 月, 日, 時, 分, 秒
desYearMontHM 年, 月, 日, 時, 分
desYearH 年, 月, 日, 時
desYearMonthDay 年, 月, 日 (デフォルト)
desYearMonth 年, 月
desYear
desHourMinuteSecond 時, 分, 秒
desHourMinute 時, 分
desHour




日付時刻関係の取得プロパティ


以下のプロパティは読出し専用で,全て public なプロパティとなっています.これらの値を取得する際,入力日付が不正または範囲外の時はサイレント例外が発生します.この時,整数値のプロパティは 0,文字列のプロパティは空文字となります.和暦では,例えば,昭和70年1月1日を入力した時は,平成7年1月1日 (1995年1月1日) を返し,エラーとはなりません.

 Year Integer 西暦年の値
 Month Integer 月の値
EditStyle が desYear の時は常に 1
 Day Integer 日の値
EditStyle が desYear と desYearMonth のときは常に1
 YearStr String 西暦年の文字列
 MonthStr String 月の値の文字列
EditStyle が desYear の時は常に '1'
 DayStr String 日の値の文字列
EditStyle が desYear と desYearMonth の時は常に '1'
 GengoYear Integer 和暦年の値
 GengoYearStr String 和暦年の文字列
 GengoStr String 元号の文字列
 Hour Integer 時の値
 Minute Integer 分の値
 Second Integer 秒の値
 HourStr String 時の文字列
 MinuteStr String 分の文字列
 SecondStr String 秒の文字列
 AmpmStr String 午前か午後の文字列
午前午後の選択コンポボックス非表示の時は空文字




データベース関係プロパティ


各プロパティは,Delphi の他のデータベース対応コンポーネントと同じ機能です.TplDBDateEdit 専用です.

 ReadOnley Boolean True にすると表示専用となる
 DataSouce TDataSource データソース.リストからも選択可能
 Field String フィールド名.リストからも選択可能



リスト1
日付型 (TData) に null や nil は代入できないが,データベースの日付フィルードには,以下の様に nil を設定することができる.
Table1.FieldByName('項目名').Assign(nil);




各コントロールへのアクセス用プロパティ


各入力用コントロールへのアクセスのためのプロパティです.使用例として,常に平成の年しか入力できないようにする例です.


元号選択リスト部分が編集不可

GengoCombo TComboBox 元号選択用のコンボボックス
YearEdit TplDateEditEdit 年の入力用コントロール
MonthEdit TplDateEditEdit 月の入力用コントロール
DayEdit TplDateEditEdit 日の入力用コントロール
AmpmCombo TComboBox 午前午後選択用のコンボボックス
HourEdit TplDateEditEdit 時の入力用コントロール
MinuteEdit TplDateEditEdit 分の入力用コントロール
SecondEdit TplDateEditEdit 秒の入力用コントロール


リスト2
常に平成の年しか入力できないようにする例
procedure TForm1.FormCreate(Sender: TObject);
begin
   //以下の設定は,表示コントロール等を変更すると無効
   with plDateEdit1.GengoCombo do begin
     Enabled := False;
     Color   := plDateEdit1.YearLabel.Color;
     ItemIndex := 1;
   end;
end;




各ラベルへのアクセス用プロパティ


各入力用コントロールの右側のラベルへのアクセスのためのプロパティです.例えば下のコードを実行すると,以下のような配色になります.


YearLabel TplDateEditLabel 年のラベル
MonthLabel TplDateEditLabel 月のラベル
DayLabel TplDateEditLabel 日のラベル
HourLabel TplDateEditLabel 時のラベル
MinuteLabel TplDateEditLabel 分のラベル
SecondLabel TplDateEditLabel 秒のラベル



リスト3
各ラベルの色を変更する例
procedure TForm1.FormCreate(Sender: TObject);
begin
   with plDateEdit1 do begin
     YearLabel.Color       := $004D5F6A;
     MonthLabel.Color      := $004D5F6A;
     DayLabel.Color        := $004D5F6A;
     YearLabel.Font.Color  := clWhite;
     MonthLabel.Font.Color := clWhite;
     DayLabel.Font.Color   := clWhite;
   end;
end;