Unexpected problems continued

Workarounds and usability notes.

Unexpected problems continued

Postby John Robin Dove » Thu Jul 27, 2017 10:36 am

Hi Clifton,
The problems have not gone away. There are more and more of them. Things that have been working fine for at least two years no longer work. Some I can get to work by adding setTimeOut as you sugested but this is not satisfactory because they are liable to stop working again for no apparent reason. It seems to me that something must have changed fairly recently. I suspect the Powerpac. To test this theory I reinstalled an older beta version released in March. The problems were solved insofaras my scripts did what they were supposed to do: no error messages, no mysterious failures of execution.

Unfortunately I now have many other problems. Perhaps you have changed the way XML files are used. They no longer set up the page as required. Also certain groups do not display correctly etc. etc.

It's all pretty depressing. I think I may have to abandon this project or try using some other tool. After years of plodding, slow progress ...

John

UPDATE

By a stroke of luck I had not updated Powerpac on another computer. Using 13.461.0 beta all the problems disappear. So whatever is causing them must have been added since that release.

One other possibility: could a Java update be the cause? My other computer prompted me to install an update but I didn't install it. I doubt whether it's this though because you would have had problems too
John Robin Dove
 
Posts: 486
Joined: Thu Jan 23, 2014 4:35 am

Re: Unexpected problems continued

Postby Clifton » Thu Jul 27, 2017 4:17 pm

Please check the revision log for the latest release of the PowerPac. You can see what changed since v13.461.x and see if something in the list is causing your issue. I've kept a pretty thorough list in the forum for changes that were made. It looks like changes from 13.461 onward are unrelated to anything you are experiencing.
 
Clifton
Site Admin
 
Posts: 732
Joined: Tue Jan 14, 2014 1:04 am

Re: Unexpected problems continued

Postby John Robin Dove » Fri Jul 28, 2017 2:58 am

Hi Clifton,

Yes, you're right. I spoke too soon. 13.461 does not provide a solution after all. Because of the random nature of the problems I thought it did but after some more thorough tests I realized that nothing had been solved at all.

I still remain convinced that 13.150 does solve the big problems but creates numerous others. I have singled out two functions in my external JS file(s) (b.js)' that tend to cause errors but there may well be many others.

