Text List object

First, Thank you Jim, for the Christmas Update.

There is so much about the TextList Object. I’ve looked at textlisttableoptions in the Help and wonder if there’s a graphic that shows the properties window with arrows pointing to the myriad of fields and choices, describing each one - because it’s a little difficult for me to associate the Help textual description with the choices. Some are direct and clear, some not so much for me.

If there’s an example database that exercises those text list options I could probably learn a lot from looking at those settings for the textlist object and the result.

It does appear, as with the text display, that we can have any background color we want, as long as it’s white (or light gray with alternating colors).

A main task would be getting the content of the row (or cell if multi-column) clicked on. I’m guessing that I can put a variable in the Value box at the top, even though the popup only shows database fields. I suppose I could create a database field for that choice - no biggie.

But the fields like Query, Background check box, that funny “a” to the right of it, etc. those are a bit of a puzzle.

There’s enough I do understand to work with it for now, but this is going to be a useful object. So I’d like to know which each option does. I’ve changed some, switched to data mode, and didn’t see any difference. That’s why I was looking for something that describes each setting.

1 Like

Does the Text List Object page and the seven linked from it (Text List Appearance, Text List Constructor, Text List Database Integration, Text List Multiple Columns, Text List Programming, Text List Searching and Text List Selection) not illustrate and explain every available option? I think I’ve found everything I needed to know from those pages.

That’s the symbol for a partial derivative, which is presumably why it’s used to indicate the root of the variable names used to keep track of a partially completed search as it progresses. See ‘Displaying Search Progress’ in Text List Searching.

Thank you for the links. I put “Text List Object” in the Help Search window but nothing came up. I was able to copy your link and open it in a new window - so I’m there.

Too bad about the limited background colors (Yes, white is a commingling of all colors - sheesch).

I’d say I’m on a roll but more accurately, on a list.

If you mean you tried using the search box at the top of Panorama X’s ‘Help’ menu, that might explain why you’ve been failing to find the information you need. You need to launch the database ‘Panorama X Help’ from the ‘Help’ menu:

If you then type ‘text list object’ into the help database’s search box, the single result will be for that page:

Screenshot 2023-12-27 at 00.04.07

And if you search less specifically for ‘text list’ the eight results are the pages I mentioned above:

Screenshot 2023-12-27 at 00.03.50

However, you previously mentioned reading about textlisttableoptions, which suggests you must somehow already have reached the page for that — either in the help database or via www.provue.com. It contains three separate links to the Text List Object page, from which the other seven pages I mentioned are linked:

Thank you for those examples. From reading, it appears the data displayed in a text list object examples, especially a multi-column one, is strongly tied to database fields and the descriptions are not so clear about using variables.

I can create a tab-delimited array of values, with the desired column headers at the top, but need to know where the text list object wants it.

I populated a variable, textlistheader with three strings delimited by tabs and put that variable in the formula area (with and without quotes) but the text list object wouldn’t recognize it.

I looked at the blueprint to see if that would take a variable - perhaps ChangeObject is route to glory.

Maybe that “Multiple Columns” check box only applies to data typed into that box or data via the @databasefield designation.

It looks like, if it’s a multi-column list, that if a column - like column 1 has six data rows, column 2 has 9 rows, and column 3 has 4 rows, I’ll need to give those empty rows a “fill” with a + ¬ + “” + ¬

it appears there is no CR() between rows in the data list. For example, a 3-column list with 3 rows would be a concatenation of 9 strings delimited by tab characters.

I have figured out that I can’t just put the procedure name I want to activate with a selection in the Procedure box. I have to put some actual procedure code in there - so putting in Call MyProcedure works.

So I can trigger my procedure, I can pick up what’s clicked, but now I need to populate the list with calculated values that are in a tab-delimited string/array rather than data fields.

Is that possible?

As Text List Multiple Columns states, ‘In the examples so far, the list has been fixed and unchanging, but that is unusual. In most applications the formula will be set up to get the text from a variable, a field, or thru a more complex calculation.’

The text list displays (and potentially modifies) a two-dimensional text array of one or more cr()-separated rows, each of one or more tab()-separated columns.

For instance, create a new Text List object, ensure ‘Display Header’ and ‘First Row Contains Column Names’ are selected in Text List Options, then enter


