I do like the new (9.5) function show() to display status messages in my files. It’s a great way to display status messages.
Show() has a delay of five seconds before the next show event will show up.
In my code it could happen that I release many show() events one after the other. They will go on a stack in TBX and get shown one after another. This may result in a long list of show events and the front window’s message placard will go up and down very often.
So here is a little function (three functions to be precise) to collect those show events and always show the maximum of three lines in one event together. Reduces the number of events a little bit. Nothing spectacular
// manage the show events
// run once in a new file
function initShowStopper() {
require("Hints");
create("/gShowStopper");
createAttribute("LastShowEvent", "number");
createAttribute("ShowEventOn", "boolean");
DisplayedAttributes("/gShowStopper") = "LastShowEvent;ShowEventOn;";
$Rule("/gShowStopper") = "checkShowEvent();";
$ShowEventOn("/gShowStopper") = true;
$Text("/gShowStopper") = "Installation ShowStopper finished";
}
// check for open show events
function checkShowEvent() {
if($ShowEventOn("/gShowStopper")) {
var:number currentTime = date("now").format("U").toNumber;
var:list currentText;
var:string showText = "";
var:string restText = "";
// wait for at least 6 seconds to start a new show event
if($LastShowEvent("/gShowStopper") < currentTime - 6) {
if($Text("/gShowStopper") != "") {
// there is something to be shown
// lets get a max of 3 lines
var currentLineNum = 0;
currentText = $Text("/gShowStopper").split("\n+");
currentText.each(lineOfText) {
if(currentLineNum <= 2) {
showText += lineOfText + "\n";
} else {
restText += lineOfText + "\n";
};
currentLineNum += 1;
};
show(showText);
$Text("/gShowStopper") = restText;
$LastShowEvent("/gShowStopper") = date("now").format("U").toNumber;
$ShowEventOn("/gShowStopper") = true;
} else {
$ShowEventOn("/gShowStopper") = false;
};
};
};
};
// add new show event
function addNewShowEvent_db(newMessage:string) {
var:number currentTime = date("now").format("U").toNumber;
$ShowEventOn("/gShowStopper") = true;
$Text("/gShowStopper") += newMessage;
};
Very easy to use. Copy the code into a note in your library.
Put initShowStopper(); in a stamp and run it once. It will create all needed parts for the function.
Now you can use addNewShowEvent_db(“a message”) instead of show(“a message”).
That’s all. Have fun!