showRequest2
Code: Select all
function tbfunction_showRequest2(txt, button1, button2, objName){

var leftPos;
var pos2;
var buttonWidth1;
// remove shadow in case size changes and new shadow must be created
tbfunction_createAlphaShadow("requestShadow", true);
//Change colour for help
tbfunction_pgTBObjSet("response", "visible", false);
var isHelp = tbfunction_pgTBObjGet("requestBar","enabled");
    if (isHelp == false)
    {
    tbfunction_pgTBObjSet("requestDisplay", "backgroundColor", "255,250,205");
    }
    else
    {
   tbfunction_pgTBObjSet("requestDisplay", "backgroundColor", "255,255,255");
    }
 
    if (button1 == 1 || button1 == "OK")
    {
    //show OK button only
        if (button2)    // illegal character in button2
        {
         txt = txt + " " + button2;
        }
     tbfunction_pgTBObjSet("buttonOK", "visible", true);
     tbfunction_pgTBObjSet("button1", "visible", false);
     tbfunction_pgTBObjSet("button2", "visible", false);
     tbfunction_pgStyleObject("requestDisplay", "padding-bottom", "70px");
    }
    // response field + OK + Cancel (plus text displayed as response)
    else if (button1 == 2)
    {
        if (objName)
        {
           if (objName.charAt(0) == "+")
           {
           objName = objName.replace("+", "")
            }
        }
      tbfunction_pgTBObjSet("buttonOK", "visible", false);
      tbfunction_pgTBObjSet("button1", "text", "OK");
      tbfunction_pgTBObjSet("button1", "visible", true);
      tbfunction_pgTBObjSet("button2", "text", button2);
      tbfunction_pgTBObjSet("button2", "visible", true);
      tbfunction_pgStyleObject("requestDisplay", "padding-bottom", "100px");
      tbfunction_pgTBObjSet("response", "visible", true);
      tbfunction_pgExecuteRemote("response", "setName", objName, true);
      tbfunction_pgExecuteRemote("response", "setFocus");
    }
    else if (button1 == "3")
    //show 6 Action buttons
    {
     tbfunction_pgTBObjSet("buttonOK", "visible", false);
     tbfunction_pgTBObjSet("button1", "visible", false);
     tbfunction_pgTBObjSet("button2", "visible", false);
     tbfunction_pgStyleObject("requestDisplay", "padding-bottom", "43px");
     tbfunction_pgTBObjSet("B4", "visible", true);
     tbfunction_pgTBObjSet("B5", "visible", true);
     tbfunction_pgTBObjSet("B6", "visible", true);
     tbfunction_pgTBObjSet("Abuttons", "visible", true);
    }
    else if (button1 == "4")
    //show 4 Action buttons
    {
     tbfunction_pgTBObjSet("buttonOK", "visible", false);
     tbfunction_pgTBObjSet("button1", "visible", false);
     tbfunction_pgTBObjSet("button2", "visible", false);
     tbfunction_pgStyleObject("requestDisplay", "padding-bottom", "43px");
     tbfunction_pgTBObjSet("Abuttons", "visible", true);
     tbfunction_pgTBObjSet("B4", "visible", true);
     tbfunction_pgTBObjSet("B5", "visible", false);
     tbfunction_pgTBObjSet("B6", "visible", false);
    }
    else if (button1 == "6")
    //show 3 Action buttons
    {
     tbfunction_pgTBObjSet("buttonOK", "visible", false);
     tbfunction_pgTBObjSet("button1", "visible", false);
     tbfunction_pgTBObjSet("button2", "visible", false);
     tbfunction_pgStyleObject("requestDisplay", "padding-bottom", "43px");
     tbfunction_pgTBObjSet("Abuttons", "visible", true);
     tbfunction_pgTBObjSet("B4", "visible", false);
     tbfunction_pgTBObjSet("B5", "visible", false);
     tbfunction_pgTBObjSet("B6", "visible", false);
    }
    else if (button1 == "5")
    //show OK button, 'No limit' button + input box   
    {
     tbfunction_pgTBObjSet("button1", "text", "OK");
     tbfunction_pgTBObjSet("button2", "text", "No limit");
     tbfunction_pgTBObjSet("buttonOK", "visible", false);
     tbfunction_pgTBObjSet("button1", "visible", true);
     tbfunction_pgTBObjSet("button2", "visible", true);
     tbfunction_pgStyleObject("requestDisplay", "padding-bottom", "100px");
     tbfunction_pgTBObjSet("response", "visible", true);
     tbfunction_pgExecuteRemote("response", "setName", "", true);
    }
    else if (button1 == "7")
    //show OK button, 'Cancel' button + input box   
    {
     tbfunction_pgTBObjSet("button1", "text", "OK");
     tbfunction_pgTBObjSet("button2", "text", "Cancel");
     tbfunction_pgTBObjSet("buttonOK", "visible", false);
     tbfunction_pgTBObjSet("button1", "visible", true);
     tbfunction_pgTBObjSet("button2", "visible", true);
     tbfunction_pgStyleObject("requestDisplay", "padding-bottom", "100px");
     tbfunction_pgTBObjSet("response", "visible", true);
     tbfunction_pgExecuteRemote("response", "setName", "", true);
    }
    else
    //show 2 buttons for answer to question.
    {
     tbfunction_pgTBObjSet("buttonOK", "visible", false);
     tbfunction_pgTBObjSet("button1", "visible", true);
     tbfunction_pgTBObjSet("button2", "visible", true);
     tbfunction_pgTBObjSet("button1", "text", button1);
     tbfunction_pgTBObjSet("button2", "text", button2);
     tbfunction_pgStyleObject("requestDisplay", "padding-bottom", "70px");
    //get left of OK button
     leftPos = tbfunction_pgGetStyle("buttonOK", "left");
     leftPos = leftPos * 1
     buttonWidth1 = tbfunction_pgTBObjGet("button1", "width");
     buttonWidth1 = tbfunction_pgTBObjGet("button1", "width");
     leftPos = leftPos - (buttonWidth1 + 10);
     tbfunction_pgTBObjSet("button1", "left", leftPos);
    }

tbfunction_pgTBObjSet("requestDisplay", "text", txt);
var displayHeight = tbfunction_pgTBObjGet("requestDisplay", "height");
var holdHeight = displayHeight;
    if (button1 == "2" || button1 == "5" || button1 == "7")
    {
     tbfunction_pgTBObjSet("response", "top", displayHeight - 70);
    }

tbfunction_pgTBObjSet("requestShadow", "height", holdHeight + 20);
displayHeight = tbfunction_pgTBObjGet("requestGroup", "height");
tbfunction_pgTBObjSet("mover", "height", displayHeight + 5);
displayHeight = tbfunction_pgTBObjGet("requestDisplay", "height");
displayHeight = displayHeight - 20;
tbfunction_pgTBObjSet("buttonOK", "top", displayHeight);
tbfunction_pgTBObjSet("button1", "top", displayHeight);
tbfunction_pgTBObjSet("button2", "top", displayHeight);
// create shadow
tbfunction_createAlphaShadow("requestShadow");
var fct = function () {
// center the group on the page
// tbfunction_snapObjectToCenter("mover","page")     //DOES NOT WORK!!!
tbfunction_pgTBObjSet("mover", "left", 347);
tbfunction_pgTBObjSet("mover", "top", 231);
tbfunction_pgTBObjSet("mover", "visible", true);
tbfunction_pgTBObjSet("requestGroup", "visible", true);
// Not sure why this has to go here???
    if (button1 == "6" || button1 == "3" || button1 == "4")
    {
    tbfunction_pgTBObjSet("AButtons", "visible", true);
    }
tbfunction_pgStyleObject("requestDisplay", "padding-top", "45px");
tbfunction_pgTBObjSet("shield", "visible", true);
}
setTimeout( fct, 200);
};