in Formula then click ‘Apply’. (The catcherror( ensures the text list displays as empty rather than generating an error if the form is opened before the variable Contents is initialised).

Then the text list will display the contents of the text array contained in the variable Contents, for instance:

letfileglobal Contents=
    "A" +tab()+"B" +tab()+"C" +cr()+ // this is the header row
showvariables Contents

giving a text list object which, by default, displays as:

Of course, if the contents of Contents subsequently changes, a further showvariables Contents will be necessary to update the text list display.

Fantastic! Thank you pcnewbie.

It looks like, if I didn’t want the “CatchError” construction (I initialize everything, often with Define, in the .Initialize routine - an old COBOL habit), I could just put Contacts in the Formula area. I tried that with my own textlistheader variable but it didn’t have a CR() row terminator. I’ll use CatchError if that kind of construction is required.

With that implemented, I’m on to part 3 of 4 in completing this project.

When a database opens, its initial window(s) open first, then the .Initialize runs. Catcherror( was to catch the error that occurs when the form opens in the initial window, before the variable is defined by .Initialize.

1 Like

You may find this general overview page helpful.

There are tons of examples in the help of exactly what you are trying to do (i.e. display a list from a variable rather than from the database). In fact most of the examples are of that except for the Text List Database Integration page.

There are also detailed examples in the Intensive Training video course, which I think you have access to.

Dave, but what about that line in Genesis 1:3-5. On the first day, God pushed Initialize? That does solve the apparent issue of creating the sun, moon, and stars on the fourth day.

Thank you - I would have continued to believe initialize actions were the very, very first thing PanX did. I now understand Jim’s admonition about using Initialize to open the first window and the effort he put into adding the Initial Windows specification in DataBase Options.

Also, I now understand why you’d want a CatchError. The middle ground of a process is so easy - it’s those starting and ending points that can get jammed up.

Jim, Display Data in a Grid - Got it. :grinning:

When I created put Contents in the formula area and pushed Apply, there would be no header (“First Row Contains Column Names” is checked). I’d just get the A in the first and second rows of the first column.

When I used my own variable, TextListHeader, in the formula area
TextListHeader holds “Pattern 1” + ¬ + “Pattern 2” + ¬ + “Pattern 3” + CR() +
“N/A” + ¬ + “N/A” + ¬ + “N/A”
and pushed Apply, there would be no header but “Pattern 1”, as with A in the example above, would repeat in the first and second row

The blueprint shows it’s picking up the desired variable:
“$BorderTopMargin”,“0 px”,

If I used the Multiple Columms box and put in
Pattern 1
Pattern 2
Pattern 3

I get three columns with Pattern 1, Pattern 2, and Pattern 3 as headers but those headers were also repeated in the first two rows like

Pattern 1. Pattern 2. Pattern 3
Pattern 1. Pattern 2. Pattern 3
Pattern 1. Pattern 2. Pattern 3

If I click on any column/row my value variable would contain the contents of all three columns and both rows as
Pattern 1. Pattern 2. Pattern 3
Pattern 1. Pattern 2. Pattern 3

Allow Multiple selections is not checked.

I deleted that Text List Object and started fresh with a new one.

After setting TextListHeader = “Pattern 1” + ¬ + “Pattern 2” + ¬ + “Pattern 3” + CR() +
“N/A” + ¬ + “N/A” + ¬ + “N/A”
I put TextListHeader in the Formula area and pushed Apply

This time it was much better behaved. The Column Headers were in the right place but there was no content in the rows. I expected an “N/A” under each column in the first row.

My Procedure, ProcessHintSelection, for now, just displays what was clicked on in the Text List.
Message "You clicked on " + LocationSelection
I have, Call ProcessHintSelection, in the Procedure area but it doesn’t fire when I click on any Column/Row

I then put the "Message “You clicked on " + LocationSelection” directly in the Procedure area - still no Joy.

So I’m just missing something. I have looked in Text List ProgrammingTime for attack method B.
I’ll open a separate database and paste in the examples given in the help links. Once they are working, I can modify headers and content to the data I’m using.

I’ll also review the videos.

You are embedding the column names in the data itself, which is fine, but you have to tell Panorama that you want to do that:

If you don’t check the First Row Contains Column Names option, Panorama will expect the column names to be set up in the property inspector rather than grabbing them from the data.