[Openroad-users] Deleting tabpage crashes OpenROAD

Frank Barratt f.barratt at btinternet.com
Thu Dec 6 22:42:57 EST 2007


Bodo, Thanks, I don't have any crashes now my arrays are in Sync, 
   
  Much appreciated.
   
  Frank.

Bodo Bergmann <Bodo.Bergmann at ingres.com> wrote:
      After analyzing the problem with the crash
  (which was caused by the TabPageArray and TabFieldsArray being not in synch) 
  I was rethinking about a better/easier solution for the problem,
  which is also using supported methods AddTabPage() and DeleteTabPage() only.
  Here it the code (also based on a TabFolder with 8 TabPages - each mapped to a UserClass object):
   
  initialize()=
declare
    i=INTEGER NOT NULL;
    k=INTEGER NOT NULL;
    maxpages=INTEGER NOT NULL DEFAULT 8;
    tabf = TabFolder DEFAULT NULL;
    tabpages = ARRAY OF TabPage DEFAULT NULL;
    tabfields = ARRAY OF TabField DEFAULT NULL;
    tabpages_sav = ARRAY OF TabPage;
    tablabels_sav = ARRAY OF StringObject;
enddeclare
{
    tabf = FIELD(field1);
    tabpages = tabf.tabpagearray;
    tabfields = tabf.TabBar.tabfieldarray;
    
    // Save all the "invisible" pages and their labels
    FOR i=2 TO maxpages DO
        tabpages_sav[i-1]=tabpages[i];
        tablabels_sav[i-1].Value=tabfields[i].TextLabel;
    ENDFOR;
    // Make pages 2 to 8 invisible
    FOR i=maxpages DOWNTO 2 DO
        tabf.DeleteTabPage(pagenum=i);
    ENDFOR;
    tabf.UpdField();
}
  
ON CLICK add_btn =
{
    IF tabpages_sav.LastRow>0 THEN
        tabf.Addtabpage(subform = tabpages_sav[1], tabtext= tablabels_sav[1].Value, pagenum=tabpages.LastRow+1);
        tabf.CurPageIndex = tabpages.LastRow;
        tabpages_sav.RemoveRow(rownumber=1);
        tablabels_sav.RemoveRow(rownumber=1);
    ENDIF;
}
   
  ON CLICK del_btn =
{
    IF tabpages.LastRow>1 THEN
        i = tabf.CurPageIndex;
        k = tabpages_sav.LastRow+1;
        tabpages_sav[k]=tabpages[i];
        tablabels_sav[k].Value=tabfields[i].TextLabel;
        tabf.DeleteTabPage(pagenum = i);
    ENDIF;
}

  Hope this helps,
  Bodo.
   
  Bodo Bergmann
  Senior Software Engineer
  OpenROAD Worldwide Development
  Ingres Corp.
   

    
---------------------------------
  From: openroad-users-bounces at peerlessit.com [mailto:openroad-users-bounces at peerlessit.com] On Behalf Of Bodo Bergmann
Sent: Wednesday, December 05, 2007 8:04 PM
To: International OpenROAD Users
Subject: Re: [Openroad-users] Deleting tabpage crashes OpenROAD


  
  Got it working using the DeleteTabPage() method:
   
  DECLARE
      ...
      maxpages=INTEGER NOT NULL DEFAULT 8;
    // Replace occurances of "8" with variable "maxpages" in previous code samples
  ENDDECLARE
   
  ON CLICK del_btn =
{
    IF lastvis>1 THEN
        i=FIELD(field1).CurPageIndex;
        FIELD(field1).DeleteTabPage(pagenum = i);
        tabflds.RemoveRow(rownumber=i);
        maxpages = maxpages-1;
   
          IF i=lastvis THEN
            FIELD(field1).CurPageIndex = i-1;
        ELSE
            FIELD(field1).CurPageIndex = i;
        ENDIF;
   
          lastvis = lastvis-1;
        FIELD(field1).UpdField();
    ENDIF;
}
   
   
   
  Bodo.

    
---------------------------------
  From: openroad-users-bounces at peerlessit.com [mailto:openroad-users-bounces at peerlessit.com] On Behalf Of Bodo Bergmann
