再利用可能パーツ(この例では、#EOEXAM04)を作成します。以下のソース・コードをコピーして貼り付けます。
GroupプロパティをDates & Timesに設定してから、コンパイルします。
再利用可能パーツには、日付を入力できる入力フィールドと、フォーマットされた日付を表示するラベルがあります。
このパーツが(フォーム内で)実行されると、以下のように見えます。
パーツには、以下の3つのユーザー定義のプロパティがあります。
uCaption | 日付フィールドのキャプションを設定します。 |
|---|---|
uDate | 入力を設定して検証し、取得します。 |
UInError | 日付フィールドの検証に失敗するとTrueに設定されます。 |
日付表示再利用可能パーツのソース
FUNCTION options(*DIRECT)BEGIN_COM role(*EXTENDS #PRIM_PANL) DISPLAYPOSITION(1) HEIGHT(19) LEFT(0) TABPOSITION(1) TABSTOP(False) TOP(0) VISUALSTYLE(#VS_NORM) WIDTH(417)DEFINE_COM class(#DATEC.Visual) name(#SHOWDATE) CAPTION('Date') DISPLAYPOSITION(1) HEIGHT(19) LABELTYPE(Caption) MARGINLEFT(120) PARENT(#COM_OWNER) TABPOSITION(1) WIDTH(177)DEFINE_COM class(#PRIM_LABL) name(#SHOWTEXT) CAPTION('<text>') DISPLAYPOSITION(2) HEIGHT(19) LEFT(184) PARENT(#COM_OWNER) TABPOSITION(2) TABSTOP(False) TOP(0) WIDTH(233) DEFINE field(#RETCODE) type(*CHAR) length(1) desc('Return Code')DEF_COND name(*OKAY) cond('#RetCode = Y')DEFINE field(#CVTDATE) type(*CHAR) length(20) * Published Properties DEFINE_PTY name(uCaption) set(Set_uCaption)DEFINE_PTY name(uDate) get(Get_uDate) set(Set_uDate)DEFINE_PTY name(uInError) get(Get_uInError) set(Set_uInError) * Property Handling routine PTYROUTINE name(Set_uCaption)DEFINE_MAP for(*input) class(#Std_TextL) name(#Property_001)SET com(#ShowDate) CAPTION(#Property_001.Value)ENDROUTINE PTYROUTINE name(Set_uInError)DEFINE_MAP for(*input) class(#Std_Bool) name(#Property_002)SET com(#ShowDate) SHOWERROR(#Property_002.Value)ENDROUTINE PTYROUTINE name(Get_uInError)DEFINE_MAP for(*Output) class(#Std_Bool) name(#Property_002)SET com(#Property_002) VALUE(#ShowDate.ShowError)ENDROUTINE PTYROUTINE name(Set_uDate)DEFINE_MAP for(*input) class(#DateC) name(#Property_003)SET com(#ShowDate) VALUE(#Property_003.Value)INVOKE method(#Com_Self.ValidateDate)ENDROUTINE PTYROUTINE name(Get_uDate)DEFINE_MAP for(*Output) class(#DateC) name(#Property_003)SET com(#Property_003) VALUE(#ShowDate.Value)ENDROUTINE * Handle change of date by validating its value EVTROUTINE handling(#SHOWDATE.Changed) options(*NOCLEARMESSAGES *NOCLEARERRORS)INVOKE method(#Com_Self.ValidateDate)ENDROUTINE * Method to validate the date MTHROUTINE name(ValidateDate) SET com(#Com_Owner) UINERROR(FALSE) CHANGE field(#DATEC) to('#SHOWDATE.VALUE') IF_NULL field(#DATEC) SET com(#ShowText) CAPTION('No date specified') ELSE USE builtin(CONVERTDATE) with_args(#DATEC F Q) to_get(#CVTDATE #RETCODE) IF cond(*OKAY)SET com(#ShowText) CAPTION(#CvtDate)ELSESET com(#Com_Owner) UINERROR(TRUE)SET com(#ShowText) CAPTION('Invalid Date')ENDIF ENDIF ENDROUTINE END_COM

