ON SAM_Validate和EditDataItemSetEdited的使用

类别:编程语言 点击:0 评论:0 推荐:

类似EDIT栏位退出事件;

若: 金额=数量*单价时,要在数量和单价栏位退出时,自动计算出金额,填写到金额栏;
cColumn: colnAmt; cColumn: colnQty; cColumn: colnPrice;
1) 分别在cColumn: colnQty; cColumn: colnPrice;增加Message Actions 为On SAM_Validate事件
  内加一行代码: Call ReCalculate ( )
2) 然后再在Funtions里增加ReCalculate过程来实现
Function: ReCalculate
Set colnAmt=colnQty*colnPrice
Call colnAmt.EditDataItemSetEdited()

至此就可以实现上述功能;

附:IFS'S HELP
SAM_Validate
Sent to a Data field, multiline field, combo box, and column when the user changes the value of the object and then moves the focus away from the object.
The user can move the focus by several actions such as tabbing to another object, clicking another object, or using a mnemonic or accelerator to activate another object.
When a user changes one of these objects, the object's field edit flag changes to TRUE. You can get and set the field edit flag using SalQueryFieldEdit and SalSetFieldEdit.

SAM_Validate validates the data that the user entered or changed. Whenever the user changes an object, Centura sends SAM_Validate. If an object is valid, return VALIDATE_Ok (this resets the field edit flag to FALSE).
The value you return from SAM_Validate processing controls whether the focus changes.
Centura does not send SAM_Validate when the user selects a menu item (a menu selection does not change the focus). You can force Centura to send SAM_Validate by calling SalSendValidateMsg in the menu actions of a menu item. This forces field validation before processing a menu selection (without changing the focus). SalSendValidateMsg returns the value that the SAM_Validate message processing returns.

To control the action that happens, return one of these values:

Value  Description
VALIDATE_Cancel Does not let the attempted action take place and returns the focus to the current edited item if the item has lost the focus (validation failed).
VALIDATE_Ok Lets the attempted action take place. This is the default action if you do not process SAM_Validate or do not Return a value when processing SAM_Validate.
VALIDATE_OkClearFlag Lets the attempted action take place and sets the field edited flag to FALSE.
Note: Unless you return VALIDATE_Cancel, Centura also sends SAM_FieldEdit to the object.

Message Variables

For table window columns:

Value  Description
hWndForm Window handle of the top-level window.
hWndItem Window handle of the object receiving the message.
wParam Handle of object getting the focus; 0 if the focus is not changing (such as when calling SalSendValidateMsg in menu actions).
lParam Index to the row. If the focus is on the first row, this variable will equal 0; if the focus is on the second row, this variable will equal 1; and so on.
lParam Zero (0).
For all other objects:

hWndForm Window handle of the top-level window.
hWndItem Window handle of the object receiving the message.
wParam 
Example

Data Field: dfName
 ...
 On SAM_Validate
  If SalIsNull( dfName )
   Call SalMessageBox( 'You must enter a value',
    'Data Error', MB_Ok )
   Return VALIDATE_Cancel
  Else
   Return VALIDATE_Ok

Boolean EditDataItemSetEdited(  )
The EditDataItemSetEdited function marks the data item as edited.

Returns

The return value is TRUE if the data item was successfully marked, FALSE otherwise.

Comments

Applications should call this function after programmatically setting the value of data item.

Example

Function: DataRecordGetDefaults

Actions
  ! Set client default values
  Set dfdtOrderDate = SalDateCurrent( )
  Set dfdtDeliveryDate = SalDataCurrent( )
  ! Mark the fields as edited
  Call dfdtOrderDate.EditDataItemSetEdited( )
  Call dfdtDeliveryDate.EditDataItemSetEdited( )


 

本文地址:http://com.8s8s.com/it/it23412.htm