Sent: Wednesday, December 05, 2007 4:36 PM
To: International OpenROAD Users
Subject: Re: [Openroad-users] Deleting tabpage crashes OpenROAD


  
  Frank,
   
  I have no problem deleting the last of the dynamically added pages using the following code:
   
    ON CLICK del_btn =
{
    i=FIELD(field1).CurPageIndex;
    IF i=lastvis and i>1 THEN
        lastvis = i-1;
        FIELD(field1).CurPageIndex = lastvis;
        tabflds_ori.RemoveRow(rownumber=i);
        FIELD(field1).UpdField();
    ELSE
        MESSAGE 'You can only delete the last of the added pages!';
    ENDIF;
}
  I also get a crash when deleting one of the others, I'll try to find out if there is a workaround (or fix).
   
  Bodo.
   
  Bodo Bergmann
  Senior Software Engineer
  OpenROAD Worldwide Development
  Ingres Corp.
   

    
---------------------------------
  From: openroad-users-bounces at peerlessit.com [mailto:openroad-users-bounces at peerlessit.com] On Behalf Of Frank Barratt
Sent: Wednesday, December 05, 2007 3:40 PM
To: openroad-users at peerlessit.com
Subject: [Openroad-users] Deleting tabpage crashes OpenROAD


  
  Hi all,
   
  Using code similar (and i have tried the exact code as well) to the example (that Bodo provided) below to set up a frame with one tabfolder containing 8 tabpages, I then needed a method of deleting a tab.
   
  I have tried ALL of the following -
   
  i=FIELD(field1).CurPageIndex;
   
   tabflds_ori.RemoveRow(rownumber=i);
   
  or 
   
  FIELD(field1).DeleteTabPage(pagenum =i);
   
    or
   
   FIELD(field1).TabBar.tabfieldarray.setrowdeleted(rownum = i);
   
    or
    FIELD(field1).TabBar.tabfieldarray.removerow(rownum = i);
   
  All of the above work one or two times then OpenROAD crashes with the w4gldev.exe exiting message resulting in the following in the errlog.log
   
  W2MZ452Q::[II\COMSVR\984     , 00000000]: Wed Dec 05 13:27:25 2007 E_GC220B_EXP_RCV_FAIL GCA expedited receive failure: reason follows.
W2MZ452Q::[II\COMSVR\984     , 00000000]: Wed Dec 05 13:27:25 2007 E_GC0001_ASSOC_FAIL Association failure: partner abruptly released association.
   
  any help on this would be appreciated.
   
  Regards
  Frank.

   
  initialize()=
declare
    i=INTEGER NOT NULL;
    lastvis=INTEGER NOT NULL DEFAULT 1;
    cust1 = customer DEFAULT NULL;
    tabflds_ori = ARRAY OF TabField DEFAULT NULL;
    tabflds = ARRAY OF TabField;
    tabpages = ARRAY OF TabPage DEFAULT NULL;
enddeclare
{
    tabpages = FIELD(field1).tabpagearray;
    tabflds_ori = FIELD(field1).TabBar.tabfieldarray;
    FOR i=1 TO tabflds_ori.LastRow DO
        tabflds[i] = tabflds_ori[i];
    ENDFOR;
    
    // Make pages 2 to 8 invisible
    FOR i=8 DOWNTO 2 DO
        tabpages[i].CurBias = FB_INVISIBLE;
        FIELD(field1).TabBar.tabfieldarray.RemoveRow(rownumber=i);
    ENDFOR;
    FIELD(field1).UpdField();
}

   
  
ON CLICK add_btn =
{
    IF lastvis<8 THEN
        lastvis = lastvis+1;
        tabpages[lastvis].CurBias = FB_CHANGEABLE;
        tabflds_ori.InsertRow(rownumber=lastvis, rowobject=tabflds[lastvis]);
        FIELD(field1).UpdField();
        FIELD(field1).CurPageIndex = lastvis;
      ELSE
          MESSAGE 'Only 8 pages allowed';
    ENDIF;
}
   
  
ON CLICK check_btn =
{
    FIELD(field1).CurTabPage.GetFieldValue(value=BYREF(cust1));
    MESSAGE cust1.Name;
}

  Bodo.
   
________________________________________________________________
OpenROAD-Users mailing list

You can maintain your subscription here:
http://www.peerlessit.com/mailman/listinfo/openroad-users

To unsubscribe click on this link
mailto:openroad-users-unsubscribe at peerlessit.com&subject=unsubscribe

To subscribe click on this link
mailto:openroad-users-subscribe at peerlessit.com&subject=subscribe 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.peerlessit.com/pipermail/openroad-users/attachments/20071206/ac51c805/attachment.html 


More information about the Openroad-users mailing list