Sometimes we need to enable or disable some field depending on value from another field.
The first way is using Group object where FrameOptionButton property is set to Check. For details see \Forms\tutorial_Form_groupOption
The second approach is setting enabled() property for StringEdit object.
void enableControls() { StringEdit_1.enabled(myTable.Field); }
Unfortunately we may notice that the arrow object of StringEdit doesn't work properly. Sometimes the arrow is vanish away from control.
The small modification should improve the arrow's behaviour.
In fact the arrow is the child window of StringEdit. The idea consists in managing state of parent and child window trough winApi.
All what we need to do is:
1. Add new enableWindow() method in WinApi class:
// Created by GRR client static boolean enableWindow(int _handle, boolean _value) { DLL _DLL = new DLL('USER32'); DLLFunction _enableWindow = new DLLFunction(_DLL, 'EnableWindow'); _enableWindow.returns(ExtTypes::DWord); _enableWindow.arg(ExtTypes::DWord); _enableWindow.arg(ExtTypes::DWord); return _enableWindow.call(_handle, _value); }
2. Rewrite our enableControls() method:
void enableControls() { void controlEnabled(FormControl control, boolean _value) { #WinApi int ctrlHwnd = control.hWnd(); int childHwnd = WinApi::getWindow(ctrlHwnd, #GW_CHILD); ; WinApi::showWindow(ctrlHwnd, #SW_SHOW); WinApi::showWindow(childHwnd, #SW_SHOW); WinApi::enableWindow(ctrlHwnd, _value); WinApi::enableWindow(childHwnd, _value); } ; controlEnabled(StringEdit_1, myTable.Field); controlEnabled(StringEdit_2, myTable.Field); }
AX 3.0 SP4
Copyright © 2008 Ruslan Goncharov