.
contact contact

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:

    1. 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;
           }
      

    2. 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;
           }
      

    3. 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
           }
      

    4. In defaults.eq, the 'select' trigger must be added to the definition of the EqListBoxCB function:
           function callback EqListBoxCB() for select, dbselect;
      

    5. The same must be done in eqbind.mod:
           export function callback EqListBoxCB() for select, dbselect;
      

    6. 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 '>>>'):

    1. Insert the following line into defaults.eq after the definition of the EqCallBack function:
           function boolean EqCallBack( string, object, integer );
       >>> function void EqRestorePopup();
      

    2. 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();
      

    3. Insert the following lines into eqbind.if after the reference to the EqCallBack function:
           function boolean EqCallBack(string input, object input, ...
       >>>
       >>> function void EqRestorePopup();
      

    4. 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$)
    


 
 
.
 
 
  Privacy | Webmaster | Terms of use | Impressum Revision:  2002-11-18  
  Copyright © 1995-2002 Marxmeier Software AG