InTouch Word Wrap Function 1
CategoriesSCADAAutomationCodeInTouch

InTouch Word Wrap Function

With this code you can create multiple lines of text in InTouch using one input string.
The code is defined as a quick function, and can be called from within a code block, or on an animation event.
Simply pass in the text string to split, the number of characters per line, and which line you want to return.

Example

You have a text string that is 50 characters long, and you want to display it over 3 lines on a screen, but are limited to 20 characters per line.
Draw 3 lines of text on the screen.
Animate the text as follows:

  • Text 1: string input animation: Call SplitStringIntoLines(‘*YOUR STRING TAG*’, 20, 1)
  • Text 2: string input animation: Call SplitStringIntoLines(‘*YOUR STRING TAG*’, 20, 2)
  • Text 3: string input animation: Call SplitStringIntoLines(‘*YOUR STRING TAG*’, 20, 3)

Code

The following should be placed in a quick function called “SplitStringIntoLines”

{**********************************************************
*** Split the input string into a specified line
**
** adamrob.co.uk
** 5FEB2014 1428
**
** Inputs:
** sText = The text to split to multiple lines
** iLineLength = The amount of characters allowed per line
** iLineNumber = The line number to return
**
**********************************************************}
 
DIM initialString AS MESSAGE;
DIM finalString AS MESSAGE;
DIM nextString AS MESSAGE;
DIM currIndex AS INTEGER;
DIM lastIndex AS INTEGER;
DIM bDone AS INTEGER;
DIM iIndex AS INTEGER;
 
{** Set default next string value}
nextString = sText;
 
{**Check if the string is greater than max per line}
IF StringLen( sText ) > iLineLength THEN
 
    {** Loop around all lines}
    FOR iIndex=1 TO iLineNumber
 
        {** Check if its line 1}
        IF iIndex == 1 THEN
 
            {* Reset vars}
            currIndex=0;
            lastIndex=0;
            bDone=0;
 
            {** Loop through remaining text}
            FOR bDone = 0 TO iLineLength
 
                currIndex=currIndex+1;
                currIndex=StringInString(sText, " ", currIndex, 0);
 
                IF currIndex >= iLineLength THEN
                    initialString=StringLeft(sText,lastIndex);
                    EXIT FOR;
                ELSE
                    lastIndex=currIndex;
                ENDIF;
            NEXT;
 
            {** Check for a value. StringInString will loop around the string.
            ** So if there is no value assume we have reached the end of the string}
            IF (initialString == "") THEN
                initialString = sText;
            ENDIF;
 
        ELSE
 
            IF StringLen(nextString) - StringLen(initialString) > 0 THEN
                {** Build up the remaining string}
                nextString = StringRight(nextString,StringLen(nextString) - StringLen(initialString));
                initialString="";
                {* Reset vars}
                currIndex=0;
                lastIndex=0;
                bDone=0;
 
                {** Loop through remaining text}
                FOR bDone = 0 TO iLineLength
 
                    currIndex=currIndex+1;
                    currIndex=StringInString(nextString, " ", currIndex, 0);
 
                    IF currIndex >= iLineLength THEN
                        initialString=StringLeft(nextString,lastIndex);
                        EXIT FOR;
                    ELSE
                        lastIndex=currIndex;
                    ENDIF;
                NEXT;
 
                {** Check for a value. StringInString will loop around the string.
                ** So if there is no value assume we have reached the end of the string}
                IF (initialString == "") THEN
                    initialString = nextString;
                ENDIF;
 
            ELSE
                initialString="";
                EXIT FOR;
            ENDIF;
        ENDIF;
 
        {** Check if the current line is the line we need}
        IF iIndex == iLineNumber THEN
 
            finalString=initialString;
            EXIT FOR;
 
        ENDIF;
 
    NEXT;
 
ELSE
 
    IF iLineNumber == 1 THEN
        finalString=sText;
    ENDIF;
 
ENDIF;
 
RETURN finalString;

The arguments are:

  • sText as Message
  • iLineLength as Integer
  • iLineNumber as integer

Published by adamrob

dfgj fthj fgh fthjrt ryj ryhn ryhj ryhj ryhj ryuj ryuj