再利用可能パーツ(この例では、#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)
ELSE
SET com(#Com_Owner) UINERROR(TRUE)
SET com(#ShowText) CAPTION('Invalid Date')
ENDIF
ENDIF
ENDROUTINE
END_COM