| {$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1} |
| {$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1} |
| {$WARNINGS OFF} |
| {$WARNINGS OFF} |
| //============================================================================= |
| //============================================================================= |
| // 元号選択式日付時刻入力コンポーネント |
| // 元号選択式日付時刻入力コンポーネント |
| // |
| // |
| // plDateEdit (ピーエルデイトエディト) データベース非対応 |
| // plDateEdit (ピーエルデイトエディト) データベース非対応 |
| // plDBDateEdit(ピーエルディービーデイトエディト) データベース対応 |
| // plDBDateEdit(ピーエルディービーデイトエディト) データベース対応 |
| // |
| // |
| // コンボボックスで元号(西暦も)選択する方式.年齢(年月)計算メソッド付き |
| // コンボボックスで元号(西暦も)選択する方式.年齢(年月)計算メソッド付き |
| // 元号選択コンボボックスが空の時は西暦と見なす |
| // 元号選択コンボボックスが空の時は西暦と見なす |
| // 午前午後選択コンボボックスが空の時はエラー |
| // 午前午後選択コンボボックスが空の時はエラー |
| // |
| // |
| // 元号の文字列は,ユニットSysUtils内のEraNames配列から取得している |
| // 元号の文字列は,ユニットSysUtils内のEraNames配列から取得している |
| // したがって新元号が必要となった場合,OSかDelphiをUpdateしなければならない |
| // したがって新元号が必要となった場合,OSかDelphiをUpdateしなければならない |
| // |
| // |
| //----------------------------------------------------------------------------- |
| //----------------------------------------------------------------------------- |
| // |
| // |
| // 【使用条件等】 |
| // 【使用条件等】 |
| // |
| // |
| // 当サイトのアプリケーション類,コンポーネント,コード類は,転載,改変,配布 |
| // 当サイトのアプリケーション類,コンポーネント,コード類は,転載,改変,配布 |
| // (オリジナル,改変版)などは全て自由です.商用利用も自由です.連絡,使用の記 |
| // (オリジナル,改変版)などは全て自由です.商用利用も自由です.連絡,使用の記 |
| // 載義務もありません.ただしオリジナルそのものを商用とすることは禁止します. |
| // 載義務もありません.ただしオリジナルそのものを商用とすることは禁止します. |
| // また,配布の際,いかなる理由があろうとも相手に代価を求めることを禁止します. |
| // また,配布の際,いかなる理由があろうとも相手に代価を求めることを禁止します. |
| // なお,本サイトのプログラムやコードを使用したことによって生じた,いかなる障 |
| // なお,本サイトのプログラムやコードを使用したことによって生じた,いかなる障 |
| // 害,損失に関しても作者は一切関与しないものとします.ご了承下さい. |
| // 害,損失に関しても作者は一切関与しないものとします.ご了承下さい. |
| // |
| // |
| //----------------------------------------------------------------------------- |
| //----------------------------------------------------------------------------- |
| // |
| // |
| // 和暦西暦に関する注意 |
| // 和暦西暦に関する注意 |
| // |
| // |
| // Delphiでは太陽暦のみ和暦に換算するため,1873.1.1より前は和暦なし |
| // Delphiでは太陽暦のみ和暦に換算するため,1873.1.1より前は和暦なし |
| // このコンポでは1873.1.1(明治6年1月1日)より前は変換しない. |
| // このコンポでは1873.1.1(明治6年1月1日)より前は変換しない. |
| // |
| // |
| // DateTime := 0は1899年12月30日 午前12:00 |
| // DateTime := 0は1899年12月30日 午前12:00 |
| // |
| // |
| // 明治5年までは太陰暦.以降は太陽暦 |
| // 明治5年までは太陰暦.以降は太陽暦 |
| // 1873年1月1日に改暦して太陽暦に変わった |
| // 1873年1月1日に改暦して太陽暦に変わった |
| // |
| // |
| // 太陰暦は明治5年12月2日で終わり. |
| // 太陰暦は明治5年12月2日で終わり. |
| // 太陽暦は明治5年12月3日を明治6年1月1日として開始. |
| // 太陽暦は明治5年12月3日を明治6年1月1日として開始. |
| // 大隈重信がひっぱくする政府財政問題として,閏の月があると,一年間で13ヶ月分の |
| // 大隈重信がひっぱくする政府財政問題として,閏の月があると,一年間で13ヶ月分の |
| // 給与を支払うことを問題となったので(1年は384日),そこで急遽決めた(明治5年11 |
| // 給与を支払うことを問題となったので(1年は384日),そこで急遽決めた(明治5年11 |
| // 月9日決定).そこで12月の2日分の給与は支給されず,財政を問題をなんとか保った. |
| // 月9日決定).そこで12月の2日分の給与は支給されず,財政を問題をなんとか保った. |
| // |
| // |
| // 1872年 1月 1日は明治4年11月21日 |
| // 1872年 1月 1日は明治4年11月21日 |
| // 1872年11月21日は明治5年 1月 1日 |
| // 1872年11月21日は明治5年 1月 1日 |
| // 1872年12月31日は明治5年12月 2日 |
| // 1872年12月31日は明治5年12月 2日 |
| // 1873年 1月 1日は明治6年 1月 1日 (和暦と西暦の月日が一致した) |
| // 1873年 1月 1日は明治6年 1月 1日 (和暦と西暦の月日が一致した) |
| // |
| // |
| // 明治は1868年 1月 1日から 1912年 7月29日まで |
| // 明治は1868年 1月 1日から 1912年 7月29日まで |
| // (明治は1年9月8日から 5年12月2日までと) |
| // (明治は1年9月8日から 5年12月2日までと) |
| // ( 6年1月1日から 45年 7月29日まで) |
| // ( 6年1月1日から 45年 7月29日まで) |
| // |
| // |
| // 大正は1912年 7月30日から1926年12月24日まで |
| // 大正は1912年 7月30日から1926年12月24日まで |
| // (大正は1年7月30日から 15年12月24日まで) |
| // (大正は1年7月30日から 15年12月24日まで) |
| // |
| // |
| // 昭和は1926年12月25日から 1989年 1月7日まで |
| // 昭和は1926年12月25日から 1989年 1月7日まで |
| // (昭和は1年12月25日から 64年1月7日まで) |
| // (昭和は1年12月25日から 64年1月7日まで) |
| // |
| // |
| // 平成は1989年 1月 8日から |
| // 平成は1989年 1月 8日から |
| // (平成は 1年1月8日から) |
| // (平成は 1年1月8日から) |
| // |
| // |
| //----------------------------------------------------------------------------- |
| //----------------------------------------------------------------------------- |
| // |
| // |
| // バク,仕様? |
| // バク,仕様? |
| // ・ 1873年1月1日(明治6年1月1日)より前はエラー扱い. |
| // ・ 1873年1月1日(明治6年1月1日)より前はエラー扱い. |
| // ・ 和暦の場合,平成100年以上はエラー扱い. |
| // ・ 和暦の場合,平成100年以上はエラー扱い. |
| // ・ サイズはFontサイズによる自動調整で変更できない. |
| // ・ サイズはFontサイズによる自動調整で変更できない. |
| // ・ フォントの種類によっては入力欄に正常表示できないことがある. |
| // ・ フォントの種類によっては入力欄に正常表示できないことがある. |
| // ・ 年齢計算(XX年XXヶ月まで算出)メソッドがある. |
| // ・ 年齢計算(XX年XXヶ月まで算出)メソッドがある. |
| // |
| // |
| //----------------------------------------------------------------------------- |
| //----------------------------------------------------------------------------- |
| // |
| // |
| // 【履歴】 |
| // 【履歴】 |
| // |
| // |
| // 2003年07月20日 Ver. 1.0 |
| // 2003年07月20日 Ver. 1.0 |
| // |
| // |
| // --- 中略 ---- |
| // --- 中略 ---- |
| // |
| // |
| // 2009年11月13日 Ver9.00 |
| // 2009年11月13日 Ver9.00 |
| // ・Delphi2009,2010動作確認 |
| // ・Delphi2009,2010動作確認 |
| // ・元号文字列のセットコードを修正 |
| // ・元号文字列のセットコードを修正 |
| // |
| // |
| // 2010年03月20日 Ver9.01 |
| // 2010年03月20日 Ver9.01 |
| // ・SetEditEmptyメソッド実行後に年または月だけの入力にすると入力した日付がエ |
| // ・SetEditEmptyメソッド実行後に年または月だけの入力にすると入力した日付がエ |
| // ラーとなる現象を修正 |
| // ラーとなる現象を修正 |
| // |
| // |
| // 2012年06月30日 Ver9.02 |
| // 2012年06月30日 Ver9.02 |
| // ・欧文フォントにすると,元号選択コンボボックスの高さが小さくなる現象を修正 |
| // ・欧文フォントにすると,元号選択コンボボックスの高さが小さくなる現象を修正 |
| // ・ランタイムテーマを有効にした時のデザインを調整 |
| // ・ランタイムテーマを有効にした時のデザインを調整 |
| // ・コード整備 |
| // ・コード整備 |
| // |
| // |
| // 注: Delphi2009対応または確認済みのコンポーネントのバージョンは9.XX |
| // 注: Delphi2009対応または確認済みのコンポーネントのバージョンは9.XX |
| //----------------------------------------------------------------------------- |
| //----------------------------------------------------------------------------- |
| // |
| // |
| // 【動作確認環境】 (Delphi for Win32) |
| // 【動作確認環境】 (Delphi for Win32) |
| // |
| // |
| // Windows XP(SP3) + Delphi 6 Pro(UP2) |
| // Windows XP(SP3) + Delphi 6 Pro(UP2) |
| // + Delphi 7 Pro |
| // + Delphi 7 Pro |
| // + Delphi 2007-R2 Pro |
| // + Delphi 2007-R2 Pro |
| // + Delphi 2009 Pro(UP3) |
| // + Delphi 2009 Pro(UP3) |
| // + Delphi XE Pro |
| // + Delphi XE Pro |
| // + Delphi 2010 Pro |
| // + Delphi 2010 Pro |
| // Windows 7 U64(SP2) + Delphi 2007-R2 Pro |
| // Windows 7 U64(SP2) + Delphi 2007-R2 Pro |
| // + Delphi 2009 Pro(UP3) |
| // + Delphi 2009 Pro(UP3) |
| // + Delphi 2010 Pro |
| // + Delphi 2010 Pro |
| // + Delphi XE Pro |
| // + Delphi XE Pro |
| // + Delphi XE2(UP4) Pro VCL-32, VCL-64 |
| // + Delphi XE2(UP4) Pro VCL-32, VCL-64 |
| // |
| // |
| // Presented by Mr.XRAY |
| // Presented by Mr.XRAY |
| // http://mrxray.on.coocan.jp/ |
| // http://mrxray.on.coocan.jp/ |
| //============================================================================= |
| //============================================================================= |
| unit plDateEdit; |
| unit plDateEdit; |
| |
| |
| interface |
| interface |
| |
| |
| uses |
| uses |
| Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
| Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
| ExtCtrls, StdCtrls,DB,DBCtrls,Variants; |
| ExtCtrls, StdCtrls,DB,DBCtrls,Variants; |
| |
| |
| type |
| type |
| |
| |
| //入力欄の表示・非表示を設定する要素の定義 |
| //入力欄の表示・非表示を設定する要素の定義 |
| //元号選択リストの表示・非表示の設定はEditGengoプロパティ |
| //元号選択リストの表示・非表示の設定はEditGengoプロパティ |
| TplDateEditStyle = ( desYearMonthDayHMS, //年月日時分秒 |
| TplDateEditStyle = ( desYearMonthDayHMS, //年月日時分秒 |
| desYearMonthDayHM, //年月日時分 |
| desYearMonthDayHM, //年月日時分 |
| desYearMonthDayH, //年月日時 |
| desYearMonthDayH, //年月日時 |
| desYearMonthDay, //年月日 |
| desYearMonthDay, //年月日 |
| desYearMonth, //年月 |
| desYearMonth, //年月 |
| desYear, //年 |
| desYear, //年 |
| desHourMinuteSecond, //時分秒 |
| desHourMinuteSecond, //時分秒 |
| desHourMinute, //時分 |
| desHourMinute, //時分 |
| desHour); //時 |
| desHour); //時 |
| |
| |
| //エラーの種類 |
| //エラーの種類 |
| TplDateEditError = (derAllEmpty, //全ての入力欄が空 |
| TplDateEditError = (derAllEmpty, //全ての入力欄が空 |
| derYearEmpty, //年の欄が空 |
| derYearEmpty, //年の欄が空 |
| derMonthEmpty, //月の欄が空 |
| derMonthEmpty, //月の欄が空 |
| derDayEmpty, //日の欄が空 |
| derDayEmpty, //日の欄が空 |
| derAMPMEmpty, //午前午後の蘭が空 |
| derAMPMEmpty, //午前午後の蘭が空 |
| derHourEmpty, //時の蘭が空 |
| derHourEmpty, //時の蘭が空 |
| derMinuteEmpty, //分の蘭が空 |
| derMinuteEmpty, //分の蘭が空 |
| derSecondEmpty, //秒の蘭が空 |
| derSecondEmpty, //秒の蘭が空 |
| derBeforeBaseDate, //明治6年1月1日より前の日付である |
| derBeforeBaseDate, //明治6年1月1日より前の日付である |
| derDateTimeError, //日付時刻型の変換エラー |
| derDateTimeError, //日付時刻型の変換エラー |
| derDateError, //日付部の変換エラー |
| derDateError, //日付部の変換エラー |
| derTimeError, //時刻部の変換エラー |
| derTimeError, //時刻部の変換エラー |
| derSetDateTimeError, //入力した日付時刻型変数値の間違い |
| derSetDateTimeError, //入力した日付時刻型変数値の間違い |
| derSetDateError, //入力した(Dateプロパティのセット)日付間違い |
| derSetDateError, //入力した(Dateプロパティのセット)日付間違い |
| derSetTimeError, //入力した(Timeプロパティのセット)時刻間違い |
| derSetTimeError, //入力した(Timeプロパティのセット)時刻間違い |
| derChangeGengo); //2088以降は和暦変換不可能 |
| derChangeGengo); //2088以降は和暦変換不可能 |
| |
| |
| //年の入力桁数 |
| //年の入力桁数 |
| TplYeardigitSet = (yddigit2, yddigit4); |
| TplYeardigitSet = (yddigit2, yddigit4); |
| |
| |
| //エラーの種類の集合体 |
| //エラーの種類の集合体 |
| TplDateEditErrors = set of TplDateEditError; |
| TplDateEditErrors = set of TplDateEditError; |
| |
| |
| //TplDateEditLabeはVer1.1で追加 |
| //TplDateEditLabeはVer1.1で追加 |
| TplDateEdit = class; |
| TplDateEdit = class; |
| |
| |
| TplDateEditLabel = class(TCustomControl) |
| TplDateEditLabel = class(TCustomControl) |
| private |
| private |
| FplDate : TplDateEdit; |
| FplDate : TplDateEdit; |
| protected |
| protected |
| public |
| public |
| property Color; |
| property Color; |
| property Font; |
| property Font; |
| property Text; |
| property Text; |
| procedure Paint; override; |
| procedure Paint; override; |
| published |
| published |
| end; |
| end; |
| |
| |
| TplDateEditEdit = TMemo; |
| TplDateEditEdit = TMemo; |
| |
| |
| TplDateEdit = class(TCustomControl) |
| TplDateEdit = class(TCustomControl) |
| private |
| private |
| FDateTime : TDateTime; |
| FDateTime : TDateTime; |
| FDate : TDateTime; |
| FDate : TDateTime; |
| |
| |
| FGengo : Boolean; |
| FGengo : Boolean; |
| FBaseDate : TDateTime; |
| FBaseDate : TDateTime; |
| FCanEmpty : Boolean; |
| FCanEmpty : Boolean; |
| FIsEmpty : Boolean; |
| FIsEmpty : Boolean; |
| FAutoSelect : Boolean; |
| FAutoSelect : Boolean; |
| |
| |
| FGengoStr : String; |
| FGengoStr : String; |
| FGengoYear : Integer; |
| FGengoYear : Integer; |
| FGengoYearStr : String; |
| FGengoYearStr : String; |
| FAmpmStr : String; |
| FAmpmStr : String; |
| |
| |
| FYear : Integer; |
| FYear : Integer; |
| FMonth : Integer; |
| FMonth : Integer; |
| FDay : Integer; |
| FDay : Integer; |
| FHour : Integer; |
| FHour : Integer; |
| FMinute : Integer; |
| FMinute : Integer; |
| FSecond : Integer; |
| FSecond : Integer; |
| FYearStr : String; |
| FYearStr : String; |
| FMonthStr : String; |
| FMonthStr : String; |
| FDayStr : String; |
| FDayStr : String; |
| FHourStr : String; |
| FHourStr : String; |
| FMinuteStr : String; |
| FMinuteStr : String; |
| FSecondStr : String; |
| FSecondStr : String; |
| FYeardigit : TplYeardigitSet; |
| FYeardigit : TplYeardigitSet; |
| |
| |
| FFocusedColor : TColor; |
| FFocusedColor : TColor; |
| FDisableFontColor: TColor; |
| FDisableFontColor: TColor; |
| FDisableColor : TColor; |
| FDisableColor : TColor; |
| |
| |
| FYearEdit : TplDateEditEdit; |
| FYearEdit : TplDateEditEdit; |
| FMonthEdit : TplDateEditEdit; |
| FMonthEdit : TplDateEditEdit; |
| FDayEdit : TplDateEditEdit; |
| FDayEdit : TplDateEditEdit; |
| FHourEdit : TplDateEditEdit; |
| FHourEdit : TplDateEditEdit; |
| FMinuteEdit : TplDateEditEdit; |
| FMinuteEdit : TplDateEditEdit; |
| FSecondEdit : TplDateEditEdit; |
| FSecondEdit : TplDateEditEdit; |
| |
| |
| FYearLabel : TplDateEditLabel; |
| FYearLabel : TplDateEditLabel; |
| FMonthLabel : TplDateEditLabel; |
| FMonthLabel : TplDateEditLabel; |
| FDayLabel : TplDateEditLabel; |
| FDayLabel : TplDateEditLabel; |
| FHourLabel : TplDateEditLabel; |
| FHourLabel : TplDateEditLabel; |
| FMinuteLabel : TplDateEditLabel; |
| FMinuteLabel : TplDateEditLabel; |
| FSecondLabel : TplDateEditLabel; |
| FSecondLabel : TplDateEditLabel; |
| |
| |
| FLabelYear : String; |
| FLabelYear : String; |
| FLabelMonth : String; |
| FLabelMonth : String; |
| FLabelDay : String; |
| FLabelDay : String; |
| FLabelHour : String; |
| FLabelHour : String; |
| FLabelMinute : String; |
| FLabelMinute : String; |
| FLabelSecond : String; |
| FLabelSecond : String; |
| FSpaceWidth : Integer; |
| FSpaceWidth : Integer; |
| |
| |
| FGengoCombo : TComboBox; |
| FGengoCombo : TComboBox; |
| FAmpmCombo : TComboBox; |
| FAmpmCombo : TComboBox; |
| FEditGengo : Boolean; |
| FEditGengo : Boolean; |
| FEditAmpm : Boolean; |
| FEditAmpm : Boolean; |
| |
| |
| FEnterNext : Boolean; |
| FEnterNext : Boolean; |
| FExitCheck : Boolean; |
| FExitCheck : Boolean; |
| FDisplayError : Boolean; |
| FDisplayError : Boolean; |
| FDropDownKey : Boolean; |
| FDropDownKey : Boolean; |
| FDialogCaption : String; |
| FDialogCaption : String; |
| FEditStyle : TplDateEditStyle; |
| FEditStyle : TplDateEditStyle; |
| FTabStop : Boolean; |
| FTabStop : Boolean; |
| FColor : TColor; |
| FColor : TColor; |
| FErrorKinds : TplDateEditErrors; |
| FErrorKinds : TplDateEditErrors; |
| FOnKeyPress : TKeyPressEvent; |
| FOnKeyPress : TKeyPressEvent; |
| FOnKeyDown : TKeyEvent; |
| FOnKeyDown : TKeyEvent; |
| FOnChange : TNotifyEvent; |
| FOnChange : TNotifyEvent; |
| FOnClick : TNotifyEvent; |
| FOnClick : TNotifyEvent; |
| FFocused : Boolean; |
| FFocused : Boolean; |
| SingleHeight : Integer; |
| SingleHeight : Integer; |
| fgResize : Boolean; //リサイズ制御変数 |
| fgResize : Boolean; //リサイズ制御変数 |
| fgTabStop : Boolean; |
| fgTabStop : Boolean; |
| |
| |
| DefHeightItemHeightCombo : Integer; |
| DefHeightItemHeightCombo : Integer; |
| |
| |
| procedure SetDate(const Value: TDateTime); |
| procedure SetDate(const Value: TDateTime); |
| function GetDate: TDateTime; |
| function GetDate: TDateTime; |
| procedure SetGengo(const Value: Boolean); |
| procedure SetGengo(const Value: Boolean); |
| function GetProperties: Boolean; |
| function GetProperties: Boolean; |
| procedure SetEditStyle(const Value: TplDateEditStyle); |
| procedure SetEditStyle(const Value: TplDateEditStyle); |
| procedure SetEditGengo(const Value: Boolean); |
| procedure SetEditGengo(const Value: Boolean); |
| procedure SetControlResizePosition(EmptyFlag:Boolean=True); |
| procedure SetControlResizePosition(EmptyFlag:Boolean=True); |
| function GetDateStr(index: Integer): String; |
| function GetDateStr(index: Integer): String; |
| function GetDateInt(index: Integer): Integer; |
| function GetDateInt(index: Integer): Integer; |
| procedure SetControlFocus(AWinControl: TWinControl); |
| procedure SetControlFocus(AWinControl: TWinControl); |
| function GetIsEmpty: Boolean; |
| function GetIsEmpty: Boolean; |
| function CheckDateError: Boolean; |
| function CheckDateError: Boolean; |
| procedure ShowErrorDialog(ERStr: String; AWinControl: TWinControl); |
| procedure ShowErrorDialog(ERStr: String; AWinControl: TWinControl); |
| procedure EditKeyPress(Sender: TObject; var Key: Char);virtual; |
| procedure EditKeyPress(Sender: TObject; var Key: Char);virtual; |
| procedure EditKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);virtual; |
| procedure EditKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);virtual; |
| procedure EditChange(Sender: TObject); virtual; |
| procedure EditChange(Sender: TObject); virtual; |
| procedure EditClick (Sender: TObject); virtual; |
| procedure EditClick (Sender: TObject); virtual; |
| procedure GengoDropDown(Sender: TObject); |
| procedure GengoDropDown(Sender: TObject); |
| procedure EditEnter(Sender: TObject); virtual; |
| procedure EditEnter(Sender: TObject); virtual; |
| procedure EditExit(Sender: TObject); |
| procedure EditExit(Sender: TObject); |
| procedure CreateComboBox(ACombo : TComboBox ); |
| procedure CreateComboBox(ACombo : TComboBox ); |
| procedure CreateLabel(ALabel: TplDateEditLabel; AText:String); |
| procedure CreateLabel(ALabel: TplDateEditLabel; AText:String); |
| procedure CreateEditBox(AMemo: TplDateEditEdit); |
| procedure CreateEditBox(AMemo: TplDateEditEdit); |
| procedure CMEnabledChanged(var Message: TWMNoParams); message CM_ENABLEDCHANGED; |
| procedure CMEnabledChanged(var Message: TWMNoParams); message CM_ENABLEDCHANGED; |
| procedure CMFontChanged(var Message: TWMNoParams); message CM_FONTCHANGED; |
| procedure CMFontChanged(var Message: TWMNoParams); message CM_FONTCHANGED; |
| procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS; |
| procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS; |
| procedure CMWantSpecialKey(var Msg: TMessage); message CM_WANTSPECIALKEY; |
| procedure CMWantSpecialKey(var Msg: TMessage); message CM_WANTSPECIALKEY; |
| procedure SetEditColor; |
| procedure SetEditColor; |
| procedure SetLabelCaption(const index: Integer; const Value: String); |
| procedure SetLabelCaption(const index: Integer; const Value: String); |
| procedure SetControlTabStop(const Value: Boolean); |
| procedure SetControlTabStop(const Value: Boolean); |
| procedure SetControlColor(const Value: TColor); |
| procedure SetControlColor(const Value: TColor); |
| procedure SetDisableColor(const Value: TColor); |
| procedure SetDisableColor(const Value: TColor); |
| procedure SetDisableFontColor(const Value: TColor); |
| procedure SetDisableFontColor(const Value: TColor); |
| procedure GengoDrawItem(Control: TWinControl; Index: Integer; |
| procedure GengoDrawItem(Control: TWinControl; Index: Integer; |
| Rect: TRect; State: TOwnerDrawState); |
| Rect: TRect; State: TOwnerDrawState); |
| procedure SetEditAmpm(const Value: Boolean); |
| procedure SetEditAmpm(const Value: Boolean); |
| procedure ControlShowHide(Sender: TObject; ATop,AHeight: Integer; AFlag: Boolean); |
| procedure ControlShowHide(Sender: TObject; ATop,AHeight: Integer; AFlag: Boolean); |
| procedure SetSpaceWidth(const Value: Integer); |
| procedure SetSpaceWidth(const Value: Integer); |
| procedure SetYeardigit(const Value: TplYeardigitSet); |
| procedure SetYeardigit(const Value: TplYeardigitSet); |
| |
| |
| {$IFDEF CONDITIONALEXPRESSIONS} |
| |
| {$IF RTLVersion >= 24.0} |
| |
| class var |
| |
| FFormatSettings: TFormatSettings; |
| |
| {$IF RTLVersion >= 26.0} |
| |
| MaxEraCount: Integer; |
| |
| EraNames: array of string; |
| |
| EraYearOffsets: array of Integer; |
| |
| {$IFEND} |
| |
| class constructor Create; |
| |
| function FormatDateTime(const Format: string; DateTime: TDateTime): string; |
| |
| {$IFEND} |
| |
| {$ENDIF} |
| |
| protected |
| protected |
| procedure Loaded; override; |
| procedure Loaded; override; |
| procedure SetParent(AParent: TWinControl); override; |
| procedure SetParent(AParent: TWinControl); override; |
| function CanResize(var NewWidth, NewHeight: Integer): Boolean; override; |
| function CanResize(var NewWidth, NewHeight: Integer): Boolean; override; |
| procedure DoExit; override; |
| procedure DoExit; override; |
| public |
| public |
| { Public 宣言 } |
| { Public 宣言 } |
| constructor Create(AOwner: TComponent);override; |
| constructor Create(AOwner: TComponent);override; |
| destructor Destroy; override; |
| destructor Destroy; override; |
| |
| |
| property BaseDate : TDateTime read FBaseDate; |
| property BaseDate : TDateTime read FBaseDate; |
| property DateTime : TDateTime read GetDate write SetDate; |
| property DateTime : TDateTime read GetDate write SetDate; |
| property Date : TDateTime read GetDate write SetDate; |
| property Date : TDateTime read GetDate write SetDate; |
| |
| |
| property GengoCombo : TComboBox read FGengoCombo; |
| property GengoCombo : TComboBox read FGengoCombo; |
| property AmpmCombo : TComboBox read FAmpmCombo; |
| property AmpmCombo : TComboBox read FAmpmCombo; |
| property YearEdit : TplDateEditEdit read FYearEdit; |
| property YearEdit : TplDateEditEdit read FYearEdit; |
| property MonthEdit : TplDateEditEdit read FMonthEdit; |
| property MonthEdit : TplDateEditEdit read FMonthEdit; |
| property DayEdit : TplDateEditEdit read FDayEdit; |
| property DayEdit : TplDateEditEdit read FDayEdit; |
| property HourEdit : TplDateEditEdit read FHourEdit; |
| property HourEdit : TplDateEditEdit read FHourEdit; |
| property MinuteEdit : TplDateEditEdit read FMinuteEdit; |
| property MinuteEdit : TplDateEditEdit read FMinuteEdit; |
| property SecondEdit : TplDateEditEdit read FSecondEdit; |
| property SecondEdit : TplDateEditEdit read FSecondEdit; |
| |
| |
| property YearLabel : TplDateEditLabel read FYearLabel; |
| property YearLabel : TplDateEditLabel read FYearLabel; |
| property MonthLabel : TplDateEditLabel read FMonthLabel; |
| property MonthLabel : TplDateEditLabel read FMonthLabel; |
| property DayLabel : TplDateEditLabel read FDayLabel; |
| property DayLabel : TplDateEditLabel read FDayLabel; |
| property HourLabel : TplDateEditLabel read FHourLabel; |
| property HourLabel : TplDateEditLabel read FHourLabel; |
| property MinuteLabel : TplDateEditLabel read FMinuteLabel; |
| property MinuteLabel : TplDateEditLabel read FMinuteLabel; |
| property SecondLabel : TplDateEditLabel read FSecondLabel; |
| property SecondLabel : TplDateEditLabel read FSecondLabel; |
| |
| |
| property GengoYear : Integer index 1 read GetDateInt; |
| property GengoYear : Integer index 1 read GetDateInt; |
| property Year : Integer index 2 read GetDateInt; |
| property Year : Integer index 2 read GetDateInt; |
| property Month : Integer index 3 read GetDateInt; |
| property Month : Integer index 3 read GetDateInt; |
| property Day : Integer index 4 read GetDateInt; |
| property Day : Integer index 4 read GetDateInt; |
| property Hour : Integer index 5 read GetDateInt; |
| property Hour : Integer index 5 read GetDateInt; |
| property Minute : Integer index 6 read GetDateInt; |
| property Minute : Integer index 6 read GetDateInt; |
| property Second : Integer index 7 read GetDateInt; |
| property Second : Integer index 7 read GetDateInt; |
| |
| |
| property GengoStr : String index 0 read GetDateStr; |
| property GengoStr : String index 0 read GetDateStr; |
| property GengoYearStr : String index 1 read GetDateStr; |
| property GengoYearStr : String index 1 read GetDateStr; |
| property YearStr : String index 2 read GetDateStr; |
| property YearStr : String index 2 read GetDateStr; |
| property MonthStr : String index 3 read GetDateStr; |
| property MonthStr : String index 3 read GetDateStr; |
| property DayStr : String index 4 read GetDateStr; |
| property DayStr : String index 4 read GetDateStr; |
| property AmpmStr : String index 5 read GetDateStr; |
| property AmpmStr : String index 5 read GetDateStr; |
| property HourStr : String index 6 read GetDateStr; |
| property HourStr : String index 6 read GetDateStr; |
| property MinuteStr : String index 7 read GetDateStr; |
| property MinuteStr : String index 7 read GetDateStr; |
| property SecondStr : String index 8 read GetDateStr; |
| property SecondStr : String index 8 read GetDateStr; |
| |
| |
| property IsEmpty : Boolean read GetIsEmpty; |
| property IsEmpty : Boolean read GetIsEmpty; |
| property ErrorKinds : TplDateEditErrors read FErrorKinds; |
| property ErrorKinds : TplDateEditErrors read FErrorKinds; |
| property Focused : Boolean read FFocused; |
| property Focused : Boolean read FFocused; |
| function GetAge(Date1,Date2: TDateTime; AgeType:Integer; var gAge,gMonth: Integer): Boolean; |
| function GetAge(Date1,Date2: TDateTime; AgeType:Integer; var gAge,gMonth: Integer): Boolean; |
| procedure SetEditEmpty; |
| procedure SetEditEmpty; |
| published |
| published |
| property Anchors; |
| property Anchors; |
| property Enabled; |
| property Enabled; |
| property Font; |
| property Font; |
| property PopupMenu; |
| property PopupMenu; |
| property ShowHint; |
| property ShowHint; |
| property TabOrder; |
| property TabOrder; |
| property Visible; |
| property Visible; |
| property OnEnter; |
| property OnEnter; |
| property OnExit; |
| property OnExit; |
| |
| |
| property EditStyle : TplDateEditStyle read FEditStyle write SetEditStyle; |
| property EditStyle : TplDateEditStyle read FEditStyle write SetEditStyle; |
| property EditGengo : Boolean read FEditGengo write SetEditGengo; |
| property EditGengo : Boolean read FEditGengo write SetEditGengo; |
| property EditAmpm : Boolean read FEditAmpm write SetEditAmpm; |
| property EditAmpm : Boolean read FEditAmpm write SetEditAmpm; |
| property LabelYear : String index 1 read FLabelYear write SetLabelCaption; |
| property LabelYear : String index 1 read FLabelYear write SetLabelCaption; |
| property LabelMonth : String index 2 read FLabelMonth write SetLabelCaption; |
| property LabelMonth : String index 2 read FLabelMonth write SetLabelCaption; |
| property LabelDay : String index 3 read FLabelDay write SetLabelCaption; |
| property LabelDay : String index 3 read FLabelDay write SetLabelCaption; |
| property LabelHour : String index 4 read FLabelHour write SetLabelCaption; |
| property LabelHour : String index 4 read FLabelHour write SetLabelCaption; |
| property LabelMinute : String index 5 read FLabelMinute write SetLabelCaption; |
| property LabelMinute : String index 5 read FLabelMinute write SetLabelCaption; |
| property LabelSecond : String index 6 read FLabelSecond write SetLabelCaption; |
| property LabelSecond : String index 6 read FLabelSecond write SetLabelCaption; |
| property SpaceWidth : Integer read FSpaceWidth write SetSpaceWidth; |
| property SpaceWidth : Integer read FSpaceWidth write SetSpaceWidth; |
| property Yeardigit : TplYeardigitSet read FYeardigit write SetYeardigit; |
| property Yeardigit : TplYeardigitSet read FYeardigit write SetYeardigit; |
| |
| |
| property AutoSelect : Boolean read FAutoSelect write FAutoSelect; |
| property AutoSelect : Boolean read FAutoSelect write FAutoSelect; |
| property CanEmpty : Boolean read FCanEmpty write FCanEmpty; |
| property CanEmpty : Boolean read FCanEmpty write FCanEmpty; |
| property Gengo : Boolean read FGengo write SetGengo; |
| property Gengo : Boolean read FGengo write SetGengo; |
| property DisableColor : TColor read FDisableColor write SetDisableColor; |
| property DisableColor : TColor read FDisableColor write SetDisableColor; |
| property DisableFontColor : TColor read FDisableFontColor write SetDisableFontColor; |
| property DisableFontColor : TColor read FDisableFontColor write SetDisableFontColor; |
| property DropDownKey : Boolean read FDropDownKey write FDropDownKey; |
| property DropDownKey : Boolean read FDropDownKey write FDropDownKey; |
| property EnterNext : Boolean read FEnterNext write FEnterNext; |
| property EnterNext : Boolean read FEnterNext write FEnterNext; |
| property ExitCheck : Boolean read FExitCheck write FExitCheck; |
| property ExitCheck : Boolean read FExitCheck write FExitCheck; |
| property DisplayError : Boolean read FDisplayError write FDisplayError; |
| property DisplayError : Boolean read FDisplayError write FDisplayError; |
| property FocusedColor : TColor read FFocusedColor write FFocusedColor; |
| property FocusedColor : TColor read FFocusedColor write FFocusedColor; |
| property DialogCaption : String read FDialogCaption write FDialogCaption; |
| property DialogCaption : String read FDialogCaption write FDialogCaption; |
| property TabStop : Boolean read FTabStop write SetControlTabStop; |
| property TabStop : Boolean read FTabStop write SetControlTabStop; |
| property Color : TColor read FColor write SetControlColor; |
| property Color : TColor read FColor write SetControlColor; |
| property OnKeyPress : TKeyPressEvent read FOnKeyPress write FOnkeyPress; |
| property OnKeyPress : TKeyPressEvent read FOnKeyPress write FOnkeyPress; |
| property OnKeyDown : TKeyEvent read FOnKeyDown write FOnkeyDown; |
| property OnKeyDown : TKeyEvent read FOnKeyDown write FOnkeyDown; |
| property OnChange : TNotifyEvent read FOnChange write FOnChange; |
| property OnChange : TNotifyEvent read FOnChange write FOnChange; |
| property OnClick : TNotifyEvent read FOnClick write FOnClick; |
| property OnClick : TNotifyEvent read FOnClick write FOnClick; |
| end; |
| end; |
| |
| |
| //データベース用 |
| //データベース用 |
| TplDBDateEdit = class(TplDateEdit) |
| TplDBDateEdit = class(TplDateEdit) |
| private |
| private |
| IsEdit : Boolean; |
| IsEdit : Boolean; |
| FDataLink : TFieldDataLink; |
| FDataLink : TFieldDataLink; |
| function GetDataField: string; |
| function GetDataField: string; |
| function GetDataSource: TDataSource; |
| function GetDataSource: TDataSource; |
| function GetReadOnly: Boolean; |
| function GetReadOnly: Boolean; |
| procedure SetDataField(const Value: string); |
| procedure SetDataField(const Value: string); |
| procedure SetDataSource(const Value: TDataSource); |
| procedure SetDataSource(const Value: TDataSource); |
| procedure SetReadOnly(const Value: Boolean); |
| procedure SetReadOnly(const Value: Boolean); |
| function FindField: TField; |
| function FindField: TField; |
| procedure EditKeyPress(Sender: TObject; var Key: Char); override; |
| procedure EditKeyPress(Sender: TObject; var Key: Char); override; |
| procedure EditKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState); override; |
| procedure EditKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState); override; |
| procedure EditChange(Sender: TObject); override; |
| procedure EditChange(Sender: TObject); override; |
| protected |
| protected |
| procedure DataChange(Sender: TObject); virtual; |
| procedure DataChange(Sender: TObject); virtual; |
| procedure UpdateData(Sender: TObject); |
| procedure UpdateData(Sender: TObject); |
| procedure DoExit; override; |
| procedure DoExit; override; |
| procedure Notification(AComponent: TComponent; Operation: TOperation); override; |
| procedure Notification(AComponent: TComponent; Operation: TOperation); override; |
| public |
| public |
| constructor Create(AOwner: TComponent); override; |
| constructor Create(AOwner: TComponent); override; |
| destructor Destroy; override; |
| destructor Destroy; override; |
| published |
| published |
| property DataField: string read GetDataField write SetDataField; |
| property DataField: string read GetDataField write SetDataField; |
| property DataSource: TDataSource read GetDataSource write SetDataSource; |
| property DataSource: TDataSource read GetDataSource write SetDataSource; |
| property ReadOnly: Boolean read GetReadOnly write SetReadOnly; |
| property ReadOnly: Boolean read GetReadOnly write SetReadOnly; |
| end; |
| end; |
| |
| |
| procedure Register; |
| procedure Register; |
| |
| |
| implementation |
| implementation |
| |
| |
| {$IF CompilerVersion > 14.99} |
| {$IF CompilerVersion > 14.99} |
| uses Themes, Math; |
| uses Themes, Math; |
| {$IFEND} |
| {$IFEND} |
| |
| |
| { TplDateEdit} |
| { TplDateEdit} |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // コンポーネント初期化 |
| // コンポーネント初期化 |
| // 内部のコンポーネントの初期化と関係する初期化はSetParentで実行. |
| // 内部のコンポーネントの初期化と関係する初期化はSetParentで実行. |
| // このコンポ自体にフォーカス移動すると[Tab]の動作などがうまくないので元の |
| // このコンポ自体にフォーカス移動すると[Tab]の動作などがうまくないので元の |
| // TabStop=Falseにして,別にTabStopを定義. |
| // TabStop=Falseにして,別にTabStopを定義. |
| // Colorも別定義にしてある.これは将来ラベル付きの日付入力用の準備のつもりであ |
| // Colorも別定義にしてある.これは将来ラベル付きの日付入力用の準備のつもりであ |
| // るが,予定は未定なので期待はしないように. |
| // るが,予定は未定なので期待はしないように. |
| //============================================================================= |
| //============================================================================= |
| constructor TplDateEdit.Create(AOwner: TComponent); |
| constructor TplDateEdit.Create(AOwner: TComponent); |
| begin |
| begin |
| inherited Create(AOWner); |
| inherited Create(AOWner); |
| |
| |
| inherited TabStop := False; |
| inherited TabStop := False; |
| ParentColor := True; |
| ParentColor := True; |
| FAutoSelect := True; |
| FAutoSelect := True; |
| |
| |
| FErrorKinds := []; |
| FErrorKinds := []; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // コンポーネントのロードが終了したら |
| // コンポーネントのロードが終了したら |
| // 現在のところは特に処理なし |
| // 現在のところは特に処理なし |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.Loaded; |
| procedure TplDateEdit.Loaded; |
| begin |
| begin |
| inherited Loaded; |
| inherited Loaded; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // コンポーネント破棄 |
| // コンポーネント破棄 |
| // 現在のところは特に処理なし |
| // 現在のところは特に処理なし |
| //============================================================================= |
| //============================================================================= |
| destructor TplDateEdit.Destroy; |
| destructor TplDateEdit.Destroy; |
| begin |
| begin |
| inherited Destroy; |
| inherited Destroy; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 各コントロールの生成とコンポプロパティの初期化 |
| // 各コントロールの生成とコンポプロパティの初期化 |
| // |
| // |
| // コントロールの位置と高さ幅はSetControlResizePositionメソッドで設定 |
| // コントロールの位置と高さ幅はSetControlResizePositionメソッドで設定 |
| // コントロールの生成は一番左側の元号選択コンボから |
| // コントロールの生成は一番左側の元号選択コンボから |
| // |
| // |
| // 注意: 何も日付を設定しない(全ての入力コントロールが空の時)に取得した値は, |
| // 注意: 何も日付を設定しない(全ての入力コントロールが空の時)に取得した値は, |
| // BaseDateの1日前の値である. |
| // BaseDateの1日前の値である. |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetParent(AParent: TWinControl); |
| procedure TplDateEdit.SetParent(AParent: TWinControl); |
| begin |
| begin |
| inherited; |
| inherited; |
| |
| |
| if AParent = nil then exit; |
| if AParent = nil then exit; |
| |
| |
| if FGengoCombo=nil then begin |
| if FGengoCombo=nil then begin |
| //本コンポ自体はCaption不要 |
| //本コンポ自体はCaption不要 |
| Caption := ''; |
| Caption := ''; |
| |
| |
| Canvas.Font := Font; |
| Canvas.Font := Font; |
| FColor := clWhite; |
| FColor := clWhite; |
| //元号選択コンボボックスの作成と初期化 |
| //元号選択コンボボックスの作成と初期化 |
| FGengoCombo := TComboBox.Create(Self); |
| FGengoCombo := TComboBox.Create(Self); |
| CreateComboBox(FGengoCombo); |
| CreateComboBox(FGengoCombo); |
| //初期状態は元号選択で年,月,日.時刻入力はなし |
| //初期状態は元号選択で年,月,日.時刻入力はなし |
| FEditGengo := True; |
| FEditGengo := True; |
| FEditAmpm := False; |
| FEditAmpm := False; |
| FEditStyle := desYearMonthDay; |
| FEditStyle := desYearMonthDay; |
| |
| |
| //左から順番に決めていかないと,コントロールの左側にわずかの隙間ができてしまう |
| //左から順番に決めていかないと,コントロールの左側にわずかの隙間ができてしまう |
| //日付入力部分とその右のラベルの作成 |
| //日付入力部分とその右のラベルの作成 |
| FYearEdit := TplDateEditEdit.Create(Self); |
| FYearEdit := TplDateEditEdit.Create(Self); |
| FYearLabel := TplDateEditLabel.Create(Self); |
| FYearLabel := TplDateEditLabel.Create(Self); |
| FMonthEdit := TplDateEditEdit.Create(Self); |
| FMonthEdit := TplDateEditEdit.Create(Self); |
| FMonthLabel := TplDateEditLabel.Create(Self); |
| FMonthLabel := TplDateEditLabel.Create(Self); |
| FDayEdit := TplDateEditEdit.Create(Self); |
| FDayEdit := TplDateEditEdit.Create(Self); |
| FDayLabel := TplDateEditLabel.Create(Self); |
| FDayLabel := TplDateEditLabel.Create(Self); |
| |
| |
| CreateEditBox(FYearEdit); |
| CreateEditBox(FYearEdit); |
| CreateLabel (FYearLabel,'年'); |
| CreateLabel (FYearLabel,'年'); |
| CreateEditBox(FMonthEdit); |
| CreateEditBox(FMonthEdit); |
| CreateLabel (FMonthLabel,'月'); |
| CreateLabel (FMonthLabel,'月'); |
| CreateEditBox(FDayEdit); |
| CreateEditBox(FDayEdit); |
| CreateLabel (FDayLabel,'日'); |
| CreateLabel (FDayLabel,'日'); |
| |
| |
| //午前午後選択コンボボックスの作成と初期化 |
| //午前午後選択コンボボックスの作成と初期化 |
| FAmpmCombo := TComboBox.Create(Self); |
| FAmpmCombo := TComboBox.Create(Self); |
| CreateComboBox(FAmpmCombo); |
| CreateComboBox(FAmpmCombo); |
| |
| |
| //時刻入力部分とその右のラベルの作成 |
| //時刻入力部分とその右のラベルの作成 |
| FHourEdit := TplDateEditEdit.Create(Self); |
| FHourEdit := TplDateEditEdit.Create(Self); |
| FHourLabel := TplDateEditLabel.Create(Self); |
| FHourLabel := TplDateEditLabel.Create(Self); |
| FMinuteEdit := TplDateEditEdit.Create(Self); |
| FMinuteEdit := TplDateEditEdit.Create(Self); |
| FMinuteLabel := TplDateEditLabel.Create(Self); |
| FMinuteLabel := TplDateEditLabel.Create(Self); |
| FSecondEdit := TplDateEditEdit.Create(Self); |
| FSecondEdit := TplDateEditEdit.Create(Self); |
| FSecondLabel := TplDateEditLabel.Create(Self); |
| FSecondLabel := TplDateEditLabel.Create(Self); |
| |
| |
| CreateEditBox(FHourEdit); |
| CreateEditBox(FHourEdit); |
| CreateLabel (FHourLabel, '時'); |
| CreateLabel (FHourLabel, '時'); |
| CreateEditBox(FMinuteEdit); |
| CreateEditBox(FMinuteEdit); |
| CreateLabel (FMinuteLabel, '分'); |
| CreateLabel (FMinuteLabel, '分'); |
| CreateEditBox(FSecondEdit); |
| CreateEditBox(FSecondEdit); |
| CreateLabel (FSecondLabel, '秒'); |
| CreateLabel (FSecondLabel, '秒'); |
| |
| |
| //各プロパティの初期化 |
| //各プロパティの初期化 |
| {$IFDEF CONDITIONALEXPRESSIONS} |
| |
| {$IF RTLVersion < 24.0} |
| |
| ShortDateFormat := 'YYYY/MM/DD'; |
| ShortDateFormat := 'YYYY/MM/DD'; |
| {$IFEND} |
| |
| {$ENDIF} |
| |
| FBaseDate := VarToDateTime('1873/01/01'); |
| FBaseDate := VarToDateTime('1873/01/01'); |
| FDate := FBaseDate-1; |
| FDate := FBaseDate-1; |
| FDateTime := FDate; |
| FDateTime := FDate; |
| FCanEmpty := True; |
| FCanEmpty := True; |
| FGengo := True; |
| FGengo := True; |
| FDisableColor := clGray; |
| FDisableColor := clGray; |
| FDisableFontColor := clWhite; |
| FDisableFontColor := clWhite; |
| FDropDownKey := True; |
| FDropDownKey := True; |
| FIsEmpty := True; |
| FIsEmpty := True; |
| FEnterNext := True; |
| FEnterNext := True; |
| FExitCheck := False; |
| FExitCheck := False; |
| FDisplayError := True; |
| FDisplayError := True; |
| FFocusedColor := clAqua; |
| FFocusedColor := clAqua; |
| |
| |
| FLabelYear := FYearLabel.Text; |
| FLabelYear := FYearLabel.Text; |
| FLabelMonth := FMonthLabel.Text; |
| FLabelMonth := FMonthLabel.Text; |
| FLabelDay := FDayLabel.Text; |
| FLabelDay := FDayLabel.Text; |
| FLabelHour := FHourLabel.Text; |
| FLabelHour := FHourLabel.Text; |
| FLabelMinute := FMinuteLabel.Text; |
| FLabelMinute := FMinuteLabel.Text; |
| FLabelSecond := FSecondLabel.Text; |
| FLabelSecond := FSecondLabel.Text; |
| |
| |
| FDialogCaption := '日付時刻入力'; |
| FDialogCaption := '日付時刻入力'; |
| FTabStop := True; |
| FTabStop := True; |
| FYeardigit := yddigit4; |
| FYeardigit := yddigit4; |
| FSpaceWidth := 7; |
| FSpaceWidth := 7; |
| |
| |
| //各コントロールの幅と位置を設定して表示 |
| //各コントロールの幅と位置を設定して表示 |
| SetControlResizePosition(True); |
| SetControlResizePosition(True); |
| end; |
| end; |
| end; |
| end; |
| |
| |
| {$IFDEF CONDITIONALEXPRESSIONS} |
| |
| {$IF RTLVersion >= 24.0} |
| |
| class constructor TplDateEdit.Create; |
| |
| {$IF RTLVersion >= 26.0} |
| |
| var |
| |
| I: Integer; |
| |
| {$IFEND} |
| |
| begin |
| |
| FFormatSettings := TFormatSettings.Create; |
| |
| FFormatSettings.ShortDateFormat := 'YYYY/MM/DD'; |
| |
| {$IF RTLVersion >= 26.0} |
| |
| MaxEraCount := Length(FormatSettings.EraInfo); |
| |
| SetLength(EraNames, MaxEraCount + 1); |
| |
| SetLength(EraYearOffsets, MaxEraCount + 1); |
| |
| for I := 0 to MaxEraCount - 1 do |
| |
| begin |
| |
| EraNames[I + 1] := FormatSettings.EraInfo[I].EraName; |
| |
| EraYearOffsets[I + 1] := FormatSettings.EraInfo[I].EraOffset; |
| |
| end; |
| |
| {$IFEND} |
| |
| end; |
| |
| {$IFEND} |
| |
| {$ENDIF} |
| |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 選択用コンボボックスの生成と初期化 |
| // 選択用コンボボックスの生成と初期化 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.CreateComboBox(ACombo: TComboBox); |
| procedure TplDateEdit.CreateComboBox(ACombo: TComboBox); |
| var |
| var |
| i : Integer; |
| i : Integer; |
| begin |
| begin |
| with ACombo do begin |
| with ACombo do begin |
| Parent := Self; |
| Parent := Self; |
| ParentFont := False; |
| ParentFont := False; |
| Left := 0; |
| Left := 0; |
| Style := csOwnerDrawFixed; |
| Style := csOwnerDrawFixed; |
| ImeMode := imDisable; |
| ImeMode := imDisable; |
| OnEnter := EditEnter; |
| OnEnter := EditEnter; |
| OnExit := EditExit; |
| OnExit := EditExit; |
| OnKeyPress := EditKeyPress; |
| OnKeyPress := EditKeyPress; |
| OnKeyDown := EditKeyDown; |
| OnKeyDown := EditKeyDown; |
| OnDropDown := GengoDropDown; |
| OnDropDown := GengoDropDown; |
| OnDrawItem := GengoDrawItem; |
| OnDrawItem := GengoDrawItem; |
| OnChange := EditChange; |
| OnChange := EditChange; |
| OnClick := EditClick; |
| OnClick := EditClick; |
| |
| |
| Items.Clear; |
| Items.Clear; |
| if ACombo = FGengoCombo then begin |
| if ACombo = FGengoCombo then begin |
| //元号選択Itemの作成 |
| //元号選択Itemの作成 |
| Items.Add('西暦'); |
| Items.Add('西暦'); |
| for i := 1 to MaxEraCount do begin |
| for i := 1 to MaxEraCount do begin |
| if EraNames[i]='' then break; |
| if EraNames[i]='' then break; |
| Items.Add(EraNames[i]); |
| Items.Add(EraNames[i]); |
| end; |
| end; |
| end else begin |
| end else begin |
| //午前午後選択Itemの作成 |
| //午前午後選択Itemの作成 |
| //この'午前','午後'の名前は例えばAM,PMにしてもよい |
| //この'午前','午後'の名前は例えばAM,PMにしてもよい |
| //ただしItemIndex=0は午前,ItemIndex=1は午後として処理する |
| //ただしItemIndex=0は午前,ItemIndex=1は午後として処理する |
| Items.Add('午前'); |
| Items.Add('午前'); |
| Items.Add('午後'); |
| Items.Add('午後'); |
| end; |
| end; |
| DefHeightItemHeightCombo := Height - ItemHeight; |
| DefHeightItemHeightCombo := Height - ItemHeight; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 入力欄のコントロールの生成と初期化 |
| // 入力欄のコントロールの生成と初期化 |
| // TEditではなくTMemo(クラス名をtplDateEditEdidに変更)を1行のエデットボックス |
| // TEditではなくTMemo(クラス名をtplDateEditEdidに変更)を1行のエデットボックス |
| // として利用 |
| // として利用 |
| // (右寄せと入力文字数の設定が簡単なので) |
| // (右寄せと入力文字数の設定が簡単なので) |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.CreateEditBox(AMemo: TplDateEditEdit); |
| procedure TplDateEdit.CreateEditBox(AMemo: TplDateEditEdit); |
| begin |
| begin |
| with AMemo do begin |
| with AMemo do begin |
| Parent := Self; |
| Parent := Self; |
| ParentFont := False; |
| ParentFont := False; |
| WantReturns := False; |
| WantReturns := False; |
| WantTabs := False; |
| WantTabs := False; |
| WordWrap := False; |
| WordWrap := False; |
| Alignment := taRightJustify; |
| Alignment := taRightJustify; |
| ImeMode := imDisable; |
| ImeMode := imDisable; |
| Color := FColor; |
| Color := FColor; |
| OnEnter := EditEnter; |
| OnEnter := EditEnter; |
| OnExit := EditExit; |
| OnExit := EditExit; |
| OnKeyPress := EditKeyPress; |
| OnKeyPress := EditKeyPress; |
| OnKeyDown := EditKeyDown; |
| OnKeyDown := EditKeyDown; |
| OnChange := EditChange; |
| OnChange := EditChange; |
| OnClick := EditClick; |
| OnClick := EditClick; |
| MaxLength := 2; |
| MaxLength := 2; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 入力欄の右側の[年][月][日][時][分][秒]のラベル用のラベルコントロール |
| // 入力欄の右側の[年][月][日][時][分][秒]のラベル用のラベルコントロール |
| // 当初はTPanelで作成したが,XPテーマだと下端が白線になってしまうの |
| // 当初はTPanelで作成したが,XPテーマだと下端が白線になってしまうの |
| // で急きょTCustomControlから作成に変更(Ver1.1) |
| // で急きょTCustomControlから作成に変更(Ver1.1) |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.CreateLabel(ALabel: TplDateEditLabel; AText:String ); |
| procedure TplDateEdit.CreateLabel(ALabel: TplDateEditLabel; AText:String ); |
| begin |
| begin |
| with ALabel do begin |
| with ALabel do begin |
| Parent := Self; |
| Parent := Self; |
| ParentFont := False; |
| ParentFont := False; |
| ParentColor := False; |
| ParentColor := False; |
| Color := $00E4E4E4; |
| Color := $00E4E4E4; |
| Text := AText; |
| Text := AText; |
| Font.Size := Canvas.Font.Size; |
| Font.Size := Canvas.Font.Size; |
| TabStop := False; |
| TabStop := False; |
| ControlStyle := ALabel.ControlStyle - [csAcceptsControls]; |
| ControlStyle := ALabel.ControlStyle - [csAcceptsControls]; |
| FplDate := Self; |
| FplDate := Self; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 表示コントロールの設定 |
| // 表示コントロールの設定 |
| // EditStyleプロパティ用 |
| // EditStyleプロパティ用 |
| // 現在の値はリセットする |
| // 現在の値はリセットする |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetEditStyle(const Value: TplDateEditStyle); |
| procedure TplDateEdit.SetEditStyle(const Value: TplDateEditStyle); |
| begin |
| begin |
| if FEditStyle <> Value then begin |
| if FEditStyle <> Value then begin |
| FEditStyle := Value; |
| FEditStyle := Value; |
| if (csReading in ComponentState) then exit; |
| if (csReading in ComponentState) then exit; |
| SetControlResizePosition(True); |
| SetControlResizePosition(True); |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 元号入力コンボボックスの表示非非表示の設定 |
| // 元号入力コンボボックスの表示非非表示の設定 |
| // EditGengo(Boolean)プロパティ用 |
| // EditGengo(Boolean)プロパティ用 |
| // 非表示の時は西暦入力と解釈し,和暦表示を不可にする |
| // 非表示の時は西暦入力と解釈し,和暦表示を不可にする |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetEditGengo(const Value: Boolean); |
| procedure TplDateEdit.SetEditGengo(const Value: Boolean); |
| begin |
| begin |
| if FEditGengo <> Value then begin |
| if FEditGengo <> Value then begin |
| if Value = False then begin |
| if Value = False then begin |
| FEditGengo := False; |
| FEditGengo := False; |
| FGengo := False; |
| FGengo := False; |
| end else begin |
| end else begin |
| FEditGengo := True; |
| FEditGengo := True; |
| end; |
| end; |
| //TplDateEditのVer2.10で修正 |
| //TplDateEditのVer2.10で修正 |
| SetControlResizePosition(False); |
| SetControlResizePosition(False); |
| if (csReading in ComponentState) then exit; |
| if (csReading in ComponentState) then exit; |
| GetProperties; |
| GetProperties; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 午前午後選択力コンボボックスの表示非非表示の設定 |
| // 午前午後選択力コンボボックスの表示非非表示の設定 |
| // EditAmpm(Boolean)プロパティ用 |
| // EditAmpm(Boolean)プロパティ用 |
| // 非表示の時は24時間表示と解釈する |
| // 非表示の時は24時間表示と解釈する |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetEditAmpm(const Value: Boolean); |
| procedure TplDateEdit.SetEditAmpm(const Value: Boolean); |
| begin |
| begin |
| if FEditAmpm <> Value then begin |
| if FEditAmpm <> Value then begin |
| if Value = False then begin |
| if Value = False then begin |
| FEditAmpm := False; |
| FEditAmpm := False; |
| end else begin |
| end else begin |
| FEditAmpm := True; |
| FEditAmpm := True; |
| end; |
| end; |
| //TplDateEditのVer2.10で修正 |
| //TplDateEditのVer2.10で修正 |
| SetControlResizePosition(False); |
| SetControlResizePosition(False); |
| if (csReading in ComponentState) then exit; |
| if (csReading in ComponentState) then exit; |
| GetProperties; |
| GetProperties; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 年,月,日,時,分,秒のラベル(各入力欄の右側のラベル)の変更 |
| // 年,月,日,時,分,秒のラベル(各入力欄の右側のラベル)の変更 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetLabelCaption(const Index: Integer; const Value: String); |
| procedure TplDateEdit.SetLabelCaption(const Index: Integer; const Value: String); |
| begin |
| begin |
| case Index of |
| case Index of |
| 1: |
| 1: |
| begin |
| begin |
| FYearLabel.Text := Value; |
| FYearLabel.Text := Value; |
| FLabelYear := Value; |
| FLabelYear := Value; |
| end; |
| end; |
| 2: |
| 2: |
| begin |
| begin |
| FMonthLabel.Text := Value; |
| FMonthLabel.Text := Value; |
| FLabelMonth := Value; |
| FLabelMonth := Value; |
| end; |
| end; |
| 3: |
| 3: |
| begin |
| begin |
| FDayLabel.Text := Value; |
| FDayLabel.Text := Value; |
| FLabelDay := Value; |
| FLabelDay := Value; |
| end; |
| end; |
| 4: |
| 4: |
| begin |
| begin |
| FHourLabel.Text := Value; |
| FHourLabel.Text := Value; |
| FLabelHour := Value |
| FLabelHour := Value |
| end; |
| end; |
| 5: |
| 5: |
| begin |
| begin |
| FMinuteLabel.Text := Value; |
| FMinuteLabel.Text := Value; |
| FLabelMinute := Value; |
| FLabelMinute := Value; |
| end; |
| end; |
| 6: |
| 6: |
| begin |
| begin |
| FSecondLabel.Text := Value; |
| FSecondLabel.Text := Value; |
| FLabelSecond := Value; |
| FLabelSecond := Value; |
| end; |
| end; |
| end; |
| end; |
| SetControlResizePosition(False); |
| SetControlResizePosition(False); |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 日付と時刻入力コントロールのスペース幅 SpaceWidth |
| // 日付と時刻入力コントロールのスペース幅 SpaceWidth |
| // この値を負にすると時刻関係のコントロールは下に配置 |
| // この値を負にすると時刻関係のコントロールは下に配置 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetSpaceWidth(const Value: Integer); |
| procedure TplDateEdit.SetSpaceWidth(const Value: Integer); |
| begin |
| begin |
| if FSpaceWidth <> Value then begin |
| if FSpaceWidth <> Value then begin |
| FSpaceWidth := Value; |
| FSpaceWidth := Value; |
| SetControlResizePosition(False); |
| SetControlResizePosition(False); |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 西暦の表示桁数の設定 |
| // 西暦の表示桁数の設定 |
| // yddigit2 2桁 |
| // yddigit2 2桁 |
| // yddigit4 4桁 |
| // yddigit4 4桁 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetYeardigit(const Value: TplYeardigitSet); |
| procedure TplDateEdit.SetYeardigit(const Value: TplYeardigitSet); |
| begin |
| begin |
| if FYeardigit <> Value then begin |
| if FYeardigit <> Value then begin |
| FYeardigit := Value; |
| FYeardigit := Value; |
| SetControlResizePosition(False); |
| SetControlResizePosition(False); |
| GetProperties; |
| GetProperties; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 表示するコントロール(元号選択,年月日,時刻に応じた)表示と位置の設定は全て |
| // 表示するコントロール(元号選択,年月日,時刻に応じた)表示と位置の設定は全て |
| // このメソッドで行うようにしてある.表示しないコントロールの幅は0で非表示 |
| // このメソッドで行うようにしてある.表示しないコントロールの幅は0で非表示 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetControlResizePosition(EmptyFlag:Boolean=True); |
| procedure TplDateEdit.SetControlResizePosition(EmptyFlag:Boolean=True); |
| var |
| var |
| ALeft : Integer; |
| ALeft : Integer; |
| AHeight : Integer; |
| AHeight : Integer; |
| ATop : Integer; |
| ATop : Integer; |
| WidthA : Integer; |
| WidthA : Integer; |
| WidthB : Integer; |
| WidthB : Integer; |
| SysMetrics : TTextMetric; |
| SysMetrics : TTextMetric; |
| Metrics : TTextMetric; |
| Metrics : TTextMetric; |
| I : Integer; |
| I : Integer; |
| LeftPosMargin : Integer; |
| LeftPosMargin : Integer; |
| ComboLeftMargein : Integer; |
| ComboLeftMargein : Integer; |
| begin |
| begin |
| if FGengoCombo=nil then exit; |
| if FGengoCombo=nil then exit; |
| |
| |
| if CheckWin32Version(6, 0) then begin |
| if CheckWin32Version(6, 0) then begin |
| LeftPosMargin := 0; |
| LeftPosMargin := 0; |
| end else begin |
| end else begin |
| LeftPosMargin := 3; |
| LeftPosMargin := 3; |
| end; |
| end; |
| |
| |
| fgResize := True; |
| fgResize := True; |
| |
| |
| Canvas.Font.Assign(Font); |
| Canvas.Font.Assign(Font); |
| GetTextMetrics(Canvas.Handle,Metrics); |
| GetTextMetrics(Canvas.Handle,Metrics); |
| I := GetSystemMetrics(SM_CYBORDER) * 8; |
| I := GetSystemMetrics(SM_CYBORDER) * 8; |
| |
| |
| //このコンポの高さ(SpaceWidht<0の時は変化する) |
| //このコンポの高さ(SpaceWidht<0の時は変化する) |
| SingleHeight := Metrics.tmHeight + I; |
| SingleHeight := Metrics.tmHeight + I; |
| Height := SingleHeight; |
| Height := SingleHeight; |
| |
| |
| //一旦入力欄を全て空にする.この後入力コントロールの表示非表示に応じて |
| //一旦入力欄を全て空にする.この後入力コントロールの表示非表示に応じて |
| //初期値をセットする |
| //初期値をセットする |
| if EmptyFlag then SetEditEmpty; |
| if EmptyFlag then SetEditEmpty; |
| |
| |
| {$IF CompilerVersion > 14.99} |
| {$IF CompilerVersion > 14.99} |
| if ThemeServices.ThemesEnabled then begin |
| if ThemeServices.ThemesEnabled then begin |
| ComboLeftMargein := 0; |
| ComboLeftMargein := 0; |
| end else begin |
| end else begin |
| ComboLeftMargein := 3; |
| ComboLeftMargein := 3; |
| end; |
| end; |
| {$ELSE} |
| {$ELSE} |
| ComboLeftMargein := 3; |
| ComboLeftMargein := 3; |
| {$IFEND} |
| {$IFEND} |
| |
| |
| //少々冗長であるがスタイルごとに設定 |
| //少々冗長であるがスタイルごとに設定 |
| ALeft := 0; |
| ALeft := 0; |
| ATop := 0; |
| ATop := 0; |
| case FEditStyle of |
| case FEditStyle of |
| |
| |
| //年月日時分秒 |
| //年月日時分秒 |
| desYearMonthDayHMS: |
| desYearMonthDayHMS: |
| begin |
| begin |
| if FSpaceWidth < 0 then begin |
| if FSpaceWidth < 0 then begin |
| ATop := SingleHeight - FSpaceWidth; |
| ATop := SingleHeight - FSpaceWidth; |
| Height := SingleHeight * 2 - FSpaceWidth; |
| Height := SingleHeight * 2 - FSpaceWidth; |
| end; |
| end; |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| |
| |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FDayEdit, 0, SingleHeight, True); |
| ControlShowHide (FDayEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FDayLabel, 0, SingleHeight, True); |
| ControlShowHide (FDayLabel, 0, SingleHeight, True); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, True); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, True); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, True); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, True); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, True); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, True); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, True); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, True); |
| |
| |
| FYearEdit.Left := ALeft; |
| FYearEdit.Left := ALeft; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width; |
| FDayEdit.Left := FMonthLabel.Left + FMonthLabel.Width - LeftPosMargin; |
| FDayEdit.Left := FMonthLabel.Left + FMonthLabel.Width - LeftPosMargin; |
| FDayLabel.Left := FDayEdit.Left + FDayEdit.Width; |
| FDayLabel.Left := FDayEdit.Left + FDayEdit.Width; |
| WidthA := FDayLabel.Left + FDayLabel.Width; |
| WidthA := FDayLabel.Left + FDayLabel.Width; |
| |
| |
| ControlShowHide (FAmpmCombo, ATop, SingleHeight, FEditAmpm); |
| ControlShowHide (FAmpmCombo, ATop, SingleHeight, FEditAmpm); |
| if FSpaceWidth >= 0 then ALeft := WidthA+SpaceWidth else ALeft := 0; |
| if FSpaceWidth >= 0 then ALeft := WidthA+SpaceWidth else ALeft := 0; |
| if FEditAmpm then begin |
| if FEditAmpm then begin |
| FAmpmCombo.Left := ALeft; |
| FAmpmCombo.Left := ALeft; |
| ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| end; |
| end; |
| FHourEdit.Left := ALeft; |
| FHourEdit.Left := ALeft; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| FMinuteEdit.Left := FHourLabel.Left + FHourLabel.Width - LeftPosMargin; |
| FMinuteEdit.Left := FHourLabel.Left + FHourLabel.Width - LeftPosMargin; |
| FMinuteLabel.Left := FMinuteEdit.Left + FMinuteEdit.Width; |
| FMinuteLabel.Left := FMinuteEdit.Left + FMinuteEdit.Width; |
| FSecondEdit.Left := FMinuteLabel.Left + FMinuteLabel.Width - LeftPosMargin; |
| FSecondEdit.Left := FMinuteLabel.Left + FMinuteLabel.Width - LeftPosMargin; |
| FSecondLabel.Left := FSecondEdit.Left + FSecondEdit.Width; |
| FSecondLabel.Left := FSecondEdit.Left + FSecondEdit.Width; |
| WidthB := FSecondLabel.Left + FSecondLabel.Width; |
| WidthB := FSecondLabel.Left + FSecondLabel.Width; |
| |
| |
| if WidthA > WidthB then Width := WidthA else Width := WidthB; |
| if WidthA > WidthB then Width := WidthA else Width := WidthB; |
| if FSpaceWidth < 0 then Height := SingleHeight * 2 - FSpaceWidth; |
| if FSpaceWidth < 0 then Height := SingleHeight * 2 - FSpaceWidth; |
| end; |
| end; |
| |
| |
| //年月日時分 |
| //年月日時分 |
| desYearMonthDayHM: |
| desYearMonthDayHM: |
| begin |
| begin |
| if FSpaceWidth < 0 then begin |
| if FSpaceWidth < 0 then begin |
| ATop := SingleHeight - FSpaceWidth; |
| ATop := SingleHeight - FSpaceWidth; |
| Height := SingleHeight * 2 - FSpaceWidth; |
| Height := SingleHeight * 2 - FSpaceWidth; |
| end; |
| end; |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| |
| |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FDayEdit, 0, SingleHeight, True); |
| ControlShowHide (FDayEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FDayLabel, 0, SingleHeight, True); |
| ControlShowHide (FDayLabel, 0, SingleHeight, True); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, True); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, True); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, True); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, True); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| |
| |
| FYearEdit.Left := ALeft; |
| FYearEdit.Left := ALeft; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width; |
| FDayEdit.Left := FMonthLabel.Left + FMonthLabel.Width - LeftPosMargin; |
| FDayEdit.Left := FMonthLabel.Left + FMonthLabel.Width - LeftPosMargin; |
| FDayLabel.Left := FDayEdit.Left + FDayEdit.Width; |
| FDayLabel.Left := FDayEdit.Left + FDayEdit.Width; |
| WidthA := FDayLabel.Left + FDayLabel.Width; |
| WidthA := FDayLabel.Left + FDayLabel.Width; |
| |
| |
| ControlShowHide (FAmpmCombo, ATop, SingleHeight, FEditAmpm); |
| ControlShowHide (FAmpmCombo, ATop, SingleHeight, FEditAmpm); |
| if FSpaceWidth >= 0 then ALeft := WidthA + FSpaceWidth else ALeft := 0; |
| if FSpaceWidth >= 0 then ALeft := WidthA + FSpaceWidth else ALeft := 0; |
| if FEditAmpm then begin |
| if FEditAmpm then begin |
| FAmpmCombo.Left := ALeft; |
| FAmpmCombo.Left := ALeft; |
| ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| end; |
| end; |
| FHourEdit.Left := ALeft; |
| FHourEdit.Left := ALeft; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| FMinuteEdit.Left := FHourLabel.Left + FHourLabel.Width - LeftPosMargin; |
| FMinuteEdit.Left := FHourLabel.Left + FHourLabel.Width - LeftPosMargin; |
| FMinuteLabel.Left := FMinuteEdit.Left + FMinuteEdit.Width; |
| FMinuteLabel.Left := FMinuteEdit.Left + FMinuteEdit.Width; |
| WidthB := FMinuteLabel.Left + FMinuteLabel.Width; |
| WidthB := FMinuteLabel.Left + FMinuteLabel.Width; |
| |
| |
| if WidthA > WidthB then Width := WidthA else Width := WidthB; |
| if WidthA > WidthB then Width := WidthA else Width := WidthB; |
| if FSpaceWidth < 0 then Height := SingleHeight * 2 - FSpaceWidth; |
| if FSpaceWidth < 0 then Height := SingleHeight * 2 - FSpaceWidth; |
| end; |
| end; |
| |
| |
| //年月日時 |
| //年月日時 |
| desYearMonthDayH: |
| desYearMonthDayH: |
| begin |
| begin |
| if FSpaceWidth < 0 then begin |
| if FSpaceWidth < 0 then begin |
| ATop := SingleHeight-FSpaceWidth; |
| ATop := SingleHeight-FSpaceWidth; |
| Height := SingleHeight*2-FSpaceWidth; |
| Height := SingleHeight*2-FSpaceWidth; |
| end; |
| end; |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| |
| |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FDayEdit, 0, SingleHeight, True); |
| ControlShowHide (FDayEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FDayLabel, 0, SingleHeight, True); |
| ControlShowHide (FDayLabel, 0, SingleHeight, True); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, True); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, False); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, True); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, False); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| |
| |
| FYearEdit.Left := ALeft; |
| FYearEdit.Left := ALeft; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width; |
| FDayEdit.Left := FMonthLabel.Left + FMonthLabel.Width - LeftPosMargin; |
| FDayEdit.Left := FMonthLabel.Left + FMonthLabel.Width - LeftPosMargin; |
| FDayLabel.Left := FDayEdit.Left+FDayEdit.Width; |
| FDayLabel.Left := FDayEdit.Left+FDayEdit.Width; |
| WidthA := FDayLabel.Left+FDayLabel.Width; |
| WidthA := FDayLabel.Left+FDayLabel.Width; |
| |
| |
| ControlShowHide (FAmpmCombo,ATop, SingleHeight, FEditAmpm); |
| ControlShowHide (FAmpmCombo,ATop, SingleHeight, FEditAmpm); |
| if FSpaceWidth >= 0 then ALeft := WidthA+FSpaceWidth else ALeft := 0; |
| if FSpaceWidth >= 0 then ALeft := WidthA+FSpaceWidth else ALeft := 0; |
| if FEditAmpm then begin |
| if FEditAmpm then begin |
| FAmpmCombo.Left := ALeft; |
| FAmpmCombo.Left := ALeft; |
| ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| end; |
| end; |
| FHourEdit.Left := ALeft; |
| FHourEdit.Left := ALeft; |
| FHourLabel.Left := FHourEdit.Left+FHourEdit.Width;; |
| FHourLabel.Left := FHourEdit.Left+FHourEdit.Width;; |
| WidthB := FHourLabel.Left+FHourLabel.Width; |
| WidthB := FHourLabel.Left+FHourLabel.Width; |
| |
| |
| if WidthA > WidthB then Width := WidthA else Width := WidthB; |
| if WidthA > WidthB then Width := WidthA else Width := WidthB; |
| if FSpaceWidth < 0 then Height := SingleHeight * 2 - FSpaceWidth; |
| if FSpaceWidth < 0 then Height := SingleHeight * 2 - FSpaceWidth; |
| end; |
| end; |
| |
| |
| //年月日 |
| //年月日 |
| desYearMonthDay: |
| desYearMonthDay: |
| begin |
| begin |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| |
| |
| ControlShowHide (FAmpmCombo, 0, SingleHeight, False); |
| ControlShowHide (FAmpmCombo, 0, SingleHeight, False); |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FDayEdit, 0, SingleHeight, True); |
| ControlShowHide (FDayEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FDayLabel, 0, SingleHeight, True); |
| ControlShowHide (FDayLabel, 0, SingleHeight, True); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, False); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, False); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, False); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, False); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| |
| |
| FYearEdit.Left := ALeft; |
| FYearEdit.Left := ALeft; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width;//2; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width;//2; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width;//2; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width;//2; |
| FDayEdit.Left := FMonthLabel.Left + FMonthLabel.Width - LeftPosMargin; |
| FDayEdit.Left := FMonthLabel.Left + FMonthLabel.Width - LeftPosMargin; |
| FDayLabel.Left := FDayEdit.Left + FDayEdit.Width;//2; |
| FDayLabel.Left := FDayEdit.Left + FDayEdit.Width;//2; |
| Width := FDayLabel.Left + FDayLabel.Width; |
| Width := FDayLabel.Left + FDayLabel.Width; |
| end; |
| end; |
| |
| |
| //年月 |
| //年月 |
| desYearMonth: |
| desYearMonth: |
| begin |
| begin |
| FDayEdit.Text := '1'; |
| FDayEdit.Text := '1'; |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| |
| |
| ControlShowHide (FAmpmCombo, 0, SingleHeight, False); |
| ControlShowHide (FAmpmCombo, 0, SingleHeight, False); |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, True); |
| ControlShowHide (FDayEdit, 0, SingleHeight, False); |
| ControlShowHide (FDayEdit, 0, SingleHeight, False); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FYearLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, True); |
| ControlShowHide (FDayLabel, 0, SingleHeight, False); |
| ControlShowHide (FDayLabel, 0, SingleHeight, False); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, False); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, False); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, False); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, False); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| |
| |
| FYearEdit.Left := ALeft; |
| FYearEdit.Left := ALeft; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width - 2; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width - 2; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthEdit.Left := FYearLabel.Left + FYearLabel.Width - LeftPosMargin; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width - 2; |
| FMonthLabel.Left := FMonthEdit.Left + FMonthEdit.Width - 2; |
| Width := FMonthLabel.Left + FMonthLabel.Width; |
| Width := FMonthLabel.Left + FMonthLabel.Width; |
| end; |
| end; |
| |
| |
| //年 |
| //年 |
| desYear: |
| desYear: |
| begin |
| begin |
| FMonthEdit.Text := '1'; |
| FMonthEdit.Text := '1'; |
| FDayEdit.Text := '1'; |
| FDayEdit.Text := '1'; |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| ControlShowHide (FGengoCombo, 0, SingleHeight, FEditGengo); |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| if FEditGengo then ALeft := FGengoCombo.Width - ComboLeftMargein; |
| |
| |
| ControlShowHide (FAmpmCombo, ATop, SingleHeight, False); |
| ControlShowHide (FAmpmCombo, ATop, SingleHeight, False); |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FYearEdit, 0, SingleHeight, True); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, False); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, False); |
| ControlShowHide (FDayEdit, ATop, SingleHeight, False); |
| ControlShowHide (FDayEdit, ATop, SingleHeight, False); |
| ControlShowHide (FYearLabel, ATop, SingleHeight, True); |
| ControlShowHide (FYearLabel, ATop, SingleHeight, True); |
| ControlShowHide (FMonthLabel, ATop, SingleHeight, False); |
| ControlShowHide (FMonthLabel, ATop, SingleHeight, False); |
| ControlShowHide (FDayLabel, ATop, SingleHeight, False); |
| ControlShowHide (FDayLabel, ATop, SingleHeight, False); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, False); |
| ControlShowHide (FHourEdit, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteEdit, ATop, SingleHeight, False); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FSecondEdit, ATop, SingleHeight, False); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, False); |
| ControlShowHide (FHourLabel, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, False); |
| ControlShowHide (FMinuteLabel, ATop, SingleHeight, False); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| ControlShowHide (FSecondLabel, ATop, SingleHeight, False); |
| |
| |
| FYearEdit.Left := ALeft; |
| FYearEdit.Left := ALeft; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width - 2; |
| FYearLabel.Left := FYearEdit.Left + FYearEdit.Width - 2; |
| Width := FYearLabel.Left + FYearLabel.Width; |
| Width := FYearLabel.Left + FYearLabel.Width; |
| end; |
| end; |
| |
| |
| //時分秒 |
| //時分秒 |
| desHourMinuteSecond: |
| desHourMinuteSecond: |
| begin |
| begin |
| ControlShowHide (FGengoCombo, 0, SingleHeight, False); |
| ControlShowHide (FGengoCombo, 0, SingleHeight, False); |
| ControlShowHide (FYearEdit, 0, SingleHeight, False); |
| ControlShowHide (FYearEdit, 0, SingleHeight, False); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, False); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, False); |
| ControlShowHide (FDayEdit, 0, SingleHeight, False); |
| ControlShowHide (FDayEdit, 0, SingleHeight, False); |
| ControlShowHide (FYearLabel, 0, SingleHeight, False); |
| ControlShowHide (FYearLabel, 0, SingleHeight, False); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, False); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, False); |
| ControlShowHide (FDayLabel, 0, SingleHeight, False); |
| ControlShowHide (FDayLabel, 0, SingleHeight, False); |
| ControlShowHide (FHourEdit, 0, SingleHeight, True); |
| ControlShowHide (FHourEdit, 0, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, 0, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, 0, SingleHeight, True); |
| ControlShowHide (FSecondEdit, 0, SingleHeight, True); |
| ControlShowHide (FSecondEdit, 0, SingleHeight, True); |
| ControlShowHide (FHourLabel, 0, SingleHeight, True); |
| ControlShowHide (FHourLabel, 0, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, 0, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, 0, SingleHeight, True); |
| ControlShowHide (FSecondLabel, 0, SingleHeight, True); |
| ControlShowHide (FSecondLabel, 0, SingleHeight, True); |
| |
| |
| ControlShowHide (FAmpmCombo, 0, SingleHeight,FEditAmpm); |
| ControlShowHide (FAmpmCombo, 0, SingleHeight,FEditAmpm); |
| if FEditAmpm then ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| if FEditAmpm then ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| |
| |
| FHourEdit.Left := ALeft; |
| FHourEdit.Left := ALeft; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| FMinuteEdit.Left := FHourLabel.Left + FHourLabel.Width - LeftPosMargin; |
| FMinuteEdit.Left := FHourLabel.Left + FHourLabel.Width - LeftPosMargin; |
| FMinuteLabel.Left := FMinuteEdit.Left + FMinuteEdit.Width; |
| FMinuteLabel.Left := FMinuteEdit.Left + FMinuteEdit.Width; |
| FSecondEdit.Left := FMinuteLabel.Left + FMinuteLabel.Width - LeftPosMargin; |
| FSecondEdit.Left := FMinuteLabel.Left + FMinuteLabel.Width - LeftPosMargin; |
| FSecondLabel.Left := FSecondEdit.Left + FSecondEdit.Width; |
| FSecondLabel.Left := FSecondEdit.Left + FSecondEdit.Width; |
| Width := FSecondLabel.Left + FSecondLabel.Width; |
| Width := FSecondLabel.Left + FSecondLabel.Width; |
| end; |
| end; |
| |
| |
| //時分 |
| //時分 |
| desHourMinute: |
| desHourMinute: |
| begin |
| begin |
| ControlShowHide (FGengoCombo, 0, SingleHeight, False); |
| ControlShowHide (FGengoCombo, 0, SingleHeight, False); |
| ControlShowHide (FYearEdit, 0, SingleHeight, False); |
| ControlShowHide (FYearEdit, 0, SingleHeight, False); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, False); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, False); |
| ControlShowHide (FDayEdit, 0, SingleHeight, False); |
| ControlShowHide (FDayEdit, 0, SingleHeight, False); |
| ControlShowHide (FYearLabel, 0, SingleHeight, False); |
| ControlShowHide (FYearLabel, 0, SingleHeight, False); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, False); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, False); |
| ControlShowHide (FDayLabel, 0, SingleHeight, False); |
| ControlShowHide (FDayLabel, 0, SingleHeight, False); |
| ControlShowHide (FHourEdit, 0, SingleHeight, True); |
| ControlShowHide (FHourEdit, 0, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, 0, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, 0, SingleHeight, True); |
| ControlShowHide (FSecondEdit, 0, SingleHeight, False); |
| ControlShowHide (FSecondEdit, 0, SingleHeight, False); |
| ControlShowHide (FHourLabel, 0, SingleHeight, True); |
| ControlShowHide (FHourLabel, 0, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, 0, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, 0, SingleHeight, True); |
| ControlShowHide (FSecondLabel, 0, SingleHeight, False); |
| ControlShowHide (FSecondLabel, 0, SingleHeight, False); |
| |
| |
| ControlShowHide (FAmpmCombo, 0, SingleHeight, FEditAmpm); |
| ControlShowHide (FAmpmCombo, 0, SingleHeight, FEditAmpm); |
| if FEditAmpm then ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| if FEditAmpm then ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| |
| |
| FHourEdit.Left := ALeft; |
| FHourEdit.Left := ALeft; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| FMinuteEdit.Left := FHourLabel.Left + FHourLabel.Width - LeftPosMargin; |
| FMinuteEdit.Left := FHourLabel.Left + FHourLabel.Width - LeftPosMargin; |
| FMinuteLabel.Left := FMinuteEdit.Left + FMinuteEdit.Width; |
| FMinuteLabel.Left := FMinuteEdit.Left + FMinuteEdit.Width; |
| Width := FMinuteLabel.Left + FMinuteLabel.Width; |
| Width := FMinuteLabel.Left + FMinuteLabel.Width; |
| end; |
| end; |
| |
| |
| //時 |
| //時 |
| desHour: |
| desHour: |
| begin |
| begin |
| ControlShowHide (FGengoCombo, 0, SingleHeight, False); |
| ControlShowHide (FGengoCombo, 0, SingleHeight, False); |
| ControlShowHide (FYearEdit, 0, SingleHeight, False); |
| ControlShowHide (FYearEdit, 0, SingleHeight, False); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, False); |
| ControlShowHide (FMonthEdit, 0, SingleHeight, False); |
| ControlShowHide (FDayEdit, 0, SingleHeight, False); |
| ControlShowHide (FDayEdit, 0, SingleHeight, False); |
| ControlShowHide (FYearLabel, 0, SingleHeight, False); |
| ControlShowHide (FYearLabel, 0, SingleHeight, False); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, False); |
| ControlShowHide (FMonthLabel, 0, SingleHeight, False); |
| ControlShowHide (FDayLabel, 0, SingleHeight, False); |
| ControlShowHide (FDayLabel, 0, SingleHeight, False); |
| ControlShowHide (FHourEdit, 0, SingleHeight, True); |
| ControlShowHide (FHourEdit, 0, SingleHeight, True); |
| ControlShowHide (FMinuteEdit, 0, SingleHeight, False); |
| ControlShowHide (FMinuteEdit, 0, SingleHeight, False); |
| ControlShowHide (FSecondEdit, 0, SingleHeight, False); |
| ControlShowHide (FSecondEdit, 0, SingleHeight, False); |
| ControlShowHide (FHourLabel, 0, SingleHeight, True); |
| ControlShowHide (FHourLabel, 0, SingleHeight, True); |
| ControlShowHide (FMinuteLabel, 0, SingleHeight, False); |
| ControlShowHide (FMinuteLabel, 0, SingleHeight, False); |
| ControlShowHide (FSecondLabel, 0, SingleHeight, False); |
| ControlShowHide (FSecondLabel, 0, SingleHeight, False); |
| |
| |
| ControlShowHide (FAmpmCombo, 0, SingleHeight, FEditAmpm); |
| ControlShowHide (FAmpmCombo, 0, SingleHeight, FEditAmpm); |
| if FEditAmpm then ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| if FEditAmpm then ALeft := FAmpmCombo.Left + FAmpmCombo.Width - ComboLeftMargein; |
| |
| |
| FHourEdit.Left := ALeft; |
| FHourEdit.Left := ALeft; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| FHourLabel.Left := FHourEdit.Left + FHourEdit.Width; |
| Width := FHourLabel.Left + FHourLabel.Width; |
| Width := FHourLabel.Left + FHourLabel.Width; |
| end; |
| end; |
| end; |
| end; |
| //サイズの調整が終了したら外部からのリサイズを禁止 |
| //サイズの調整が終了したら外部からのリサイズを禁止 |
| fgResize := False; |
| fgResize := False; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 各コントロールの表示非表示 |
| // 各コントロールの表示非表示 |
| // ComboBoxはHeightで設定しても無効.HeightはFont.Sizeで自動で決まる |
| // ComboBoxはHeightで設定しても無効.HeightはFont.Sizeで自動で決まる |
| // ComboBoxの高さはItemHeightで設定する |
| // ComboBoxの高さはItemHeightで設定する |
| // ItemHeightの設定は,StyleにOwnerがないとできない |
| // ItemHeightの設定は,StyleにOwnerがないとできない |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.ControlShowHide(Sender : TObject; ATop,AHeight: Integer; |
| procedure TplDateEdit.ControlShowHide(Sender : TObject; ATop,AHeight: Integer; |
| AFlag: Boolean); |
| AFlag: Boolean); |
| var |
| var |
| S : String; |
| S : String; |
| WidthMargin : Integer; |
| WidthMargin : Integer; |
| begin |
| begin |
| if AFlag then begin |
| if AFlag then begin |
| if CheckWin32Version(6, 0) then begin |
| if CheckWin32Version(6, 0) then begin |
| WidthMargin := 2; |
| WidthMargin := 2; |
| end else begin |
| end else begin |
| WidthMargin := 0; |
| WidthMargin := 0; |
| end; |
| end; |
| |
| |
| TControl(Sender).Top := ATop; |
| TControl(Sender).Top := ATop; |
| TControl(Sender).Visible := True; |
| TControl(Sender).Visible := True; |
| |
| |
| if Sender is TComboBox then begin |
| if Sender is TComboBox then begin |
| TComboBox(Sender).ItemHeight := AHeight - DefHeightItemHeightCombo; |
| TComboBox(Sender).ItemHeight := AHeight - DefHeightItemHeightCombo; |
| TComboBox(Sender).Font.Size := Canvas.Font.Size; |
| TComboBox(Sender).Font.Size := Canvas.Font.Size; |
| TComboBox(Sender).Font.Color := Canvas.Font.Color; |
| TComboBox(Sender).Font.Color := Canvas.Font.Color; |
| |
| |
| {$IF CompilerVersion > 14.99} |
| {$IF CompilerVersion > 14.99} |
| if ThemeServices.ThemesEnabled then begin |
| if ThemeServices.ThemesEnabled then begin |
| TComboBox(Sender).Width := Canvas.TextWidth('0000') + 24; |
| TComboBox(Sender).Width := Canvas.TextWidth('0000') + 24; |
| end else begin |
| end else begin |
| TComboBox(Sender).Width := Canvas.TextWidth('0000') + 27; |
| TComboBox(Sender).Width := Canvas.TextWidth('0000') + 27; |
| end; |
| end; |
| {$ELSE} |
| {$ELSE} |
| TComboBox(Sender).Width := Canvas.TextWidth('0000') + 27; |
| TComboBox(Sender).Width := Canvas.TextWidth('0000') + 27; |
| {$IFEND} |
| {$IFEND} |
| end; |
| end; |
| |
| |
| if Sender is TplDateEditEdit then begin |
| if Sender is TplDateEditEdit then begin |
| TplDateEditEdit(Sender).Height := AHeight; |
| TplDateEditEdit(Sender).Height := AHeight; |
| TplDateEditEdit(Sender).Font := Canvas.Font; |
| TplDateEditEdit(Sender).Font := Canvas.Font; |
| TplDateEditEdit(Sender).Font.Size := Canvas.Font.Size; |
| TplDateEditEdit(Sender).Font.Size := Canvas.Font.Size; |
| |
| |
| if (Sender = FYearEdit) and (FYeardigit = yddigit4) then begin |
| if (Sender = FYearEdit) and (FYeardigit = yddigit4) then begin |
| TplDateEditEdit(Sender).MaxLength := 4; |
| TplDateEditEdit(Sender).MaxLength := 4; |
| TplDateEditEdit(Sender).Width := Canvas.TextWidth('0000') + 12; |
| TplDateEditEdit(Sender).Width := Canvas.TextWidth('0000') + 12; |
| end else begin |
| end else begin |
| TplDateEditEdit(Sender).MaxLength := 2; |
| TplDateEditEdit(Sender).MaxLength := 2; |
| TplDateEditEdit(Sender).Width := Canvas.TextWidth('00') + 12; |
| TplDateEditEdit(Sender).Width := Canvas.TextWidth('00') + 12; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| if Sender is TplDateEditLabel then begin |
| if Sender is TplDateEditLabel then begin |
| S := TplDateEditLabel(Sender).Text; |
| S := TplDateEditLabel(Sender).Text; |
| |
| |
| TplDateEditLabel(Sender).Height := AHeight; |
| TplDateEditLabel(Sender).Height := AHeight; |
| TplDateEditLabel(Sender).Width := Canvas.TextWidth(S) + 10 - WidthMargin; |
| TplDateEditLabel(Sender).Width := Canvas.TextWidth(S) + 10 - WidthMargin; |
| TplDateEditLabel(Sender).Font.Size := Canvas.Font.Size; |
| TplDateEditLabel(Sender).Font.Size := Canvas.Font.Size; |
| TplDateEditLabel(Sender).Font.Style := []; |
| TplDateEditLabel(Sender).Font.Style := []; |
| TplDateEditLabel(Sender).Font.Color := clBlack; |
| TplDateEditLabel(Sender).Font.Color := clBlack; |
| end; |
| end; |
| end else begin |
| end else begin |
| TControl(Sender).Width := 0; |
| TControl(Sender).Width := 0; |
| TControl(Sender).Visible := False; |
| TControl(Sender).Visible := False; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| { TplDateEditLabel } |
| { TplDateEditLabel } |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 年月日時分秒のラベルの描画 |
| // 年月日時分秒のラベルの描画 |
| // Ver1.1で追加 |
| // Ver1.1で追加 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEditLabel.Paint; |
| procedure TplDateEditLabel.Paint; |
| var |
| var |
| ARect : TRect; |
| ARect : TRect; |
| AEge : UINT; |
| AEge : UINT; |
| AGrfFlag : UINT; |
| AGrfFlag : UINT; |
| uFormat : UINT; |
| uFormat : UINT; |
| begin |
| begin |
| inherited; |
| inherited; |
| if FplDate = nil then exit; |
| if FplDate = nil then exit; |
| |
| |
| //ラベルの枠のエッジ種類を定義.XPテーマの場合はフラットな枠線 |
| //ラベルの枠のエッジ種類を定義.XPテーマの場合はフラットな枠線 |
| //OSがWindows XPでかつマニフェストが指定されている場合 |
| //OSがWindows XPでかつマニフェストが指定されている場合 |
| {$IF CompilerVersion > 14.99} |
| {$IF CompilerVersion > 14.99} |
| if ThemeServices.ThemesEnabled then begin |
| if ThemeServices.ThemesEnabled then begin |
| AEge := BDR_RAISEDOUTER; |
| AEge := BDR_RAISEDOUTER; |
| AGrfFlag := BF_FLAT or BF_RECT; |
| AGrfFlag := BF_FLAT or BF_RECT; |
| end else begin |
| end else begin |
| AEge := EDGE_SUNKEN; |
| AEge := EDGE_SUNKEN; |
| AGrfFlag := BF_RECT; |
| AGrfFlag := BF_RECT; |
| end; |
| end; |
| {$ELSE} |
| {$ELSE} |
| AEge := EDGE_SUNKEN; |
| AEge := EDGE_SUNKEN; |
| AGrfFlag := BF_RECT; |
| AGrfFlag := BF_RECT; |
| {$IFEND} |
| {$IFEND} |
| |
| |
| //フォントサイズ |
| //フォントサイズ |
| Canvas.Font.Assign(Font); |
| Canvas.Font.Assign(Font); |
| |
| |
| //文字列描画のアライメント.1行のみ.上下左右中央 |
| //文字列描画のアライメント.1行のみ.上下左右中央 |
| uFormat := DT_SINGLELINE or DT_CENTER or DT_VCENTER; |
| uFormat := DT_SINGLELINE or DT_CENTER or DT_VCENTER; |
| //ラベル枠と文字を描画 |
| //ラベル枠と文字を描画 |
| ARect := ClientRect; |
| ARect := ClientRect; |
| DrawEdge(Canvas.Handle, ARect, AEge, AGrfFlag); |
| DrawEdge(Canvas.Handle, ARect, AEge, AGrfFlag); |
| SetBkMode(Canvas.Handle, TRANSPARENT); |
| SetBkMode(Canvas.Handle, TRANSPARENT); |
| DrawText(Canvas.Handle, PChar(Text), -1, ARect, uFormat); |
| DrawText(Canvas.Handle, PChar(Text), -1, ARect, uFormat); |
| end; |
| end; |
| |
| |
| { TplDateEdit } |
| { TplDateEdit } |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 入力欄を全て空にする |
| // 入力欄を全て空にする |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetEditEmpty; |
| procedure TplDateEdit.SetEditEmpty; |
| begin |
| begin |
| FYear := 0; |
| FYear := 0; |
| FMonth := 0; |
| FMonth := 0; |
| FDay := 0; |
| FDay := 0; |
| FHour := 0; |
| FHour := 0; |
| FMinute := 0; |
| FMinute := 0; |
| FSecond := 0; |
| FSecond := 0; |
| FYearStr := ''; |
| FYearStr := ''; |
| FMonthStr := ''; |
| FMonthStr := ''; |
| FDayStr := ''; |
| FDayStr := ''; |
| FHourStr := ''; |
| FHourStr := ''; |
| FMinuteStr := ''; |
| FMinuteStr := ''; |
| FSecondStr := ''; |
| FSecondStr := ''; |
| FGengoYear := 0; |
| FGengoYear := 0; |
| FGengoYearStr := ''; |
| FGengoYearStr := ''; |
| FGengoStr := ''; |
| FGengoStr := ''; |
| FAmpmStr := ''; |
| FAmpmStr := ''; |
| |
| |
| FGengoCombo.ItemIndex := -1; //FGengoCombo.Text:=''; |
| FGengoCombo.ItemIndex := -1; //FGengoCombo.Text:=''; |
| FAmpmCombo.ItemIndex := -1; //FGengoCombo.Text:=''; |
| FAmpmCombo.ItemIndex := -1; //FGengoCombo.Text:=''; |
| FDateTime := FBaseDate - 1; |
| FDateTime := FBaseDate - 1; |
| FDate := FDateTime; |
| FDate := FDateTime; |
| FYearEdit.Text := ''; |
| FYearEdit.Text := ''; |
| FMonthEdit.Text := ''; |
| FMonthEdit.Text := ''; |
| FDayEdit.Text := ''; |
| FDayEdit.Text := ''; |
| FHourEdit.Text := ''; |
| FHourEdit.Text := ''; |
| FMinuteEdit.Text := ''; |
| FMinuteEdit.Text := ''; |
| FSecondEdit.Text := ''; |
| FSecondEdit.Text := ''; |
| FIsEmpty := True; |
| FIsEmpty := True; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // DateTime型の値をコンポの各コントロールに表示 |
| // DateTime型の値をコンポの各コントロールに表示 |
| // 日付や時刻を外部から与えた時の処理 |
| // 日付や時刻を外部から与えた時の処理 |
| // FDateプロパティは前のバージョンとの互換性のため |
| // FDateプロパティは前のバージョンとの互換性のため |
| // |
| // |
| // 日付と時刻入力部が表示の時はTDateTimeに日付と時刻共記録 |
| // 日付と時刻入力部が表示の時はTDateTimeに日付と時刻共記録 |
| // 日付の入力部だけが表示の時はTDateTimeに日付のみ記録 |
| // 日付の入力部だけが表示の時はTDateTimeに日付のみ記録 |
| // 自覚の入力部だけが表示の時はTDateTimeに時刻のみ記録 |
| // 自覚の入力部だけが表示の時はTDateTimeに時刻のみ記録 |
| // 日付はTDateTimeの整数部 |
| // 日付はTDateTimeの整数部 |
| // 時刻はTDateTimeの小数点部 |
| // 時刻はTDateTimeの小数点部 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetDate(const Value: TDateTime); |
| procedure TplDateEdit.SetDate(const Value: TDateTime); |
| const |
| const |
| ErrorS1 = '正しくない日付時刻型の値がセットされました. '; |
| ErrorS1 = '正しくない日付時刻型の値がセットされました. '; |
| begin |
| begin |
| if csReading in ComponentState then exit; |
| if csReading in ComponentState then exit; |
| FErrorKinds := []; |
| FErrorKinds := []; |
| |
| |
| if FDateTime <> Value then begin |
| if FDateTime <> Value then begin |
| try |
| try |
| if (FYearEdit.Visible) and (FHourEdit.Visible) then begin |
| if (FYearEdit.Visible) and (FHourEdit.Visible) then begin |
| FDateTime := Value; |
| FDateTime := Value; |
| end else |
| end else |
| if (FYearEdit.Visible) then begin |
| if (FYearEdit.Visible) then begin |
| FDateTime := Trunc(Value); |
| FDateTime := Trunc(Value); |
| end else begin |
| end else begin |
| FDateTime := Frac(Value); |
| FDateTime := Frac(Value); |
| end; |
| end; |
| FDate := FDateTime; |
| FDate := FDateTime; |
| //エラーがなければ各プロパティ値をコントロールに表示 |
| //エラーがなければ各プロパティ値をコントロールに表示 |
| GetProperties; |
| GetProperties; |
| except |
| except |
| FErrorKinds := [derSetDateTimeError]; |
| FErrorKinds := [derSetDateTimeError]; |
| ShowErrorDialog(ErrorS1, nil); |
| ShowErrorDialog(ErrorS1, nil); |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 和暦か西暦表示か |
| // 和暦か西暦表示か |
| // 元号選択リストが非表示の時は和暦表示はさせない |
| // 元号選択リストが非表示の時は和暦表示はさせない |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetGengo(const Value: Boolean); |
| procedure TplDateEdit.SetGengo(const Value: Boolean); |
| begin |
| begin |
| if FGengo <> Value then begin |
| if FGengo <> Value then begin |
| if FEditGengo then begin |
| if FEditGengo then begin |
| FGengo := Value; |
| FGengo := Value; |
| end else begin |
| end else begin |
| FGengo := False; |
| FGengo := False; |
| end; |
| end; |
| if (csReading in ComponentState) then exit; |
| if (csReading in ComponentState) then exit; |
| if (csDesigning in ComponentState) then exit; |
| if (csDesigning in ComponentState) then exit; |
| CheckDateError; |
| CheckDateError; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // DateTime,Date,Timeプロパティの取得メソッド |
| // DateTime,Date,Timeプロパティの取得メソッド |
| //============================================================================= |
| //============================================================================= |
| function TplDateEdit.GetDate: TDateTime; |
| function TplDateEdit.GetDate: TDateTime; |
| begin |
| begin |
| Result := 0; |
| Result := 0; |
| if (csDesigning in ComponentState) then exit; |
| if (csDesigning in ComponentState) then exit; |
| if (csReading in ComponentState) then exit; |
| if (csReading in ComponentState) then exit; |
| if CheckDateError = False then begin |
| if CheckDateError = False then begin |
| Result := FDateTime; |
| Result := FDateTime; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 各コントロールの入力値(文字列)からDateTime型の日付を計算 |
| // 各コントロールの入力値(文字列)からDateTime型の日付を計算 |
| // エラーの時はTrue |
| // エラーの時はTrue |
| // 備考: FBaseDate := StrToDateTime('1873/01/01'); |
| // 備考: FBaseDate := StrToDateTime('1873/01/01'); |
| //============================================================================= |
| //============================================================================= |
| function TplDateEdit.CheckDateError: Boolean; |
| function TplDateEdit.CheckDateError: Boolean; |
| const |
| const |
| ErrorS2 = '1873年1月1日(明治6年1月1日)より前の日付は処理できません. '; |
| ErrorS2 = '1873年1月1日(明治6年1月1日)より前の日付は処理できません. '; |
| ErrorS3 = '日付が正しくありません. '; |
| ErrorS3 = '日付が正しくありません. '; |
| ErrorS4 = '時刻が正しくありません. '; |
| ErrorS4 = '時刻が正しくありません. '; |
| ErrorS5 = '入力欄が全て空白です. '; |
| ErrorS5 = '入力欄が全て空白です. '; |
| ErrorS6 = '空白の入力欄があります. '; |
| ErrorS6 = '空白の入力欄があります. '; |
| ErrorS7 = '2088年(平成100年)以降は元号に変換できません. '; |
| ErrorS7 = '2088年(平成100年)以降は元号に変換できません. '; |
| ErrorS8 = '日付または時刻が正しくありません. '; |
| ErrorS8 = '日付または時刻が正しくありません. '; |
| ErrorS9 = '時刻の入力可能な値は11時59分59秒までです. '; |
| ErrorS9 = '時刻の入力可能な値は11時59分59秒までです. '; |
| ErrorS10= '時刻の入力可能な値は23時59分59秒までです. '; |
| ErrorS10= '時刻の入力可能な値は23時59分59秒までです. '; |
| ErrorS11= '日付に変換できない値です. '; |
| ErrorS11= '日付に変換できない値です. '; |
| var |
| var |
| StrGengo : String; |
| StrGengo : String; |
| StrAmpm : String; |
| StrAmpm : String; |
| dYear : WORD; |
| dYear : WORD; |
| dMonth : WORD; |
| dMonth : WORD; |
| dDay : WORD; |
| dDay : WORD; |
| dHour : WORD; |
| dHour : WORD; |
| dMinute : WORD; |
| dMinute : WORD; |
| dSecond : WORD; |
| dSecond : WORD; |
| FlagGengo : Boolean; |
| FlagGengo : Boolean; |
| FlagAmpm : Boolean; |
| FlagAmpm : Boolean; |
| FlagYear : Boolean; |
| FlagYear : Boolean; |
| FlagMonth : Boolean; |
| FlagMonth : Boolean; |
| FlagDay : Boolean; |
| FlagDay : Boolean; |
| FlagHour : Boolean; |
| FlagHour : Boolean; |
| FlagMinute : Boolean; |
| FlagMinute : Boolean; |
| FlagSecond : Boolean; |
| FlagSecond : Boolean; |
| AWinControl : TWinControl; |
| AWinControl : TWinControl; |
| |
| |
| dMiri : WORD; |
| dMiri : WORD; |
| StrYear : String; |
| StrYear : String; |
| StrMonth : String; |
| StrMonth : String; |
| StrDay : String; |
| StrDay : String; |
| StrHour : String; |
| StrHour : String; |
| StrMinute : String; |
| StrMinute : String; |
| StrSecond : String; |
| StrSecond : String; |
| i : Integer; |
| i : Integer; |
| AIndex : Integer; |
| AIndex : Integer; |
| ADate : TDateTime; |
| ADate : TDateTime; |
| ATime : TDateTime; |
| ATime : TDateTime; |
| begin |
| begin |
| Result := True; |
| Result := True; |
| FErrorKinds := []; |
| FErrorKinds := []; |
| |
| |
| if EditGengo = False then FGengoCombo.ItemIndex := -1; |
| if EditGengo = False then FGengoCombo.ItemIndex := -1; |
| |
| |
| StrGengo := Trim(FGengoCombo.Text); |
| StrGengo := Trim(FGengoCombo.Text); |
| StrAmpm := Trim(FAmpmCombo.Text); |
| StrAmpm := Trim(FAmpmCombo.Text); |
| StrYear := Trim(FYearEdit.Text); |
| StrYear := Trim(FYearEdit.Text); |
| StrMonth := Trim(FMonthEdit.Text); |
| StrMonth := Trim(FMonthEdit.Text); |
| StrDay := Trim(FDayEdit.Text); |
| StrDay := Trim(FDayEdit.Text); |
| StrHour := Trim(FHourEdit.Text); |
| StrHour := Trim(FHourEdit.Text); |
| StrMinute := Trim(FMinuteEdit.Text); |
| StrMinute := Trim(FMinuteEdit.Text); |
| StrSecond := Trim(FSecondEdit.Text); |
| StrSecond := Trim(FSecondEdit.Text); |
| |
| |
| FlagGengo := (StrGengo = '' ) and FGengoCombo.Visible; |
| FlagGengo := (StrGengo = '' ) and FGengoCombo.Visible; |
| FlagAmpm := (StrAmpm = '' ) and FAmpmCombo.Visible; |
| FlagAmpm := (StrAmpm = '' ) and FAmpmCombo.Visible; |
| FlagYear := (StrYear = '' ) and FYearEdit.Visible; |
| FlagYear := (StrYear = '' ) and FYearEdit.Visible; |
| FlagMonth := (StrMonth = '' ) and FMonthEdit.Visible; |
| FlagMonth := (StrMonth = '' ) and FMonthEdit.Visible; |
| FlagDay := (StrDay = '' ) and FDayEdit.Visible; |
| FlagDay := (StrDay = '' ) and FDayEdit.Visible; |
| FlagHour := (StrHour = '' ) and FHourEdit.Visible; |
| FlagHour := (StrHour = '' ) and FHourEdit.Visible; |
| FlagMinute := (StrMinute = '') and FMinuteEdit.Visible; |
| FlagMinute := (StrMinute = '') and FMinuteEdit.Visible; |
| FlagSecond := (StrSecond = '') and FSecondEdit.Visible; |
| FlagSecond := (StrSecond = '') and FSecondEdit.Visible; |
| |
| |
| //入力欄が全て空白の場合 |
| //入力欄が全て空白の場合 |
| if GetIsEmpty then begin |
| if GetIsEmpty then begin |
| FIsEmpty := True; |
| FIsEmpty := True; |
| //空白入力を許可していない場合 |
| //空白入力を許可していない場合 |
| if FCanEmpty = False then begin |
| if FCanEmpty = False then begin |
| FErrorKinds := [derAllEmpty]; |
| FErrorKinds := [derAllEmpty]; |
| ShowErrorDialog(ErrorS5, nil); |
| ShowErrorDialog(ErrorS5, nil); |
| end else begin |
| end else begin |
| //日付関係の取得プロパティを初期値にしてエラーなし扱いで終了 |
| //日付関係の取得プロパティを初期値にしてエラーなし扱いで終了 |
| SetEditEmpty; |
| SetEditEmpty; |
| Result := False; |
| Result := False; |
| exit; |
| exit; |
| end; |
| end; |
| //どれかの入力コントロールの値が空の場合 |
| //どれかの入力コントロールの値が空の場合 |
| //元号の空文字列は西暦とみなしてGetPropertiesで再取得するので空でもよい |
| //元号の空文字列は西暦とみなしてGetPropertiesで再取得するので空でもよい |
| //午前午後の文字列の空白は許可しない |
| //午前午後の文字列の空白は許可しない |
| end else if FlagAmpm or |
| end else if FlagAmpm or |
| FlagYear or |
| FlagYear or |
| FlagMonth or |
| FlagMonth or |
| FlagDay or |
| FlagDay or |
| FlagHour or |
| FlagHour or |
| FlagMinute or |
| FlagMinute or |
| FlagSecond then begin |
| FlagSecond then begin |
| FIsEmpty := False; |
| FIsEmpty := False; |
| //空白入力を許可していても1つでも入力がある場合はエラー |
| //空白入力を許可していても1つでも入力がある場合はエラー |
| //空白許可とは全入力欄が空白の場合を意味する |
| //空白許可とは全入力欄が空白の場合を意味する |
| //最右端のコントロールからチェック |
| //最右端のコントロールからチェック |
| if FlagSecond then begin |
| if FlagSecond then begin |
| AWinControl := FSecondEdit; |
| AWinControl := FSecondEdit; |
| Include(FErrorKinds, derSecondEmpty); |
| Include(FErrorKinds, derSecondEmpty); |
| end; |
| end; |
| if FlagMinute then begin |
| if FlagMinute then begin |
| AWinControl := FMinuteEdit; |
| AWinControl := FMinuteEdit; |
| Include(FErrorKinds, derMinuteEmpty); |
| Include(FErrorKinds, derMinuteEmpty); |
| end; |
| end; |
| if FlagHour then begin |
| if FlagHour then begin |
| AWinControl := FHourEdit; |
| AWinControl := FHourEdit; |
| Include(FErrorKinds, derHourEmpty); |
| Include(FErrorKinds, derHourEmpty); |
| end; |
| end; |
| if FlagAmpm then begin |
| if FlagAmpm then begin |
| AWinControl := FAmpmCombo; |
| AWinControl := FAmpmCombo; |
| Include(FErrorKinds, derAmpmEmpty); |
| Include(FErrorKinds, derAmpmEmpty); |
| end; |
| end; |
| if FlagDay then begin |
| if FlagDay then begin |
| AWinControl := FDayEdit; |
| AWinControl := FDayEdit; |
| Include(FErrorKinds, derDayEmpty); |
| Include(FErrorKinds, derDayEmpty); |
| end; |
| end; |
| if FlagMonth then begin |
| if FlagMonth then begin |
| AWinControl := FMonthEdit; |
| AWinControl := FMonthEdit; |
| Include(FErrorKinds, derMonthEmpty); |
| Include(FErrorKinds, derMonthEmpty); |
| end; |
| end; |
| if FlagYear then begin |
| if FlagYear then begin |
| AWinControl := FYearEdit; |
| AWinControl := FYearEdit; |
| Include(FErrorKinds, derYearEmpty); |
| Include(FErrorKinds, derYearEmpty); |
| end; |
| end; |
| if FlagGengo then begin |
| if FlagGengo then begin |
| AWinControl := FGengoCombo; |
| AWinControl := FGengoCombo; |
| Include(FErrorKinds, derYearEmpty); |
| Include(FErrorKinds, derYearEmpty); |
| end; |
| end; |
| ShowErrorDialog(ErrorS6, AWinControl); |
| ShowErrorDialog(ErrorS6, AWinControl); |
| //全ての欄または元号選択リスト以外が入力されている場合 |
| //全ての欄または元号選択リスト以外が入力されている場合 |
| end else begin |
| end else begin |
| FIsEmpty := False; |
| FIsEmpty := False; |
| //外部から元号文字列を指定した場合を考慮して文字列に該当するItemIndexを調査 |
| //外部から元号文字列を指定した場合を考慮して文字列に該当するItemIndexを調査 |
| //外部からの指定はItemIndexで指定するが,もしEraNames,EraYearOffsetsの配列を変更 |
| //外部からの指定はItemIndexで指定するが,もしEraNames,EraYearOffsetsの配列を変更 |
| //した場合でも文字列なら以下のコードで対応できる |
| //した場合でも文字列なら以下のコードで対応できる |
| //(EraNames,EraYearOffsetsはSysUtils内で定義されている) |
| //(EraNames,EraYearOffsetsはSysUtils内で定義されている) |
| //時刻の方はは必ずコンボボックスのリストから選択しなければならない |
| //時刻の方はは必ずコンボボックスのリストから選択しなければならない |
| AIndex := 0; |
| AIndex := 0; |
| if FEditGengo then begin |
| if FEditGengo then begin |
| for i := 0 to FGengoCombo. Items.Count - 1 do begin |
| for i := 0 to FGengoCombo. Items.Count - 1 do begin |
| if FGengoCombo.Items[i] = StrGengo then begin |
| if FGengoCombo.Items[i] = StrGengo then begin |
| AIndex := i; |
| AIndex := i; |
| break; |
| break; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| //元号選択リストが空白の時は西暦年とみなす |
| //元号選択リストが空白の時は西暦年とみなす |
| if AIndex = 0 then begin |
| if AIndex = 0 then begin |
| dYear := StrToIntDef(StrYear, 0); |
| dYear := StrToIntDef(StrYear, 0); |
| //西暦入力の時に年の入力桁が2桁(FYeardigit=2)の時は西暦の下2桁とみなす |
| //西暦入力の時に年の入力桁が2桁(FYeardigit=2)の時は西暦の下2桁とみなす |
| if FYeardigit = yddigit2 then begin |
| if FYeardigit = yddigit2 then begin |
| dYear := dYear + (StrToInt(FormatDateTime('yyyy', Now)) div 100) * 100; |
| dYear := dYear + (StrToInt(FormatDateTime('yyyy', Now)) div 100) * 100; |
| end; |
| end; |
| end else begin |
| end else begin |
| dYear := EraYearOffsets[AIndex] - 1 + StrToIntDef(StrYear, 0); |
| dYear := EraYearOffsets[AIndex] - 1 + StrToIntDef(StrYear, 0); |
| end; |
| end; |
| //年以外の各コントロールの文字列を数値に変換 |
| //年以外の各コントロールの文字列を数値に変換 |
| dMonth := StrToIntDef(StrMonth, 1); |
| dMonth := StrToIntDef(StrMonth, 1); |
| dDay := StrToIntDef(StrDay, 1); |
| dDay := StrToIntDef(StrDay, 1); |
| dHour := StrToIntDef(StrHour, 0); |
| dHour := StrToIntDef(StrHour, 0); |
| dMinute := StrToIntDef(StrMinute, 0); |
| dMinute := StrToIntDef(StrMinute, 0); |
| dSecond := StrToIntDef(StrSecond, 0); |
| dSecond := StrToIntDef(StrSecond, 0); |
| end; |
| end; |
| |
| |
| //まず時刻のチェック |
| //まず時刻のチェック |
| if (FHourEdit.Visible) then begin |
| if (FHourEdit.Visible) then begin |
| if FAmpmCombo.Visible then AIndex := FAmpmCombo.ItemIndex |
| if FAmpmCombo.Visible then AIndex := FAmpmCombo.ItemIndex |
| else AIndex := -1; |
| else AIndex := -1; |
| //返値のATimeは0以上1未満の値.時 プロパティ取得(FHour)は午後は午後の |
| //返値のATimeは0以上1未満の値.時 プロパティ取得(FHour)は午後は午後の |
| //時刻で返すのであるが,EncodeTimeでエラーを検出するために一度24時間値 |
| //時刻で返すのであるが,EncodeTimeでエラーを検出するために一度24時間値 |
| //に変換 |
| //に変換 |
| if (AIndex = 0) or (AIndex = 1) then begin |
| if (AIndex = 0) or (AIndex = 1) then begin |
| if (dHour > 12) or ((dHour = 12) and ((dMinute >= 0.0) or (dSecond>= 0.0))) then begin |
| if (dHour > 12) or ((dHour = 12) and ((dMinute >= 0.0) or (dSecond>= 0.0))) then begin |
| FErrorKinds := [derTimeError]; |
| FErrorKinds := [derTimeError]; |
| ShowErrorDialog(ErrorS9, FHourEdit); |
| ShowErrorDialog(ErrorS9, FHourEdit); |
| end; |
| end; |
| end else begin |
| end else begin |
| if (dHour > 24) or ((dHour = 24) and ((dMinute >= 0.0) or (dSecond >= 0.0))) then begin |
| if (dHour > 24) or ((dHour = 24) and ((dMinute >= 0.0) or (dSecond >= 0.0))) then begin |
| FErrorKinds := [derTimeError]; |
| FErrorKinds := [derTimeError]; |
| ShowErrorDialog(ErrorS10, FHourEdit); |
| ShowErrorDialog(ErrorS10, FHourEdit); |
| end; |
| end; |
| end; |
| end; |
| if (dMinute > 59) or (dSecond > 59) then begin |
| if (dMinute > 59) or (dSecond > 59) then begin |
| FErrorKinds := [derTimeError]; |
| FErrorKinds := [derTimeError]; |
| ShowErrorDialog(ErrorS9, FMinuteEdit); |
| ShowErrorDialog(ErrorS9, FMinuteEdit); |
| end else begin |
| end else begin |
| if AIndex = 1 then dHour := dHour + 12; |
| if AIndex = 1 then dHour := dHour + 12; |
| try |
| try |
| dMiri := 0; |
| dMiri := 0; |
| ATime := EncodeTime(dHour, dMinute, dSecond, dMiri); |
| ATime := EncodeTime(dHour, dMinute, dSecond, dMiri); |
| Result := False; |
| Result := False; |
| except |
| except |
| FErrorKinds := [derTimeError]; |
| FErrorKinds := [derTimeError]; |
| if FEditAmpm then ShowErrorDialog(ErrorS4, FAmpmCombo) |
| if FEditAmpm then ShowErrorDialog(ErrorS4, FAmpmCombo) |
| else ShowErrorDialog(ErrorS4, FHourEdit); |
| else ShowErrorDialog(ErrorS4, FHourEdit); |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //日付に変換してエラー発生なしならそれが日付 |
| //日付に変換してエラー発生なしならそれが日付 |
| //ただし1873.1.1(明治6年1月1日)より前はエラー扱い |
| //ただし1873.1.1(明治6年1月1日)より前はエラー扱い |
| //2088年(平成99年)以上で和暦表示の時もエラー扱い |
| //2088年(平成99年)以上で和暦表示の時もエラー扱い |
| //エラーでなければGetPropertiesで各プロパティを再取得 |
| //エラーでなければGetPropertiesで各プロパティを再取得 |
| if (FYearEdit.Visible) then begin |
| if (FYearEdit.Visible) then begin |
| try |
| try |
| ADate := EncodeDate(dYear,dMonth,dDay); |
| ADate := EncodeDate(dYear,dMonth,dDay); |
| if (dYear<1873) then begin |
| if (dYear<1873) then begin |
| FErrorKinds := [derBeforeBaseDate]; |
| FErrorKinds := [derBeforeBaseDate]; |
| ShowErrorDialog(ErrorS2,FYearEdit); |
| ShowErrorDialog(ErrorS2,FYearEdit); |
| end else if (dYear>=2088) and (FGengo) then begin |
| end else if (dYear>=2088) and (FGengo) then begin |
| FErrorKinds := [derChangeGengo]; |
| FErrorKinds := [derChangeGengo]; |
| ShowErrorDialog(ErrorS7,FYearEdit); |
| ShowErrorDialog(ErrorS7,FYearEdit); |
| end else begin |
| end else begin |
| Result := False; |
| Result := False; |
| end; |
| end; |
| except |
| except |
| FErrorKinds := [derDateError]; |
| FErrorKinds := [derDateError]; |
| ShowErrorDialog(ErrorS11,FYearEdit); |
| ShowErrorDialog(ErrorS11,FYearEdit); |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //エラーでなければGetPropertiesで各プロパティを再取得 |
| //エラーでなければGetPropertiesで各プロパティを再取得 |
| if not Result then begin |
| if not Result then begin |
| try |
| try |
| FDateTime := Trunc(ADate)+Frac(ATime); |
| FDateTime := Trunc(ADate)+Frac(ATime); |
| FDate := FDateTime; |
| FDate := FDateTime; |
| GetProperties; |
| GetProperties; |
| except |
| except |
| FErrorKinds := [derDateTimeError]; |
| FErrorKinds := [derDateTimeError]; |
| ShowErrorDialog(ErrorS8,nil); |
| ShowErrorDialog(ErrorS8,nil); |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // エラーダイアログの表示 |
| // エラーダイアログの表示 |
| // |
| // |
| // プロパティ取得の際,エラーが発生した時にこのメソッドを呼出す |
| // プロパティ取得の際,エラーが発生した時にこのメソッドを呼出す |
| // エラーが発生するとサイレント例外が発生するので,以下の様に処理することがで |
| // エラーが発生するとサイレント例外が発生するので,以下の様に処理することがで |
| // きる.この時ErrorDialogがTrueなら,内蔵の警告ダイアログを表示する. |
| // きる.この時ErrorDialogがTrueなら,内蔵の警告ダイアログを表示する. |
| // |
| // |
| // try |
| // try |
| // //取得プロパティなら何でもチェック可能 |
| // //取得プロパティなら何でもチェック可能 |
| // plDateEdit1.DateTime; |
| // plDateEdit1.DateTime; |
| // except |
| // except |
| // //ダイアログ表示などのエラー発生時の処理 |
| // //ダイアログ表示などのエラー発生時の処理 |
| // //ErrorKindsでエラーの内容を知ることが可能 |
| // //ErrorKindsでエラーの内容を知ることが可能 |
| // end; |
| // end; |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.ShowErrorDialog(ERStr: String; AWinControl: TWinControl); |
| procedure TplDateEdit.ShowErrorDialog(ERStr: String; AWinControl: TWinControl); |
| begin |
| begin |
| if FDisplayError then begin |
| if FDisplayError then begin |
| Application.MessageBox(PChar(ERStr), PChar(FDialogCaption), MB_OK + MB_ICONINFORMATION); |
| Application.MessageBox(PChar(ERStr), PChar(FDialogCaption), MB_OK + MB_ICONINFORMATION); |
| end; |
| end; |
| SetControlFocus(AWinControl); |
| SetControlFocus(AWinControl); |
| Abort; |
| Abort; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // FDate(日付部分のみ)の値から各プロパティを取得して各コントロールへの年月日 |
| // FDate(日付部分のみ)の値から各プロパティを取得して各コントロールへの年月日 |
| // を再表示する. |
| // を再表示する. |
| // DecodeだとFDate=0のとき年月日が0となってしまうので使用しない |
| // DecodeだとFDate=0のとき年月日が0となってしまうので使用しない |
| // 和暦の場合を考慮して再計算(昭和70年XX月XX日と入力した場合平成の該当年に直 |
| // 和暦の場合を考慮して再計算(昭和70年XX月XX日と入力した場合平成の該当年に直 |
| // す). |
| // す). |
| // |
| // |
| // この関数は,DateTimeプロパティに値をセットした時も,各入力コントロールに値 |
| // この関数は,DateTimeプロパティに値をセットした時も,各入力コントロールに値 |
| // の文字列をセットするために呼出している. |
| // の文字列をセットするために呼出している. |
| // |
| // |
| // 備考: FBaseDate := StrToDateTime('1873/01/01'); |
| // 備考: FBaseDate := StrToDateTime('1873/01/01'); |
| //============================================================================= |
| //============================================================================= |
| function TplDateEdit.GetProperties : Boolean; |
| function TplDateEdit.GetProperties : Boolean; |
| var |
| var |
| i : Integer; |
| i : Integer; |
| begin |
| begin |
| Result := True; |
| Result := True; |
| |
| |
| //1873.1.1(明治6年1月1日)より前は何もしない |
| //1873.1.1(明治6年1月1日)より前は何もしない |
| if FYearEdit.Visible then begin |
| if FYearEdit.Visible then begin |
| if FDateTime >= FBaseDate then begin |
| if FDateTime >= FBaseDate then begin |
| FIsEmpty := False; |
| FIsEmpty := False; |
| try |
| try |
| FYear := StrToInt(FormatDateTime ('yyyy', FDateTime)); //西暦年 |
| FYear := StrToInt(FormatDateTime ('yyyy', FDateTime)); //西暦年 |
| FMonth := StrToInt(FormatDateTime ('m', FDateTime)); //月 |
| FMonth := StrToInt(FormatDateTime ('m', FDateTime)); //月 |
| FDay := StrToInt(FormatDateTime ('d', FDateTime)); //日 |
| FDay := StrToInt(FormatDateTime ('d', FDateTime)); //日 |
| FGengoStr := FormatDateTime ('ggg', FDateTime); //元号文字列 |
| FGengoStr := FormatDateTime ('ggg', FDateTime); //元号文字列 |
| FGengoYear := StrToInt(FormatDateTime ('e', FDateTime)); //元号年 |
| FGengoYear := StrToInt(FormatDateTime ('e', FDateTime)); //元号年 |
| //元号表示の指定は元号を再取得(昭和が平成になるかも知れない |
| //元号表示の指定は元号を再取得(昭和が平成になるかも知れない |
| //FGengoStrと同じ元号文字列のItemIndexの文字列をコンボに表示する |
| //FGengoStrと同じ元号文字列のItemIndexの文字列をコンボに表示する |
| if FGengo then begin |
| if FGengo then begin |
| FGengoCombo.Text := FGengoStr; |
| FGengoCombo.Text := FGengoStr; |
| for i := 1 to MaxEraCount do begin |
| for i := 1 to MaxEraCount do begin |
| if EraNames[i] = FGengoStr then begin |
| if EraNames[i] = FGengoStr then begin |
| FGengoCombo.ItemIndex := i; |
| FGengoCombo.ItemIndex := i; |
| break; |
| break; |
| end; |
| end; |
| end; |
| end; |
| FYearEdit.Text := IntToStr(FGengoYear); |
| FYearEdit.Text := IntToStr(FGengoYear); |
| //西暦表示指定の時 |
| //西暦表示指定の時 |
| end else begin |
| end else begin |
| //西暦のItemIndexは0固定 |
| //西暦のItemIndexは0固定 |
| //もし元号選択のコンボが空であってもここで表示する |
| //もし元号選択のコンボが空であってもここで表示する |
| //表示桁数が2桁の場合(FYeardigit=yddigit2)は下2桁のみ表示 |
| //表示桁数が2桁の場合(FYeardigit=yddigit2)は下2桁のみ表示 |
| FGengoCombo.ItemIndex := 0; |
| FGengoCombo.ItemIndex := 0; |
| FYearStr := IntToStr(FYear); |
| FYearStr := IntToStr(FYear); |
| if FYeardigit = yddigit2 then begin |
| if FYeardigit = yddigit2 then begin |
| FYearEdit.Text := Copy(FYearStr, Length(FYearStr) - 1, Length(FYearStr)); |
| FYearEdit.Text := Copy(FYearStr, Length(FYearStr) - 1, Length(FYearStr)); |
| end else begin |
| end else begin |
| FYearEdit.Text := FYearStr; |
| FYearEdit.Text := FYearStr; |
| end; |
| end; |
| end; |
| end; |
| FMonthEdit.Text := IntToStr(FMonth); |
| FMonthEdit.Text := IntToStr(FMonth); |
| FDayEdit.Text := IntToStr(FDay); |
| FDayEdit.Text := IntToStr(FDay); |
| FYearStr := IntToStr(FYear); |
| FYearStr := IntToStr(FYear); |
| FMonthStr := IntToStr(FMonth); |
| FMonthStr := IntToStr(FMonth); |
| FDayStr := IntToStr(FDay); |
| FDayStr := IntToStr(FDay); |
| FGengoYearStr := IntToStr(FGengoYear); |
| FGengoYearStr := IntToStr(FGengoYear); |
| except |
| except |
| Result := False; |
| Result := False; |
| end; |
| end; |
| end else begin |
| end else begin |
| Result := False; |
| Result := False; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //Decodeで各値を取得してもよいが日付の方のコードに合せた |
| //Decodeで各値を取得してもよいが日付の方のコードに合せた |
| //午前午後の選択コンボが表示されている場合は午前か午後の時刻で取得 |
| //午前午後の選択コンボが表示されている場合は午前か午後の時刻で取得 |
| if (FHourEdit.Visible) and (Frac(FDateTime) > 0) then begin |
| if (FHourEdit.Visible) and (Frac(FDateTime) > 0) then begin |
| FIsEmpty := False; |
| FIsEmpty := False; |
| try |
| try |
| FAmpmStr := ''; |
| FAmpmStr := ''; |
| FHour := StrToInt(FormatDateTime ('hh', FDateTime)); //24時間表示 |
| FHour := StrToInt(FormatDateTime ('hh', FDateTime)); //24時間表示 |
| if FEditAmpm then begin |
| if FEditAmpm then begin |
| if FHour < 12 then FAmpmCombo.ItemIndex := 0 else FAmpmCombo.ItemIndex := 1; |
| if FHour < 12 then FAmpmCombo.ItemIndex := 0 else FAmpmCombo.ItemIndex := 1; |
| if (FAmpmCombo.ItemIndex = 1) then FHour := FHOur - 12; |
| if (FAmpmCombo.ItemIndex = 1) then FHour := FHOur - 12; |
| FAmpmStr := FAmpmCombo.Text; |
| FAmpmStr := FAmpmCombo.Text; |
| end; |
| end; |
| FMinute := StrToInt(FormatDateTime ('nn', FDateTime)); |
| FMinute := StrToInt(FormatDateTime ('nn', FDateTime)); |
| FSecond := StrToInt(FormatDateTime ('ss', FDateTime)); |
| FSecond := StrToInt(FormatDateTime ('ss', FDateTime)); |
| FHourStr := IntToStr(FHour); |
| FHourStr := IntToStr(FHour); |
| FMinuteStr := IntToStr(FMinute); |
| FMinuteStr := IntToStr(FMinute); |
| FSecondStr := IntToStr(FSecond); |
| FSecondStr := IntToStr(FSecond); |
| FHourEdit.Text := FHourStr; |
| FHourEdit.Text := FHourStr; |
| FMinuteEdit.Text := FMinuteStr; |
| FMinuteEdit.Text := FMinuteStr; |
| FSecondEdit.Text := FSecondStr; |
| FSecondEdit.Text := FSecondStr; |
| except |
| except |
| Result := False; |
| Result := False; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 年,月,日の値(文字列)を取得 |
| // 年,月,日の値(文字列)を取得 |
| // 0: 元号の文字列 |
| // 0: 元号の文字列 |
| // 1: 元号の年 |
| // 1: 元号の年 |
| // 2: 西暦年 |
| // 2: 西暦年 |
| // 3: 月 |
| // 3: 月 |
| // 4: 日 |
| // 4: 日 |
| // 5: 時 |
| // 5: 時 |
| // 6: 分 |
| // 6: 分 |
| // 7: 秒 |
| // 7: 秒 |
| //============================================================================= |
| //============================================================================= |
| function TplDateEdit.GetDateStr(Index: Integer): String; |
| function TplDateEdit.GetDateStr(Index: Integer): String; |
| begin |
| begin |
| Result := ''; |
| Result := ''; |
| |
| |
| if CheckDateError = False then begin |
| if CheckDateError = False then begin |
| case Index of |
| case Index of |
| 0: Result := FGengoStr; |
| 0: Result := FGengoStr; |
| 1: Result := FGengoYearStr; |
| 1: Result := FGengoYearStr; |
| 2: Result := FYearStr; |
| 2: Result := FYearStr; |
| 3: Result := FMonthStr; |
| 3: Result := FMonthStr; |
| 4: Result := FDayStr; |
| 4: Result := FDayStr; |
| 5: Result := FAmpmStr; |
| 5: Result := FAmpmStr; |
| 6: Result := FHourStr; |
| 6: Result := FHourStr; |
| 7: Result := FMinuteStr; |
| 7: Result := FMinuteStr; |
| 8: Result := FSecondStr; |
| 8: Result := FSecondStr; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 年,月,日の値(整数値)を取得 |
| // 年,月,日の値(整数値)を取得 |
| // 1: 元号の年 |
| // 1: 元号の年 |
| // 2: 西暦年 |
| // 2: 西暦年 |
| // 3: 月 |
| // 3: 月 |
| // 4: 日 |
| // 4: 日 |
| // 5: 時 |
| // 5: 時 |
| // 6: 分 |
| // 6: 分 |
| // 7: 秒 |
| // 7: 秒 |
| //============================================================================= |
| //============================================================================= |
| function TplDateEdit.GetDateInt(Index: Integer): Integer; |
| function TplDateEdit.GetDateInt(Index: Integer): Integer; |
| begin |
| begin |
| Result := 0; |
| Result := 0; |
| |
| |
| if CheckDateError = False then begin |
| if CheckDateError = False then begin |
| case Index of |
| case Index of |
| 1: Result := FGengoYear; |
| 1: Result := FGengoYear; |
| 2: Result := FYear; |
| 2: Result := FYear; |
| 3: Result := FMonth; |
| 3: Result := FMonth; |
| 4: Result := FDay; |
| 4: Result := FDay; |
| 5: Result := FHour; |
| 5: Result := FHour; |
| 6: Result := FMinute; |
| 6: Result := FMinute; |
| 7: Result := FSecond; |
| 7: Result := FSecond; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 各入力値が空白かどうかを検出 |
| // 各入力値が空白かどうかを検出 |
| // |
| // |
| // 使い方の例 |
| // 使い方の例 |
| // |
| // |
| // if plDateEdit1.IsEmpty then begin |
| // if plDateEdit1.IsEmpty then begin |
| // //空白の時の処理 |
| // //空白の時の処理 |
| // end else bggin |
| // end else bggin |
| // //入力した日付を取得して処理 |
| // //入力した日付を取得して処理 |
| // MyDate := plDateEdit1.Date; |
| // MyDate := plDateEdit1.Date; |
| // end; |
| // end; |
| //============================================================================= |
| //============================================================================= |
| function TplDateEdit.GetIsEmpty: Boolean; |
| function TplDateEdit.GetIsEmpty: Boolean; |
| begin |
| begin |
| Result := False; |
| Result := False; |
| |
| |
| if (FGengoCombo.Text = '') and |
| if (FGengoCombo.Text = '') and |
| (FAmpmCombo .Text = '') and |
| (FAmpmCombo .Text = '') and |
| (FYearEdit .Text = '') and |
| (FYearEdit .Text = '') and |
| (FMonthEdit .Text = '') and |
| (FMonthEdit .Text = '') and |
| (FDayEdit .Text = '') and |
| (FDayEdit .Text = '') and |
| (FHourEdit .Text = '') and |
| (FHourEdit .Text = '') and |
| (FMinuteEdit.Text = '') and |
| (FMinuteEdit.Text = '') and |
| (FSecondEdit.Text = '') then Result := True; |
| (FSecondEdit.Text = '') then Result := True; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // Fontプロパティが変更された時のメッセージの処理 |
| // Fontプロパティが変更された時のメッセージの処理 |
| // 各コントロールのサイズ調整を実行 |
| // 各コントロールのサイズ調整を実行 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.CMFontChanged(var Message: TWMNoParams); |
| procedure TplDateEdit.CMFontChanged(var Message: TWMNoParams); |
| begin |
| begin |
| inherited; |
| inherited; |
| SetControlResizePosition(False); |
| SetControlResizePosition(False); |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // TabStopプロパティの設定 |
| // TabStopプロパティの設定 |
| // 元のTabStopをTrueにすると,[Tab]移動で最初のコントロールにフォーカスが移動 |
| // 元のTabStopをTrueにすると,[Tab]移動で最初のコントロールにフォーカスが移動 |
| // しない.また[Shift]+[Tab]の移動もきかない. |
| // しない.また[Shift]+[Tab]の移動もきかない. |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetControlTabStop(const Value: Boolean); |
| procedure TplDateEdit.SetControlTabStop(const Value: Boolean); |
| begin |
| begin |
| FTabStop := Value; |
| FTabStop := Value; |
| inherited TabStop := False; |
| inherited TabStop := False; |
| |
| |
| FGengoCombo.TabStop := FTabStop; |
| FGengoCombo.TabStop := FTabStop; |
| FYearEdit.TabStop := FTabStop; |
| FYearEdit.TabStop := FTabStop; |
| FMonthEdit.TabStop := FTabStop; |
| FMonthEdit.TabStop := FTabStop; |
| FDayEdit.TabStop := FTabStop; |
| FDayEdit.TabStop := FTabStop; |
| FAmpmCombo.TabStop := FTabStop; |
| FAmpmCombo.TabStop := FTabStop; |
| FHourEdit.TabStop := FTabStop; |
| FHourEdit.TabStop := FTabStop; |
| FMinuteEdit.TabStop := FTabStop; |
| FMinuteEdit.TabStop := FTabStop; |
| FSecondEdit.TabStop := FTabStop; |
| FSecondEdit.TabStop := FTabStop; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // このコンポはリサイズ不可とする |
| // このコンポはリサイズ不可とする |
| //============================================================================= |
| //============================================================================= |
| function TplDateEdit.CanResize(var NewWidth, NewHeight: Integer): Boolean; |
| function TplDateEdit.CanResize(var NewWidth, NewHeight: Integer): Boolean; |
| begin |
| begin |
| Result := False; |
| Result := False; |
| if (FGengoCombo = nil) or (FAmpmCombo = nil) then exit; |
| if (FGengoCombo = nil) or (FAmpmCombo = nil) then exit; |
| if (csReading in ComponentState) then exit; |
| if (csReading in ComponentState) then exit; |
| if fgResize = False then begin |
| if fgResize = False then begin |
| Result := False; |
| Result := False; |
| end else begin |
| end else begin |
| Result := True; |
| Result := True; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // このコンポにSetFocusしたら表示している左端のコントロールにフォーカス移動 |
| // このコンポにSetFocusしたら表示している左端のコントロールにフォーカス移動 |
| // |
| // |
| // AWinControl 移動先のコントロール |
| // AWinControl 移動先のコントロール |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetControlFocus(AWinControl: TWinControl); |
| procedure TplDateEdit.SetControlFocus(AWinControl: TWinControl); |
| begin |
| begin |
| if Enabled and Visible then begin |
| if Enabled and Visible then begin |
| if AWinControl = nil then begin |
| if AWinControl = nil then begin |
| if (FGengoCombo.Visible) and (FGengoCombo.Enabled) then begin |
| if (FGengoCombo.Visible) and (FGengoCombo.Enabled) then begin |
| FGengoCombo.SetFocus; |
| FGengoCombo.SetFocus; |
| end else |
| end else |
| if (FYearEdit.Visible) and (FYearEdit.Enabled) then begin |
| if (FYearEdit.Visible) and (FYearEdit.Enabled) then begin |
| FYearEdit.SetFocus; |
| FYearEdit.SetFocus; |
| end else |
| end else |
| if (FAmpmCombo.Visible) and (FAmpmCombo.Enabled) then begin |
| if (FAmpmCombo.Visible) and (FAmpmCombo.Enabled) then begin |
| FAmpmCombo.SetFocus; |
| FAmpmCombo.SetFocus; |
| end else begin |
| end else begin |
| if (FHourEdit.Visible) and (FHourEdit.Enabled) then begin |
| if (FHourEdit.Visible) and (FHourEdit.Enabled) then begin |
| FHourEdit.SetFocus; |
| FHourEdit.SetFocus; |
| end; |
| end; |
| end; |
| end; |
| end else begin |
| end else begin |
| if TWinControl(AWinControl).Visible and TWinControl(AWinControl).Enabled then begin |
| if TWinControl(AWinControl).Visible and TWinControl(AWinControl).Enabled then begin |
| AWinControl.SetFocus; |
| AWinControl.SetFocus; |
| end; |
| end; |
| end; |
| end; |
| FFocused := True; |
| FFocused := True; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // コンポのEnabledプロパティが変更された時にコンポ自身に送ってくる |
| // コンポのEnabledプロパティが変更された時にコンポ自身に送ってくる |
| // Cm_EnabledChangedメッセージの処理. |
| // Cm_EnabledChangedメッセージの処理. |
| // Enabled=True,Enabled=False(Disabled)に応じて入力用コントロールの背景色と文 |
| // Enabled=True,Enabled=False(Disabled)に応じて入力用コントロールの背景色と文 |
| // 字色を変更する. |
| // 字色を変更する. |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.CMEnabledChanged(var Message: TWMNoParams); |
| procedure TplDateEdit.CMEnabledChanged(var Message: TWMNoParams); |
| begin |
| begin |
| inherited; |
| inherited; |
| SetEditColor; |
| SetEditColor; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // Colorプロパティが変更となった時の処理 |
| // Colorプロパティが変更となった時の処理 |
| // Colorプロパティは継承元のではなく,別に定義している. |
| // Colorプロパティは継承元のではなく,別に定義している. |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetControlColor(const Value: TColor); |
| procedure TplDateEdit.SetControlColor(const Value: TColor); |
| begin |
| begin |
| if FColor <> Value then begin |
| if FColor <> Value then begin |
| FColor := Value; |
| FColor := Value; |
| SetEditColor; |
| SetEditColor; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // Enabledプロパティによってコントロールの背景色を変える |
| // Enabledプロパティによってコントロールの背景色を変える |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetEditColor; |
| procedure TplDateEdit.SetEditColor; |
| begin |
| begin |
| if Enabled = False then begin |
| if Enabled = False then begin |
| FGengoCombo.Enabled := False; |
| FGengoCombo.Enabled := False; |
| FAmpmCombo.Enabled := False; |
| FAmpmCombo.Enabled := False; |
| FGengoCombo.Color := FDisableColor; |
| FGengoCombo.Color := FDisableColor; |
| FYearEdit.Color := FDisableColor; |
| FYearEdit.Color := FDisableColor; |
| FMonthEdit.Color := FDisableColor; |
| FMonthEdit.Color := FDisableColor; |
| FDayEdit.Color := FDisableColor; |
| FDayEdit.Color := FDisableColor; |
| FHourEdit.Color := FDisableColor; |
| FHourEdit.Color := FDisableColor; |
| FMinuteEdit.Color := FDisableColor; |
| FMinuteEdit.Color := FDisableColor; |
| FSecondEdit.Color := FDisableColor; |
| FSecondEdit.Color := FDisableColor; |
| |
| |
| FGengoCombo.Font.Color := FDisableFontColor; |
| FGengoCombo.Font.Color := FDisableFontColor; |
| FYearEdit.Font.Color := FDisableFontColor; |
| FYearEdit.Font.Color := FDisableFontColor; |
| FMonthEdit.Font.Color := FDisableFontColor; |
| FMonthEdit.Font.Color := FDisableFontColor; |
| FDayEdit.Font.Color := FDisableFontColor; |
| FDayEdit.Font.Color := FDisableFontColor; |
| FHourEdit.Font.Color := FDisableFontColor; |
| FHourEdit.Font.Color := FDisableFontColor; |
| FMinuteEdit.Font.Color := FDisableFontColor; |
| FMinuteEdit.Font.Color := FDisableFontColor; |
| FSecondEdit.Font.Color := FDisableFontColor; |
| FSecondEdit.Font.Color := FDisableFontColor; |
| end else begin |
| end else begin |
| FGengoCombo.Enabled := True; |
| FGengoCombo.Enabled := True; |
| FGengoCombo.Color := FColor; |
| FGengoCombo.Color := FColor; |
| FYearEdit.Color := FColor; |
| FYearEdit.Color := FColor; |
| FMonthEdit.Color := FColor; |
| FMonthEdit.Color := FColor; |
| FDayEdit.Color := FColor; |
| FDayEdit.Color := FColor; |
| FHourEdit.Color := FColor; |
| FHourEdit.Color := FColor; |
| FMinuteEdit.Color := FColor; |
| FMinuteEdit.Color := FColor; |
| FSecondEdit.Color := FColor; |
| FSecondEdit.Color := FColor; |
| |
| |
| FGengoCombo.Font.Color := Font.Color; |
| FGengoCombo.Font.Color := Font.Color; |
| FYearEdit.Font.Color := Font.Color; |
| FYearEdit.Font.Color := Font.Color; |
| FMonthEdit.Font.Color := Font.Color; |
| FMonthEdit.Font.Color := Font.Color; |
| FDayEdit.Font.Color := Font.Color; |
| FDayEdit.Font.Color := Font.Color; |
| FDayEdit.Font.Color := Font.Color; |
| FDayEdit.Font.Color := Font.Color; |
| FHourEdit.Font.Color := Font.Color; |
| FHourEdit.Font.Color := Font.Color; |
| FMinuteEdit.Font.Color := Font.Color; |
| FMinuteEdit.Font.Color := Font.Color; |
| FSecondEdit.Font.Color := Font.Color; |
| FSecondEdit.Font.Color := Font.Color; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // EnabelプロパティがFalseの時の入力コントロールの背景色の設定 |
| // EnabelプロパティがFalseの時の入力コントロールの背景色の設定 |
| // Ver1.1で追加 |
| // Ver1.1で追加 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetDisableColor(const Value: TColor); |
| procedure TplDateEdit.SetDisableColor(const Value: TColor); |
| begin |
| begin |
| if FDisableColor <> Value then begin |
| if FDisableColor <> Value then begin |
| FDisableColor := Value; |
| FDisableColor := Value; |
| SetEditColor; |
| SetEditColor; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // EnabledプロパティがFalseの時の入力コントロールの文字の色設定 |
| // EnabledプロパティがFalseの時の入力コントロールの文字の色設定 |
| // Ver1.1で追加 |
| // Ver1.1で追加 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.SetDisableFontColor(const Value: TColor); |
| procedure TplDateEdit.SetDisableFontColor(const Value: TColor); |
| begin |
| begin |
| if FDisableFontColor <> Value then begin |
| if FDisableFontColor <> Value then begin |
| FDisableFontColor := Value; |
| FDisableFontColor := Value; |
| SetEditColor; |
| SetEditColor; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // フォーカスを受取った時の処理 |
| // フォーカスを受取った時の処理 |
| // コンポ自身のTabStopをFalseにしているので元号選択か年入力コントロールにフォ |
| // コンポ自身のTabStopをFalseにしているので元号選択か年入力コントロールにフォ |
| // ーカスがくる. |
| // ーカスがくる. |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.WMSetFocus(var Message: TWMSetFocus); |
| procedure TplDateEdit.WMSetFocus(var Message: TWMSetFocus); |
| begin |
| begin |
| inherited; |
| inherited; |
| SetControlFocus(nil); |
| SetControlFocus(nil); |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // コントロールがActiveになったらテキストを選択状態に |
| // コントロールがActiveになったらテキストを選択状態に |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.EditEnter(Sender: TObject); |
| procedure TplDateEdit.EditEnter(Sender: TObject); |
| begin |
| begin |
| fgTabStop := FTabStop; |
| fgTabStop := FTabStop; |
| |
| |
| if fgTabStop = False then begin |
| if fgTabStop = False then begin |
| FGengoCombo.TabStop := True; |
| FGengoCombo.TabStop := True; |
| FYearEdit.TabStop := True; |
| FYearEdit.TabStop := True; |
| FMonthEdit.TabStop := True; |
| FMonthEdit.TabStop := True; |
| FDayEdit.TabStop := True; |
| FDayEdit.TabStop := True; |
| FAmpmCombo.TabStop := True; |
| FAmpmCombo.TabStop := True; |
| FHourEdit.TabStop := True; |
| FHourEdit.TabStop := True; |
| FMinuteEdit.TabStop := True; |
| FMinuteEdit.TabStop := True; |
| FSecondEdit.TabStop := True; |
| FSecondEdit.TabStop := True; |
| end; |
| end; |
| |
| |
| if Sender is TComboBox then begin |
| if Sender is TComboBox then begin |
| if TComboBox(Sender).Visible then begin |
| if TComboBox(Sender).Visible then begin |
| TComboBox(Sender).SetFocus; |
| TComboBox(Sender).SetFocus; |
| TComboBox(Sender).Color := FFocusedColor; |
| TComboBox(Sender).Color := FFocusedColor; |
| if FAutoSelect then TComboBox(Sender).SelectAll; |
| if FAutoSelect then TComboBox(Sender).SelectAll; |
| end; |
| end; |
| end; |
| end; |
| if Sender is TplDateEditEdit then begin |
| if Sender is TplDateEditEdit then begin |
| TplDateEditEdit(Sender).SetFocus; |
| TplDateEditEdit(Sender).SetFocus; |
| TplDateEditEdit(Sender).Color := FFocusedColor; |
| TplDateEditEdit(Sender).Color := FFocusedColor; |
| if FAutoSelect then begin |
| if FAutoSelect then begin |
| TplDateEditEdit(Sender).SelectAll; |
| TplDateEditEdit(Sender).SelectAll; |
| end else begin |
| end else begin |
| TplDateEditEdit(Sender).SelStart := 0; |
| TplDateEditEdit(Sender).SelStart := 0; |
| end; |
| end; |
| end; |
| end; |
| FFocused := True; |
| FFocused := True; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // コントロールがActiveでなくなったら背景色を元に戻す |
| // コントロールがActiveでなくなったら背景色を元に戻す |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.EditExit(Sender: TObject); |
| procedure TplDateEdit.EditExit(Sender: TObject); |
| begin |
| begin |
| if TComboBox(Sender).Visible then TComboBox(Sender).Color := FColor; |
| if TComboBox(Sender).Visible then TComboBox(Sender).Color := FColor; |
| TplDateEditEdit(Sender).Color := FColor; |
| TplDateEditEdit(Sender).Color := FColor; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // このコンポがActiveでなくなった場合 |
| // このコンポがActiveでなくなった場合 |
| // 動作の検出としてはWM_KILLFOCUSがいいのであるが,このコンポでは,フォーカスが |
| // 動作の検出としてはWM_KILLFOCUSがいいのであるが,このコンポでは,フォーカスが |
| // 移動してきた時に左端のコントロールにフォーカスを移動しているため,その時に |
| // 移動してきた時に左端のコントロールにフォーカスを移動しているため,その時に |
| // KillFocsuが発生してしまう. |
| // KillFocsuが発生してしまう. |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.DoExit; |
| procedure TplDateEdit.DoExit; |
| begin |
| begin |
| inherited; |
| inherited; |
| |
| |
| //コントロールの文字が選択状態の場合を考えて解除しておく |
| //コントロールの文字が選択状態の場合を考えて解除しておく |
| FYearEdit.SelStart; |
| FYearEdit.SelStart; |
| FMonthEdit.SelStart; |
| FMonthEdit.SelStart; |
| FDayEdit.SelStart; |
| FDayEdit.SelStart; |
| FHourEdit.SelStart; |
| FHourEdit.SelStart; |
| FMinuteEdit.SelStart; |
| FMinuteEdit.SelStart; |
| FSecondEdit.SelStart; |
| FSecondEdit.SelStart; |
| if FExitCheck then CheckDateError; |
| if FExitCheck then CheckDateError; |
| SetControlTabStop(fgTabStop); |
| SetControlTabStop(fgTabStop); |
| FFocused := False; |
| FFocused := False; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 元号のリストを表示したら背景色を変更 |
| // 元号のリストを表示したら背景色を変更 |
| // コンボボックスのOnDropDownイベント |
| // コンボボックスのOnDropDownイベント |
| // WindowsXPとそれよりも前のOSと動作をほぼ同じにするための |
| // WindowsXPとそれよりも前のOSと動作をほぼ同じにするための |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.GengoDropDown(Sender: TObject); |
| procedure TplDateEdit.GengoDropDown(Sender: TObject); |
| begin |
| begin |
| TComboBox(Sender).Color := FFocusedColor; |
| TComboBox(Sender).Color := FFocusedColor; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 元号選択コンボボックスのOnDrawItemイベント用 |
| // 元号選択コンボボックスのOnDrawItemイベント用 |
| // FFcosedColorが白以外の時は,フォーカスの点線を描画しない |
| // FFcosedColorが白以外の時は,フォーカスの点線を描画しない |
| // AutoSelect=Trueの場合でもコンボボツクスは選択状態にしない(削除以外は編集不 |
| // AutoSelect=Trueの場合でもコンボボツクスは選択状態にしない(削除以外は編集不 |
| // 可なので) |
| // 可なので) |
| // 備考 |
| // 備考 |
| // コンボボックスのEdit部分に何も入力がない時は,このDrawItemは発生しない |
| // コンボボックスのEdit部分に何も入力がない時は,このDrawItemは発生しない |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.GengoDrawItem(Control: TWinControl; Index: Integer; |
| procedure TplDateEdit.GengoDrawItem(Control: TWinControl; Index: Integer; |
| Rect: TRect; State: TOwnerDrawState); |
| Rect: TRect; State: TOwnerDrawState); |
| begin |
| begin |
| with TComboBox(Control) do begin |
| with TComboBox(Control) do begin |
| if (FAutoSelect = False) and (FFocusedColor <> clWhite) then begin |
| if (FAutoSelect = False) and (FFocusedColor <> clWhite) then begin |
| //選択中 |
| //選択中 |
| if odSelected in State then begin |
| if odSelected in State then begin |
| //Edit部分 |
| //Edit部分 |
| if odComboBoxEdit in State then begin |
| if odComboBoxEdit in State then begin |
| Canvas.Brush.Style := bsClear; |
| Canvas.Brush.Style := bsClear; |
| end else begin |
| end else begin |
| Canvas.Brush.Color := FFocusedColor; |
| Canvas.Brush.Color := FFocusedColor; |
| end; |
| end; |
| end else |
| end else |
| if odComboBoxEdit in State then begin |
| if odComboBoxEdit in State then begin |
| Canvas.Brush.Style := bsClear; |
| Canvas.Brush.Style := bsClear; |
| end else begin |
| end else begin |
| Canvas.Brush.Color := FColor; |
| Canvas.Brush.Color := FColor; |
| end; |
| end; |
| Canvas.Font.Assign(Font); |
| Canvas.Font.Assign(Font); |
| end; |
| end; |
| Canvas.FillRect(Rect); |
| Canvas.FillRect(Rect); |
| Rect.Left := Rect.Left+2; |
| Rect.Left := Rect.Left+2; |
| DrawText(Canvas.Handle, |
| DrawText(Canvas.Handle, |
| PChar(Items[Index]), |
| PChar(Items[Index]), |
| -1, |
| -1, |
| Rect, |
| Rect, |
| DT_SINGLELINE or DT_VCENTER or DT_LEFT); |
| DT_SINGLELINE or DT_VCENTER or DT_LEFT); |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // [TAB]キーをOnKeyDownイベントで処理可能にする |
| // [TAB]キーをOnKeyDownイベントで処理可能にする |
| // 外部からこのコンポを使用する際に必要 |
| // 外部からこのコンポを使用する際に必要 |
| // これがないと,外部のプログラムで[Enter],[Tab]などの特殊キーを検出できない |
| // これがないと,外部のプログラムで[Enter],[Tab]などの特殊キーを検出できない |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.CMWantSpecialKey(var Msg: TMessage); |
| procedure TplDateEdit.CMWantSpecialKey(var Msg: TMessage); |
| begin |
| begin |
| if Msg.WParam = VK_TAB then Msg.Result := 1; |
| if Msg.WParam = VK_TAB then Msg.Result := 1; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // キー入力処理 |
| // キー入力処理 |
| // [Enter]はKeyDownで処理するので何もしない |
| // [Enter]はKeyDownで処理するので何もしない |
| // 英字は入力できない. #8は[BackSpace]. #27は[Escape] |
| // 英字は入力できない. #8は[BackSpace]. #27は[Escape] |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.EditKeyPress(Sender: TObject; |
| procedure TplDateEdit.EditKeyPress(Sender: TObject; |
| var Key: Char); |
| var Key: Char); |
| begin |
| begin |
| if Assigned(FOnKeyPress) then FOnKeyPress(Sender, Key); |
| if Assigned(FOnKeyPress) then FOnKeyPress(Sender, Key); |
| if Key = #13 then begin |
| if Key = #13 then begin |
| Key := #0; |
| Key := #0; |
| end else begin |
| end else begin |
| if (Sender is TplDateEditEdit) then begin |
| if (Sender is TplDateEditEdit) then begin |
| if ((Key >= '0') and (Key <= '9')) or (Key = #8) or (Key = #27) then begin |
| if ((Key >= '0') and (Key <= '9')) or (Key = #8) or (Key = #27) then begin |
| inherited KeyPress(Key); |
| inherited KeyPress(Key); |
| end else begin |
| end else begin |
| Key := #0; |
| Key := #0; |
| end; |
| end; |
| end else if (Sender is TComboBox) then begin |
| end else if (Sender is TComboBox) then begin |
| if (Key = #8) or (Key = #27) then begin |
| if (Key = #8) or (Key = #27) then begin |
| inherited KeyPress(Key); |
| inherited KeyPress(Key); |
| end else begin |
| end else begin |
| Key := #0; |
| Key := #0; |
| end; |
| end; |
| end else begin |
| end else begin |
| Key := #0; |
| Key := #0; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| {$IFDEF CONDITIONALEXPRESSIONS} |
| |
| {$IF RTLVersion >= 24.0} |
| |
| function TplDateEdit.FormatDateTime(const Format: string; |
| |
| DateTime: TDateTime): string; |
| |
| begin |
| |
| Result := System.SysUtils.FormatDateTime(Format, DateTime, FFormatSettings); |
| |
| end; |
| |
| {$IFEND} |
| |
| {$ENDIF} |
| |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 各種キー押下の処理 |
| // 各種キー押下の処理 |
| // [DELETE]で元号部の文字をクリア可能にした(Ver1.1) |
| // [DELETE]で元号部の文字をクリア可能にした(Ver1.1) |
| // |
| // |
| // [Tab]はこのコンポを使用するアプリでCMDialogKeyを定義すると機能しなくなって |
| // [Tab]はこのコンポを使用するアプリでCMDialogKeyを定義すると機能しなくなって |
| // しまう. |
| // しまう. |
| // |
| // |
| // いままでのコード |
| // いままでのコード |
| // keybd_event( VK_TAB, 0, 0 , 0 ); |
| // keybd_event( VK_TAB, 0, 0 , 0 ); |
| // keybd_event( VK_TAB, 0, KEYEVENTF_KEYUP , 0 ); |
| // keybd_event( VK_TAB, 0, KEYEVENTF_KEYUP , 0 ); |
| // このコードは[Tab],[Shift]+[Tab],[Enter],[Shift]+[Enter]の全ての処理が実行で |
| // このコードは[Tab],[Shift]+[Tab],[Enter],[Shift]+[Enter]の全ての処理が実行で |
| // きて便利ではあったのだが... |
| // きて便利ではあったのだが... |
| // |
| // |
| // 新しいコードはFindNextControlを使用 |
| // 新しいコードはFindNextControlを使用 |
| // これだと[Tab]が検出できないので,新たにCM_WantSpeialKeyイベント追加して |
| // これだと[Tab]が検出できないので,新たにCM_WantSpeialKeyイベント追加して |
| // if Key=VK_TAB を処理(Ver1.2) |
| // if Key=VK_TAB を処理(Ver1.2) |
| // Ver1.2ではこの他に,OnKeyPress,OnKeyDownイベントの公開,Focusedプロパティを |
| // Ver1.2ではこの他に,OnKeyPress,OnKeyDownイベントの公開,Focusedプロパティを |
| // 追加した. |
| // 追加した. |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.EditKeyDown(Sender: TObject; var Key: Word; |
| procedure TplDateEdit.EditKeyDown(Sender: TObject; var Key: Word; |
| Shift: TShiftState); |
| Shift: TShiftState); |
| begin |
| begin |
| if Assigned(FOnKeyDown) then FOnKeyDown(Sender, Key, Shift); |
| if Assigned(FOnKeyDown) then FOnKeyDown(Sender, Key, Shift); |
| |
| |
| //コンボボックス[Enter]で選択決定 |
| //コンボボックス[Enter]で選択決定 |
| if Key = VK_RETURN then begin |
| if Key = VK_RETURN then begin |
| if TComboBox(Sender).Visible then TComboBox(Sender).DroppedDown := False; |
| if TComboBox(Sender).Visible then TComboBox(Sender).DroppedDown := False; |
| //次のタブコントロールに移動 |
| //次のタブコントロールに移動 |
| if FEnterNext then begin |
| if FEnterNext then begin |
| if (ssShift in Shift) then begin |
| if (ssShift in Shift) then begin |
| keybd_event( VK_TAB, 0, 0, 0 ); |
| keybd_event( VK_TAB, 0, 0, 0 ); |
| keybd_event( VK_SHIFT, 0, 0, 0 ); |
| keybd_event( VK_SHIFT, 0, 0, 0 ); |
| keybd_event( VK_TAB, 0, KEYEVENTF_KEYUP , 0 ); |
| keybd_event( VK_TAB, 0, KEYEVENTF_KEYUP , 0 ); |
| keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP , 0 ); |
| keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP , 0 ); |
| end else begin |
| end else begin |
| keybd_event( VK_TAB, 0, 0 , 0 ); |
| keybd_event( VK_TAB, 0, 0 , 0 ); |
| keybd_event( VK_TAB, 0, KEYEVENTF_KEYUP , 0 ); |
| keybd_event( VK_TAB, 0, KEYEVENTF_KEYUP , 0 ); |
| end; |
| end; |
| end; |
| end; |
| end else if Key = VK_TAB then begin |
| end else if Key = VK_TAB then begin |
| if (ssShift in Shift) then begin |
| if (ssShift in Shift) then begin |
| TWinControl(FindNextControl(TWinControl(Sender), False, True, True)).Setfocus; |
| TWinControl(FindNextControl(TWinControl(Sender), False, True, True)).Setfocus; |
| end else begin |
| end else begin |
| TWinControl(FindNextControl(TWinControl(Sender), True, True, True)).Setfocus; |
| TWinControl(FindNextControl(TWinControl(Sender), True, True, True)).Setfocus; |
| end; |
| end; |
| //↓でコンボのドロップダウンリストを表示 |
| //↓でコンボのドロップダウンリストを表示 |
| end else if Key = VK_DOWN then begin |
| end else if Key = VK_DOWN then begin |
| if FDropDownKey then begin |
| if FDropDownKey then begin |
| if TComboBox(Sender).Visible then begin |
| if TComboBox(Sender).Visible then begin |
| if (TComboBox(Sender).DroppedDown = False) then begin |
| if (TComboBox(Sender).DroppedDown = False) then begin |
| Key := 0; |
| Key := 0; |
| TComboBox(Sender).DroppedDown := True; |
| TComboBox(Sender).DroppedDown := True; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end else if Key = VK_DELETE then begin |
| end else if Key = VK_DELETE then begin |
| if Sender is TComboBox then begin |
| if Sender is TComboBox then begin |
| if TComboBox(Sender).Text <> '' then begin |
| if TComboBox(Sender).Text <> '' then begin |
| TComboBox(Sender).ItemIndex := -1; |
| TComboBox(Sender).ItemIndex := -1; |
| if Assigned(FOnChange) then FOnChange(Sender); |
| if Assigned(FOnChange) then FOnChange(Sender); |
| end else begin |
| end else begin |
| TComboBox(Sender).ItemIndex := -1; |
| TComboBox(Sender).ItemIndex := -1; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| inherited; |
| inherited; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 各入力コントロールのOnChangeイベントハンドラ |
| // 各入力コントロールのOnChangeイベントハンドラ |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.EditChange(Sender: TObject); |
| procedure TplDateEdit.EditChange(Sender: TObject); |
| begin |
| begin |
| if Assigned(FOnChange) then FOnChange(Sender); |
| if Assigned(FOnChange) then FOnChange(Sender); |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 各入力コントロールのOnClickイベントハンドラ |
| // 各入力コントロールのOnClickイベントハンドラ |
| // OnEnterのイベントを定義するとこのOnClickは発生しない |
| // OnEnterのイベントを定義するとこのOnClickは発生しない |
| // (他のコンポーネントと同じ.知りませんでした) |
| // (他のコンポーネントと同じ.知りませんでした) |
| //============================================================================= |
| //============================================================================= |
| procedure TplDateEdit.EditClick(Sender: TObject); |
| procedure TplDateEdit.EditClick(Sender: TObject); |
| begin |
| begin |
| if Assigned(FOnClick) then FOnClick(Sender); |
| if Assigned(FOnClick) then FOnClick(Sender); |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 年齢の計算 |
| // 年齢の計算 |
| // |
| // |
| // 一般的に我々がいう年齢は,誕生日に達した日に加算される |
| // 一般的に我々がいう年齢は,誕生日に達した日に加算される |
| // (5月5日生まれの人は次の年の5月5日の午前0時に1つ加算.午前0時は前日の午後12 |
| // (5月5日生まれの人は次の年の5月5日の午前0時に1つ加算.午前0時は前日の午後12 |
| // 時). |
| // 時). |
| // |
| // |
| // ところが,各法律で「満年齢に達した日」の解釈が違っている. |
| // ところが,各法律で「満年齢に達した日」の解釈が違っている. |
| // |
| // |
| // 法的に年齢計算の仕方を定めているのは「民法」と「年齢計算に関する法律」.民 |
| // 法的に年齢計算の仕方を定めているのは「民法」と「年齢計算に関する法律」.民 |
| // 法では期間を計算するのに, |
| // 法では期間を計算するのに, |
| // (1)月,年などである一定の期間を定めた場合は起算日は算入しない |
| // (1)月,年などである一定の期間を定めた場合は起算日は算入しない |
| // (2)起算日の前日で期間を満了とする |
| // (2)起算日の前日で期間を満了とする |
| // 年齢は例外として「出生の日よりこれを起算する」となっている. |
| // 年齢は例外として「出生の日よりこれを起算する」となっている. |
| // |
| // |
| // 例えば,学校教育法では,4月1日生まれの人が1学年に行くのは「子女の満六歳に達 |
| // 例えば,学校教育法では,4月1日生まれの人が1学年に行くのは「子女の満六歳に達 |
| // した日の翌日以後における最初の学年の初めから」と定められている(法律の文章 |
| // した日の翌日以後における最初の学年の初めから」と定められている(法律の文章 |
| // は難しい!!).つまり,4月1日生まれの子供は,3月31日の午後12時に1年経過して満1 |
| // は難しい!!).つまり,4月1日生まれの子供は,3月31日の午後12時に1年経過して満1 |
| // 才となるため,次の学年となる. |
| // 才となるため,次の学年となる. |
| // |
| // |
| // また,公職選挙法では,選挙権は満20歳以上の人に認められている.7月29日が投票日 |
| // また,公職選挙法では,選挙権は満20歳以上の人に認められている.7月29日が投票日 |
| // の場合,「満20年に達する日が終了したことを要せず,満20年に達する日を含む」で |
| // の場合,「満20年に達する日が終了したことを要せず,満20年に達する日を含む」で |
| // あり「満20年に達する日をもって選挙権取得の始期を定めた」とみなし,20歳にな |
| // あり「満20年に達する日をもって選挙権取得の始期を定めた」とみなし,20歳にな |
| // る午後12時を含めたその日全部が取得の日だとしている.つまり,「投票日の7月29 |
| // る午後12時を含めたその日全部が取得の日だとしている.つまり,「投票日の7月29 |
| // 日の午後12時に満20歳になる7月30日生まれの人まで」(投票時点ではまだ19歳の人 |
| // 日の午後12時に満20歳になる7月30日生まれの人まで」(投票時点ではまだ19歳の人 |
| // が含まれる)となる. |
| // が含まれる)となる. |
| // |
| // |
| // 厚生年金法でも,「誕生日」という言葉ではなく「4月1日に生まれた者が65歳にな |
| // 厚生年金法でも,「誕生日」という言葉ではなく「4月1日に生まれた者が65歳にな |
| // るのは3月31日」である」という書き方をしている. |
| // るのは3月31日」である」という書き方をしている. |
| // つまり,法律的には誕生日の前日に満年齢に達したとみなされる |
| // つまり,法律的には誕生日の前日に満年齢に達したとみなされる |
| // |
| // |
| // 老人保健法では,70歳の誕生日の属する月の翌月(但し1日が誕生日の者はその月)か |
| // 老人保健法では,70歳の誕生日の属する月の翌月(但し1日が誕生日の者はその月)か |
| // らの適用となっている. |
| // らの適用となっている. |
| // |
| // |
| // そこで,このメソッドではどちらにも対応可能なように,引数AgeTypeの値によって |
| // そこで,このメソッドではどちらにも対応可能なように,引数AgeTypeの値によって |
| // 計算する年齢と月を変更可能なようにした. |
| // 計算する年齢と月を変更可能なようにした. |
| // |
| // |
| // AgeType=0 現在の年齢(世間一般でいう年齢) |
| // AgeType=0 現在の年齢(世間一般でいう年齢) |
| // AgeType=1 現在までの期間(誕生日の前日に加齢) |
| // AgeType=1 現在までの期間(誕生日の前日に加齢) |
| //============================================================================= |
| //============================================================================= |
| function TplDateEdit.GetAge(Date1, Date2: TDateTime; AgeType: Integer; |
| function TplDateEdit.GetAge(Date1, Date2: TDateTime; AgeType: Integer; |
| var gAge, gMonth: Integer): Boolean; |
| var gAge, gMonth: Integer): Boolean; |
| var |
| var |
| Year1 : WORD; |
| Year1 : WORD; |
| Month1 : WORD; |
| Month1 : WORD; |
| Day1 : WORD; |
| Day1 : WORD; |
| Year2 : WORD; |
| Year2 : WORD; |
| Month2 : WORD; |
| Month2 : WORD; |
| Day2 : WORD; |
| Day2 : WORD; |
| begin |
| begin |
| Result := True; |
| Result := True; |
| try |
| try |
| DecodeDate (Date1, Year1, Month1, Day1); |
| DecodeDate (Date1, Year1, Month1, Day1); |
| DecodeDate (Date2, Year2, Month2, Day2); |
| DecodeDate (Date2, Year2, Month2, Day2); |
| //AgeType=0 通常の年齢 |
| //AgeType=0 通常の年齢 |
| if (AgeType = 0) then begin |
| if (AgeType = 0) then begin |
| if (Day1 > Day2) then Dec(Month2); |
| if (Day1 > Day2) then Dec(Month2); |
| //AgeType=1 経過年月 |
| //AgeType=1 経過年月 |
| end else begin |
| end else begin |
| if (Month2 = 12) then begin |
| if (Month2 = 12) then begin |
| if (Day2 = 31)then begin |
| if (Day2 = 31)then begin |
| Inc(Year2); |
| Inc(Year2); |
| Month2 := 1; |
| Month2 := 1; |
| Day2 := 0; |
| Day2 := 0; |
| end; |
| end; |
| end else if Date2 = EncodeDate(Year2, Month2 + 1, 1) - 1 then begin |
| end else if Date2 = EncodeDate(Year2, Month2 + 1, 1) - 1 then begin |
| Inc(Month2); |
| Inc(Month2); |
| Day2 := 0 ; |
| Day2 := 0 ; |
| end; |
| end; |
| if Day1>Day2 + 1 then Dec(Month2); |
| if Day1>Day2 + 1 then Dec(Month2); |
| end; |
| end; |
| gMonth := Month2-Month1; |
| gMonth := Month2-Month1; |
| gAge := Year2 - Year1; |
| gAge := Year2 - Year1; |
| if (gMonth >= -12) and (gMonth <= -1) then begin |
| if (gMonth >= -12) and (gMonth <= -1) then begin |
| Dec(gAge); |
| Dec(gAge); |
| gMonth := 12 + gMonth; |
| gMonth := 12 + gMonth; |
| end; |
| end; |
| if gAge < 0 then begin |
| if gAge < 0 then begin |
| Result := False; |
| Result := False; |
| gAge := 0; |
| gAge := 0; |
| gMonth := 0; |
| gMonth := 0; |
| end; |
| end; |
| except |
| except |
| Result := False; |
| Result := False; |
| gAge := 0; |
| gAge := 0; |
| gMonth := 0; |
| gMonth := 0; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| { TplDBDateEdit } |
| { TplDBDateEdit } |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 以下のコードはTAKさんに作成して頂いたコードをほぼそのまま利用. |
| // 以下のコードはTAKさんに作成して頂いたコードをほぼそのまま利用. |
| // begin~end; の間のコードのインデント |
| // begin~end; の間のコードのインデント |
| // if then begin else のスタイル |
| // if then begin else のスタイル |
| // 等をMr.XRAY方式スタイルに変更 |
| // 等をMr.XRAY方式スタイルに変更 |
| // このコードの追加にはだいぶ迷った.同一コンポーネントにデータベース対応部分 |
| // このコードの追加にはだいぶ迷った.同一コンポーネントにデータベース対応部分 |
| // を追加するか,別のコンポーネントにするか.結局,別コンポーネントとすることに |
| // を追加するか,別のコンポーネントにするか.結局,別コンポーネントとすることに |
| // した. |
| // した. |
| //----------------------------------------------------------------------------- |
| //----------------------------------------------------------------------------- |
| // データベース対応コンポーネント生成 |
| // データベース対応コンポーネント生成 |
| //============================================================================= |
| //============================================================================= |
| constructor TplDBDateEdit.Create(AOwner: TComponent); |
| constructor TplDBDateEdit.Create(AOwner: TComponent); |
| begin |
| begin |
| inherited; |
| inherited; |
| |
| |
| FDataLink := TFieldDataLink.Create; |
| FDataLink := TFieldDataLink.Create; |
| FDataLink.Control := Self; |
| FDataLink.Control := Self; |
| FDataLink.OnDataChange := DataChange; |
| FDataLink.OnDataChange := DataChange; |
| FDataLink.OnUpdateData := UpdateData; |
| FDataLink.OnUpdateData := UpdateData; |
| IsEdit := False; |
| IsEdit := False; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // コンポーネントの破棄 |
| // コンポーネントの破棄 |
| //============================================================================= |
| //============================================================================= |
| destructor TplDBDateEdit.Destroy; |
| destructor TplDBDateEdit.Destroy; |
| begin |
| begin |
| FreeAndNil(FDataLink); |
| FreeAndNil(FDataLink); |
| inherited; |
| inherited; |
| end; |
| end; |
| //============================================================================= |
| //============================================================================= |
| // データソース破棄時の処理 |
| // データソース破棄時の処理 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.Notification(AComponent: TComponent; |
| procedure TplDBDateEdit.Notification(AComponent: TComponent; |
| Operation: TOperation); |
| Operation: TOperation); |
| begin |
| begin |
| if (Operation = opRemove) and (FDataLink <> nil) and |
| if (Operation = opRemove) and (FDataLink <> nil) and |
| (AComponent = DataSource) then begin |
| (AComponent = DataSource) then begin |
| FDataLink.DataSource := nil; |
| FDataLink.DataSource := nil; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // データソースの設定 |
| // データソースの設定 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.SetDataSource(const Value: TDataSource); |
| procedure TplDBDateEdit.SetDataSource(const Value: TDataSource); |
| begin |
| begin |
| if FDataLink.DataSource <> Value then begin |
| if FDataLink.DataSource <> Value then begin |
| FDataLink.DataSource := Value; |
| FDataLink.DataSource := Value; |
| //データソースの破棄通知を登録する |
| //データソースの破棄通知を登録する |
| if Value <> nil then Value.FreeNotification(Self); |
| if Value <> nil then Value.FreeNotification(Self); |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // データソースの取得 |
| // データソースの取得 |
| //============================================================================= |
| //============================================================================= |
| function TplDBDateEdit.GetDataSource: TDataSource; |
| function TplDBDateEdit.GetDataSource: TDataSource; |
| begin |
| begin |
| Result := FDataLink.DataSource; |
| Result := FDataLink.DataSource; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // データフィールドの設定 |
| // データフィールドの設定 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.SetDataField(const Value: string); |
| procedure TplDBDateEdit.SetDataField(const Value: string); |
| begin |
| begin |
| FDataLink.FieldName := Value; |
| FDataLink.FieldName := Value; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // データフィールドの取得 |
| // データフィールドの取得 |
| //============================================================================= |
| //============================================================================= |
| function TplDBDateEdit.GetDataField: string; |
| function TplDBDateEdit.GetDataField: string; |
| begin |
| begin |
| Result := FDataLink.FieldName; |
| Result := FDataLink.FieldName; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // ReadOnlyプロパティのセット |
| // ReadOnlyプロパティのセット |
| // データリンクの ReadOnlyプロパティに書込むだけ |
| // データリンクの ReadOnlyプロパティに書込むだけ |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.SetReadOnly(const Value: Boolean); |
| procedure TplDBDateEdit.SetReadOnly(const Value: Boolean); |
| begin |
| begin |
| FDataLink.ReadOnly := Value; |
| FDataLink.ReadOnly := Value; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // ReadOnlyプロパティの取得 |
| // ReadOnlyプロパティの取得 |
| // データリンクの ReadOnlyプロパティを読むだけ |
| // データリンクの ReadOnlyプロパティを読むだけ |
| //============================================================================= |
| //============================================================================= |
| function TplDBDateEdit.GetReadOnly: Boolean; |
| function TplDBDateEdit.GetReadOnly: Boolean; |
| begin |
| begin |
| Result := FDataLink.ReadOnly; |
| Result := FDataLink.ReadOnly; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // OnDataChange イベントの処理 |
| // OnDataChange イベントの処理 |
| // コンポのDateTimeプロパティ値をフィールドの値から取得する |
| // コンポのDateTimeプロパティ値をフィールドの値から取得する |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.DataChange(Sender: TObject); |
| procedure TplDBDateEdit.DataChange(Sender: TObject); |
| var |
| var |
| AField : TField; |
| AField : TField; |
| begin |
| begin |
| //書込み中は読込まない |
| //書込み中は読込まない |
| if IsEdit then exit; |
| if IsEdit then exit; |
| |
| |
| AField := FindField; |
| AField := FindField; |
| if Assigned(AField) then begin |
| if Assigned(AField) then begin |
| if AField.IsNull then begin |
| if AField.IsNull then begin |
| SetEditEmpty; |
| SetEditEmpty; |
| end else begin |
| end else begin |
| DateTime := AField.AsDateTime; |
| DateTime := AField.AsDateTime; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // フォーカスを失ったらフィールドにデータを書込む |
| // フォーカスを失ったらフィールドにデータを書込む |
| // DBGridなどでセルを移動した時にPostしているのと同じ動作 |
| // DBGridなどでセルを移動した時にPostしているのと同じ動作 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.DoExit; |
| procedure TplDBDateEdit.DoExit; |
| var |
| var |
| AField : TField; |
| AField : TField; |
| begin |
| begin |
| inherited; |
| inherited; |
| |
| |
| AField := FindField; |
| AField := FindField; |
| if Assigned(AField) then begin |
| if Assigned(AField) then begin |
| if DateTime <> AField.AsDateTime then begin |
| if DateTime <> AField.AsDateTime then begin |
| //読込みを禁止するフラグ |
| //読込みを禁止するフラグ |
| IsEdit := True; |
| IsEdit := True; |
| FDataLink.DataSet.Edit; |
| FDataLink.DataSet.Edit; |
| if CanEmpty and IsEmpty then begin |
| if CanEmpty and IsEmpty then begin |
| AField.Value := null; |
| AField.Value := null; |
| end else begin |
| end else begin |
| AField.AsDateTime := DateTime; |
| AField.AsDateTime := DateTime; |
| end; |
| end; |
| //書込む終了 |
| //書込む終了 |
| IsEdit := False; |
| IsEdit := False; |
| //データを更新 |
| //データを更新 |
| FDataLink.Reset; |
| FDataLink.Reset; |
| end; |
| end; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 動作を確実にするためにフィールドを検索 |
| // 動作を確実にするためにフィールドを検索 |
| // ここで取得したフィールドにアクセスする |
| // ここで取得したフィールドにアクセスする |
| //============================================================================= |
| //============================================================================= |
| function TplDBDateEdit.FindField: TField; |
| function TplDBDateEdit.FindField: TField; |
| begin |
| begin |
| Result := nil; |
| Result := nil; |
| if (FDataLink.FieldName <> '') and Assigned(FDataLink.DataSet) then begin |
| if (FDataLink.FieldName <> '') and Assigned(FDataLink.DataSet) then begin |
| Result := FDataLink.DataSet.FindField(FDataLink.FieldName); |
| Result := FDataLink.DataSet.FindField(FDataLink.FieldName); |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 各コントロールのOnKeyPressイベントの処理 |
| // 各コントロールのOnKeyPressイベントの処理 |
| // ReadOnly=Trueの時はキー入力を受付けない |
| // ReadOnly=Trueの時はキー入力を受付けない |
| // [Tab][Entr][Shift]などOnKeyDownで処理するキーは受付ける |
| // [Tab][Entr][Shift]などOnKeyDownで処理するキーは受付ける |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.EditKeyPress(Sender: TObject; var Key: Char); |
| procedure TplDBDateEdit.EditKeyPress(Sender: TObject; var Key: Char); |
| begin |
| begin |
| if not FDataLink.CanModify then Key := #0; |
| if not FDataLink.CanModify then Key := #0; |
| inherited; |
| inherited; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 各コントロールのOnKeyDownイベントの処理 |
| // 各コントロールのOnKeyDownイベントの処理 |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.EditKeyDown(Sender: TObject; var Key: Word; |
| procedure TplDBDateEdit.EditKeyDown(Sender: TObject; var Key: Word; |
| Shift: TShiftState); |
| Shift: TShiftState); |
| begin |
| begin |
| //ESCキーが押されたらフィールド値の編集をキャンセル |
| //ESCキーが押されたらフィールド値の編集をキャンセル |
| if Key = VK_ESCAPE then begin |
| if Key = VK_ESCAPE then begin |
| FDatalink.Reset; |
| FDatalink.Reset; |
| Key := 0; |
| Key := 0; |
| end; |
| end; |
| if not FDataLink.CanModify then Key := 0; |
| if not FDataLink.CanModify then Key := 0; |
| |
| |
| inherited; |
| inherited; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // 入力コントロールの内容に変更があった場合(OnChageイベントが発生)した場合), |
| // 入力コントロールの内容に変更があった場合(OnChageイベントが発生)した場合), |
| // DataSetがEditモードならUpdateDateイベントを呼出して変更をレコードに反映. |
| // DataSetがEditモードならUpdateDateイベントを呼出して変更をレコードに反映. |
| // これがないと,フォーカスを失った時しかレコードの更新ができない |
| // これがないと,フォーカスを失った時しかレコードの更新ができない |
| // (他のデータベース対応コントロールと動作が違ってしまう) |
| // (他のデータベース対応コントロールと動作が違ってしまう) |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.EditChange(Sender: TObject); |
| procedure TplDBDateEdit.EditChange(Sender: TObject); |
| begin |
| begin |
| //ReadOnly=Trueの時はコンボボックスによる選択は無効にする |
| //ReadOnly=Trueの時はコンボボックスによる選択は無効にする |
| //年月日の入力はキー入力そのものを無効にしている |
| //年月日の入力はキー入力そのものを無効にしている |
| if FDataLink.Field = nil then begin |
| if FDataLink.Field = nil then begin |
| SetEditEmpty; |
| SetEditEmpty; |
| end else if not FDataLink.CanModify then begin |
| end else if not FDataLink.CanModify then begin |
| if Sender is TComboBox then begin |
| if Sender is TComboBox then begin |
| FDataLink.Reset; |
| FDataLink.Reset; |
| end; |
| end; |
| end else begin |
| end else begin |
| inherited; |
| inherited; |
| if FDataLink.Edit then FDataLink.Modified; |
| if FDataLink.Edit then FDataLink.Modified; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // OnUpdateイベントのハンドラ |
| // OnUpdateイベントのハンドラ |
| //============================================================================= |
| //============================================================================= |
| procedure TplDBDateEdit.UpdateData(Sender: TObject); |
| procedure TplDBDateEdit.UpdateData(Sender: TObject); |
| begin |
| begin |
| if CanEmpty and IsEmpty then begin |
| if CanEmpty and IsEmpty then begin |
| FDataLink.Field.Value := null; |
| FDataLink.Field.Value := null; |
| end else begin |
| end else begin |
| FDataLink.Field.AsDateTime := DateTime; |
| FDataLink.Field.AsDateTime := DateTime; |
| end; |
| end; |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // コンポーネント登録情報 |
| // コンポーネント登録情報 |
| //============================================================================= |
| //============================================================================= |
| procedure Register; |
| procedure Register; |
| begin |
| begin |
| RegisterComponents('plXRAY', [TplDateEdit]); |
| RegisterComponents('plXRAY', [TplDateEdit]); |
| RegisterComponents('plXRAY', [TplDBDateEdit]); |
| RegisterComponents('plXRAY', [TplDBDateEdit]); |
| end; |
| end; |
| |
| |
| //============================================================================= |
| //============================================================================= |
| // コード終了 |
| // コード終了 |
| //============================================================================= |
| //============================================================================= |
| end. |
| end. |
| |
| |