You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

[ |../../index.htm#lansa/l4wdev03_0450.htm]
現在地:
<ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="17c63e9d-70d6-47bd-bfb2-4d7a8c6889df"><ac:parameter ac:name="">_Toc137627878</ac:parameter></ac:structured-macro>例1 - ホストされた単純なパーツ
次のソースを使用して、FLDVIS01という名前の再利用可能パーツを作成します。これにより、フィールドDEPTMENTにオートコンプリート機能が実現します。
Function Options(*DIRECT) Begin_Com Role(*EXTENDS #PRIM_PANL *implements #Prim_dc.iMonitorSubject) Defaultpty(Value) Displayposition(1) Height(20) Layoutmanager(#ATLM_1) Left(0) Tabposition(1) Top(0) Width(150)   Define_Com Class(#PRIM_ATLM) Name(#ATLM_1) Define_Com Class(#DEPTMENT.VisualEdit) Name(#Department) Displayposition(1) Height(20) Marginleft(0) Parent(#COM_OWNER) Tabposition(1) Width(150) Define_Com Class(#PRIM_ATLI) Name(#ATLI_1) Attachment(Center) Manage(#Department) Parent(#ATLM_1)   Define_Pty Name(Value) Get(GetPropertyValue) Set(SetPropertyValue)   Ptyroutine Name(GetPropertyValue) Define_Map For(*Output) Class(#prim_alph) Name(#Property)   #Property := #Department   Endroutine   Ptyroutine Name(SetPropertyValue) Define_Map For(*Input) Class(#prim_alph) Name(#Property)   #Department := #Property   Endroutine   Mthroutine Name(ApplymonitoredValue) Options(*redefine)   * No redefinition required   Endroutine   Mthroutine Name(GetValue) Options(*redefine)   * No redefinition required   Endroutine   Evtroutine Handling(#Department.KeyPress) Handled(#Handled) Keycode(#KeyCode) Char(#Char)   * If the field isn't full If (#Department.CurSize <> #Department.FieldLength)   * If a character entered If (#KeyCode = isChar)   #Com_Owner.PrepareAutoComplete   If (#Com_owner.CanAutoComplete)   #Handled := True   #Com_owner.AutoComplete( #Char )   Signal Event(ValueChanged)   Endif   Endif   Endif   Endroutine   Evtroutine Handling(#Department.Changed)   * Handle all other key presses that might affect the value Signal Event(ValueChanged)   Endroutine   Mthroutine Name(CanAutoComplete) Help('Can we autocomplete?')Access(*Private) Define_Map For(*Result) Class(#prim_boln) Name(#Result)   * If selection doesn't start at the end of the value, autocomplete is not appropriate. #Result := (#Department.SelectionEnd = (#Department.Trim.cursize  1))   Endroutine   Mthroutine Name(AutoComplete) Access(*private) Define_Map For(*Input) Class(#prim_alph) Name(#Char) Help('Character just pressed on the keyboard')   Define_Com Class(#prim_nmbr) Name(#Start) Define_Com Class(#prim_alph) Name(#Candidate)   #Start := #Department.SelectionStart   #Candidate := #Com_owner.PrepareCandidate( #Char )   #Department := #Com_owner.GetCandidate( #Candidate )   * Set selection to be startposition  1 to the end #Department.SelectionStart := #Start  1 #Department.SelectionEnd := #Department.Trim.cursize  1   Endroutine   Mthroutine Name(PrepareAutoComplete) Help('Prepare Selection in the value so that it runs left to right') Access(*private)   Define_Com Class(#prim_nmbr) Name(#Transition)   * If Start is greater than end, reverse the selection points If (#Department.SelectionStart > #Department.SelectionEnd)   #Transition := #Department.SelectionStart   #Department.SelectionStart := #Department.SelectionEnd   #Department.SelectionEnd := #Transition   Endif   Endroutine   Mthroutine Name(PrepareCandidate) Help('Prepare the input value ready for looking up the next candidate') Access(*private) Define_Map For(*Input) Class(#prim_alph) Name(#Char) Help('Character just pressed on the keyboard') Define_Map For(*Result) Class(#Prim_alph) Name(#Result)   * If selection is the whole word, only use the char supplied by the event If (#Department.SelectionStart = 1)   #Result := #Char.uppercase   Else   * Get anything to the left of the cursor start position and append the last key press #Result := (#Department.substring( 1 (#Department.SelectionStart - 1) ).trim + #Char).Uppercase   Endif   Endroutine   Mthroutine Name(GetCandidate) Access(*private) Define_Map For(*Input) Class(#prim_alph) Name(#Candidate) Define_Map For(*Result) Class(#prim_alph) Name(#Result)   * If no record found, the last value entered is still the right answer #Result := #Candidate   * Find the first record starting with the candidate value Select Fields(#Deptment) From_File(Deptab) With_Key(#Candidate) Generic(*yes)   #Result := #Deptment   Leave   Endselect   Endroutine   End_Com
 
再利用可能なパーツが、DEPTMENTに対して単一の入力ボックスしか表示していないことに注意してください。ラベルや説明は必要ありません。
フィールドDEPTMENTを開き、[ビジュアライゼーション]タブに移動します。

[新しいビジュアルホスト]のオプションを選択し、プロンプトでFLDVIS01を選択します。DEPTMENTは、以下のようになります。

これで、新しいVisual_host再利用可能パーツを次のように使用できます。
Define_Com Class(#Deptment.Visualhost) Name(#...)
 
VisualHostの省略時の名前をAutoCompleteのような名前にしてもかまいません。そうすると、フォームで使用した場合に次のように表示されます。
Define_Com Class(#Deptment.AutoComplete) Name(#...)
 
[ |../../index.htm#lansa/l4wdev03_0450.htm]

  • No labels