Version 0.9 (released May 15th, 2017)
Documentation is the primary focus of this version. It includes tons of new and revised material, and also significant new features in the Panorama Help Wizard itself.

- Major revamp of the main help page, which now is actually useful as a guide to the extensive Panorama X documentation.

- Step-by-Step Tutorial for new users added to Panorama Help. I think this tutorial also will be useful for many users transitioning from Panorama 6, though it is not explicitly designed for that. Also added a Tutorial realm to the Help pop-up menu, and the Help>Panorama X Tutorial menu item now works.

- Right clicking on a link in the Panorama Help window opens a pop-up menu with options for opening the link in a new window, in the standard web browser, or to copy the link to the clipboard. A modified form of this pop-up menu has been around since the beginning, but now the items in this menu actually work!

- The breadcrumb navigation links at the top of each help page have been revamped to bring them in line with the help content. All broken breadcrumb links have been eliminated (unfortunately, there are still a few dozen pages that simply have the wrong breadcrumb links, these will have to be laboriously tracked down by hand for a future release.)

- The Panorama documentation includes over 103,000 cross reference links. In the past, thousands of these links were broken and led to the Under Construction page. In this release all but a few dozen broken links have been fixed (the remaining broken links point to help topics that still haven’t been written yet).

- “See Also” links now include the description of each linked page, not just the page name.

- Detailed formula documentation added to Panorama Help. Also, the Formula realm now just lists basic formula topics, not all functions and operators. There are now separate realms for Operators and Functions.

- Panorama Help now ignores carriage returns in help searches (they would cause the search results to go blank).

Of course this version also includes a number of bug fixes and minor new features.

- Implemented the assignfieldwithsideeffects statement, and the `<==` operator. These perform nearly the same function as the `==` operator in Panorama 6 – they assign a value to a field and then run any formulas and code associated with that field (side effects). Unlike the `==` operator, `<==` cannot be used with variables (which have no side effects). Here is an example of code that sets the Price field to 4.95, and also executes any formulas and code associated with the Price field.

  Price <== 4.95

- Fixed the progress bar when running under macOS Sierra (which appears for operations that take more than a second or two). This feature was added nearly a year ago, but a new Apple bug in Sierra disabled it.

- Fixed resizing of Input Box so that it accurately follows the mouse.