showPad
Code: Select all
function tbfunction_showPad(progFolder, timeAllowed) {
tbfunction_pgTBObjSet("pad", "height", 362);
var barWidth = tbfunction_pgTBObjGet("bar", "width");
tbfunction_pgTBObjSet("textDisplay", "width", barWidth);
var isVisible = tbfunction_pgTBObjGet("teacherPad", "visible");
    if (isVisible == false)
    {
    tbfunction_pgTBObjSet("pad", "visible", true);
    tbfunction_pgGotoURL("pad", "/programs/video/CKE/pad/pad.html");
    }
    else                                                             
    {
    tbfunction_pgTBObjSet("menu", "visible", true);
    tbfunction_pgTBObjSet("teacherPad", "text", "");
    tbfunction_pgTBObjSet("pad", "visible", true);
    }
  var fct = function () {
// tbfunction_snapObjectToCenter("container","page")  NO LONGER WORS
  tbfunction_pgTBObjSet("container", "left", 233);
  tbfunction_pgTBObjSet("container", "top", 103);
  tbfunction_pgTBObjSet("shield", "visible", true);
  tbfunction_pgTBObjSet("container", "visible", true);
  tbfunction_pgTBObjSet("myGroup", "visible", true);
  timeAllowed = timeAllowed * 1
    if (timeAllowed > 0)
    {
    var lapseS = tbfunction_pgDateFormat(timeAllowed, "isoTime");
    lapseS = lapseS.substring(3, 8);
    tbfunction_pgTBObjSet("writingCounter", "text", lapseS);
    tbfunction_pgTimer(true, 1000, "writingCounter");
    tbfunction_pgTBObjSet("timedWriting", "visible", true);
    tbfunction_pgTimer(false, timeAllowed, "hideStart");
    }
  }
  setTimeout( fct, 200);
};


I can see that they are overly complex and no doubt badly written but why did they always work for more than 2 years until recently? The problem is I don't know precisely which revision caused the problems because this year I stopped work on the progect several times and for at least a month in some cases so I just downloaded the latest revision when I started work again.

Here is a screenshot showing what shoWRequest2 does. It comes after showRequest. ShowRequest gets the appropriate translations from an XML data base. The process is also fairly laborious but still works perfecly. showRequest2 puts the texts into objects in a group designed to look and behave like a Toolbook request dialog box or a VB messageBox. As you can imagine it is used hundreds of times in the program.

Image

The group is sitting on a transparent field which is added to the group on page load. The blue button at the top allows the user to move it around the page just like a request box in TB. The first time I saw it work I was amazed because there were seemingly no problems at all. By installing older versions of Powerpac I seem to have corrupted other parts of the system. As you can see in the screenshot the buttons have no icons or text. These should be loaded by an XML file that you helped me to create. If I use the latest Powerpac they come back BUT things like showRequest and showPad become randomly unstable even with the setTimeOut system. The sometimes work but most of the time they don't and they kill the execution. Sometimes they produce messages like these and others but they don't make any sense to me.

Image

Image

So where do I go from here? Is there any way I can get the files to export correctly using an older version. I have tried using a copy of the tbk file made in February (and not modified since) but it makes no difference.

