|
|
|
Dialog Server changes |
  |
|
|
Eloquence A.06.20 / Release Notes
Eloquence A.06.20 provides an enhanced version of the Eloquence GUI
components for the Windows platform (Windows 16 and 32 bit).
The DLGSRV(32) and RUNSRV(32) have been enhanced concerning
performance and functionality.
DLGSRV Enhancements
- DLGSRV(32) now uses the ISA Dialog Manager A.03.08d runtime library.
- The network performance has been significantly improved by using an
asynchronous receive mechanism and by reducing the number of screen
updates caused by DLG SET calls.
- To center a dialog on the screen, DLG SET .x and .y using negative
coordinates now can be used and works compatible with ASCII DLG.
- DLG GET .focus always returned 0 due to a synchronization problem
with the ISA Dialog Manager runtime. This problem has been solved,
DLG GET .focus now works as expected, even if the addressed object
is currently invisible or insensitive.
- DLG SET .focus did not work if the addressed object or one of its
parents were invisible. This was caused by an incapability of the
ISA Dialog Manager runtime. Now it works as expected.
- DLG SET .focus did not work if the addressed object was not
sensitive. This was caused by an incapability of the ISA Dialog
Manager runtime. Now it works as implemented in ASCII DLG: The next
sensitive object gets focused automatically.
- The performance of the DLG SET listbox.add and .insert statements
have been significantly improved.
- DLG SET listbox.cy did not work due to an internal problem in the
DLGSRV(32). This has been solved and now works as expected.
- DLG SET listbox.file and edittext.file formerly failed with error
651 if the file contained carriage-return codes. Now such files
load correctly.
- The listbox.topitem attribute now works. Formerly, it has been
ignored due to a problem in the attribute mapping code.
- The poptext object is now fully supported as a compatible replacement
for any listbox.
To use the poptext object, minor changes are necessary concerning
the defaults dialog files (defaults.eq, eqdef.mod, eqbind.mod,
eqbind.if). These changes are already integrated into the current
dialog files which are delivered with Eloquence A.06.20:
- In defaults.eq, the default settings for the poptext object must
be extended:
default poptext
{
.visible true;
.font NormalFont;
.width 40;
.posraster true;
.sizeraster true;
integer EqRule := 0;
integer EqActiveline := 0;
.function EqListBoxCB;
.bgc ColWin;
.fgc ColBlack;
}
- The same must be done in eqdef.mod:
export default poptext
{
.visible true;
.font NormalFont;
.width 40;
.posraster true;
.sizeraster true;
integer EqRule := 0;
integer EqActiveline := 0;
.function EqListBoxCB;
.bgc ColWin;
.fgc ColBlack;
}
- In defaults.eq and eqdef.mod, a select rule for the poptext
object must be provided:
// poptext: selected line has changed
on POPTEXT select {
this.EqActiveline := this.activeitem;
if( this.EqRule ) then
EqExitEventLoop( this, this.EqRule );
endif
}
- In defaults.eq, the 'select' trigger must be added to the
definition of the EqListBoxCB function:
function callback EqListBoxCB() for select, dbselect;
- The same must be done in eqbind.mod:
export function callback EqListBoxCB() for select, dbselect;
- Also, the eqbind.if interface file must be changed accordingly:
function callback EqListBoxCB() for select, dbselect;
- A POPUP BOX without a title failed to accept any keyboard input.
This was caused by an internal problem in the DLGSRV(32) message
filter. Now it works as expected.
- POPUP BOX will now be correctly centered unless you specify the x/y
coordinates in the POPUP BOX statement (horizontal centering is
applied if x=0, vertical centering is applied if y=0, if the
coordinates are omitted in the POPUP BOX statement both coordinates
are treated as 0).
Normally, POPUP BOX will be centered to the most recent DLG DO
window. If this is not available or invisible, POPUP BOX will be
centered to the screen.
You can also use the genuine position found in the defaults dialog
file (where the EqPopup object is defined). The genuine x coordinate
will be used if x<0, the genuine y coordinate will be used if y<0.
Thus, the statement 'POPUP BOX -1,-1,...' will use the genuine
position.
The POPUP BOX now supports automatic position saving and restoring.
This enables you to specify a x/y position for the box, either by
specifying .xleft and .ytop in the EqPopup object definition or
with DLG SET EqPopup.x/.y. If you afterwards execute the statement
'POPUP BOX -1,-1,...', the box will always appear at the specified
position, no matter if the user moves it on the screen.
In order to enable this, minor changes are necessary concerning
the defaults dialog files (defaults.eq, eqbind.mod, eqbind.if,
eqpopup.mod).
These changes are already integrated into the current
dialog files which are delivered with Eloquence A.06.20
(the lines you should insert are marked with
'>>>'):
- Insert the following line into defaults.eq after the definition
of the EqCallBack function:
function boolean EqCallBack( string, object, integer );
>>> function void EqRestorePopup();
- Insert the following line into eqbind.mod after the definition
of the EqCallBack function:
export function boolean EqCallBack( string, object, integer );
>>> export function void EqRestorePopup();
- Insert the following lines into eqbind.if after the reference
to the EqCallBack function:
function boolean EqCallBack(string input, object input, ...
>>>
>>> function void EqRestorePopup();
- Insert the following line into defaults.eq and eqpopup.mod
where the 'on EqPopup.EqPB1 select, key EqKbCR' rule is defined:
on EqPopup.EqPB1 select, key EqKbCR {
EqPopup.visible := false;
updatescreen();
>>> EqRestorePopup();
EqExitEventLoop( this, 1 );
}
Do the same with the EqPB2 ... EqPB5 rules.
In the current dialog files which are delivered with Eloquence
A.06.20, this line is commented out. If you want this functionality,
just remove the comment characters.
- On the Windows platform, a POPUP BOX now always stays on top of
all windows on the screen.
- The .do attribute did not work correctly if there has been another
dialog visible. This attribute has been introduced with Eloquence
A.05.02 in order to realize "Cancel" dialogs (dialogs which are
active outside a DLG DO statement), These dialogs can be used e.g.
to give the user the choice to interrupt a lengthy operation.
With Eloquence, a sample program is included named "CANCEL.PROG"
(in the share/example directory) which demonstrates the usage of
the .do attribute.
The Cancel dialog is contained in the "cancel.idm" file, which must
be slightly changed in order to work correctly even if another
dialog is visible. The line containing '.dialogbox false' must be
deleted (it is marked with '>>>'):
window CancelDlg
{
...
>>> .dialogbox false; <<< delete this line
This change has already been applied to the current "cancel.idm"
example file which is delivered with Eloquence A.06.20.
- DLGSRV(32) should now accept all relevant Dialog Manager native
attributes (for example 'edittext!editable'). In former releases,
the DLGSRV(32) internal list of native attributes was not complete.
When requesting a native attribute which delivers an object
identifier, e.g. DLG GET "Object!parent", the corresponding object
path should be delivered. This did not work correctly in former
releases and has been fixed now.
- The RUNSRV(32) DDE communications facility has been enhanced. It now allows
to specify the DDE acknowledge timeout which is necessary if you
want to perform lengthy DDE transactions (for example, a dialog box).
In such a case, the default timeout of 10 seconds will expire
before the transaction can be completed, resulting in a failure
code returned to the Eloquence program.
To set the DDE acknowledge timeout, execute a statement like below:
CALL DLL Run("RunSrv", hostname$, "DDE .TIMEOUT 30000", Errn, Msg$)
The "DDE .TIMEOUT 30000" specifies a 30000 milliseconds (30 seconds)
timeout interval. A timeout value of -1 will disable the timeout
detection, causing the RUNSRV(32) to wait infinitely for the
transaction to complete.
If you omit the timeout value ("DDE .TIMEOUT") the DDE acknowledge
timeout will be reset to its default of 10 seconds.
Due to a 16 bit Windows limitation, the maximum timeout value for the
16 bit RUNSRV is 65534 milliseconds. If you need a longer timeout
interval, the only choice you have is a value of -1 (infinite).
This limitation does not apply to the 32 bit RUNSRV32.
Please note that the default DDE acknowledge timeout (10 seconds)
will normally be sufficient. The timeout should only be modified
temporarily and restored to the default after the specific
transaction has finished. For example:
! Set DDE acknowledge timeout to 60 seconds
CALL DLL Run("RunSrv", hostname$, "DDE .TIMEOUT 60000", Errn, Msg$)
! Perform lengthy transaction
...
! Reset DDE acknowledge timeout to default
CALL DLL Run("RunSrv", hostname$, "DDE .TIMEOUT", Errn, Msg$)
|
|
|
|
|
|