- Added new mapurl( function, which makes it easy to use a Web Browser Object to display an interactive map within a form.

- Implemented the openmapwindow statement, which allows a map to be displayed with one line of code. (This statement was also included in Panorama 6, but is new to Panorama X.)

- Added Print tool to toolbar in data sheet and forms. When you click on this tool, a short pop-up menu includes with page setup, preview, and print commands. Note: This tool is not enabled by default, you must customize the tool bar to include it.

- Added the change, changeword, and changewordexact statements. In some cases, change statements in existing Panorama 6 databases will have to be switched to changeword or changewordexact. See the documentation for the new change statement to learn how to adjust your existing source code, if necessary.

- You can now drop text or a text file on a data sheet. If the data sheet is empty (1 record, 1 empty field) the text will replace the contents of the database. If the data sheet is not empty, the text will be appended to the end of the database

- Panorama now disables any editors/controls in the form property panel that aren’t currently applicable. If there is no object selected, all properties are disabled, including formulas and code. If an object is selected that doesn’t have a formula (shapes, text editor, text label, report tile, etc.), it won’t allow you to edit the formula.

- The lineitemarray( function now allows the field name to be quoted or not quoted. Panorama 6 allowed both, even though the documentation said it must be quoted.

- Panorama X will now run from a read only volume, or in a folder that has read-only privileges. This will allow any user to run Panorama on the system, even if they are not the user that installed it.

- In previous versions, closing a database, then cancelling (when asked if you really want to close) left the database in a partially closed state. Now this works properly. (Note: This bug would only occur if the Ask to keep changes when closing documents option was checked in the General panel of System Preferences.)

- A Web Browser Object can now have a custom pop-up menu with a link is right clicked. Use the new info(“webbrowserlinkurl”) and info(“webbrowserlinklabel”) functions to find out what link was clicked. This new feature was used in the Panorama Help wizard to allow right clicking on a link to open a new window.

- The View menu now has a separator between the last procedure and the Enter/Exit Full Screen menu item. Also, Show Tab Bar has been removed from View menu (because Panorama X has multiple types of windows, it doesn’t work properly with the default version of window tabs in macOS Sierra).

- If the current database contains more than 250,000 cells (records*fields), the Find/Select dialog will always default to searching the current field even if the preference is set to search all fields.

- Added preferences to specify height and width of newly created database windows.

- Fixed text import CSV parser so that it handles all Hebrew characters (worked around Apple bug).

- Added the clearrecord and deleteabove statements, which were in Panorama 6 but not yet brought into Panorama X.

- Added the new tokenname( function, which returns the name of a field or variable (instead of the contents).

- Fixed crash in batchreplace( function if one or more array elements was incomplete (didn’t have 2 both old & new values). Now incomplete elements are ignored.

Brand new features implemented in this release (features that were not included in Panorama 6):

- 208: Tab Panels -- Tab Panels provide a way to cram a lot of user interface into a limited area. In this example I'll use a tab panel to combine four forms into one, with control buttons to switch between different panels.

- 999: Further Reading -- Suggestions for Panorama topics beyond the tutorial.
- assignfieldwithsideeffects -- The assignfieldwithsideeffects statement performs an assignment, much like an equals sign or the assign statement. However, the assignfieldwithsideeffects statement only performs the assignment to a database field, not to any variable. After performing the assignment, it will run any side effects associated with the field, including formulas and code associated with the field.
- Construct Menu -- used to automatically construct complex form applications, including calendars, lists, mailing labels, and more.
- Form Properties -- specify the name of the form, and various form options.
- Help Menu -- contains items that will help you learn and use Panorama.
- info("webbrowserlinklabel") -- The info("webbrowserlinklabel") function returns the url of the link right clicked in a Web Browser object.
- info("webbrowserlinkurl") -- The info("webbrowserlinkurl") function returns the url of the link right clicked in a Web Browser object.
- mapurl( -- The mapurl( function returns a URL to display a map location.
- Objects Menu -- used to select, modify and arrange graphics objects in a form.
- Program Menu -- assists with running and debugging code, and with developing custom dialogs.
- Source Menu -- used to assist in editing program code.
- tokenname( -- The tokenname( function returns the name of a field or variable (instead of the value contained in the field or variables).

Features implemented in this release that work differently than they did in Panorama 6.

- Panorama X Account FAQ -- frequently asked questions about Panorama X accounts and pricing.
- 101: Building a Mailing List Database -- The tutorial begins by creating a new database with seven fields: first and last names, address, city, state, zip code and phone number. You'll also learn how to examine and modify field attributes, and how to rename a field.

- 102: Entering Data Into Your New Database -- This lesson introduces the basics of using the keyboard to enter new data into the database, as well as editing existing data. You'll learn about some basic data entry aids including automatic capitalization, input patterns, and the tab key. Finally, you'll learn how to expand the input area to edit multi line data.

- 103: Saving and Opening Database Files -- Panorama uses standard macOS techniques for saving your documents. All Panorama databases files end with an extension of .pandb. You'll learn several techniques for opening a database, including double clicking, open recent, and setting up favorite databases … even an easy way to find and open a database that you've lost (forgotten what folder it was in).

- 104: Importing Data Into the Mailing List -- If you already have data in another program (FileMaker, MySQL, a spreadsheet, etc.) you certainly don't want to re-enter that data in using the keyboard. In this lesson you'll learn how to import a text file (CSV, tab delimited, etc.) into an existing database. The data in the text file doesn't have to be arranged the same way as the database, Panorama can rearrange the data on the fly as it is imported. (Panorama can even split or merge columns as the data is imported, though that is not covered in this lesson).

- 105: Inserting a Field and Re-Importing -- This lesson shows how to insert a new field into the middle of an existing database, and then how to set up all of the options for the new field and re-import text into the modified database.

- 106: Sorting the Database -- You'll often need data arranged in some particular order: alphabetically, by date, price, etc. In this lesson you'll learn how to sort by one field or many, how sorts can be reversed (undo), and how to set up a favorite sort order so that it can be quickly accessed with a single click.

- 107: Searching for a Person -- Finding the data you need from a large database can be like finding a needle in a haystack. Panorama's search tools can quickly locate any data you are interested in. You'll also see how to jump from item to item if there is more than one data item that matches your search.

- 108: Selecting Instead Of Finding -- Panorama's selection tools allow you to focus on just the information you are currently interested in, making everything else temporarily invisible. For extra credit for advanced users, I'll show you how to modify the selected information as a batch, and how to undo batch operations.

- 109: Selecting from a Specific Field -- Up till now, all of the searches have been of the entire database, including all fields. Now you'll learn how to narrow the search to a specific field.

- 110: Selecting More of the Same -- It's easy to right click on any data item and ask Panorama to display other data items witht same, or similar values. For example you can quickly find other people with the same last name, or other people in the same state, or other checks written in the same month.

- 111: Zip Code Distance Searches -- If your database contains US databases with zip codes, you can right click to find other addresses that are close to the clicked address. You can choose to find other addresses that are with 15, 25, 50 or 100 miles.

- 112: Using the Sounds Like Search Option -- If you don’t know exactly how something is spelled you can try using Panorama’s sounds like option, which performs searches phonetically.

- 113: Making Complex Searches -- Panorama's Find/Select dialog can perform complex searches based on multiple criteria (up to 12, or even more in a program). The complex search is built up from individual simple searches, with a live preview as each component of the search is assembled.

- 114: Searching with a Regular Expression -- Regular expressions are a powerful technology that allow complex patterns to be created to perform sophisticated searches for just about anything – email addresses, phone numbers, urls, prices, part numbers, you name it. In fact, entire books have been written about regular expressions and how to use them. This lesson gives a brief introduction.

- 115: Searching with a Formula -- If Panorama's standard seach options aren't precise enough, any Boolean (true/false) formula can be used. You can choose from any of Panorama's hundreds of formula operators and functions, even perform searches that compare different fields (for example find all items where the price is more than twice the cost).

- 116: Selecting All Records -- This lesson is super easy — one command that makes all of the data in the database visible.

- 117: Saving Favorite Searches for Later -- It can take a lot of time to set up the complex searches described in the previous lessons. Fortunately, Panorama allows you to save any search so that you can repeat it later with a single click.

- 118: Temporarily Hiding One or More Fields -- This lesson shows how you can temporarily hide one or more fields so that you can focus on just the fields that you are interested in at the moment. Later you can easily make all fields visible again. You can also set up favorite configurations that quickly make only specific fields visible.

- 119: Automating Tasks with Procedures -- Right out of the box, Panorama is a very flexible program. Its built in menus and tools bring incredible power to your fingertips. Even better, you can easily create your own programs that can be activated with a menu or button. As shown in this lesson, you can write programs from scratch or you can have Panorama write a program for you simply by watching and recording your actions. In the course of this lesson I'll create programs that sort and select data, hide fields, and finally, display a map based on an address in the database.

- 120: Extra Credit: Running Code Automatically -- This lesson is for advanced users, and shows how a program can run automatically when data is entered into a field. In this lesson, a short program is created that runs when a phone number is entered. The program adds a default area code if necessary and formats the number. It also displays a notification if there are too many or too few digits.

- 121: Extra Credit: Importing and Cleaning Up More Names -- This is another advanced lesson that shows how to import data into an existing database even if the new data is in a different format from the existing data, and even if the new data isn't consistently formatted. In this example the new data is brought in directly from an Apple Numbers spreadsheet.

- 201: Introducing Forms (Graphical Layout) -- Now we switch gears to talk about "free form" custom layouts, which Panorama calls Forms. A form is like a piece of paper that allows you to design any arrangement you want -- labels, invoices, statements, whatever you need. A database can contain multiple forms, each with its own custom layout. In this lesson you'll learn how to create new forms, and how to create and manipulate graphic objects within a form.

- 202: Forms: Working with Data -- This lesson demonstrates how to include data in a form, both for display and editing.

- 203: Creating a Data Entry Form -- Assembling a complex data entry form piece-by-piece can be tedious. Fortunately, Panorama can do most of the work for you, automatically creating a pixel perfect layout in seconds. In fact, I'll build a complete data entry form for this mailing list database in seven seconds flat.

- 204: Adding Buttons to a Form -- It's easy to add a push button to a form. In this lesson I'll create a standard push button, and also a graphical icon button (Panorama includes almost 700 icons from the Font Awesome collection) and a button constructed from an image.

- 205: Printing Mailing Labels -- Panorama has powerful capabilities for printing custom reports. In this lesson, I'll build a simple template for printing Avery 5160 mailing labels.

- 206: Displaying a Map -- With the ability to embed a web browser into a form, the entire internet is accessible from within Panorama. You can access any public web page, or you can construct HTML on the fly from your database (this help system is constructed with a Panorama form that contains an embedded web browser). In this lesson, a browser is used to embed a map directly into the database.

- 207: Searchable List -- In addition to Panorama's standard Find/Select dialog, you can also build a custom search list into a form. The list is automatically synced with the database, or you can create a list that has its own independent data source.

- 301: Building and Organizing a Checkbook -- Now that you’ve created your first simple mailing list database, you’re ready to try something more complicated. In this lesson you’ll build and use a database for keeping track of a checkbook. This lesson starts by creating the new database and setting up the fields.

- 302: Checkbook Sample Data -- In this lesson the new checkbook database is filled with imported sample data.

- 303: Data Entry Helpers -- Before you can work with and analyze data, you have to get the data into the database, and that usually means data entry with the keyboard. This job is never easy, but Panorama does have tools that can make data entry faster and less error prone. This lesson examines how Panorama can improve the data entry process for each of the fields in the checkbook database.

- 304: Selecting Data -- Earlier lessons demonstrated searching in depth, but only in a database with text fields. Since the checkbook contains date and numeric fields, there are some additional searching tips.

- 305: Totals, Summaries and Charts -- In this lesson you'll see how you can quickly calculate totals, summaries, and charts of summarized data.

- 306: Collapsible Outline Summaries -- In this lesson you'll see how Panorama can quickly calculate subtotals and totals, organizing them into an outline that can be collapsed or expanded to see just the level of detail you need. Once calculated, you can even "rank" summaries, for example to show where spending is concentrating or which regions have the highest sales. The ability to “zoom” in and out like this is a great tool for actually understanding your data.

- Accessing the Clipboard -- reading from and writing to the system's clipboard.
- Alerts -- displaying a variety of standard modal alerts.
- AppleScript -- writing scripts with AppleScript.
- Arrays -- work with a numbered collection of data items (including Text Arrays and Data Arrays.
- change -- The change statement replaces text with new text in the current field (selected records only).
- changeword -- The changeword statement replaces one word with another in the current field (selected records only).
- changewordexact -- The changewordexact statement replaces one word with another in the current field (selected records only).
- Channels -- provide a standard way to interface with external resources (email servers, phones, web sites etc.)
- Control Flow -- making decisions about what code should be executed in response to changing conditions.
- Coordinates -- working with points and rectangles.
- Credit Cards -- working with credit card numbers.
- Cryptography -- encrypting and decrypting data, and calculating hash values.
- Custom Dialogs -- creating custom dialogs using forms.
- Custom Menus -- creating custom menus, menu bars and pop-up menus (and customizing standard menus).
- Custom Statements -- creating your own custom statements that can be used in your code.
- Database Functions -- functions that access database information, including the data itself and information about the structure of the database.
- Database Navigation & Editing -- using program code to navigate within a database, and to add and remove database records.
- Database -- a single collection of records and fields.
- Drag and Drop -- dragging data to and from a Panorama form.
- Edit Menu -- edit text and data, to search (and replace), and to undo and recent actions.
- Field Menu -- manages fields, including adding and removing fields, setting field properties, sorting, morphing, hiding and showing.
- File Menu -- create, locate, open, close and save databases, import and export text, printing.
- Financial Calculations -- financial calculations based on interest rates.
- Generating & Analyzing HTML -- generating HTML code from data, and extracting data from structured HTML.
- Geography -- working with geographic information, including zip codes and lat/long coordinates.
- Hotkeys -- setting up user defined hotkeys.
- Internet Access -- accessing information from web servers.
- Linking with Another Database -- techniques for relating multiple database files so that they work together.
- Mark Menu -- allows you to set bookmarks in source code to help navigate to specific spots in a long program.
- Mouse and Click Status -- accessing the mouse (location, buttons) and keyboard status.
- openmapwindow -- The openmapwindow statement opens a window displaying a map of a location.
- Perl Scripting -- writing and using Perl scripts.
- Preference Values -- reading and writing system preference values.
- Printing -- printing reports, mailing labels, etc.
- Program Access to Databases -- using a program to create, open, import or export databases.
- Program Error Handling -- handling errors and exceptions that occur when a program is running.
- Programmable Database Administration -- using a program to access and/or modify the structure of a database.
- Programmable Form Management -- using a program to work with forms.
- Programmable Graphics -- using program code to create and modify graphic objects in a form.
- Programmable Outlines -- using a program to create and manipulate data outlines.
- Programmable Printing -- using program code to print reports, mailing labels, etc.
- Programmable Searching -- using program code to search and select data.
- Programmable Sorting -- using program code to sort a database.
- Programmable Text Export -- using a program to export text from a database.
- Programmable Window Management -- using a program to arrange windows.
- Programming Database Fields -- using a program to add and remove database fields.
- Records Menu -- add and remove database records.
- Scientific Calculations -- performing scientific calculations (trigonometry, logarithms, etc.)
- Scripting -- embedding scripting languages (AppleScript, shell scripts, Python, Ruby, PHP, Perl, etc.) into Panorama program code.
- Search Menu -- is used search for data, to select records, and to find and replace text within the current field.
- Speech Programming -- using program code to convert data to speech (voice).
- Subroutines -- writing code that can be called from other code.
- Supressing Display -- temporarily disabling display of changes in a program (to reduce "flickering" and increase performance).
- System Info Functions -- find out information about the current status of the computer and operating system.
- Timers -- executing recurring periodic background code at fixed intervals.
- Transforming Data -- using program code to modify data in bulk.
- Triggers -- finding out what event triggered the execution of program code.
- Window Menu -- controls the back to front arrangement of windows, it allows you to hide, show, or customize the toolbar (see Toolbar, and allows you minimize or zoom the window to full screen.

Features implemented in this release that work exactly the same as they did in Panorama 6.

- Arithmetic Formulas -- mathematical operators and functions.
- Characters and Unicode Values -- working with individual characters of text.
- clearrecord -- The clearrecord statement deletes the currently selected record.
- Constants -- values embedded into a formula.
- Date Arithmetic Formulas -- performing calculations on dates, and converting between dates and text.
- deleteabove -- The deleteabove statement copies the current record to the clipboard and deletes it, then moves to the record above.
- Formulas -- basics of formulas: components and grammar.
- Non Decimal Numbers -- working with numbers in alternative (non-decimal) bases, including binary, octal and hexadecimal.
- Quotes -- text constants embedded into a formula
- SuperDates -- date and time combined into a single value.
- Text Formulas -- manipulating text with a formula (concatenation, extraction, rearranging, etc.)
- Time Arithmetic Formulas -- performing calculations on times, and converting between times and text.
- True/False Formulas -- logical boolean calculations.
- Using Fields in a Formula -- accessing database fields within a formula.
- Values -- the raw material that formulas work with -- numbers and text.
- Variables -- storing and retrieving individual items of data, not part of a database.

ALL features that were added or changed in this release:

- Panorama X Account FAQ -- frequently asked questions about Panorama X accounts and pricing.
- Tutorial -- basic step-by-step lessons for learning Panorama X, including data entry, searching, sorting, analyzing, creating forms and basic programming.
- 101: Building a Mailing List Database -- The tutorial begins by creating a new database with seven fields: first and last names, address, city, state, zip code and phone number. You'll also learn how to examine and modify field attributes, and how to rename a field.

- 102: Entering Data Into Your New Database -- This lesson introduces the basics of using the keyboard to enter new data into the database, as well as editing existing data. You'll learn about some basic data entry aids including automatic capitalization, input patterns, and the tab key. Finally, you'll learn how to expand the input area to edit multi line data.

- 103: Saving and Opening Database Files -- Panorama uses standard macOS techniques for saving your documents. All Panorama databases files end with an extension of .pandb. You'll learn several techniques for opening a database, including double clicking, open recent, and setting up favorite databases … even an easy way to find and open a database that you've lost (forgotten what folder it was in).

- 104: Importing Data Into the Mailing List -- If you already have data in another program (FileMaker, MySQL, a spreadsheet, etc.) you certainly don't want to re-enter that data in using the keyboard. In this lesson you'll learn how to import a text file (CSV, tab delimited, etc.) into an existing database. The data in the text file doesn't have to be arranged the same way as the database, Panorama can rearrange the data on the fly as it is imported. (Panorama can even split or merge columns as the data is imported, though that is not covered in this lesson).

- 105: Inserting a Field and Re-Importing -- This lesson shows how to insert a new field into the middle of an existing database, and then how to set up all of the options for the new field and re-import text into the modified database.

- 106: Sorting the Database -- You'll often need data arranged in some particular order: alphabetically, by date, price, etc. In this lesson you'll learn how to sort by one field or many, how sorts can be reversed (undo), and how to set up a favorite sort order so that it can be quickly accessed with a single click.

- 107: Searching for a Person -- Finding the data you need from a large database can be like finding a needle in a haystack. Panorama's search tools can quickly locate any data you are interested in. You'll also see how to jump from item to item if there is more than one data item that matches your search.

- 108: Selecting Instead Of Finding -- Panorama's selection tools allow you to focus on just the information you are currently interested in, making everything else temporarily invisible. For extra credit for advanced users, I'll show you how to modify the selected information as a batch, and how to undo batch operations.

- 109: Selecting from a Specific Field -- Up till now, all of the searches have been of the entire database, including all fields. Now you'll learn how to narrow the search to a specific field.

- 110: Selecting More of the Same -- It's easy to right click on any data item and ask Panorama to display other data items witht same, or similar values. For example you can quickly find other people with the same last name, or other people in the same state, or other checks written in the same month.

- 111: Zip Code Distance Searches -- If your database contains US databases with zip codes, you can right click to find other addresses that are close to the clicked address. You can choose to find other addresses that are with 15, 25, 50 or 100 miles.

- 112: Using the Sounds Like Search Option -- If you don’t know exactly how something is spelled you can try using Panorama’s sounds like option, which performs searches phonetically.

- 113: Making Complex Searches -- Panorama's Find/Select dialog can perform complex searches based on multiple criteria (up to 12, or even more in a program). The complex search is built up from individual simple searches, with a live preview as each component of the search is assembled.

- 114: Searching with a Regular Expression -- Regular expressions are a powerful technology that allow complex patterns to be created to perform sophisticated searches for just about anything – email addresses, phone numbers, urls, prices, part numbers, you name it. In fact, entire books have been written about regular expressions and how to use them. This lesson gives a brief introduction.

- 115: Searching with a Formula -- If Panorama's standard seach options aren't precise enough, any Boolean (true/false) formula can be used. You can choose from any of Panorama's hundreds of formula operators and functions, even perform searches that compare different fields (for example find all items where the price is more than twice the cost).

- 116: Selecting All Records -- This lesson is super easy — one command that makes all of the data in the database visible.

- 117: Saving Favorite Searches for Later -- It can take a lot of time to set up the complex searches described in the previous lessons. Fortunately, Panorama allows you to save any search so that you can repeat it later with a single click.

- 118: Temporarily Hiding One or More Fields -- This lesson shows how you can temporarily hide one or more fields so that you can focus on just the fields that you are interested in at the moment. Later you can easily make all fields visible again. You can also set up favorite configurations that quickly make only specific fields visible.

- 119: Automating Tasks with Procedures -- Right out of the box, Panorama is a very flexible program. Its built in menus and tools bring incredible power to your fingertips. Even better, you can easily create your own programs that can be activated with a menu or button. As shown in this lesson, you can write programs from scratch or you can have Panorama write a program for you simply by watching and recording your actions. In the course of this lesson I'll create programs that sort and select data, hide fields, and finally, display a map based on an address in the database.

- 120: Extra Credit: Running Code Automatically -- This lesson is for advanced users, and shows how a program can run automatically when data is entered into a field. In this lesson, a short program is created that runs when a phone number is entered. The program adds a default area code if necessary and formats the number. It also displays a notification if there are too many or too few digits.

- 121: Extra Credit: Importing and Cleaning Up More Names -- This is another advanced lesson that shows how to import data into an existing database even if the new data is in a different format from the existing data, and even if the new data isn't consistently formatted. In this example the new data is brought in directly from an Apple Numbers spreadsheet.

- 201: Introducing Forms (Graphical Layout) -- Now we switch gears to talk about "free form" custom layouts, which Panorama calls Forms. A form is like a piece of paper that allows you to design any arrangement you want -- labels, invoices, statements, whatever you need. A database can contain multiple forms, each with its own custom layout. In this lesson you'll learn how to create new forms, and how to create and manipulate graphic objects within a form.

- 202: Forms: Working with Data -- This lesson demonstrates how to include data in a form, both for display and editing.

- 203: Creating a Data Entry Form -- Assembling a complex data entry form piece-by-piece can be tedious. Fortunately, Panorama can do most of the work for you, automatically creating a pixel perfect layout in seconds. In fact, I'll build a complete data entry form for this mailing list database in seven seconds flat.

- 204: Adding Buttons to a Form -- It's easy to add a push button to a form. In this lesson I'll create a standard push button, and also a graphical icon button (Panorama includes almost 700 icons from the Font Awesome collection) and a button constructed from an image.

- 205: Printing Mailing Labels -- Panorama has powerful capabilities for printing custom reports. In this lesson, I'll build a simple template for printing Avery 5160 mailing labels.

- 206: Displaying a Map -- With the ability to embed a web browser into a form, the entire internet is accessible from within Panorama. You can access any public web page, or you can construct HTML on the fly from your database (this help system is constructed with a Panorama form that contains an embedded web browser). In this lesson, a browser is used to embed a map directly into the database.

- 207: Searchable List -- In addition to Panorama's standard Find/Select dialog, you can also build a custom search list into a form. The list is automatically synced with the database, or you can create a list that has its own independent data source.

- 208: Tab Panels -- Tab Panels provide a way to cram a lot of user interface into a limited area. In this example I'll use a tab panel to combine four forms into one, with control buttons to switch between different panels.

- 301: Building and Organizing a Checkbook -- Now that you’ve created your first simple mailing list database, you’re ready to try something more complicated. In this lesson you’ll build and use a database for keeping track of a checkbook. This lesson starts by creating the new database and setting up the fields.

- 302: Checkbook Sample Data -- In this lesson the new checkbook database is filled with imported sample data.

- 303: Data Entry Helpers -- Before you can work with and analyze data, you have to get the data into the database, and that usually means data entry with the keyboard. This job is never easy, but Panorama does have tools that can make data entry faster and less error prone. This lesson examines how Panorama can improve the data entry process for each of the fields in the checkbook database.

- 304: Selecting Data -- Earlier lessons demonstrated searching in depth, but only in a database with text fields. Since the checkbook contains date and numeric fields, there are some additional searching tips.

- 305: Totals, Summaries and Charts -- In this lesson you'll see how you can quickly calculate totals, summaries, and charts of summarized data.

- 306: Collapsible Outline Summaries -- In this lesson you'll see how Panorama can quickly calculate subtotals and totals, organizing them into an outline that can be collapsed or expanded to see just the level of detail you need. Once calculated, you can even "rank" summaries, for example to show where spending is concentrating or which regions have the highest sales. The ability to “zoom” in and out like this is a great tool for actually understanding your data.

- 999: Further Reading -- Suggestions for Panorama topics beyond the tutorial.
- Accessing the Clipboard -- reading from and writing to the system's clipboard.
- Alerts -- displaying a variety of standard modal alerts.
- AppleScript -- writing scripts with AppleScript.
- Arithmetic Formulas -- mathematical operators and functions.
- Arrays -- work with a numbered collection of data items (including Text Arrays and Data Arrays.
- assignfieldwithsideeffects -- The assignfieldwithsideeffects statement performs an assignment, much like an equals sign or the assign statement. However, the assignfieldwithsideeffects statement only performs the assignment to a database field, not to any variable. After performing the assignment, it will run any side effects associated with the field, including formulas and code associated with the field.
- change -- The change statement replaces text with new text in the current field (selected records only).
- changeword -- The changeword statement replaces one word with another in the current field (selected records only).
- changewordexact -- The changewordexact statement replaces one word with another in the current field (selected records only).
- Channels -- provide a standard way to interface with external resources (email servers, phones, web sites etc.)
- Characters and Unicode Values -- working with individual characters of text.
- clearrecord -- The clearrecord statement deletes the currently selected record.
- Construct Menu -- used to automatically construct complex form applications, including calendars, lists, mailing labels, and more.
- Control Flow -- making decisions about what code should be executed in response to changing conditions.
- Coordinates -- working with points and rectangles.
- Credit Cards -- working with credit card numbers.
- Cryptography -- encrypting and decrypting data, and calculating hash values.
- Custom Dialogs -- creating custom dialogs using forms.
- Custom Menus -- creating custom menus, menu bars and pop-up menus (and customizing standard menus).
- Custom Statements -- creating your own custom statements that can be used in your code.
- Data Sheet -- a window that displays the database information in rows and columns.
- Database Functions -- functions that access database information, including the data itself and information about the structure of the database.
- Database Navigation & Editing -- using program code to navigate within a database, and to add and remove database records.
- Database -- a single collection of records and fields.
- deleteabove -- The deleteabove statement copies the current record to the clipboard and deletes it, then moves to the record above.
- Drag and Drop -- dragging data to and from a Panorama form.
- Edit Menu -- edit text and data, to search (and replace), and to undo and recent actions.
- Field Menu -- manages fields, including adding and removing fields, setting field properties, sorting, morphing, hiding and showing.
- File Menu -- create, locate, open, close and save databases, import and export text, printing.
- Financial Calculations -- financial calculations based on interest rates.
- Form Properties -- specify the name of the form, and various form options.
- Formulas -- basics of formulas: components and grammar.
- Generating & Analyzing HTML -- generating HTML code from data, and extracting data from structured HTML.
- Geography -- working with geographic information, including zip codes and lat/long coordinates.
- Help Menu -- contains items that will help you learn and use Panorama.
- Hotkeys -- setting up user defined hotkeys.
- info("webbrowserlinklabel") -- The info("webbrowserlinklabel") function returns the url of the link right clicked in a Web Browser object.
- info("webbrowserlinkurl") -- The info("webbrowserlinkurl") function returns the url of the link right clicked in a Web Browser object.
- Internet Access -- accessing information from web servers.
- mapurl( -- The mapurl( function returns a URL to display a map location.
- Mark Menu -- allows you to set bookmarks in source code to help navigate to specific spots in a long program.
- Menus -- overview of Panorama X menu bars.
- Mouse and Click Status -- accessing the mouse (location, buttons) and keyboard status.
- Non Decimal Numbers -- working with numbers in alternative (non-decimal) bases, including binary, octal and hexadecimal.
- Object Names -- can be used to identify an object in a program.
- Objects Menu -- used to select, modify and arrange graphics objects in a form.
- openmapwindow -- The openmapwindow statement opens a window displaying a map of a location.
- Panorama Menu -- get and set information about Panorama itself, including the version number, licensing information, and memory usage.
- Perl Scripting -- writing and using Perl scripts.
- Preference Values -- reading and writing system preference values.
- Printing -- printing reports, mailing labels, etc.
- Program Access to Databases -- using a program to create, open, import or export databases.
- Program Error Handling -- handling errors and exceptions that occur when a program is running.
- Program Menu -- assists with running and debugging code, and with developing custom dialogs.
- Programmable Database Administration -- using a program to access and/or modify the structure of a database.
- Programmable Form Management -- using a program to work with forms.
- Programmable Graphics -- using program code to create and modify graphic objects in a form.
- Programmable Outlines -- using a program to create and manipulate data outlines.
- Programmable Printing -- using program code to print reports, mailing labels, etc.
- Programmable Searching -- using program code to search and select data.
- Programmable Sorting -- using program code to sort a database.
- Programmable Text Export -- using a program to export text from a database.
- Programmable Window Management -- using a program to arrange windows.
- Programming Database Fields -- using a program to add and remove database fields.
- Records Menu -- add and remove database records.
- Scientific Calculations -- performing scientific calculations (trigonometry, logarithms, etc.)
- Scripting -- embedding scripting languages (AppleScript, shell scripts, Python, Ruby, PHP, Perl, etc.) into Panorama program code.
- Search Menu -- is used search for data, to select records, and to find and replace text within the current field.
- Source Menu -- used to assist in editing program code.
- Speech Programming -- using program code to convert data to speech (voice).
- Subroutines -- writing code that can be called from other code.
- SuperDates -- date and time combined into a single value.
- Supressing Display -- temporarily disabling display of changes in a program (to reduce "flickering" and increase performance).
- System Info Functions -- find out information about the current status of the computer and operating system.
- Tag Parsing -- Panorama functions for working with text that contains data delimited by tags, including HTML.
- Text Formulas -- manipulating text with a formula (concatenation, extraction, rearranging, etc.)
- Time Arithmetic Formulas -- performing calculations on times, and converting between times and text.
- Timers -- executing recurring periodic background code at fixed intervals.
- tokenname( -- The tokenname( function returns the name of a field or variable (instead of the value contained in the field or variables).
- Transforming Data -- using program code to modify data in bulk.
- Triggers -- finding out what event triggered the execution of program code.
- True/False Formulas -- logical boolean calculations.
- Using Fields in a Formula -- accessing database fields within a formula.
- Values -- the raw material that formulas work with -- numbers and text.
- Variables -- storing and retrieving individual items of data, not part of a database.
- Window Menu -- controls the back to front arrangement of windows, it allows you to hide, show, or customize the toolbar (see Toolbar, and allows you minimize or zoom the window to full screen.

See Also

- Version 0.1.001 (released July 7th, 2012) -- Summary of Version 0.1.001 (released 7/7/2012)
- Version 0.1.002 (released August 12th, 2012) -- Summary of Version 0.1.002 (released 8/12/2012)
- Version 0.1.003 (released December 2nd, 2012) -- Summary of Version 0.1.003 (released 12/2/2012)
- Version 0.1.004 (released December 10th, 2012) -- Summary of Version 0.1.004 (released 12/10/2012)
- Version 0.1.005 (released December 21st, 2012) -- Summary of Version 0.1.005 (released 12/21/2012)
- Version 0.1.006 (released December 26th, 2012) -- Summary of Version 0.1.006 (released 12/26/2012)
- Version 0.1.007 (released May 1st, 2013) -- Summary of Version 0.1.007 (released 5/1/2013)
- Version 0.1.008 (released May 22nd, 2013) -- Summary of Version 0.1.008 (released 5/22/2013)
- Version 0.1.009 (released July 9th, 2013) -- Summary of Version 0.1.009 (released 7/9/2013)
- Version 0.1.010 (released October 14th, 2013) -- Summary of Version 0.1.010 (released 10/14/2013)
- Version 0.1.011 (released December 6th, 2013) -- Summary of Version 0.1.011 (released 12/6/2013)
- Version 0.1.012 (released August 29th, 2015) -- Summary of Version 0.1.012 (released 8/29/2015)
- Version 0.1.013 (released September 6th, 2015) -- Summary of Version 0.1.013 (released 9/6/2015)
- Version 0.1.014 (released September 14th, 2015) -- Summary of Version 0.1.014 (released 9/14/2015)
- Version 0.1.015 (released September 29th, 2015) -- Summary of Version 0.1.015 (released 9/29/2015)
- Version 0.1.016 (released October 12th, 2015) -- Summary of Version 0.1.016 (released 10/12/2015)
- Version 0.1.017 (released November 11th, 2015) -- Summary of Version 0.1.017 (released 11/11/2015)
- Version 0.1.018 (released December 7th, 2015) -- Summary of Version 0.1.018 (released 12/7/2015)
- Version 0.1.019 (released January 28th, 2016) -- Summary of Version 0.1.019 (released 1/28/2016)
- Version 0.1.020 (released February 15th, 2016) -- Summary of Version 0.1.020 (released 2/15/2016)
- Version 0.1.021 (released February 29th, 2016) -- Summary of Version 0.1.021 (released 2/29/2016)
- Version 0.1.022 (released March 1st, 2016) -- Summary of Version 0.1.022 (released 3/1/2016)
- Version 0.1.023 (released May 27th, 2016) -- Summary of Version 0.1.023 (released 5/27/2016)
- Version 0.1.024 (released June 12th, 2016) -- Summary of Version 0.1.024 (released 6/12/2016)
- Version 0.1.025 (released July 21st, 2016) -- Summary of Version 0.1.025 (released 7/21/2016)
- Version 0.1.026 (released August 29th, 2016) -- Summary of Version 0.1.026 (released 8/29/2016)
- Version 0.1.027 (released September 18th, 2016) -- Summary of Version 0.1.027 (released 9/18/2016)
- Version 0.1.028 (released November 9th, 2016) -- Summary of Version 0.1.028 (released 11/9/2016)
- Version 0.1.029 (released December 31st, 2016) -- Summary of Version 0.1.029 (released 12/31/2016)
- Version 0.1.030 (released February 12th, 2017) -- Summary of Version 0.1.030 (released 2/12/2017)
- Version 0.1.031 (released March 3rd, 2017) -- Summary of Version 0.1.031 (released 3/3/2017)
- Version 0.1.032 (released April 3rd, 2017) -- Summary of Version 0.1.032 (released 4/3/2017)
- Version 0.9.001 (released July 18th, 2017) -- Summary of Version 0.9.001 (released 7/18/2017)
- Version 0.9.002 (released July 27th, 2017) -- Summary of Version 0.9.002 (released 7/27/2017)
- Version 0.9.003 (released September 10th, 2017) -- Summary of Version 0.9.003 (released 9/10/2017)
- Version 0.9.004 (released September 14th, 2017) -- Summary of Version 0.9.004 (released 9/14/2017)
- Version 0.9.005 (released September 19th, 2017) -- Summary of Version 0.9.005 (released 9/19/2017)
- Version 0.9.006 (released September 27th, 2017) -- Summary of Version 0.9.006 (released 9/27/2017)
- Version 0.9.007 (released October 3rd, 2017) -- Summary of Version 0.9.007 (released 10/3/2017)
- Version 0.9.008 (released October 12th, 2017) -- Summary of Version 0.9.008 (released 10/12/2017)
- Version 10.0.0 (released October 18th, 2017) -- Summary of Version 10.0.0 (released 10/18/2017)
- Version 10.0.01 (released December 10th, 2017) -- Summary of Version 10.0.01 (released 12/10/2017)
- Version 10.1 (released August 6th, 2018) -- Summary of Version 10.1 (released 8/6/2018)
- Version 10.1.1 (released August 30th, 2018) -- Summary of Version 10.1.1 (released 8/30/2018)
- Version 10.1.2 (released November 15th, 2018) -- Summary of Version 10.1.2 (released 11/15/2018)
- Version 10.2 (released October 7th, 2021) -- Summary of Version 10.2 (released 10/7/2021)