John
John Robin Dove
 
Posts: 486
Joined: Thu Jan 23, 2014 4:35 am

Re: Unexpected problems continued

Postby Clifton » Fri Jul 28, 2017 1:22 pm

First let's look at the error dialogs:
    Image 1.png
    TypeError: a is undefined
    Image 1.png (2.19 KiB) Viewed 1194 times

    This one indicates you have an error in your function code. It could be a failure to take into consideration a condition and you function is evaluating a number that is undefined, etc. In looking at your code, this error MAY originate with a missing line terminator ( ; ) here:
    timeAllowed = timeAllowed * 1

Now let's look at this error dialog:
    Image 2.png
    ReferenceError . . .
    Image 2.png (2.9 KiB) Viewed 1194 times

    This error indicates you are attempting to call a function that does not exist in your code. I notice you have a function called tbfunction_showRequest2() but you may have removed the one that your code is looking for and that generates the error.
Regarding snapObjectToCenter():
  • Originally, this function was not designed to work with groups as the object to manipulate.
  • The latest version of the PowerPac handles groups as tbName and refObj parameters.
  • The only reason why you code may be failing is because "mover" is mis-spelled OR because you had a missing line terminator in your code on the line where you call this function.

I've edited your code a little for the two functions you submitted.
Attachments
functions.zip
(1.9 KiB) Downloaded 81 times
Clifton
Site Admin
 
Posts: 732
Joined: Tue Jan 14, 2014 1:04 am

Re: Unexpected problems continued

Postby John Robin Dove » Sat Jul 29, 2017 8:30 am

Hi Clifton,

Thanks for your efforts. Sadly the new code makes no difference at all. I somehow knew it wouldn't. It's not that I underestimate you ability. I just don't think this is a code problem. It's something more fundamental. The code in the b.js file has not been added to or modified for years. I take the view that "if it ain't broke don't fix it". These particular functions must have functioned correctly for at least three years until a few weeks ago. I know this because I was asking you questions about them on this forum back in 2014.

The failure symptoms are extremely random. Sometimes there is no error message. This is probably the most common situation. When there are messages they are often different. They make no sense. "tbfunction_showRequest is not defined" is nonsense because it is defined in black and white! Have I ommitted something like a semi-colon? I doubt it very much I've checking all the code over and over for days but I agree it's still a possibility.

I'll explain how showRequest and showRequest2 work but honestly I think this is a red herring. I don't even think they are culprits, just victims in a overall loss of "execution power". Things that were possible until recently are no longer available. Probably the more complex a function is the more likely it is to feature in a failure.

showRequest receives parameters either as text or numbers. If it receives text the process is simpler, it just passes on the parameters via field "translate" to showRequest2 which shows the request box containing a text on a field and one or two buttons with appropriate captions. When the parameters are numbers a chain of functions are called via objects and a shared script. The numbers refer to lines in an XML database. It's all pretty messy I agree but it always worked! showRequest is also used to display "custom tool tips" in five languages. Again this has never been a problem.

I am using 2 tbks. MDCTV1.tbk and MDCTV2.tbk both use an additional js file AVT1.js and AVT2.js. In the case of MDCTV2 this is unavoidable because the file as close as possible to being overloaded. The function showRequest is the last function in the file AVT2.js

Here are the js files https://www,mediacours.com/tb_examples/AVT1.zip but I think you'd be wasting your time looking at them in detail.

I still think the most likely cause is a Powerpac revision. Why do I think this? I have been establishing exactly where in the action sequences failures occur. Here is an example:

Image

(Note this is just one example. There are many others. I think it would be a mistake to focus on one particular function because sometimes certain functions work and other times they don't as if they were running out of memory.)

This is at the end of long series of complex actions. The code runs until alert ("here") Then nothing else happens. Not even a message. I have a Powerpac beta 13.150 installer that I retrieved from the temp folder. I thought it might be useful in such a case as this. It is and it isn't. Apparently using an older version will not work. It produces all kinds of dysfunction. XML files are not implemented, objects are in the wrong place etc. On the other hand if you try to create the error shown above using this version, the error disappears. showRequest is executed as planned. Of course it's not usable because the objects contain no text and the whole group is awry but it doesn't seem to "run out memory2 and displays the group as planned.

John
John Robin Dove
 
Posts: 486
Joined: Thu Jan 23, 2014 4:35 am

Re: Unexpected problems continued

Postby Clifton » Sat Jul 29, 2017 11:20 am

Hi John,

Certainly interested in helping if possible.

John Robin Dove wrote:
The failure symptoms are extremely random. Sometimes there is no error message. This is probably the most common situation. When there are messages they are often different. They make no sense. "tbfunction_showRequest is not defined" is nonsense because it is defined in black and white! Have I ommitted something like a semi-colon? I doubt it very much I've checking all the code over and over for days but I agree it's still a possibility.

I'll explain how showRequest and showRequest2 work but honestly I think this is a red herring. I don't even think they are culprits, just victims in a overall loss of "execution power". Things that were possible until recently are no longer available. Probably the more complex a function is the more likely it is to feature in a failure.


Random errors are interesting in web applications. They almost always suggest problems with how things are loaded and used.
In this case, your statement about tbfunction_showRequest() tells me that the js file that contains the definition for this function is not fully loaded before the code which relies on it tries to execute it. That is why the error pops up . . . that is also why the error Is random—it all depends on how the timing affects availability of functions in the DOM (Document Object Model). These error messages are never bogus and indicate an underlying problem. Even the browser used for testing can affect how quickly things load and become available. The challenge for developers is to make sure everything that is used is available in every case and works in all supported browsers.

Now consider this scenario:
    Suppose I use an external js file called "myAddons.js" and it contains a function called tbfunction_showRequest().
    Consider that it gets loaded this way:
    on load page
    pgExtFiles( "../media/myAddons.js", "load", "", true, "", "", ""); discard return value;
    execute script showRequest(); store return value in myVar;
    end load page

    In this example, the line to execute showRequest() will randomly fail to work. The reason, is because the myAddons.js may not have finished loaded and adding its functions to the DOM because an attempt to execute occurs.

    To guarantee that it will work, you could add a media delay, but that will only cause the problem to occur less often but not necessarily disappear.
    So this is NOT the best solution:
    on load page
    pgExtFiles( "../media/myAddons.js", "load", "", true, "", ""); discard return value;
    Delay 100ms
    execute script showRequest(); store return value in myVar;
    end load page

    Of course if the delay is really long like 2000ms then the errors may disappear completely, but this is an unnecessary use of the delay mechanism built into JavaScript. Plus, once you put the application on the web, it may still fail because of latency issues.

    The best solution is to use the pgExtFiles() parameter called notifyOnLoad which tells pgExtFiles() to send a user event to an object when all the resources in myAddons.js are load and ready. Then you would place the rest of your actions on the notifyOnLoad object's user event. Now the call to showRequest() will never fail in any browser.
    on load page
    pgExtFiles( "../media/myAddons.js", "load", "", true, "", "addonsObj"); discard return value;
    end load page

    on user event [value]
    Comment: for "addonsObj"
    execute script showRequest(); store return value in myVar;
    end user event



    While this example considers how things work with js files, the problem also occurs with XML files managed by the PowerPac as well. The XMLHttpRequest() function also has a notifyObject parameter built in to allow it to work asynchronously as recommended by W3C (Worldwide Web Consortium).
MY POINT:
  1. A failing PowerPac function is never (or at least extremely rarely) random, and if it was causing an error, it will consistently appear at the same failing location in the code. The error can usually be diagnosed either by content or by location in the code.
  2. I think there is a load sequencing issue in your application at the front end that is causing resources to not be available to the code when it is being called. The solution may be to look at the front end and ensure resources are loaded before they are used.
  3. I'm certainly glad to explore the possibility of a PowerPac issue, but so far we haven't been able to isolate one. Just because something once worked and now it doesn't could even be a result of a new browser versions (Edge, Firefox, Chrome, etc.). Browsers have been developed to do more and more asynchronously which means multiple files are loading and executing at once during the launch of a web application. You can see this using the "Network" tab in the Chrome and Firefox developer tools. So what once worked without verifying that resources were available, may no longer work in a newer browser version.

If you are using XMLHttpRequest() to load XML files and some of this code is giving random issues, I may want to look at an XML file or two to see if I can spot if loading the XML is giving trouble. While PowerPac's XML Parser has come a long way, this is the main component that has undergone changes in the course of PowerPac v14.0. You can examine the load process of XML files into a ToolBook application by using Firefox's developer tools (F12) > click the DOM tab > scroll down to the variable [pg_xml] and explore the content of each indice of this array. Each XML file loaded will occupy its own indice. REMEMBER: Just because this variable may look fine, it doesn't mean your code had access to it when it tried to execute something.

Lot's to digest here!
 
Clifton
Site Admin
 
Posts: 732
Joined: Tue Jan 14, 2014 1:04 am

Re: Unexpected problems continued

Postby Clifton » Sat Jul 29, 2017 8:38 pm

Let's clear up the snapObjectToCenter() issues:
I've prepared a sample (TB v9.01) file which demonstrates the exact naming convention and usage you are employing in your project.
Simply download and export ... if the group DOES NOT center to the page as shown in the example, then there is a bigger problems on your system.
    Image 1.png
    My Exported Result
    Image 1.png (29.41 KiB) Viewed 1189 times
Attachments
snapObjectToCenter-v901.zip
snapObjectToCenter (ToolBook v9.01 file)
(22.69 KiB) Downloaded 95 times
Clifton
Site Admin
 
Posts: 732
Joined: Tue Jan 14, 2014 1:04 am

Re: Unexpected problems continued

Postby John Robin Dove » Sun Jul 30, 2017 11:29 am

Hi Clifton,

Thank you for all the information. My confidence in my ability to complete this project has taken a serious knock. I've struggled with it from the outset but in the past either by intuition or more often with your generous help I have always found solutions. I probably should not use the word random to describe what's happening but what I mean is that when errors and failures start popping up in so many different parts of the program even in 2 different exported tbks, I'm skeptical that a bit of code tweaking is going to fix things. You have a valid point about loading processes. There are a lot. If they are involved it would seem, in the case of the example of failure I described above, that the loading of file b.js may be a problem but I tried this: at the end of the action block that ends
Code: Select all
alert ("here"); showRequest(parameters)
I disabled the last action and put it in a button click. I figured this might give the system a breather if I waited a few seconds before clicking. The result is identical. Nothing happens. So maybe the js file is not loaded? In that case how on earth does it manage to use showRequest to display the multilingual custom tool tips?! These start life as a call to showRequest. If anything they're even more complicated to display than the request dialog but they are working perfectly. AND WHY WAS NONE OF THIS HAPPENING UNTIL NOW? I cannot think of any changes I have made that could have caused such problems. For the last few weeks I have mainly been completing the translation database which is more like typing than progamming. I was running the program in French when the errors began. I've switched to English but that hasn't soved anything. It would have been pretty amazing if it had!

I'll be taking a look at snapObjectToCenter in due course but quite frankly I don't thinks it's an issue. I will also try and put showRequest back into the tbk (where it was originally) but I can't do this for the second tbk. It's already too full.

I'll need to send you more details about the loading processes etc. but it may not be immediately as I am unwell at the moment.
John Robin Dove
 
Posts: 486
Joined: Thu Jan 23, 2014 4:35 am

Re: Unexpected problems continued

Postby Clifton » Sun Jul 30, 2017 4:10 pm

If your language translations are going into an XML file, then be aware that an error in an XML can cause downstream problems too.
Just a couple of things to be aware of with XML tags:
    Image 1.png
    XML <tag> naming rules
    Image 1.png (15.26 KiB) Viewed 1186 times
These are illegal XML tags:
  • <my field> ... </my field>
  • <1stList> ... </1stList>
  • Though legal, I do not recommend using periods in XML tag names as they have not be tested with the PowerPac XML Parsing Engine.
If you receive NO error messages, then it could be that the XML parser just stumbles over a problem in an XML file and this causes the rest of your code to not load. This is only a possibility.
 
Clifton
Site Admin
 
Posts: 732
Joined: Tue Jan 14, 2014 1:04 am

Re: Unexpected problems continued

Postby John Robin Dove » Wed Aug 23, 2017 8:18 am

Hi Clifton,

I'm back at work. I couldn't find any problems with the XML files.

For reasons unknown, setting the visible property of one particular object to true suspended execution without an error message. The actions are now being executed as required.

I may be wrong but as far as I can see, using snapObjectToCenter in one particular part of my code in a js file no longer functions although it was never a problem in past versions of my program and your test app snapObjectToCenter-v901.tbk functions correctly. This is a mystery but not a problem because using pgTBObjSet to set the object(s) to the required position cam be used instead.

John
John Robin Dove
 
Posts: 486
Joined: Thu Jan 23, 2014 4:35 am

Next

Return to General Discussion

Who is online

Users browsing this forum: No registered users and 3 guests

cron