Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
2 Getting Started Table of Contents Getting Started ............................................................................................................ 6 Installation ................................................................................................................. 6 Running Ability........................................................................................................... 8 Documents and folders ............................................................................................. 9 Customizing toolbars and menus ............................................................................18 Windows basics.......................................................................................................21 Getting help .............................................................................................................27 Launcher ....................................................................................................................29 Starting Launcher ....................................................................................................30 Write ...........................................................................................................................34 Starting Write...........................................................................................................34 Creating a document ...............................................................................................38 Formatting paragraphs ............................................................................................43 Moving, copying and deleting text ...........................................................................48 Finding and replacing text .......................................................................................49 Tables......................................................................................................................51 Spell checker and thesaurus ...................................................................................53 Columns ..................................................................................................................55 Frames and callouts ................................................................................................57 Footnotes.................................................................................................................63 Captions ..................................................................................................................64 Using styles .............................................................................................................66 Bulleted and numbered paragraphs........................................................................68 Page set-up .............................................................................................................72 Headers and footers................................................................................................73 Printing ....................................................................................................................76 Including fields in a document .................................................................................78 Using templates.......................................................................................................83 Mail merge...............................................................................................................86 Changing Write options ...........................................................................................89 3 Getting Started Spreadsheet...............................................................................................................92 Worksheets..............................................................................................................97 Entering information ..............................................................................................100 Formatting the spreadsheet ..................................................................................103 Copying and moving information...........................................................................117 Inserting and deleting cells, rows and columns.....................................................124 Comments .............................................................................................................127 Merging and splitting cells .....................................................................................128 Styles.....................................................................................................................129 Using formulas.......................................................................................................129 Naming cells and ranges.......................................................................................137 Page set-up ...........................................................................................................142 Default settings......................................................................................................149 Chart.........................................................................................................................151 Creating a chart .....................................................................................................151 Style.......................................................................................................................152 Data range.............................................................................................................155 Editing a chart........................................................................................................157 Attached charts......................................................................................................157 Resizing and moving an embedded chart.............................................................158 Deleting a chart from a spreadsheet .....................................................................158 Printing a chart ......................................................................................................158 Database ..................................................................................................................159 Starting Database..................................................................................................161 Creating a new database ......................................................................................166 Indexes and primary keys .....................................................................................191 Saving a new table ................................................................................................196 Opening a table using database manager ............................................................196 Sorting a table .......................................................................................................215 Filtering a table ......................................................................................................217 Queries ..................................................................................................................224 Joining tables.........................................................................................................228 Form view ..............................................................................................................232 Reports ..................................................................................................................250 Deleting a database ..............................................................................................264 Photopaint ...............................................................................................................268 Starting Photopaint................................................................................................269 Creating a new image ...........................................................................................269 Color selection.......................................................................................................271 Opening an existing image....................................................................................273 Information dialog..................................................................................................274 Selections ..............................................................................................................274 Selection editing ....................................................................................................277 Paint tools..............................................................................................................284 4 Getting Started View tools ..............................................................................................................293 Brushes .................................................................................................................294 Brush modes .........................................................................................................295 Typing and color fill tools.......................................................................................296 Filters.....................................................................................................................304 Filters: examples ...................................................................................................307 Layers....................................................................................................................317 Edit menu ..............................................................................................................327 Image menu...........................................................................................................330 The Tools menu.....................................................................................................345 Image file formats ..................................................................................................354 Vector tools............................................................................................................364 Creating a vector object ........................................................................................364 Editing vector objects ............................................................................................369 Vector objects: Fill options ....................................................................................376 Plug-ins..................................................................................................................381 Draw .........................................................................................................................383 Creating a drawing ................................................................................................386 Selecting, moving and resizing draw objects ........................................................389 Formatting a shape ...............................................................................................390 Working with groups of objects .............................................................................394 Integration in Ability ...............................................................................................397 Copy and paste .....................................................................................................397 Linking through fields ............................................................................................400 Linking and embedding documents ......................................................................408 Fields – an introduction .........................................................................................413 WriteFX - a text effects tool....................................................................................420 Using WriteFX .......................................................................................................420 Editing an existing WriteFX object.........................................................................422 Macros......................................................................................................................424 Write macros .........................................................................................................426 Spreadsheet macros .............................................................................................435 Database macros ..................................................................................................439 Automating Ability from other programs................................................................443 Macros – examples ...............................................................................................445 An introduction to the VBScript language .............................................................458 SQL Guide................................................................................................................464 Selecting records - the basics ...............................................................................464 Groups and aggregate functions ...........................................................................470 Crosstabulations....................................................................................................472 Relational links and joins.......................................................................................474 Editing records.......................................................................................................476 5 Getting Started Function reference..................................................................................................480 Using built-in functions ..........................................................................................480 Using the function dialog box to build formulas.....................................................481 Text arguments......................................................................................................482 Arrays ....................................................................................................................482 Logical operators...................................................................................................483 Relational operators ..............................................................................................484 Arithmetical operators ...........................................................................................484 Priority of evaluation of operators..........................................................................485 Cell error indicators ...............................................................................................485 Date functions........................................................................................................486 Financial functions.................................................................................................493 Logical functions....................................................................................................512 Mathematical functions..........................................................................................513 Trigonometric functions .........................................................................................527 Lookup functions ...................................................................................................529 Information functions .............................................................................................534 Statistical functions................................................................................................536 Text functions ........................................................................................................557 Document functions...............................................................................................565 Remote functions ..................................................................................................568 Index.........................................................................................................................589 6 Getting Started Getting Started Ability Office (or just Ability for short) consists of four powerful applications: • WRITE lets you create, format and print documents (see Write on page 34). • SPREADSHEET lets you create numeric models, make “what if” projections, produce cash flows, and draw charts (see Spreadsheet on page 92). • DATABASE lets you organize and store information, create reports, and use onscreen forms (see Database on page 159). • PHOTOPAINT lets you edit and design images and photographs (see Photopaint on page 268) Ability’s four applications work under the Microsoft Windows 95™ and later and Windows NT™ 4.0 and later environments, and use standard Windows operations. They are integrated, which means that they work together: you can take information from a spreadsheet, display it as part of a report in Write and mail merge it with information from Database. What’s more, with Ability you can link the spreadsheets, drawings, databases, forms and documents you have created. Once you tell Ability that two documents are related, Ability can make changes for you automatically. For example, your letter to the board of directors contains the total amount from your quarterly sales spreadsheet. If you get new sales figures, you enter them in the spreadsheet, and Ability updates your letter automatically. Installation Hardware requirements To run Ability, you need a minimum configuration of: • A Personal Computer with Pentium CPU or better that is capable of running one of the operating systems below. • 32 MB of memory (RAM) - 64MB recommended for Windows 98, ME, 2000, NT or later. • A hard disk with at least 50 MB of free space. • A Microsoft Windows compatible mouse (optional) 7 Getting Started Ability will work with any of the following operating systems: • Windows 95, 98, ME or later • Windows NT version 4.0, 2000 or later. You’ll probably want a printer so you can see your work on paper. Ability works with any printer supported by Windows. With most laser and inkjet printers, you can print documents, graphics, spreadsheets, charts, database reports and forms, just as they appear on the screen. Running Setup 1. Put the Ability CD into the CD-ROM drive. 2. Wait for the "auto-run" program to start and follow the on-screen instructions. If your computer is configured not to run CD's automatically, follow these steps instead: 1. Click the Start button, select the Settings command, and then select the Control Panel command. 2. Double-click the Add/Remove Programs icon. 3. In the Install/Uninstall tab, click the Install button. 4. Now follow the setup instructions on screen. Removing Ability Ability can be removed completely by following these steps: 1. Select Start from the Windows taskbar. 2. Select Settings then Control Panel. 3. Double-click the Add/Remove Programs icon. 4. From the list of programs, select Ability. 5. Click Add/Remove and follow the instructions on screen. Ability installs itself in a directory "C:\Program Files\Ability Office" by default. If you've created or modified any documents in this directory, the uninstall process won't remove the directory structure. You can use Windows Explorer to do this (check that you don't need any data files first). 8 Getting Started Running Ability You can start Ability applications, switch between them (and other Windows applications) and exit them in the same way as with any standard Windows application. Starting an Ability application There are three ways to start an application: • Select the Start button on the Windows taskbar, select Programs, select Ability from the list of programs, and then select an Ability application. • If you are running an Ability application and wish to start a different one, click the relevant application button on the launcher toolbar. If you can’t see this toolbar, select View/Toolbars and then check the Launcher toolbar option. • Select the Ability Launcher from the list of Ability applications under Programs, and then select an application or other icon as required. Switching between Ability applications As Ability is an integrated suite of applications, you can change between applications very easily, using several methods: • Click on the relevant application button on the toolbar of any other open application. • Click on the relevant application along the taskbar at the bottom of the screen to change to an already open window. • Use ALT+TAB to sequence through all the open windows. • If the application’s window is visible on the screen, simply click on it to make it the active application. Exiting Ability To exit any Ability application, select the Exit command from the File menu. You will be asked if you want to save each open document within that application before exiting, but only if you have made changes to a document. Alternatively, click on the close box window. in the top right hand corner of the application 9 Getting Started Documents and folders Documents are saved in folders. You can think of a folder as a filing cabinet containing several files (the documents). You can keep all your documents, whether created in Write, Spreadsheet, Database or Draw, in a single folder. If you have many documents, it may be better to group them into several different folders. In older versions of Windows (or DOS) folders were called directories and documents were frequently called files. This is less common now, although the terms are interchangeable. Creating a new document To create a new document, go into an application and do one of the following: • Click on the New button • Select the New command from the File menu. on the toolbar. Selecting this option in Write will display a list of templates, one of which can be used as the basis for the new document. Otherwise, the two methods are identical. A new window will be opened displaying the new document. In Database you will also be prompted to enter a new database name. Document summary information and statistics When you create a document, you may want to store some information about it to help you remember the document’s purpose, who created it, and so on. Also, you might want to know how many characters or words are in the document, and other useful statistics. Write, Spreadsheet and Draw documents each have an attached Document Properties box. This contains Summary information and Statistics. To access Document Properties select Properties under the File menu. The Summary tab enables you to enter comments, keywords, subject, title, and other information. You can open and edit this dialog box as often as you want. The Statistics tab enables you to see document statistics, such as the number of pages, words and characters, creation and last saved dates, and other information. This information is updated automatically every time you enter the Document Properties box. Not all this information is completed for each application: for example, Write is the only application containing a word count. 10 Getting Started Opening existing documents There are various ways of opening existing documents when using Ability. You can open a document from within an application, by using the launcher, or by using the Windows recent document list. Opening a document within an application 1. Click the Open button on the toolbar. The Open dialog will appear with a list of documents in the current folder. 2. If you want to open a document that is on a different drive, use the Look In box to select the drive you want. 3. If you want to open a document that is in a different folder from the current one, use the folder list to navigate to the folder you want. 4. Double-click the document you want to open. Write and Spreadsheet support many document formats from other programs. Use the Files of Type box to choose an external file format - a list of the selected file type will be displayed. Database also supports other file formats but you'll need to open these using the Import command from the File menu. Note: A time saving feature is the Recent File option on page 10 from the File menu. Recent files and folders Ability remembers (up to) the last 16 files you worked on. To quickly access any of these files, select Recent Files from the File menu. Ability also remembers the last 16 folders you accessed and these are available by selecting Recent Folders from the File menu. Selecting one of the recent folders is equivalent to using the open dialog on page 10 and changing the current folder. This is very useful if you store your files in separate locations (e.g. c:\my documents for general files, c:\my documents\sales for sales related documents and so on). You can fine tune the way the recent files and folders operate. Select Open and save options from the File menu. • Set the number of files and folders Ability remembers (maximum 16) • Specify a default Open folder. Clear the "remember last used" checkbox and type the folder you want to default to in the edit box or use the browse button to locate the folder. Ability will always display this folder when using the Open button. 11 Getting Started • Specify a default Save folder. Similar to above. • Tell Ability to default all file open and saves to the last used folder by turning on the "remember last used" checkbox. Works separately for open and save operations. Using the Launcher from the Launcher. This can be used Select the Open Ability Document button whether or not you are currently in an application. Click on one of the four application tabs to access Ability write, spreadsheet, database or draw documents, and then open the required document by either double-clicking on it or selecting the Open button. If you want to open a document that is on a different drive, use the Look In box to select the drive you want. If you want to open a document that is in a folder other than the current one, use the folder list to navigate to the folder you want. Using Windows recent document list Windows records the 15 most recently used documents. To access these, click on Start and select Documents. If the document you wish to access is among these, click on the document name to open it. Saving a document It is recommended that you save your work often. This protects you against unexpected power loss, which can result in the loss of any changes made since you last saved your work. Click on the Save button on the toolbar to save a document. Alternatively, select the Save command from the File menu. If the document already has a name (i.e. you opened an existing document and did some work on it), it will simply be saved under the same name, overwriting the old version. If you have not yet given the document a name (i.e. you created a new document or imported a document from a different format), the Save as dialog box will be displayed. In this dialog box you can give the document a name and, optionally, choose a different folder to the current one (see Saving a document under a different name on page 12 for more details). Note: When you name a document you do not need to give it an extension (the letters after the dot), as Ability automatically adds the appropriate extension, according to the application you are using or the file format you have chosen. See Open and save options on page 10. 12 Getting Started Saving a document under a different name If you have already given a document a name but you want to save it under a different one, follow these steps: 1. Select the Save As command from the File menu. 2. Enter a new name in the File name box and then click Save. You can choose to select a different folder and drive in the Save As dialog. You can also choose the file format in which you wish to save the document. This can be useful, for instance, if you want to save your spreadsheet data in a format that can be read by other spreadsheet programs. Working with documents and folders A typical hard drive with Windows installed will have at least 3 folders, arranged hierarchically: The My Documents folder is the default location for all your data files. The Program Files folder is where all the program files are installed (or at least that's where they should be installed). The picture above only shows Ability installed on this PC. It will be normal for you to see many different folders here. The Windows folder is where the Windows operating system installs itself. Normally you won't have to deal with this folder. It too has many sub-folders. If you only have a few documents, you can put them all in the My Documents folder. If you have more than a few, it is usually best to organize them into different sub-folders. The above picture shows that My Documents has two such sub-folders, "Sales" and "Marketing". You should choose a folder name that makes sense to you in your work and have as many sub-folders (which can themselves contain more sub-folders) as you think sensible. To organize folders and put documents into them, you'll need to understand the following sections. 13 Getting Started Using the Open dialog To view the Open dialog, click on the Open button application or select Open from the File menu. on the toolbar of any Ability The Open dialog displays the current folder in the Look in box: . The documents and folders within the current folder are shown in the main window of the Open dialog. The folders are indicated by the folder icon , the documents by an icon that is appropriate to the application that usually opens documents of a particular type. The Open Dialog also has buttons for: Up One Level. Moves up one level from the current folder. This moves towards the root directory of the current drive. Create New Folder. Creates a new folder within the current folder. List. Displays the folders and documents in the current folder with the names and icons only. Details. Displays each document with extra detail, such as document size and modification date. Selecting Details allows you to sort documents in ascending or descending order. Click on the Name, Size, Type or Modified bar to sort on that column. Switch between ascending and descending on alternate clicks. Navigating folders You can navigate through the folders and drives of your PC, using either the Open dialog or the Save dialog. Folders are arranged hierarchically (see Working with documents and folders on page 12). In changing folders you move either towards or away from the root directory (see Root directory on page 28). To change the current folder, do any of the following: • icon to make it the current folder. Since the folders listed in Double-click a folder the main box of the Open and Save dialogs are sub-folders of the current one, this will move away from the root directory. 14 Getting Started • Click the Up One Level button to move to the folder above the current one, and so towards the root directory. This will reverse the "Double-click a folder" as described above. • Click on the drop-down button in the Look-in box: . This lists all folders above the current one (that is, if you are in a sub-sub-folder, it will show each folder on a path back to the top level) and also the different drives your PC may have. Copying and moving documents or folders To copy a document or folder, follow these steps: 1. Display the Open dialog - select the Open button menu. or select Open from the File 2. Right-click on the document or folder to be copied. 3. Select the Copy command from the shortcut menu and do one of the following: • Navigate to the folder to which you want to copy the document or folder (don't open the folder, just make it display in the Open dialog). Right-click over the folder name and select the Paste command. • Right-click over a space in the current folder (that is, make sure the pointer is not over a file or folder) and select Paste from the shortcut menu. If a document (or folder) with that name already exists, a new name will be used. If you just want to copy a document or folder to the floppy drive, skip steps 2 and 3 above and right-click over it instead. Select Send To and then 3 ½ Floppy (A). To move a document or folder, select Cut in step 3 rather than Copy. To undo a copy or move, right-click over a space in the folder (that is, make sure the pointer is not over a file or folder) and select Undo Copy from the shortcut menu. Deleting documents or folders To delete a document, follow these steps: 1. Display the Open dialog - select the Open button menu. or select Open from the File 15 Getting Started 2. Right-click on the document to be deleted. 3. Select the Delete command from the shortcut menu. 4. You will be asked whether you are sure you want to proceed with the deletion. Select Yes. To recover the file immediately afterwards, right-click over a space in the folder (that is, make sure the pointer is not over a file or folder) and select Undo Delete from the shortcut menu. For more information about recovering files, search for "Recover" in the Windows Help index. To delete a folder, follow steps 1 through 3 above. You will be asked if you want to delete the folder and all its contents. Make sure you no longer need these documents before continuing. Renaming documents or folders To rename a document or folder, follow these steps: 1. Display the Open dialog - select the Open button menu. or select Open from the File 2. Right-click on the document or folder to be renamed. 3. Select the Rename command from the shortcut menu. 4. Type in a new name. As an alternative to steps 2 to 3, click on a document on folder, then click again (like a slow double-click). When renaming documents make sure you maintain the same extension or use the extension of a compatible program, otherwise the document may become unusable. To undo a rename, right-click over a space in the folder (that is, make sure the pointer is not over a file or folder) and select Undo Rename from the shortcut menu. Document extensions Each Ability document has an appropriate extension after its name. The same is true for documents from other programs, though different programs usually use different extension letters. An extension consists of some letters (always three letters in Ability) after the document name. The name and the extension are separated by a dot. Each type of document has 16 Getting Started its own extension, thereby enabling Ability to identify which documents go with which application. Here is a list of Ability extensions (* stands for the document name): Application Extension Write *.aww Spreadsheet *.aws Database *.adb Photopaint *.apx Draw *.awd Occasionally you may need to type a full document path, for example, in a function parameter, and so will need to know the extension. When you create a new document, Ability automatically adds the appropriate extension for the current application. However, if you want to select a different file type, that is files of a different extension that are compatible with the current application, click on Files of Type in the Open dialog and scroll through till you come to the relevant type (if available). Click on this to make it the current file type. Finding documents There are two ways of finding documents: • To find documents using the Open dialog, where you know roughly what the document is called and where it is located, see Finding documents in the Open dialog on page 16. • Where you don't know what the document is called and where it is located, but you do know what it contains, use Windows Explorer. See Finding documents with Explorer on page 17. Finding documents in the Open dialog To find a document using the Open dialog: or select Open from the File menu. The Look In box 1. Click on the Open button displays the name of the current folder: The main box shows all the documents belonging to the current application. It also within the current folder (sub-folders). shows all the folders 17 Getting Started 2. Assuming the document you want is not in the current folder, do one of the following: • Double-click a folder icon to make it the current folder. • Click the Up One Level button to move to the folder above the current one. • Click on the drop-down button on the Look-in box and select either a folder at a higher level or another drive. If you know the location of the document you want, using the Open dialog in this way is a good way to find it. However, you may have forgotten the document’s location, and since there are too many folders on too many levels to make a random search through the Open dialog practicable, it is better to make a search using Windows Explorer. Finding documents with Explorer Windows Explorer is a standard part of the Windows operating system and so will be only briefly explained here. To find a document, follow these steps: 1. Click the Start button on the taskbar, select Find, and then select Files or Folders. 2. If you know the extension of the document you are looking for, enter it in the Named box. For example, to find Ability Write documents, enter *.aww in this box. See Document extensions on page 15 for a list of other Ability extensions. 3. If you know that the document contains some specific text, like a company name, select the Advanced tab and enter the text in the Containing text box. 4. Click Find Now. There are other options you can set - see the Help that comes with Explorer for more details. Creating backups As well as saving your work regularly, you should get into the habit of saving your documents to a floppy disk, or some other media, and preferably keeping at least one copy in an alternate location. One day your computer may break down or be lost or stolen - only you will know what this data loss may mean to you personally or professionally. 18 Getting Started A backup is really just a copy of the file. There are three ways you can do this: • Copy a document using the Open dialog in Ability. This allows you to copy a document (or folder) to a floppy disk or another drive. See Copying and moving documents or folders on page 14. • Using Windows Explorer - this is very similar to using the Open dialog but will allow you to copy more than one file at a time. Reference the Help inside Explorer for more details. • Windows comes with its own backup system. This is useful for scheduling backups or when a document becomes too big to fit on a single disk. See Backing up using Windows or a third party backup system on page 18. Backing up using Windows or a third party backup system Windows Explorer and other document-based methods of copying files to floppy disks do not let you span several disks should a document become too big to fit on a single floppy. To get round this, you may find it worth your time to learn how to use the backup program that comes with Windows 95, or perhaps invest in a tape, DAT or CD backup system. For further information on the Windows backup program, please refer to your Windows documentation. (Select Help from the Start menu and search for "Backup" in the Help index) For further information on backup solutions, please contact your local dealer. Customizing toolbars and menus Toolbars and to a lesser extent menus, can be customized to suit your own needs. With toolbars you can do any of the following: • Reposition toolbars on page 18 • Add and Remove buttons on page 19 • Create new toolbars on page 20 and buttons on page 20 • Change the style (button size and appearance) on page 20 Menus cannot be changed but it is possible for a short-cut key on page 21 to be set or changed. Moving and displaying toolbars Turning toolbars on and off: • • 19 Getting Started To remove a toolbar from view, select Toolbars from the View menu and deselect it (remove the tick next to the toolbar name). Alternatively, drag and drop the toolbar on the toolbar. into the middle of the screen and click on the close button To bring a toolbar into view, select Toolbars from the View menu and select it by clicking on the check box next to the toolbar name. You can also right-click over any toolbar docking handle for a menu with the same options: To move a toolbar, click on the toolbar docking handle and drag to any new location you wish. Toolbars are either docked or floating – most toolbars are docked (combined into a group of toolbars that are locked to the top of the screen). When moving a toolbar, you can drop it over another toolbar and the toolbars will be redrawn to fit. Adding and deleting toolbar buttons If you decide that a particular button is not needed on a toolbar, or you want to add another one that is not currently visible, select Customize from the Tools menu then select the Commands tab in the dialog. Choose from the following: • Click on a category to show all the buttons for that toolbar. • Click on a button to bring up a button description. • To add a button, click on it and drag the button onto a toolbar (it will probably help if you put the button in the same toolbar group as the rest of the buttons in the category). • To remove a button from a toolbar, then right-click over the button (on the toolbar that is, not the dialog box) and select Delete from the menu. • To reposition individual buttons, drag and drop them to a new location elsewhere, either in their current toolbar or in another toolbar. Alternatively, select Customize from the Tools menu and then select the Toolbars tab in the dialog and click the Reset button to restore all buttons to the selected toolbar. 20 Getting Started Creating new toolbars You can create a new toolbar group for your own collection of buttons. This is especially useful if you are using macros and want to create new buttons to run macro commands (see Creating new buttons on page 20) To create a new toolbar: 1. Select Customize from the Tools menu. 2. Select the Toolbars tab in the dialog. 3. Click the New button and give the toolbar a name. The new toolbar will be displayed ready for repositioning on page 18 and adding buttons on page 19. To remove the new toolbar, select Customize from the Tools menu and then select the Toolbars tab in the dialog. Click on the toolbar you want to remove (not one of the builtin toolbars) and select the Delete button. Creating new buttons Buttons can only be created for the purposes of running macros. 1. Select Customize from the Tools menu. 2. Select the Macro Shortcuts tab in the dialog. 3. Select the macro command you want to create a button for and drag and drop onto a toolbar. Additionally you can: • Change the icon for the button by right-clicking over the button (on the toolbar not on the dialog) and selecting Button Appearance. Select from one of the built-in icons. • Add "dividing lines" between buttons by right-clicking over the button where you want the divider to appear before (on the toolbar not on the dialog) and selecting Begin a Group. Select the command again to turn off the dividing line. Toolbar appearance The style of the toolbar can be modified. Select Toolbars from the View menu and then select: • 21 Getting Started Cool Look - turns the coolbar mode on and off. Coolbars are the Windows 98 style flat buttons. • Large Buttons - increases the size of all buttons. • Show Tooltips - a brief functional description for each button, which appears when you run the mouse pointer over the buttons. Menu and macro shortcuts Shortcuts are commands that are executed by a key on the keyboard (or usually a combination of keys). For example, F1 brings up Help and Ctrl-X cuts text (unless you assign the keys differently).Shortcuts can be assigned to macros. 1. Select Customize from the Tools menu. 2. Select the Keyboard tab in the dialog (or Macro Shortcuts.for macros). 3. Choose a command group, for example File, Format or Macros (for macros) and then pick an individual command (like Open or one of your own macros). 4. Review the current shortcut in the Current Keys box 5. Click into the Select New Shortcut Key box 6. Assign a new shortcut by pressing a key combination – for example Alt-Z. You will be warned if the chosen shortcut is already in use. 7. Click the Assign button to save the changes. The shortcut can be removed by selecting it in the Current Keys box and selecting the Remove button. Note that the built-in shortcuts (like Ctrl-P for print) cannot be removed although you can assign additional shortcuts to these commands so that either will work. Once the Customize dialog is closed, you can execute the command or macro by pressing the new keyboard shortcut. Windows basics Common to all Ability applications are basic Windows structures, like toolbars, and techniques, such as using menus and selecting text. Some of these are in fact common to all Windows applications. Common to all Ability applications Shortcut keystrokes on page 22 22 Getting Started Changing the screen view on page 23 Toolbars on page 23 Status bar on page 24 Common to (most) Windows applications Using the mouse - clicking on page 24 Using the mouse - selecting on page 25 Drag and drop on page 25 Using menus on page 25 Shortcut menus on page 26 Closing, minimizing and maximizing windows on page 26 Note: Help is written with the Windows 95, Windows 98 and NT 4.0 (or later) interface in mind. Users with Windows NT 3.51 should refer to the operating system documentation and/or on-line help that comes with the operating system. Shortcut keystrokes Ability includes a number of shortcut keystrokes. These enable you to execute commands without opening the menus. As you become more familiar with Ability and you start to use these shortcuts, you will find that they can save you a lot of time. The shortcut keystrokes, where available, are shown down the right-hand side of the pulldown menus, alongside the commands they represent. Here are some useful shortcuts: Ctrl-X Cut Ctrl-C Copy Ctrl-V Paste Ctrl-P Print Ctrl-N New document Ctrl-O Open document 23 Getting Started Ctrl-S Save document Ctrl-B Bold text Ctrl-I Italic text Ctrl-U Underline text Changing the screen view You can change how large or small the document appears on the screen by selecting the Zoom command from the View menu. A Zoom dialog box is displayed. You can choose how large or small you want the document to appear, as a percentage of its usual size. You can select a size between 25% and 400%. 400% displays the document at four times its usual size 200% displays the document at twice its usual size 100% returns the document to its usual size 75% displays the document at three-quarters of its usual size 50% displays the document at half its normal size 25% displays the document at a quarter of its normal size Page Width scales the display so that the width of the Page fits within the document window Margin Width scales the display so that the width of the Work Area fits within the document window Whole Page scales the display so that you can see an entire page in the document window Custom reduces or enlarges the display of the document according to the percentage you type in. Percentages of less than 15% and greater than 999% are disregarded. Toolbars A toolbar is a group of buttons that provide a shortcut to using the menus. For example, this is the standard toolbar that appears in every application: 24 Getting Started Usually a toolbar appears attached to the top of an application, but can be torn off and docked on the left, right or bottom edge of the application, or appear floating over the application. If a button is “grayed” out, then that button is temporarily not available. For instance, if you are in an application but have not yet gone into a particular document, then the formatting buttons will not be available for use. Certain buttons, when selected, will appear depressed. These buttons will operate until they are deselected. For instance, the format buttons will continue to operate while depressed. You can add and remove buttons from the toolbar and even create your own toolbars – especially useful if you want to put macro commands on the toolbars. See Customizing toolbars on page 18 for more details. Status bar The line at the bottom of each application window is called the status bar. Here's a typical status bar for Write: Status bars can give you information about the current process, such as a progress report on saving a file or a description of the currently selected menu command. To turn the status bar on or off, select the Toolbars option from the View menu and select the Show Statusbar box. Clicking If your mouse button has more than one button, use the left button unless otherwise advised. If you are left-handed and have swapped mouse buttons over for convenience, use the right-hand button instead. To click on an item (such as a button or a window), move the mouse pointer until the mouse arrow is resting on the item on screen. Then push down and release the mouse button. To double-click on an item, position the mouse arrow and then click and release the mouse button rapidly, twice in succession. 25 Getting Started Selecting You will constantly be selecting text and other items, for instance, when you select text for formatting. 1. Use the mouse to point to the start of the area you want to select. 2. Holding down the mouse button, move the mouse pointer to the end point of the area you want to select. 3. Release the mouse button. The area should now be selected (visible by inverse color on screen). If you do not have a mouse, use the arrow keys to position the cursor at the first position. Then hold down the SHIFT key and use the arrow keys to drag it to a new position. Then release the SHIFT key. Drag and drop You can move selected items around on the page by using a technique called drag and drop: 1. Select the item you want to move. 2. Hold down the mouse button and move it to the new location. 3. Release the mouse button. The following items can be dragged and dropped: • Selected text in Write • A cell, or range of cells, in Spreadsheet • Inserted objects in Write or Spreadsheet • Graphic objects in Forms or Draw Using menus Ability has a series of pull-down menus from which you can select commands. The titles of these menus are the words, such as File and Edit, along the menu bar at the top of the window. 26 Getting Started To open a menu, move the mouse pointer to the required menu title and click the mouse button. If you open the wrong menu, simply click on another menu title. To choose a command from the menu, move the mouse pointer to the command and click with the mouse button. The menu will close and Ability will perform the action you have chosen. Note: Not all menu commands are available at all times. For instance, if you have not yet opened a document, the Save command will not be available. Commands that are not available are shown “grayed out” in the menus and you cannot select them. Shortcut menus Shortcut menus are special menus that are tailored to match the application you are currently working in. They are accessed by right-clicking over a part of the working document. For example, in spreadsheet, right-click over the main body of the sheet to get a menu that features a selection of common editing and formatting commands. Generally, the shortcut menus will “know” which menu commands are useful within particular applications and in different parts of applications. Closing, minimizing and maximizing windows All the Ability applications are MDI applications - meaning that more than one document window can be open at once. Each window has it's own set of buttons to close, minimize, maximize and restore the window. The application itself also has the same set of buttons: • at the top right-hand corner of any window to close it. If Click on the Close button there is anything not saved, you will be asked whether you want to save it or not. If the window is an application, it will be exited. • Click on the Minimize button Taskbar. • to make a window full size. Alternatively, doubleClick on the Maximize button click on the application title bar. Maximize is not available if the window is already maximized. • to return a window to its previous size. This converts Click on the Restore button a maximized window into a reduced window full size. Alternatively, double-click on the application title bar. Restore is only available if the window is maximized. For details on how to change the size of a reduced window, see Changing the size of a window on page 27. to reduce a window to an icon on the Windows 27 Getting Started All these command are also available from the system menu - click on the application icon in the top left corner of the window to access the system menu. Changing the size of a window To change the size of a reduced window: 1. Move the mouse pointer to the border of the window. 2. When it is positioned exactly over the border, it will turn into a double-headed arrow. 3. Now click and drag, and the border will move with the arrow. All four borders can be moved independently, so you can alter the shape of the window exactly. Getting help You can ask for help at any time in Ability. General help • Select the Application Help command from the Help menu to access the on-line help system for that application. • Select the Ability Office Help command from the Help menu to get the full on-line manual. Context sensitive help • and point and click on any Toolbars - select the "What's This?" help button toolbar button, or any other part of the application window, to get context sensitive help. Also note that tooltips are available for toolbar buttons - just place the mouse pointer over any button and a brief description will pop up. • Menu commands - select the "What's This?" help button command from the menus, to get context sensitive help. • Dialog boxes - in dialogs, click the dialog "What's This?" button and then point and click on any part of the dialog to get specific help on that item. and select any Some dialogs also contain a help button to provide supplementary assistance to the "What's This?" help. 28 Getting Started Using the help topics dialog A Help Topics window (accessible through the Application Help command from the Help menu) keeps the help organized like a book. It is a tabbed dialog and so provides three entry points into the actual help text. Contents - this is like the contents page of a book and is arranged in chapters, subchapters and, finally, help pages. Double-click on any chapter to see what's in it, and double-click on a help page to display the actual help. Index - allows you to search for key words. For example, enter "Mail Merge" (without the quotes) to locate all the help pages containing this key word. Find - searches for the supplied word in all the text within Help. When you first use this option, Windows will index the help system - this will take a short while. Once you've opened a help page, you can always use the Help Topics button to return to this dialog. Navigating inside the help pages In the help pages, you can navigate through the rest of the help system as follows: • Use the green underline links to move to related help topics. • Use the Topics Help button to move back to the Topics Help Page. • Use the forward and backward buttons to move to the next and previous topic. The help system is arranged in the same order as a manual, so you can start at the top and read the entire help system in this way. • Use the Back button to jump to the last visited topic. Root directory This is an outdated, if still useful, term. The root directory is the top-level folder for a particular drive. It contains a list of folders from which you can navigate to any sub-folder on the drive. It also contains start-up information for your operating system (if it happens to be the boot drive) and sometimes documents, although this is not really a good place for them to be saved. 29 Launcher Launcher The Launcher provides a convenient way to start any of the Ability modules and an easy way of opening existing documents. Launcher can be configured (see Display options on page 30) in a similar way to the Windows taskbar (see Windows taskbar on page 33): docked to the edge of the display, or floating as an "always-on-top" toolbar. The Launcher can be extended to quick start other applications (see Adding an application on page 31) - for example, Windows Explorer and Control Panel. Here's what each of the buttons on Launcher does: Open Ability Document Opens any Ability document – see Opening existing documents on page 10 Write Starts Write with a new document – see Launching an application on page 30 Database Starts Database – see Launching an application on page 30 Photopaint Starts Photopaint – see Launching an application on page 30 Spreadsheet Starts Spreadsheet with a new document – see Launching an application on page 30 Draw Starts Draw with a new document – see Launching an application on page 30 Explorer Windows Explorer. Part of the Windows operating system, it allows comprehensive file management and access, including finding, deleting, copying, organizing and renaming of files. Launcher Menu Options for configuring Launcher. 30 Launcher Starting Launcher To run Launcher, do one of the following: • Click the Start button, select Programs, select Ability Office and then select Launcher from the list of Ability applications. • If you are already in an Ability application, click on the Launcher button toolbar. on the Display options In its default state, the Launcher will appear as a floating toolbar, which can be moved anywhere on the screen simply by dragging it to a new location. You can dock it by dragging it to an edge of the screen where it will appear in similar way to the Windows taskbar. You can have the Launcher always visible or choose to display it only when the mouse is moved over it. Right-click over Launcher and choose from the following: • Select Always on Top to make Launcher appear on top of other windows, so you can always see it. • Select Auto hide to make Launcher disappear while you’re not using it and reappear as you move the mouse over it. This option only applies if Launcher is docked to the edge of your display. The Launcher buttons can be displayed with flat buttons (the default "Coolbar" mode), with large buttons, and with (or without) tooltips. Select Options from the Launcher Menu. Choose any combination you wish. Launching an application To run Write, Database, Spreadsheet or Draw, simply click on it’s button. In the case of the Ability applications, here's what happens: Write Opens Write with a new document, based on the normal template. Spreadsheet Opens Spreadsheet with a new spreadsheet. Photopaint Starts Photopaint 31 Launcher Draw Opens Draw with a new draw document. Database Starts Database. Other applications that may be added to Launcher, such as Windows Explorer, start in their default state. Opening existing documents To open an existing document, click on the Open button . A tabbed dialog will appear. This divides your files into four categories: Write documents, spreadsheets, databases and drawings. Click on the tab for the file you want. The Open dialog only displays files in the current folder, so if you cannot see the file you want, you’ll need to change folder. Closing applications Click the Launcher Menu button and select Exit All Applications to close all Ability applications started from Launcher. Each application will prompt for unsaved files in turn. To close Launcher, right-click and then select Exit. Modifying Launcher You can add applications to and remove them from the Launcher. You can also determine the start-up properties for these applications. In addition, you can choose the display options for Launcher and also make Launcher start up automatically. Adding an application To add an application, click the Launcher Menu button and select Add Application. Choose the application you want to add by typing in a path and program name in the Target box. Alternatively, click the Find button and choose the folder and program you want. 32 Launcher You can optionally modify the following start-up properties: 1. In the Start In box, type the path of the directory you would like the application to point to when it loads. For example, type in c:\myfiles if you would like the myfiles folder to display first when selecting the File Open command. 2. In the Shortcut Key box, type a key combination that you’d like to start the application. Valid key combinations are F1 through to F12, Ctrl-A through to Ctrl-Z and Alt-Ctrl-A though to Alt-Ctrl-Z. 3. To pass additional arguments to the application, enter them in the Arguments box. For example, many applications accept filenames as an argument so they can open the file directly. 4. In the Run combo-box, choose between Normal, Minimized and Maximized. This will determine the style of windows the application loads into. Removing an application Click the Launcher Menu button and select Modify. Select the application you want to remove and click the Delete button. Note that Ability's own applications - Write, Spreadsheet, Database and Draw - cannot be removed in this way. Modifying an application To modify an application already in Launcher, click the Launcher Menu button and select Modify. In the Applications tab, select the program you want to modify and then select the Attributes tab. Choose the new settings - see Adding an application on page 31 for more details. Select OK to save and exit the dialog. Select Apply to save and continue modifying other applications. Adding Launcher to the startup group If you want Launcher to appear automatically every time you start Windows, add it to the Windows StartUp group by following these steps: 1. Right-click on the Start button, select Open and then double click the Programs folder. The Programs Folder will open and you’ll see, among other folders, an Ability Office folder and a StartUp folder. 33 Launcher 2. Double-click the Ability Office folder. 3. Arrange the Windows so you can see the Ability Office folder (now opened) and the StartUp folder on screen at the same time. 4. Keeping the Ctrl key pressed, drag the Launcher icon and drop it over the StartUp folder. Note: This procedure will work with any application so you can add Write or Spreadsheet (or both) to the StartUp folder in exactly the same way. They will then start every time you start Windows. Windows taskbar Part of the Windows operating system. This allows you to run applications with the Start button. It also shows all running applications and allows you to switch between them. 34 Write Write Write is the Ability word-processing application. With word-processing, you can type a document, then revise it until it reads and looks just the way you want. Using Write, you can create and edit documents, correspondence, business reports, and other printed materials, including: • Inter-office memos • Sales promotional material • Annual reports • Advertising copy • Business letters • Book manuscripts Additionally, you can include spreadsheets, charts and drawings in any document you create with Write. Starting Write To start Write, follow these steps: 1. Click the Start button on the Windows Taskbar 2. Select Programs 3. Select Ability Office 4. Select Ability Write Write will open with a new document ready for typing. Parts of the Write window The following sections tell you about the different parts of the Write window and how to work with them. These include the toolbars, the horizontal ruler, the vertical ruler, the status bar, and the workspace. 35 Write The toolbars Across the top of the window are the toolbars. The toolbars contain buttons and dropdown lists that enable you to format and manipulate the text quickly and easily, without needing to open the menus. There are several different toolbars, each grouping buttons and controls of similar function. Here are three of the most common toolbars in Write: The standard toolbar is common to all applications and contains basic file opening, closing, saving, printing, editing, searching and zoom functions: The format toolbar contains text styling options for fonts and paragraphs, and also and allows you to define border and background styles for paragraphs: You can always get help on what each button does by moving the mouse pointer over it a yellow box, or tool-tip, containing a brief description is displayed. Note: If you cannot see a particular toolbar, open the View menu and click on the Toolbars command - make a selection from the list of toolbars. The screen will be redrawn and the toolbar shown. The horizontal ruler Across the top of the window is the horizontal ruler. This ruler shows the margin settings and tab stops which are in use. You can change the size of the left and right hand margins directly from this ruler: 1. Place the pointer over the left or right border that separates the grey and white portions of the ruler - a double-headed horizontal arrow is displayed. 2. Drag this to set a new margin. The right and left margins are set separately. 36 Write You can also set paragraph and tab settings directly from this ruler. See Paragraph indents on page 43 and Tab stops on page 44. Note: You can choose not to display the horizontal ruler. To do this, use the Ruler Bars option from the View menu. The vertical ruler Down the left side of the Write screen is the vertical ruler. You can change the size of the top and bottom margins directly from this ruler: 1. Place the pointer over the top or bottom border that separates the gray and white portions of the ruler - a double-headed vertical arrow is displayed. 2. Drag this to set a new margin. The top and bottom margins are set separately. Note: You can choose not to display the vertical ruler. To do this, use the Ruler Bars option from the View menu. The workspace The area in which you work on a Write document is called the workspace. You can think of this as a piece of paper that is ready to write or draw on. The status bar The status bar in Write gives you some very useful information about where you are in the document: In the above example, the status bar tell us: • The cursor is on page 6 of a 9-page document. • The cursor is on line 12 and there are 12 lines in total on page 6. • 37 Write The cursor is at the 28th character column on the line and there are 48 characters in total on the line. • Write is in Insert mode. Press the Insert key to change to Overwrite mode. When Write is in Insert mode, anything you type will be inserted at the cursor position. In Overwrite mode, anything you type will replace whatever is at the cursor position. Press the Insert key again to change back to Insert mode. • “Modified” tells us that the active document has been changed and the changes have not been saved. If the active document has not been changed, or if any changes have been saved, this message changes to “Saved”. Note: When you highlight a menu command, Write describes the command on the left side of the status bar. Moving around a document To move around a Write document, you will usually locate where you want the cursor to go by using the mouse and clicking. You can also use the scroll bars at the right and bottom of the screen to see more of the document. However, you can also move the cursor with the cursor movement keys, and there are times when this can be quicker. The following table shows all the ways you can move the cursor. Key Description Arrow keys The arrow keys move the cursor one character at a time in the direction of the arrow (up, down, left, or right). ctrl + Í & ctrl + Î Hold down the ctrl key and press the left arrow key to move to the left a word at a time. Hold down ctrl and press the right arrow key to move to the right a word at a time. home & end The home key moves the cursor to the beginning of the current line; the end key moves it to the end of the current line. page up Moves the cursor up one whole screen at a time. page down Moves the cursor down one whole screen at a time. 38 Write ctrl + page up & ctrl + page down Hold down the ctrl key and press the page up key to move to the top of the previous page; hold down ctrl and press the page down key to move to the top of the next page. ctrl + home & ctrl + end Hold down the ctrl key and press the home key to move the cursor to the beginning of the document; hold down ctrl and press the end key to move to the end of the document. As you move around a document, the page, line and column information displayed on the status bar changes. Creating a document When you start Write, a new document is automatically opened for you to begin working. From within Write, there are two different ways of creating a new document: • on the toolbar. This creates a new document, based on Click on the New button the Normal template. See Using templates on page 83 for more details on document templates. • Select the New command from the File menu. Ability will display a list of templates – choose the one you want and click on OK (you would anyway usually choose the Normal template). Typing text In a new or existing document, a flashing cursor shows the current location. When you start typing, text will appear at the cursor and you will notice that the cursor moves to show the current location. You do not need to press the Enter key at the end of a line of typing: Write automatically wraps the text round onto the next line when there is no more room on the current line. You can use the ← (backspace) key to erase typing mistakes. To start a new paragraph, press Enter. When the page is full, you will automatically be taken to the top of the next page. You can also choose to start a new page at any point - select the Page Break command from the Insert menu, or press ctrl+enter. 39 Write You can use the Tab key to move the cursor to the next tab position as shown on the ruler. After pressing the Tab key, the next piece of text you enter will be aligned to the left, right or center, according to the alignment setting of the tab (see Changing tab settings on page 45). You can modify existing text by placing the cursor at the point where you want to begin typing. The new text will either replace that text character by character or be inserted into it. This depends on whether you are in Insert mode or Overwrite mode (see Status bar on page 36 for more details). It is wise to get into the habit of saving your work regularly. As with all Ability programs, you do this by clicking the Save button command from the File menu. on the toolbar or selecting the Save Selecting text You need to select portions of text if you want to change font, cut, copy or move the text, or apply. To select text use one of the following techniques: • Select any text - hold down the mouse button and dragging the cursor over the text to highlight it. You can do the same thing with the keyboard by holding down the shift key and moving the cursor with arrow keys to highlight text. • Select a line of text - move the mouse pointer to the left of a paragraph (i.e. into the left hand margin) until the pointer changes to a right-facing arrow. Click once to highlight a line. • Select a paragraph of text - move the mouse pointer to the left of a paragraph (i.e. into the left hand margin) until the pointer changes to a right-facing arrow. Double click. • Select an entire document - use the Select All command from the Edit menu. Note: You can extend a highlighted area by holding down the shift key, pointing at the new position with the mouse, and then clicking. Editing text The first step in editing text is to select it (see Selecting text on page 39). You can then: • Copy, move or delete (see Moving, copying and deleting text on page 48) 40 Write • Apply text formatting (see Formatting text on page 40) If you change your mind after editing or formatting the text, you can click the Undo button or select the Undo command from the Edit menu. This command enables you to undo as many actions as you like, e.g. you can reverse your last few editing or formatting actions and further. If you change your mind again, you can reverse the undo by clicking the Redo button or selecting the Redo command from the Edit menu. If you want to perform several undos or redos at the same time, click on the arrow buttons next to the Undo and Redo buttons. In the "Undo" and "Redo" dialogs click on the action up to which you want to undo or redo: all the actions listed in the dialog that are placed before the action you click on will also be undone or redone. Word count You can count the number of words, characters and pages in a Write document. To ascertain the number of words in your document select Word Count from the Tools menu. Among other information the number of pages, words and characters are shown. The same information, plus additional statistics relating to editing time and number of document revisions, is available by selecting Properties from the File menu (see Document summary information and statistics on page 9). Formatting text To format text, first select it (as explained in Selecting text on page 39) and then use the format toolbar (see Toolbars on page 35) across the top of the Write window to set the font, style and size of the selected text: Click on the arrow to the right of the font name box to display a list of available fonts, and then choose the one you want: Click on the arrow to the right of the font size box to choose a font size: Font name box Font size box Finally, you can apply a limited range of styling to the text directly from the toolbar. Click on the Bold button to make the text bold. Click on the Italic button to italicize the text. 41 Write Click on the Underline button to underline the text. Click on the Strikethrough button to draw a line through the text. Click on the Font Color button to color text with the currently selected color (to change the selected color click on the arrow and choose a color from the drop-down menu). The changes you make are applied to the selected text right away. You can also format text using the options under the Format menu. Formatting text using the menus As an alternative to formatting text using the toolbars (see Formatting text on page 40), you can use the menus instead. First, select the text (see Selecting text on page 39), and then select the Font command from the Format menu or right-click and select the Font option. On the Font page of the “Text Property” dialog: • Use the Font box to select the type of font. • Use the Font style box to choose from Regular (i.e. no styling), Italic, Bold and Bold Italic. • Use the Size box to select the font size. • Use the Effects group box to choose from Strikeout, Underline, Superscript and Subscript. • Use Apply to field to choose whether to apply the chosen effects to any fields in the selected area. • Use the Color box to choose from the list of available colors. The options chosen are displayed in the Sample box. This enables you to get some idea of the effect before actually applying it to the document, and therefore allows you to experiment without committing yourself. Once you are satisfied, click on the OK button and the formats will be applied to the selected text. You can store frequently used combinations of font and font styles by defining a character style (see Creating new styles on page 68). 42 Write Changing case You can change the case of text (i.e. choose whether it is to appear as capitals, small letters or as a mixture of the two) without having to re-type it. To do this, select the text and select the Change Case command from the Format menu. The “Change Case” dialog appears. There are five options: Sentence case starts each sentence with an uppercase letter, while all other words start with lowercase letters lowercase changes all letters in the selected text to lowercase UPPERCASE changes all letters in the selected text to uppercase Title Case capitalizes the first letter of each word tOGGLE cASE changes uppercase letters to lowercase, and vice versa Select the option you require and click on the OK button to implement it. Symbols Sometimes you will want to use symbols that are not found on the standard keyboard. Windows comes supplied with a wide range of these, such as the copyright symbols and the registered trademark symbol, Greek characters and various mathematical symbols. To insert a symbol, position the cursor at the point where you want the symbol, and then select the Symbol command from the Insert menu. The “Character Map” dialog is displayed. Select the symbol font in the Font box - “Symbol” and “Wingdings” are two common ones that provide a good selection of symbols. The character map will change to show the symbols in that font. Click on a symbol to magnify it and double-click to insert it into the Characters to copy box. Multiple symbols can be inserted in this way or by using the Select button. Click the Copy button to insert the symbols into the document. Note: You can apply all the usual formatting commands to these inserted symbols. Symbols are inserted in the document as text. If you later change the font of selected text that contains inserted symbols, the symbols will take on the new font just like any other text. 43 Write Formatting paragraphs Paragraphs can be formatted in the same way as any other text: you can select font, size, bold, italic, etc. (see Formatting text on page 40 for more details). Paragraphs have additional properties that you can control: • Alignment - left, center, right, justified (see Paragraph alignment on page 43) • Indentation - how far the paragraph is indented from the left and right margin (see Paragraph indents on page 43) • Tab stops – where the tab stops are placed and the type of tab stop (see Tab stops on page 44) • Borders and backgrounds (see Borders and backgrounds on page 46) • Line spacing - single, double, custom, before and after spacing (see Line spacing on page 44) Note: To style more than one paragraph at once, just select all the relevant paragraphs. Paragraph alignment The format toolbar (see Toolbars on page 35) allows you to align selected paragraphs, as follows: Click on the Left Align button Click on the Right Align button Click on the Center button to align the paragraph to the left. to align the paragraph to the right. to center the paragraph between the margins. to justify the paragraph (which alters the spacing between Click on the Justify button the words so that straight left and right margins are created). Paragraph indents Use the horizontal ruler (see Horizontal ruler on page 35) to set the amount of extra indent from the left and right margins that you require for your paragraphs. 44 Write To change the indentation of the paragraph, click on one of the indent markers and drag it to a new position. The top left marker sets the first line indent and the bottom left marker sets the indent for the rest of the lines. The right-hand marker sets the right indent. The paragraph is redrawn when you release the mouse after setting each indent. Note: You cannot set paragraph indents outside of the overall page margin settings. Tab stops You can position tabs and set their alignment directly from the horizontal ruler (see Horizontal ruler on page 35). There are three ways in which tabs can be positioned: • Click on a tab stop and drag it to a new location. • Press shift, click on a tab and drag it to a new location (continuing to press shift). All the other tab stops will move relative to the moved tab. • Press ctrl and click on a tab. As you drag the tab to a new location, intermediate tab positions are erased. To set the alignment of a tab, click on it with the right-hand mouse button. Keep clicking to toggle through these values: Left align - text at this tab stop will be displayed to the left Right align - text at this tab stop will be displayed to the right Center align - text at this tab stop will be centered on the tab Decimal align - numbers at this tab stop will be centered on the decimal point Line spacing To adjust line spacing, select the Paragraph command from the Format menu. In the Spacing group box, you can specify the amount of vertical space allowed for each line of text. From the Step drop down-list, choose between, Single, 1.5, Double, 2.5 and Custom. 45 Write By default, Ability uses single line spacing, which works by examining the largest font on the line and setting the line height to approximately 120% of the font’s height. Double spacing uses 240% and so on. You can set your own line spacing by typing a value in the Custom box or clicking on the arrow to scroll through the values. The Before and After boxes allow you to specify the spacing at the beginning and end of a paragraph respectively. This is useful in conjunction with styles when creating long documents, as you can specify the exact spacing before and after headings and subheadings. Paragraph formatting using the menus You can make minute changes to the paragraph margins and indentation by selecting the Paragraph command from the Format menu or double-clicking on a paragraph indent marker from the ruler. The “Paragraph” dialog is displayed. In the Margins group box, you can set exact measurements for the Left paragraph margin, the Right paragraph margin, and the first line Indent. These work on top of the page settings. So, if the work area has a left page margin of two inches and you set a paragraph margin of an inch, the text will actually begin three inches from the left of the piece of paper. In the Alignment box, you can set the alignment of the paragraph, choosing one of Left, Right, Center and Justified. Click on the Tabs button to modify the tab stops for the paragraph (see Changing tab settings on page 45). Choose the line spacing option (see Line spacing on page 44) in the Spacing group box. When all is set, click on the OK button. The horizontal ruler (if it is displayed) will be redrawn with the new marker locations on it. Changing tab settings To change tab settings for a paragraph, select Tabs from the Format menu or doubleclick a tab stop on the ruler to display the “Tabs” dialog. To enter a new tab location, type a value in the entry box at the top left of the dialog, then choose one of the four styles of tab stop: Left - text is inserted to the right of the tab position Right - text is inserted to the left of the tab position Center - text is inserted equally to the left and right of the tab position 46 Write Decimal - text is inserted so that the decimal point lines up with the tab position Click on Set to set the new tab. To erase a tab stop, click on it in the list of tabs on the left of the dialog and then click on the Remove button. Click on the Remove All to clear all the tab settings. To reset all the tabs, enter a value for the tab spacing in the Step box (in the Auto Ordering group box) and click on the Reorder button. All the tabs are replaced with new settings following the Step value you have chosen. Borders and backgrounds Borders and backgrounds are applied at the paragraph level - you can put a border around one or more paragraphs but not individual sentences within paragraphs. Borders and backgrounds are set with the borders buttons on the right of the Format toolbar (see Toolbars on page 35) or in the Borders and Shading box from the Format menu. Select the text you wish to put a border around and use the border buttons as follows: Set the border Line Style for subsequent borders. If you want to change an existing border, set the style and re-apply the border edges by removing and then reinstating them (as outlined below). Set the background Shade Style. Choose from a range of options between Clear and Solid. By default, the background is Clear and white - this can be changed in the borders dialog (see Using the borders dialog on page 47). In conjunction with the Shade Style you can determine the color of the shading by selecting one of the options in Fore Color, bearing in mind that no color can be set for a clear background. Turn on or off the left, right, bottom and top border lines using Change border style. Select one of these by clicking on the arrow and selecting it in the displayed box. The currently selected line style will be applied to the selected border. 47 Write Turn all borders on, using Change border style. Turn all borders off (that is, remove borders), again using Change border style. In addition to the above border styles there are others that can be set only in the Borders and Shading dialog, including the option to change border colors other than the standard black and the ability to specify an offset between the border and text - see Using the borders dialog on page 47. Using the borders dialog Select Borders and Shading from the Format menu to view the borders dialog. You can use this as an alternative to using the borders toolbar (see Borders and backgrounds on page 46) - there are some extra settings that can only be set here as well. Choose whether to border the selected text on the Left, Right, Top or Bottom, or to apply a full border using the All checkbox. Click on the appropriate checkbox to apply the border; click on any selected checkbox to remove the border. To remove all borders at once, click on None. You can also choose the Line style and Border Color for the border, and the type of Shading you want within the border. Click on the arrows attached to these boxes to see the range of options and then select the required option. The color and line style will be applied when the border is applied. The shading will be applied as soon as it is selected. The “Border” dialog has a couple of features that can't be implemented using the border buttons: The Offset box allows you to increase or decrease the distance between the border and the text. The Shading group box enables you to choose the colors to be used in a particular shading style. First select a shading style in Style, and then the background and foreground colors in Back Color and Fore Color respectively. If style is set to solid, back color will have no effect and if style is clear, fore color has no effect. Anything in between will display a mixture of the two colors. 48 Write Moving, copying and deleting text Moving, copying and deleting text is very easy to do, as is explained in the following sections. Moving text The easiest way to move text is by drag and drop: select the text you want to move (see Selecting text on page 39), place the mouse over the selection, left-click and drag the text to a new location. Alternatively, select the text, right-click and select Cut from the displayed menu (or click on the toolbar). The text will disappear from the document. You on the Cut button cannot see this, but it has been placed in a Windows feature called the clipboard. To put the text back into the document (or into another document), click where you want the removed text to go (the cursor indicates where the text is to start). Right-click and select Paste from the displayed menu (or click on the Paste button on the toolbar). The text will be “pasted” into the document. Note: The cut text stays in the clipboard until you put something else in there, allowing you to paste it into documents as many times as you like until it is replaced. Copying text The easiest way to copy text is by drag and drop: select the text you want to copy (see Selecting text on page 39), place the mouse over the selection, left-click as you depress the Ctrl key on the keyboard, and drag the text to a new location. Alternatively, select the text, right-click and then select Copy from the displayed menu (or click on the Copy button into the clipboard. on the toolbar). The text stays where it is and a copy is put To put a copy of the text into the document (or into another document), click where you want the copy to go (the cursor indicates where the text is to start). Right-click and select Paste (or click the Paste button document. on the toolbar). The text will be “pasted” into the Deleting text To remove text, first select it (see Selecting text on page 39) and then right-click and select Cut (or click on the Cut button on the toolbar). The text will disappear from the 49 Write document. The text is now in the clipboard, so is available for pasting if you want to do so, but since you do not have to paste it anywhere it has effectively been deleted. Alternatively, select the text and then: • overtype with something else • press the del key or select Delete from the Edit menu • press the ← (backspace) key Finding and replacing text You can use Write to change a word or phrase anywhere in a document. You can change all occurrences of a particular word or phrase in a single “search and replace” operation. For example, if you have written a report on a company called Jeans Limited, and realize later that it is called Genes Limited, you can quickly search for every occurrence of Jeans and replace it with Genes. Finding text To find a word or phrase, follow these steps: on the toolbar or select the Find command from the 1. Click on the Find button Edit menu. The “Find” dialog is displayed, in which you can find all instances of a piece of text, for example, the words “blue sky”. 2. In the Find What box, type the text you wish to find. 3. In the Direction box, choose where you would like to look for the text: • All searches the whole document • Up searches from the cursor to the beginning of the document • Down searches from the cursor to the end of the document 4. In the Matching box: • Select the Match Case option to find only those occurrences that have the combination of uppercase and lowercase letters specified in the Find What box. 50 Write • Select the Match Whole Words Only option to find occurrences that are words by themselves, and not part of a larger word e.g. searching for “foot” will not find “football”. 5. In the Style box, you can choose to search for text in a particular font style. Click on the arrow next to Style, and then choose a style from the list e.g. searching for “eucalyptus” in the Normal style will ignore any examples of this word that are, say, in italics. 6. When everything is set, click on the Find Next button, and Write will find the next occurrence of the word or phrase. Click on Find Next again until there are no more matches. A message will tell then tell you that the search has been unsuccessful. 7. Once you have exited the "Find" dialog, you can continue to search for the same text string without having to enter the “Find” dialog. Ability remembers the last text string searched for in Find, so to continue your search just select Find Next from the Edit menu. Replacing text To find and replace text, follow these steps: on the toolbar or select the Replace command from 1. Click on the Replace button the Edit menu. The “Replace” dialog is displayed. This is very similar to the “Find” dialog (see Finding text on page 49) and allows you to determine how text will be matched and the direction of search. However, there are some additional features specific to Replace. 2. In the Replace With box, type the text or phrase you wish to replace the found text with (or you can paste it in from the clipboard if it has been previously copied). There is also the option to set the style of the replacement text in the Style box. 3. When all is set, click on the Replace button to find the next occurrence of the find text. Click on Replace again to replace the found text and move on to the next occurrence of the find text, and so on till you reach the end of the document or no longer wish to proceed. Alternatively, click on the Replace All button to replace all occurrences in the document of the find text with the replace text. If no matching text is found for replacing, a message is displayed saying that the search was unsuccessful. 4. While in the "Replace" dialog you can also choose to search for text without replacing. Click on Find Next to do this and ignore any text that may have been placed in the Replace With box. If you find text using the Replace button and you decide that you don’t want to replace a particular occurrence of the text, then just use Find Text. Switch back to Replace when you are ready to replace some text. 51 Write Go to You can go to a specific place in a document. To do this, follow these steps: 1. Select the Go To command from the Edit menu. The “Go To” dialog is displayed. 2. In the Go to group box, you can choose to go to a page, a field, or an object. To go to the next page, field or object from the current location, leave the Number box empty and click on the Next button. To go to the previous page, field or object, again leave the Number box empty and click on Previous. 3. You can go to a specific page, field or object by entering a number in the Number box (or using the scroll arrow at the side of this box). For example, to go to page 4 of a document, click on Page in the Go to group box and enter 4 in the Page Number box. The Go To button is displayed; click on it to go to page 4. 4. To move relative to the current location, enter + and - in the Number box. For example, click on Page in the Go to group box and enter +4 in the Page Number box. Click on the Go To button to move forward four pages from the present location. Note: Ability goes to a field or object according to its position in the document. For example, if you tell Go To to move to the third field in a document, it will search for the third field from the top of the document, not the third field inserted. Tables Tables allow you to separate off and structure information in a Write document. Each table is displayed as a grid. Once you have created a basic table, you can add or delete columns and rows, format individual cells or the whole table, split the table or join it to another table, and so on. Insert a table as follows: 1. Select Insert Table from the Table menu. 2. The “Insert Table” dialog box is displayed with options for Number of columns and Number of rows. The maximum possible number of columns is 30 and of rows is 10,000 (the default is 2 for each). Type in the number of columns and rows you need (or alternatively use the scroller). If you wish to alter these later you can always add or delete rows and columns. 3. Click on OK to close the box and insert the table. Note that the top left-hand cell of the table is placed at the current position of the cursor in the document. 52 Write To enter data in a particular table cell, first select the cell and then type the data. Note that when you reach the right-hand border of the cell a new line will be created to allow more space for further data entry. Editing Tables After you have created a table (see Tables on page 51) you can to edit it in a number of ways, including entering or deleting data, adding or removing row or columns, splitting or merging cells. Edit the data in a cell by selecting the relevant cell and editing just as you would in the body of the document i.e. typing to enter data, backspacing to delete data. Delete the entire contents of a cell by selecting the contents with your mouse and pressing the Delete key (or right-clicking and selecting Cut). Stretch or shrink cell borders by moving your mouse over the relevant border. When the pointer changes form depress the left mouse button and drag the border to a new position before releasing. Format a cell, row, column or group of cells by first making the appropriate selection and then applying the formats in the usual way. Select a cell by clicking on it; a row by moving the mouse pointer to the left of the table, on the same level as the row, and clicking once when the pointer turns to an arrow; a column in the same way as for a row but moving the pointer above the column. To select a group of cells, rows or columns, follow the above procedures but keep the Ctrl key on the keyboard depressed. This prevents a later selection from canceling an earlier one. The following commands are available through the Table menu (or from the drop-down menu when you right-click your mouse): Insert Rows allows you to insert a row, with the option of choosing to insert the row above or below the currently selected row. You can also choose how many rows to insert. Insert Columns allows you to insert a column, with the option of choosing to insert the column to the left or the right of the currently selected column. You can also choose how many columns to insert Delete Rows allows you to delete selected rows. Access this through the Delete command in the Tables menu. Select a row to be deleted by clicking in any cell in that row. Delete Columns allows you to delete selected columns. Access this through the Delete command in the Tables menu. Select a column to be deleted by clicking in any cell in that column. 53 Write Delete Table allows you to delete a whole table. Access this through the Delete command in the Tables menu. Select a table to be deleted by clicking in any cell in that table. Merge Cells allows you to merge selected cells. The cells must be adjacent and form a complete rectangle or square before the command is activated. The selected cells will then be formed into one big cell, with the individual cell borders erased. Split Cell allows you to split a cell into several smaller cells. In the “Split Cell” dialog box you can choose how many rows (between 1 and 30) and columns (between 1 and 10000) to split the selected cell into. Note that the cell to be split may be a cell that was previously created by using the Merge Cells command. Split Table allows you to split a table into two parts. Before selecting the Split Table command, you need to select a row (or any cell in the row) at which to make the split. The table is split so that the rows above the selected row form one table and those below, along with the selected row, form the second table. Join Table allows you to join separate tables into one table. First, select the topmost of the two tables to be joined (note that you need only select a row or a cell in the table). On applying the command the selected table is joined to the table beneath it. If there is some intervening text between the tables in the main body of the document, this is placed after the new joined table. Spell checker and thesaurus Ability incorporates a spell checker to check the spelling of a document and a thesaurus to suggest synonyms. In addition, you can add words to a user-defined dictionary. Checking the spelling Click the Spell button to begin checking the spelling of the active document (including any text in headers and footers). Alternatively, select the Spelling command from the Tools menu. Note: To limit the spell check, select the text you want to check first. When the spell-checker comes across a word it does not recognize, the “Spelling” dialog box is displayed. The unrecognized word is shown in the Suggestion for box, and the reason for the query (e.g. word not found, or word doubled) is given next to it. The closest replacement (if any can be found) is given in the Change To box. To accept this suggestion, click on the Change button. 54 Write To see other suggestions, click on the Suggest button (which will be grayed out if there are no other suggestions). To choose one of these other suggestions, click on it and then on the Change button. To delete the word from the document (for instance, if it is a doubled word), delete the text from the Change To box and click on the Change button. There are several other buttons you can use: • Ignore - ignores the highlighted word • Ignore All - ignores all occurrences of the same word • Change All - changes all occurrences of the same word • Add - adds the highlighted word to your personal dictionary - see User defined dictionary on page 54 for more details. If you don’t begin the spelling check at the beginning of the document, Write checks all the way to the end and then asks if you want to check the spelling from the beginning. Click on the OK button to continue checking, or on the Cancel button to end the check. User-defined dictionary The spell-checker has a main dictionary with many common words, and can remember new words in a personal dictionary, so that special words such as acronyms, abbreviations and specialist terminology can be stored and used to extend the main dictionary. During a spell check, when you select the Add button, the current word is entered into your own personalized dictionary. All subsequent occurrences of the word will be treated as if the word were part of the standard dictionary. By default, all the words are added in a document called user.lex. You can select alternative personal dictionaries to use instead - see Spell-checker and thesaurus options on page 90. You can edit the user dictionary by opening it with Write. Select the Open command from the File menu and pick the dictionary from the file list. You may need to select Other Files (*.*) from the List Files Of Type drop-down list to be able to do this. Remove or edit any words and select the Save command from the File menu to finish editing your dictionary. 55 Write Using the thesaurus For any word in your Write document, you can select, from a list of words, one which has the same meaning but is perhaps more appropriate to the context of the document. These words are called synonyms. From any list of synonyms, you can select any of the words and enter another area of the thesaurus to explore all the synonyms for that word. You can explore as many areas of the thesaurus as you like, and at any time you can select an appropriate synonym to replace your original word. To use the thesaurus, highlight the word whose synonym you wish to find, and then select the Thesaurus command from the Tools menu. The “Thesaurus” dialog box is displayed. In the Looked Up box is the word you originally selected. Its broad meaning is given beneath in the Meanings box; of course, a word might have several meanings, in which case they will be listed here, together with their parts of speech. Note: If the word you have looked up is not in the thesaurus, the title of the Looked Up box is changed to Not Found. Contained in the Replace With box is the synonym that Write has chosen as being closest in meaning to the original word. Any further synonyms are listed beneath in the Synonyms box. Click on one of these synonyms to place it in the Replace With box. Double-click on a synonym to place it in the Looked Up box (and then click on the Look Up button to display its synonyms). When you have put the synonym you require into the Replace With box, click on the Replace button. Click on the Previous button to step back through the contents of the Looked Up box. Columns You can think of a plain document as a single column of text stretching the width of the page: when a line of text reaches the right border of the page it "wraps" around onto the next line, before eventually moving to the next page. When working with two or more columns, the text wraps to the next column and only wraps to the next line at the end of the last column. Otherwise, all the text and paragraph formatting remains the same. You can apply create up to six columns for individual paragraphs or for the entire document - see Creating columns on page 56. 56 Write Columns are, by default, of equal width. You can set the width of all the columns, and all the inter-column gaps, in one go or else have unequal column widths - see Formatting columns on page 56. To see how to remove and split columns and how columns can be used in conjunction with frames, see Working with columns on page 57. Creating columns To create columns, follow these steps: 1. Select the text you want to put into columns. To turn the entire document into columns, use the Select All command from the Edit menu. If no text is selected, only the current paragraph will be turned into columns. 2. Click the Columns button menu. or select the Columns command from the Format 3. Set the number of columns (up to a maximum of six) and click OK. Your document will be redrawn showing the columns. You can now edit the text as normal. Formatting columns Click the Columns button or select the Columns command from the Format menu to display the “Columns” dialog: 1. Use the Number of Columns box to increase or decrease the number of columns: the minimum is 1 (equivalent to removing previously set column formatting), the maximum 6. 2. Make sure the Equal Columns checkbox is switched on if you want the columns to be of equal width (the default setting). If they are equal, any changes to the column widths or column gaps will apply to all columns; if not, you'll need to select each column in turn in the Col # box. 3. Use the Width box to set the column width(s) according to the Equal Columns setting. i.e. if it is checked the column widths will change together, if not you should scroll through the Col # box and set the width for each column in turn. Note that increasing the width will decrease the column spacing. 4. Use the Spacing box to change the spacing between the columns according to the Equal Columns setting i.e. for all the columns at once if switched on, otherwise scroll through the Col # box and set the spacing for each column in turn. Note that increasing the spacing will decrease the column width. 57 Write 5. Use the Line between box to display a vertical line between the columns. Uncheck it if you want the columns to be displayed without lines. Note that you can also use the horizontal ruler to set column widths and spacing in the same way you can use it to adjust margins (see The horizontal ruler on page 35). Working with columns When you type into columns, Write attempts to keep the number of lines in each column equal. The text in one column shifts across to the adjacent column as more text is added. This will continue until you select an area not formatted as columns or else issue the Column Break command from the Insert menu. A Column Break can do two things: 1. If the command is issued with the cursor in the middle of the column text, a blank line will be inserted and the result will be two separated column areas. You can then enter text in the blank line and this will continue in a single column (i.e. as in a standard page). This process can be reversed, simply by deleting the blank line. The two column areas will be joined together again. 2. If the command is issued with the cursor at the end of the column text, Write will drop out of column format and allow you to continue your document in a single column. To return text back to a single column: 1. Select the text. 2. Click the Columns button or select Columns command from the Format menu. 3. Set the Number of columns box at 1. You can insert a frame and position it to sit across two columns. The text flows around the frame in both columns - this is a page layout style frequently used in newspapers. Frames and callouts A frame is like a mini page that sits on top of your standard page. This mini page can be positioned and sized anywhere on the standard page. The text within it can be formatted in the same way as normal text and can also contain pictures or objects. This makes frames ideal for tasks such as creating newsletters. 58 Write You can click anywhere in a frame to make it active so that the text within it is editable. Click anywhere on the standard page outside of the frame to return to the body text. A callout is a frame that points to some other area on your page. This is ideal for creating annotations. A callout has all the properties of a frame, combined with a range of line styles to do the actual pointing. Creating frames You can create a new frame for text to be entered, or turn existing text into a frame. To create a blank frame: 1. Select the Frame command from the Insert menu. The mouse pointer will change to a +. 2. Click anywhere over the document to insert a default-sized frame or click-and-drag the pointer to define the size. To turn existing text or graphics into a frame: 1. Select the text or graphics you want in the frame. 2. Select the Frame command from the Insert menu. You can change the position and size of the frame, and also alter other frame properties. Creating callouts To create a callout: 1. Select the Callout command from the Insert menu. The mouse pointer will change to a +. 2. Move the mouse pointer over the position you want the callout to point to, click, and drag the mouse to the position where you want the callout text to appear. Alternatively, click anywhere over the document to insert a default callout. You are now ready to enter the callout text. You can change the position, size and appearance of a callout. Modifying frames When working with frames, there are five aspects you need to control: 59 Write • size of the frame – see Sizing frames on page 59 • position of the frame – see Positioning frames on page 60 • text flow around the frame – see Text flow around frames on page 61 • text offset within the frame – see Setting the text offset to frames on page 61 • Contents of the frame The last of these is an easy matter – it's the same as editing text on the standard page. Also, note that you can exchange text between the frame and the page (or other frames) by using drag and drop – see Moving text on page 48 for more details. Sizing frames There are two ways you can modify the size of a frame: Sizing the frame directly, using the mouse 1. Click in a frame to make it active - so that the frame edges are visible. 2. Click anywhere on the border of the frame so that the eight resize boxes appear. 3. Click on any resize box and drag the frame to the new shape. Sizing a frame using the frame dialog More control is available in the frames dialog, where you can set the height and width exactly or set them to be automatic. 1. Click in a frame to make it active. 2. Right-click and select the Frames command from the shortcut menu (or select the Frames and Callouts command from the Format menu). 3. Width - since the Width Type is set at Exactly, set the width you want in the Width box. 4. Height - choose from: • Auto. The frame will grow and shrink vertically to match the amount of text within the frame. With this setting the dimension in the Height box is ignored. • At Least. The frame will grow vertically to match the amount of text but will not shrink if the text is reduced. You can optionally enter a value in the Height box note this cannot be set to less than the current value. 60 Write • Exactly. The height is fixed at the dimension you enter in the Height box. Positioning frames There are two ways to position a frame: Moving a frame with the mouse 1. Click in a frame to make it active, so that the frame edges are visible. 2. Click on the frame edge so that the eight resize boxes appear on the frame. 3. Click anywhere on the frame edge, apart from the resize boxes, and drag the frame to a new location. Note that you can drop the frame outside the margins. Using the frames dialog As well as being able to position a frame anywhere on the page, you can use the “Frames” page of the “Properties” dialog to set the position of a frame relative to the page, margin, column or current paragraph. 1. Click in a frame to make it active. 2. Right-click and select the Frames command from the shortcut menu (or select the Frames and Callouts command from the Format menu). 3. Horizontal. Set the distance in the Position box and then specify what you want the position to be relative to in the Relative To box (that is, the distance from the left edge of the frame): • Page - the distance is measured from the left edge of the paper. • Margin - the distance is measured from the left margin. If the margins are changed, the frame will automatically adjust its position to match. • Column - the distance between the current column and the frame. If the column is changed, the frame will automatically adjust its position to match. 4. Vertical. Set the distance in the Position box and then specify what you want the position to be relative to in the Relative To box (that is, the distance from the top edge of the frame: • Page - the distance is measured from the top edge of the paper. • • 61 Write Margin - the distance is measured from the top margin. If the margins are changed, the frame will automatically adjust its position to match. Paragraph - the distance is measured from the start of the current paragraph. Use this setting if you want the frame to flow with the text. Setting the text offset to frames The distance between each edge of the frame and the text within it is governed by vertical and horizontal offsets. To set this: 1. Click in a frame to make it active. 2. Right-click and select the Frames command from the shortcut menu (or select the Frames and Callouts command from the Format menu). 3. Set the horizontal offset in the horizontal Distance From Text box. A setting of zero will display the frame contents horizontally flush with the body text. The default setting is 3.6mm. 4. Set the vertical offset in the vertical Distance From Text box. A setting of zero will display the frame contents vertically flush with the body text. The default setting is 1.8mm. Text flow around frames When you insert a frame into a page, the text on the page moves aside to create space for the frame - in other words it flows around the frame. This is the default behavior for frames. There are two other options, which you can set as follows: 1. Click in a frame to make it active. 2. Right-click and select the Frames command from the shortcut menu (or select the Frames and Callouts command from the Format menu). 3. In the Text Wrapping group box, choose from: • None - flow of the body text stops at the top of the frame and continues at the bottom. • Around - the default setting. Body text wraps around the frame. • Transparent - body text flows under the frame and the frame itself is transparent. 62 Write Modifying callouts A callout shares many of its properties with frames (which is not surprising, given that a callout is a frame with a line). See Modifying frames on page 58 for more details. To modify the properties that only apply to a callout, follow these steps: 1. Click in a callout to make it active. 2. Right-click and select the Frames command from the shortcut menu (or select the Frames and Callouts command from the Format menu). 3. Select the Callout tab in the dialog and set any of the following: • Attachment - the callout line can join the frame at the nearest Corner or at the nearest Middle of a side. Select None to convert the callout into a plain frame. • Arrowhead - modify the appearance of the arrowhead. The default is to display no arrowhead, that is, the callout will be a plain line. Select an arrowhead Style to turn the line into an arrow and determine the arrow’s direction. The width and the length of the arrowhead itself can be set using the Width and Length dropdowns respectively. • Line - set the thickness and style of the line using the Line Style drop-down and the color of the line, which includes the color of the arrowhead, with the Color drop-down. 4. The results are displayed in the Preview box. Click on OK when you are ready. Deleting frames and callouts Delete a frame or callout as follows: 1. Click in the frame or callout to make it active. 2. Right-click and select the Frames command from the shortcut menu (or select Frames and Callouts from the Format menu). 3. Click on the Delete button at the bottom of the “Frame” page in the “Properties” dialog. 4. The dialog is closed and the frame or callout is deleted. 63 Write Footnotes Footnotes allow you to annotate your text. They are used in the same way as in a normal printed book, with superscript numbers appearing next to points in the main body of the text that need explanation or require a reference, and the explanation or reference appearing at the bottom of the page next to the appropriate matching number. Write makes it easy for you to insert a footnote number field wherever you need one. A corresponding footnote field is automatically inserted at the bottom of the page for you to type the relevant footnote text. To insert a footnote you should follow these steps: 1. Position the cursor at the place in your text where you want the footnote number field to go. 2. Select Footnote from the Insert menu. The “Footnote” dialog is displayed. 3. Select a number (or letter) format in the Number Format box i.e. 1, i, A, a. 4. In the Numbering box you can choose appropriate sequencing for the footnote fields. • The default is Continuous. Footnote numbering is sequential in increasing order, that is each footnote you insert is given a number one along from the previous footnote. Note though that if you insert a new footnote in between the previously inserted footnotes then numbering of the footnotes as a whole is adjusted to maintain the sequential order. • Restart on each page works in the same way as Continuous, except that the numbering starts at 1 again for each new page. If there are already some footnotes after this new footnote then they will be adjusted to be in sequence with this new footnote. • Start at also works in the same way as Continuous, except that you can choose a new start value by entering it in the Start at box. Again if there are already some footnotes after this new footnote they will be adjusted to be in sequence with the new footnote. 5. Once you have chosen the relevant numbering, click on OK to insert the footnote number field. This will be inserted both at the cursor position and at the bottom of the page, where you can type the actual footnote. To do this scroll to the bottom of the page and click on the footnote to make it editable (the corresponding part of the lefthand ruler will be highlighted). Type the actual footnote. 6. Once you have typed the footnote you can return to the main body of the document by clicking. The footnote can be edited as many times as you like. 64 Write 7. If you want to remove a footnote just select its number in the main body of the document and press Delete on the keyboard. Note: You are allowed to choose different number formats in the same document. These will be treated separately and so kept in their respective sequential orders without interference from one another. Captions A caption is a field label that you can affix to portions of text and other items, such as pictures, fields and tables, that you may have inserted into your document. Each caption consists of a caption name and a number (or letter). Ability allows you to use a variety of caption types and to create your own when you need to. This is useful in that you may want to give different types of item in your document different types of caption. Moreover, the caption command guarantees that you can maintain an incremental order for the various caption types you use. To insert a caption, follow these steps: 1. Select Caption from the Insert menu. The “Caption” dialog is opened. 2. In the Label box click on the arrow to see the available caption types: Caption, Table, Picture, Label. As you would expect, Picture and Table naturally go with inserted pictures and tables. 3. In the Numbering box leave Continuous selected if you want the caption number to increase by 1 from the previous caption of the same type. If you want a caption to start at a chosen value then select Start at and enter the number in the accompanying box. 4. Select a number or letter format in the Number Format box. 5. Click on OK to close the dialog and insert the caption. There are certain simple rules for how caption numbering works. If, say, you choose the Caption label, with Continuous numbering and number format 1, 2, 3, …, then the first few captions will be Caption 1, Caption 2, Caption 3, … You can then force the next caption to start at 1 (or any other number for that matter) and the following captions will proceed continuously from this new caption number until you choose to start again. Likewise if you switch from one label to another, for example, Table, the numbering will start again for that label. When you go back to the original label, for example, Caption, the numbering will continue in line with how you left it before switching to Table (unless, of course, you force the numbering to start again). Along the right side of the “Caption” dialog there are buttons for adding and deleting label types. 65 Write To add a label follow these steps: 1. Click on Add Label to display the “Insert Label” dialog. 2. Type in the name of the new label and then click on OK. 3. The new label name will be included in those displayed in the drop-down list in the Labels box. To delete a label: 1. Select the label you wish to delete from the Label box. 2. Click on Delete Label. 3. In the “Delete Label” dialog you will be asked if you want to go ahead with the deletion. Click on Yes to delete the label. The Caption command also enables you to set up an Auto Caption (see Auto captions on page 65). Auto captions The Caption command allows you to insert various types of caption one-by-one at will (see Captions on page 64). In addition you can ensure that a caption is inserted automatically whenever you insert a particular type of object - field, picture, or OLE object. The Auto Caption will accompany the inserted object. To set up an auto caption follow these steps: 1. Select Caption from the Insert menu. 2. Click on the Auto Caption button in the “Caption” dialog. The “Auto Caption” dialog is opened. 3. In the Object box select the type of object that is to have an associated auto caption. The types of object are Image, OLE and Field. 4. In the Label box you choose the type of label that is to be associated with the inserted object. By default these are Image, Object and Field for object types Image, OLE and Field respectively. You are free, though, to choose any of the available options from the Label box (note that in the “Caption” dialog it is possible to add your own label types). 5. In the Position box you choose the position of the label in relation to the inserted object. The options are Left, Right, Top and Bottom. Left is the default position. 66 Write 6. In the Number Format box choose the style of numbering you want for the auto caption. Succeeding auto captions of the same type will be numbered incrementally in the chosen number style. 7. Check the Auto Caption box to activate the auto caption instructions, otherwise no caption will be inserted. Check the Auto Generic box, along with the Auto Caption box, if you just want a generic caption i.e. Caption, without numbering to be inserted. (The usual situation is that you will have the Auto Caption box checked and the Auto Generic box unchecked, which will lead to your chosen object type and chosen associated caption type being implemented.) 8. Click on OK to save the auto caption details and go back to the “Caption” dialog. 9. In the “Caption” dialog make sure the Enable Auto Caption box is checked, before clicking on OK to close the dialog. Whenever you insert an object of the chosen type (for example, a field), a caption of the chosen type (for example, Field) will be inserted too. The caption will have the relevant position and incremental numbering style. You can cancel the auto caption command by returning to the “Caption” dialog (Insert/Caption) and clicking on Enable Auto Caption to uncheck it. Using styles A style is a collection of attributes, for example font, font size and paragraph settings, that you can apply to your text. At any point, you can edit the attributes and so cause your entire document to be updated to reflect the new style. This is a very efficient method of managing the appearance of long documents. Typically you may want to set a paragraph style for the paragraph as a whole and then apply a character style on top of this to certain words or sentences. If you do it the other round, applying a character style first and then a paragraph style, the character style will be obliterated. A standard style (called simply a style) works at the paragraph level, that is, it affects every word and line within the paragraph. A character style can also be set up. This differs from a paragraph style in that formatting is applied to selected text within a paragraph, rather than to the paragraph as a whole. Style Applies to whole paragraphs. Consists of font, font size, font effects, indentation, paragraph alignment, and line spacing. Character Style Applies to selected text within a paragraph. Consists of font, font size, and font effects. 67 Write Here is an example of how styles can be used: The general idea is to implement different formats in your text. In line with the above example, there will be many headings throughout the document. These can all be formatted with a “Heading” style. The general text can be formatted as the “Normal” style. To apply a style, select the text and then select the style name from the style drop down list on the toolbar. Alternatively, use the style shortcut - for example, Alt-Ctrl-Shift-N will apply the Normal style, unless you define it differently. Modifying styles When you first install Write, several styles are already defined, including "Normal" and some "Headings", as you can see immediately if you click on the arrow in the Styles drop-down box. You can modify these styles, as well as create your own (see Creating new styles on page 68), to suit your own requirements. To modify an existing style: 1. Select Styles from the Format menu. The "Styles" dialog is displayed. 2. Select the style you want to modify. Note that a description of the selected style, which includes details of fonts and paragraph settings, appears at the bottom of the dialog. 3. Click on the Modify button. 4. Choose the paragraph and font settings you want for the style (or, if it's a character style, just the font settings). See Paragraph formatting using the menus on page 45 and Formatting text using the menus on page 41 for more details. 5. On returning to the Styles dialog, check the Character Style box if you want the current style to be a character style. 6. Select a combination of Alt, Ctrl, Shift and Keyboard character as the style shortcut. 68 Write Click on the Apply button to put the style into effect. If you don't want to apply the style immediately, then close down the dialog and select the style from the Styles drop down menu when you are ready to apply it. Creating new styles To create a new style, do the following: 1. Select Styles from the Format menu. The "Styles" dialog is displayed. 2. Click in the Style Name box 3. Type in the new name for the style. 4. Click on the New button. The new style will be inserted into the styles’ list. Use the Modify button to define the font and paragraph settings. Renaming and deleting styles To rename a style: 1. Select Styles from the Format menu. 2. Select the style you wish to rename in the "Styles" dialog. 3. Click on the Rename button. 4. Enter a new name for the style and click on OK. To delete a style, first select the style and then click on the Delete button. Bulleted and numbered paragraphs You can create bulleted and numbered lists and paragraphs in your documents. A typical bulleted list may look like this: Numbered paragraphs may look like this: 69 Write Creating bulleted paragraphs and lists Bullets can be applied to single lines of text or one or more paragraphs of text. 1. Select the text that is to be bulleted. 2. Select the Bullet button . The selected text will be redrawn with bullets preceding the first line of each paragraph (or the lines of a list). The position where the bullet appears along the left-hand page margin, is called the first level. Use the Increase Indent button to increase the level so that the text moves to the right (or use the Increase Indent command from the Format menu). to decrease the level so that the text moves to the Use the Decrease Indent button left (or use the Decrease Indent command from the Format menu). Modifying a bulleted paragraph When you insert bullets into a document they are given a default font size, color, alignment and "margins". However, all these can be changed. Go into the "Bullets and Numbering" dialog by selecting the Bullets and Numbering option from the Format menu. If you want to use a bullet style that is different from those displayed in the Bullet Style group box, click on the Change Symbol button. The "Character Map" dialog is displayed. Click on the required symbol and then on Select. Note that you can choose a different font style for the symbol in the Font box. Click on Close and the symbol will replace the previously selected standard bullet (you can recover this later on by going through the same process). In the Bullet Color group box choose a color for the bullet. In the Font Size box use the arrows to increase or decrease the font size for the bullets. 70 Write Set the total gap between the margin and the text in the Distance from indent to text box according to the following: The bullet symbol itself can lie anywhere between the margin and a position that is an offset from the text and governed by the Distance from bullet to text box. Within this area, use the Alignment box to choose whether to have the bullet aligned to the left, right or center. Removing bullets To remove bullets from your text, select the text and click on the bullets button . Alternatively, select the Bullets and Numbering command from the Format menu. In the "Bullets" dialog, click on the None option in the Bullet Style group box and then click on the OK button. Creating a numbered list Numbers can be applied to single lines of text, or one or more paragraphs of text. 1. Select the text that is to be numbered. 2. Select the Numbers button The selected text will be redrawn with numbers, in sequence, preceding the first line of each paragraph (or the lines of a list). The position where the number appears, along the left-hand page margin, is called the first level. Use the Increase Indent button to increase the level so that the text moves to the right (or select the Increase Indent command from the Format menu). The numbers are re-sequenced so that the next level is shown with an extra digit. For example, two levels will resemble this: 71 Write A third level would show three digits and so on. to decrease the level so that the text moves to the Use the Decrease Indent button left (or select the Decrease Indent command from the Format menu). Modifying a numbered paragraph Numbered paragraphs or lines can be modified in various ways, depending on the numbering property you wish to change. The main properties of numbering are as follows: • A series of numbered paragraphs or lines can be numbered incrementally in a variety of number styles. • Numbered paragraphs or lines can be multi-level and defined separately for each level. • Numbered paragraphs or lines can be defined with text before and text after the number symbol. To modify the numbering of paragraphs or lines, first select the relevant text. Select the Bullets and Numbering command from the Format menu and then click on the Numbers tab. In the Numbering Style box you can choose a style for the numbers from Number, Roman, CapLetter, NumShort, CapShort, Letter and Custom. Note that the default style is Number. The Preview box shows the chosen style and the number of levels to which it can be taken. For instance, for Number there are nine possible levels. If you use Increase Indent to go beyond the ninth level in this case, then no extra numbers will be added i.e. the numbering for the tenth and higher levels will stay the same as for the ninth level. You can alter the number style for a particular level by selecting the level in the Level box and then selecting the appropriate style in the Numbering Style box. In the Numbering group box you can set various options: 72 Write • The Number Format box displays the currently selected numbered paragraph: click on the arrow to see the full range of available styles and click on the one you want to make it the current style. • The Text Before and Text After boxes allow you to put text, punctuation and brackets before and after numbers. Usually there is already a "." after any numbered paragraph e.g. 2.1. - you might want to change this to (2.1). • In the Alignment box choose whether to align the numbers to the left, right, or center of the space between the left page margin and the left paragraph margin. • In the Start box you decide what number you want the numbering to begin at. Set the incremental step size for numbering in the Increment With box. The default is 1 for both of these. • The Distance from number to text and the Distance from Indent to text boxes measure the space between the number and the text (left hand page margin) and the distance of the paragraph indent from the text (left hand paragraph margin) respectively. Change these by using the attached arrows. • Click on the Append To Higher Level box to check it if you want to create multileveled lists where all the numbers show higher levels in the list (for example 1.1.4 rather than just 4. on its own). The box is checked by default. Removing numbers To convert a numbered list back into plain paragraphs, select the text and click on the Numbering button . Alternatively, select the Bullets and Numbering command from the Format menu. On the "Numbers" page, click on the Remove Numbering button and then click on OK. Page set-up Whenever you open a new file in Write, it is given a default page set-up covering such information as paper size and page orientation. The defaults will depend on which template your document was based on (see Using templates on page 83 for more details). To change the default settings for the current document, choose the Page Setup command from the File menu. The “Page Setup” dialog is displayed. • In the Paper group box, click on the arrow to the right of the Size box to choose from a list of standard paper sizes. • 73 Write In the Paper group box, click on the arrow to the right of the Source box to choose from a list of paper sources, such as lower tray, upper tray and manual feed − provided your printer supports these options. • In the Orientation group box, select either Portrait (vertical) or Landscape (horizontal/sideways) orientation. • To set the margins for a document, go to the Margins group box. Enter the required margins in the Left, Right, Top and Bottom boxes. These specify the distance from the edges of the paper to the beginning of the work area in the document. You can also choose which printer to use by clicking on the Printer button (see Print setup on page 77). Headers and footers You can add information, such as a chapter title and page number, that will appear at the top and bottom of every page in a document. Text that appears at the top of every page is called a header; text at the bottom is called a footer. Headers and footers can be treated in the same way as you would treat normal text on the page - you can style them, use borders and other paragraph formatting, and insert objects. You can switch between editing the body text and editing a header or footer (see Editing a header on page 73 or Editing a footer on page 75). By default, Ability uses the same header and footer on every page. You can choose to use a different header and footer for the first page and/or odd and even pages (see Setting up headers and footers on page 75). In a document with body text and a header and footer, Write uses a "faded" font to distinguish the non-active area. For example, if you were editing the body text, the header text would appear in a gray font. Editing a header To make the header active, do one of the following: • Double-click anywhere in the header area, that is the region on the page above the first line of the document. • Select the Header command from the View menu. As soon as a header is active, the vertical ruler is reset according to the depth of the header. You can resize the header directly using this ruler in the same way you would resize body text (see The vertical ruler on page 36). 74 Write Also displayed is the Header and Footer toolbar (see Using the headers and footers toolbar on page 74) to assist in inserting dates and times and switching between headers and footers. Type the text just as you would do on a standard page. You can create a single line header or use several paragraphs; edit the header text to make it bold or italic; increase the font size; and use a different font or fonts. You can also insert objects into headers, such as graphic images, or make use of borders or columns. Note: If you have chosen to use more than one set of headers and footers (e.g. a different set for the first page, or different sets for odd and even pages), you will need to set up a header or footer for each set. Move to a representative page from each set before editing the header or footer text. To return to the body of the document, double-click anywhere in the body text or select Close Header and Footer from the displayed toolbar. Using the headers and footers toolbar The headers and footers toolbar is displayed automatically whenever a header or footer is being edited. For example, whenever you double-click in the header (or footer) area or select Header or Footer from the View menu. The toolbar itself contains several useful buttons. Use these buttons to insert page numbers, dates, times, and document titles: Insert a page number field Insert a date field Insert a time field Insert a document title field Use these buttons to move between headers, footers and the body text, and to use the header and footer set-up option: Move to the header (when in a footer) Move to the footer (when in a header) Move to the body text 75 Write Set up the header and footer Note that you can change the arrangement of the buttons in the header and footer toolbar by using your mouse to change the shape of the toolbar by dragging on its borders. Editing a footer To make the footer active, do one of the following: • Double-click anywhere in the footer area, that is the region on the page below the last line of the document. • Select the Footer command from the View menu. You can now edit the footer in exactly the same way as you would a header. Setting up headers and footers To change header and footer setup, do one of the following: • If the header and footer toolbar is currently displayed, click on the Header and Footer Setup button • . Select the Header and Footer Setup command from the View menu. Usually, header and footers are simply repeated on each page. However, you can choose to have different headers and footers on odd and even pages, or a different first page header (the first page could have a blank header for example), or a combination of the two. Use the Different first page and Different odd/even checkboxes to select these options. Note that if you select one of these options, you'll have to define a different header and footer on pages 1 and 2 of your document. If you select both of these options you'll need to define a different header and footer on pages 1, 2 and 3. By default, the header sits within the top margin and directly over the body text. You can choose to specify exactly where the header starts using the From edge boxes. Decreasing the header setting will cause the header text to print nearer to the top of the page and will move the main body of text upwards. If you set this to be less than 1cm, it is likely that your text will be "clipped" by the printer, as most page printers cannot print at the very edges of the paper. The same applies to the footer within the bottom margin and below the body text. 76 Write Deleting headers and footers You can delete a header or footer simply by deleting all the text within it. 1. Make the header or footer active (see Editing a header on page 73 or Editing a footer on page 75). 2. Select all the text and/or objects. 3. Press the Del key or right-click and select Cut. Printing You can print the whole of the document you are working on or a range of pages from with the document. You can also print to a file rather than to paper (perhaps for taking a postscript file to a professional print bureau) or convert a file into PDF format. Before printing you can set up the document in print set-up and review it in print preview. Print preview Before starting to print, you might like to see how your document will look on paper. on the toolbar (or select the Print Preview To do this, click on the Preview button command from the File menu). The display switches to print preview mode, in which the document is shown at a reduced size to give you an overall view: In print preview mode you can do any of the following: • Click on the Two Page button to view two pages of your document side-by-side. • Click on the One Page button to return to a single page view. • Click on the Next Page button – or press the pgdn key – to page forward through your document. • Click on the Prev Page button – or press the pgup key – to page backwards through your document. • Click on the Print button – or press P – to print the document directly from print preview mode. • Click on the Close button to exit print preview and return to a normal view of the document. 77 Write • Click on the Zoom In button to magnify the preview. • Click on the Zoom Out button to reduce the preview from a magnified state. Print set-up To choose which printer, paper size and orientation you want to use and the source from which you want the paper to feed, select the Print Setup command from the File menu. The “Print Setup” dialog is displayed. • In the Printer group box, you can choose to use the default printer or another printer accessible from your machine – click on the arrow to the right of the Name box to see a list of available printers. Note: Only installed printers are listed. To install another printer, you need to use the Windows Control Panel; see your Windows documentation for instructions. • In the Orientation group box, you can specify the orientation of the printed document: Portrait is upright; Landscape is sideways. • In the Paper group box, you can choose the size and source of your paper. Click on the arrows to see the available options. If you want to modify printer settings, select the Properties button. The different options displayed in subsequent dialogs will depend on the current printer. See your printer documentation, or Windows help, for more details. Printing the document To print the document, select the Print command from the File menu (or click on the Print button on the toolbar). The “Print” dialog is displayed. The active printer and connection are displayed at the top of the dialog. You can choose to use another printer by selecting it in the Name box (see Print set-up on page 77). In the Print range group box, you can specify how much of the document you want to print: • All pages – prints the entire document. • Current page – prints the page you are currently working on. • Pages – prints a range of pages which you specify in the attached box. For example, 1,3,7-12 will print pages 1, 2 and all pages from 7 to 12. Remember to put commas after each sub-range and to use hyphens to specify a continuous range between two numbers. 78 Write In the Copies group box, you can specify the number of copies you would like and how the printed pages are to be ordered: • Scroll through the Number of copies box to select how many copies of the document, page or range you want printing. • If you want more than one copy of a document, you can choose the order for the pages when they are printed. The default setting will make the first page print till the correct number of copies is printed, followed by the second page, and so on. If you click on the Collate check box, the document will print as a whole consecutively, followed by a second copy of the document, and so on. The Print box allows you to choose to print only odd or even, or both odd and even, pages from the print range selected in the Print range box. Click on the Print to file check box if you want to send the document to a new file on a disk, instead of to the printer. You will be prompted to give the file a name. If you want to modify printer settings, select the Properties button. The different options displayed in subsequent dialogs will depend on the current printer. (See your printer documentation, or Windows help, for more details.) When all is set, click on the OK button and the printing process will commence. There will be a pause while the information is sent to the printer, and then the physical printing will begin. Printing to a PDF file You can convert an Ability file to PDF format by selecting Print to PDF in the File menu. A file browse box will be opened with the PDF file format set in the Save as type line. Give your file a name (or retain the current name) and then use the Save in box at the top to locate the folder in which you would like to store the PDF file. Click on Save to save the file in PDF format. Including fields in a document You can insert fields into a document in order to perform calculations or to act as links to spreadsheet cells, fields in a database or other Write documents. The following sections show you how to insert various types of field, including database, formula, page number, date and time fields. Inserting a field To insert a field into a document, follow these steps: 79 Write 1. Position the cursor where you would like the field to go. 2. Select the Field command from the Insert menu. The “Insert Field Wizard” is displayed. 3. In the Field Name box, type a name for the field (or use the default name supplied by Ability). 4. In the Field Type group box choose whether to insert a Formula field (see Inserting a formula field on page 81) or a Database field (see Inserting a database field on page 81) field. A formula field can be used to perform calculations - utilizing the full range of Ability functions - or to link to other fields, whether in the same document or other Write, Spreadsheet or Database documents. A database field is used to link to a field in an existing database, hence making all the records that come under the database field accessible in the current document. 5. On the next page you can set a Control Type for the field (see Control types on page 416). Inserting page numbers 1. To insert page numbers into a header or footer first go into the header or footer and then click on the Page Number button in the Header and Footer toolbox (or select the Page Number command from the Insert menu). The "Insert Page Number" dialog is displayed. 2. In this dialog, you can choose the format for the page numbers. Click on the format you require in the Page Number Formats box. 3. In the Start Number box, you can set the number at which you would like page numbering to begin. This is useful, for instance, if you have selected a different header or footer for the first page, which does not have a page number, and want page numbering on the second page to begin at ‘2’. 4. Click on the OK button and the current page number will be inserted into the header or footer. Write will alter the page numbers as the document changes, so you do not need to update them yourself. See Setting up headers and footers on page 75 for information on inserting page numbers into every other page. Inserting the date 1. To insert the date into a header or footer, put the cursor into the header or footer at the position where you want the date to appear. Next, select the Insert Date button from the Header and Footer toolbox (or select the Date and Time command from the Insert menu). The “Date” dialog appears. 80 Write 2. In this dialog, you can choose the format for the date and set some other options. 3. Select the format you wish to use for the date in the Date Formats box. 4. Click on the Include Day of Week check box to include the day of the week in long form (e.g. Tuesday); click again to include the day of the week in short form (e.g. Tue). Clicking again will clear the check box and the day of the week won't then be included. 5. Click on the Update Automatically check box to remove the check if you want the current date to be printed, rather than the date at time of printing (this will be checked already by default). With the box left checked, an automatically updateable field is inserted. Note: If you want to backdate or postdate a document, you should insert the current date in the format you want, with the Update Automatically box left unchecked. You can then edit the date as required. Alternatively, just type in the date as normal text. Updating takes place in the background and the field is refreshed on the screen only when it is redrawn. The field will be updated when you print the document. 6. Once you have chosen the date format and other options, click on OK to insert the date. Inserting the time 1. To insert the time into a header or footer, put the cursor into the header or footer at the position where you want the time of printing to appear. Next, select the Time button from the Header and Footer toolbox (or select the Date and Time command from the Insert menu). The “Time” dialog appears. 2. In this dialog, you can choose the format for the time and choose whether to have the time updated automatically. 3. Select the format you wish to use for the time in the Time Formats box. 4. Click on the Update Automatically check box to remove the check if you want the current time to be printed, rather than the time at time of printing (this box will be checked already by default). With the box left checked, an automatically updateable field is inserted. Note: If you want to insert a time of your own choosing, you should insert the current time in the format you want, with the Update Automatically box left unchecked. You can then edit the time as required. Alternatively, just type in the time as normal text. Updating takes place in the background and the field is refreshed on the screen only when it is redrawn. The field will be updated when you print the document. 81 Write 5. Once you have chosen a format for the time, click on OK to insert the time. Inserting the title To insert the title of the document: 1. Position the cursor where you want the title to appear in the header or footer 2. Click on the Insert Title button in the Header and Footer toolbox. The title will be inserted at the chosen point. If you change the name of the document, the title inserted into the header or footer will change too. Inserting a formula field You can insert a formula field into a document (see Inserting a field on page 78). 1. Once you have selected Formula, click on Next to go to the next page. 2. Click on the Functions button to the right of the Formula box to access all the Ability functions (see Using built-in functions on page 480). Alternatively type in a formula directly. You can also type in link expressions for one-way or two-way links. Leaving the Formula box blank will still create a field in your document, although it will be empty. You will still be able to enter text, formulas, etc. directly from the document. 3. Click on the Show Formula check box if you want the formula, rather than its result, to be displayed in the field. 4. On the next page you can set a Control Type for the formula field (see Control types on page 416). Inserting a database field You can insert a database field into a document (see Inserting a field on page 78). 1. Once you have selected Database, click on Next to go to the next page. 2. In the Database Name box, type in the database name and its directory (along with the full path if it comes under a different directory from your current document). Alternatively click on the button to the right of the Database Name box to display the "Open" dialog. Here you can search for and select the required database. 3. Click on Open in the "Open" dialog to insert the database name and path into the Database Name box. 4. In the Data Source box, click on the arrow to the right of the box to display the tables contained in the database. Select one of these. 82 Write 5. In the Data Field box, click on the arrow at the right to display the fields in the selected database table. Select the field whose contents you want to see in your document. 6. The Enable Browsing box is checked by default, thereby enabling you to browse through all the records from the field that has been inserted into your document. If you don't want to browse through all the records and just want the first record to be displayed, click on it to remove the check. 7. On the next page you can set a Control Type for the database field (see Control types on page 416). Example To create a database field in a Write or Spreadsheet document, using the surname field from an Employees table in a database called Company.adb, do the following: 1. Select the Field command from the Insert menu 2. Type "Surname" in the Field Name box 3. Click on Database in the Field Type box 4. Click on Next and then click on the button to the right of the Database Name box. The "Open" dialog is displayed. Find and select Company.adb. Click on Open. The database name and path is inserted into the Database Name box. 5. Click on the arrow in the Data Source box and select Employee. 6. Click on the arrow in the Data Field box and select Lastname. 7. Leave the Enable Browsing box checked. 8. At this point click on Finish (ignore for now the remaining pages of the "Insert Field" Wizard). 9. The field will appear in your Write or Spreadsheet document, displaying the first record under the Lastname field from the table. Use the arrows at the bottom left of the window to scroll through all the records. Editing a field To edit a field you should first select it by double-clicking in the field. The Field menu option is displayed along the top of the window. Clicking on any of the options in the Field menu brings up the "Field Attributes" dialog. In here you can change or add to attributes already set. The following options are available: • 83 Write General contains details of the field type - either formula or database - and field name. You can change these here. • Color allows you to select a color for the field. • Font enables you to choose a font and special effects for text within the field. • Border contains various border types for the field. • There are also options for Alignment, Style, Control, Attributes, and Format. Using templates If you create similar documents time after time, you can save a lot of work by defining a template. A template can be used as the basic design or prototype for any new documents you open. Typically a template can include settings for margins, font styles, pieces of text, and most other document features. The template can then act as a new default design for the documents you wish to base on it. The Normal template is the standard default template. The following sections show you how to create, edit and manage templates. Creating a template based on an existing document You may have designed a document that you would like to use as the basis for other documents. For example, you may have created a Fax sheet in Write and wish to use it again. Follow these steps: 1. Select the Open command from the File menu and use the “Open” dialog to find and open your existing Fax sheet. 2. Select the Save As command from the File menu. The “Save As” dialog is opened. 3. Click on the arrow to the right of the Save as type box and select Ability Write Template (*.awp). 4. In the File name box, enter a name for the template. 5. Select the Template folder. This can be found in the folder into which Ability was installed. By default, this is: C:\Program Files\Ability Office\Template. Click Save to have the Fax sheet saved as a template. This will now appear in the template list when you open a new document and can be used as the basic design for that document. 84 Write Creating a template based on an existing template As an alternative to basing a template on an existing document (see Creating a template based on an existing document on page 84), you can design a new template by using the Normal template (or any other template) as a basis. To do this follow these steps: 1. Select the New command from the File menu. The "New" dialog is displayed. 2. In the Templates box select the template you want to base the new template on. 3. In the New box on the right select the Template radio button to indicate that you are designing a new template. 4. Click on OK to close the dialog and open up the template. 5. Design your template by adding text, adjusting margins, setting font styles, and so on, till you are satisfied. 6. When you have finished, select the Save button . The “Save As” dialog will be opened. Give the template a name in the File Name box and then click on Save. The new template will appear in the template list that is displayed when you select New from the File menu. It can now be used as a template for new documents. Note: You can also create a new Normal template, based on the original one, by following the above steps. You must remember though to name the new template “Normal” in Step 6. The new “Normal” will replace the old one as the default template. Creating a document based on a template To base a new document on an existing template: 1. Select the New command from the File menu (don't use the New button on the toolbar as this will automatically base the document on the Normal template – see Normal template on page 85). 2. Click on the required template name, make sure Document is switched on (it should be by default anyway), and click on the OK button. A new document based on this template is opened. A template can store the same information and formats as a standard document: text, graphics, headers and footers, page set-up information and style lists. You can create a variety of templates to cover every type of document your organization may use. By having everyone make use of templates, you can ensure a consistency of style for documents even when they are created by different people. 85 Write Editing templates You can edit a template in a similar way to editing a normal document: 1. Click the Open button menu). on the toolbar (or select the Open command from the File 2. Click on the arrow to the right of the Files of Type box and select Ability Write Template (*.awp), so that it looks like this: 3. A list of templates is displayed. Click on the template you wish to edit and click on Open. You can edit the template as you would any other Write document. 4. Once you have made the required changes click on the Save button to save the edited template and then select Close from the File menu. The edited template is now ready for you to use. The normal template Whenever you create a new document using the New button , the document is automatically based on the built-in Normal template. The built-in template has the following properties: • Paper size as defined in the default printer settings under Windows • One inch left, right, top and bottom margins • A set of built-in styles – a normal style, some heading styles, and some indented text styles • No text or graphics are included, though the document is formatted to take a particular font style and size when you do begin to enter text • No other page or paragraph formatting Although this is nearly always sufficient, you can override it by creating your own Normal template - follow the steps in Creating a template based on an existing template on page 84, making sure you use the name “Normal” for the new template. Since the Normal template is used by default whenever create a new document by clicking on the New button on the toolbar, the new Normal template will be used instead. 86 Write To return to the original Normal template all you have to do is delete Normal from the Template folder. To do this select Open from the File menu, locate the template folder i.e. Program Files\Ability Office\Template, and then delete Normal by right-clicking and selecting Delete (make sure that Files of Type is set to Ability Template, otherwise the templates won’t be displayed in the “Open” Dialog). Once you have deleted the Normal template, Ability will automatically generate a new default Normal template as before. Normal is always listed as a template when selecting New from the File menu, whether or not you've created a Normal template yourself. How Ability manages the template list Templates are very similar to normal Ability documents, except that: • They are located in a special folder – by default this is called Templates and is placed in the folder into which Ability was installed. • They have a different document extension (awp) to standard documents (aww). When basing a document on a template by selecting New from the File menu, Ability lists all the templates in the default template folder. Should you need to, you can change the folder location (see General options on page 89). The Normal template is a special case and may not exist as a real template in the template folder. Mail merge You can send a standard letter to a number of different people whose names and addresses are stored in a mailing list in a database. The process of combining information from a database with a standard letter is often called mail merge. Before you can mail merge your data, you need to have already created a database containing the relevant information. The database that is to be used in the mail merge may have been created in Ability or in any other database that is compatible with Microsoft Access. Creating a mail merge letter You can turn a document into a mail merge letter simply by adding the appropriate fields. Typically these are address and name fields from a database table. The process is the same whether the document is new or the text has already been entered. The first field you insert establishes a connection with a table within a database, as follows: 87 Write 1. Position the cursor where you want the field to appear - for example, at the top of the document if you're starting the address block. 2. Select the Mail Merge Field command from the Insert menu. 3. In the File Name box, enter the name of the database - or use the browse button to find and enter it. 4. Select the table you want from the Data Source drop-down list. 5. Select the field you want to insert from the Data Item drop-down list. 6. Click on the OK button. The mail merge field will be inserted into your document and a series of toolbars will be turned on. These allow you to browse, edit, filter and sort your data. See Controlling mail merge on page 87 for more details. Now insert an additional field for each of the other address lines and for the salutation and name, as follows: 7. Position the cursor where you want the next field to go. 8. Select the field you want in the field list from the query toolbar (see Controlling mail merge on page 87). 9. Click the Insert Field button . 10. Repeat steps 6 through 8 for the rest of the fields. As an alternative to steps 7 and 8, you can use the Mail Merge Field from the Insert menu. Note that you are free to include a field more than once. For example, the first line of an address block may contain fields for title, first name and surname and you may want to start your letter with "Dear Mr Jones". Just insert the title and surname fields a second time. Controlling mail merge Use the Field List drop- Use the Sort drop-down list to select a named Use the Filter dropdown list to select a 88 Write down to select a field. sort order for the table. Use the Insert Field button to insert the current field into the document. Use the Sort button to choose a sort order onthe-fly. named filter for the table. Use the Filter button to create a filter onthe-fly. For more details on how to sort and filter database information, see Filtering a table on page 217 and Sorting a table on page 215. Browsing through the merge data When you insert a mail merge field, a browse toolbar appears - you can use this to browse through the records from the database. - Display the first matching record from your table - Display the previous record - Display next record - Display last matching record The record number is displayed between the Previous and Next buttons. You can find out how many merge letters will print by clicking the Last button and checking the record number displayed. Viewing and printing merge letters When you first insert a mail merge field, "mail merge mode" is turned on. This has the following effects: • You can browse through the data using the browse buttons - see Browsing through the merge data on page 88. • Print (and print preview) will generate a new page for every record in the database. Otherwise, the print process will be as normal - see Printing on page 76 for more details. to tun mail merge mode off (and on again). Alternatively, Use the Mail Merge button use the Mail Merge command from the Tools menu. This will freeze the document at the current record - printing at this point will only print the current record. 89 Write As an alternative to printing the document, a new document can be created, where a new page is started for every record. Use the Mail Merge to New Document command from the Tools menu to do this. Changing Write options There are various choices you can make about the way Write works for you. The available options can be accessed through the Options command in the Tools menu. The following sections show you how to set options for spelling, colors, zoom, and others. General options Various general options are set on the General page of the “Options” dialog, reachable through the Options command from the Tools menu. • Units Select the units you would like to use for the rulers and measurements in dialog boxes by choosing from Inches, Centimeters, Millimeters and Points (a point is a typographical unit approximately equal to 1/72nd of an inch). • Assurance If you want a backup copy to be made of every document you create, click on the checkbox next to Create Backup. Every time a document is changed, the previous version is stored as a backup with an (abk) document extension. , set the Files of Type to Ability To open a backup, select the Open button Write Backup and then make your selection from the displayed list of backup documents. • Editing Whenever you do something in Write, you can usually undo it by clicking the Undo button (or selecting the Undo command from the Edit menu). In the Undo Steps box, type the number of actions you would like the program to remember. Select the Smart Cut and Paste option if you'd like Ability to “intelligently” insert and delete spaces when cutting and pasting words in paragraphs. • Mail merge 90 Write Check the Close Blank Lines box (the default setting) if you'd like Ability to automatically close blank lines in address blocks when mail merging. Note that blank lines are not closed in the document itself – only in Print Preview or while printing. • Template Choose the default location for the template folder. For more details, see How Ability manages the template list on page 86. Spell checker and thesaurus options Change spell checker and thesaurus options on the Spelling page of the “Options” dialog, reachable through the Options command from the Tools menu. In the Spell Checker and Thesaurus group box, you can specify which dictionary and thesaurus you wish the program to use. Click on the arrow to the right of the Language box to choose a dictionary. The languages shown here depend on the country from which Ability was purchased. Click on the checkbox next to Always Suggest to ensure that the spell checker always suggests alternative spellings for words it does not recognize. Click on the checkbox next to User Dictionary to tell the program to add new words to the specified user dictionary. Click on the arrow to the right of the box to choose the user dictionary you wish to use. Setting colors Set color options on the Colors page of the “Options” dialog, reachable through the Options command from the Tools menu. You can select the colors that are to be used for the page, the fields, the workspace and the guidelines. Here’s what each of the buttons does: Page Change the color of the page under your text. Workspace Change the color of the area surrounding the page. Column Change the color of guidelines showing column boundaries. Page Numbers Change the color of all “Page Number” fields. 91 Write Date and Time Change the color of all “Date” and "Time" fields. Bullets and Number Change the color of all “Bullet and Number” fields. Formula Change the color of all “Formula” fields. Mail Merge Change the color of all “Mail Merge” fields. Print fields using on screen color Check this box to print "Mail Merge" fields in the same color as they appear on screen. Ability Defaults Revert the entire color scheme back to that just after installation. Windows Defaults Use Windows default color settings. These are set in the Control Panel under the Windows Program Manager. Click on the button of the feature whose color you wish to change. The “Color” box is displayed. You can select one of the standard colors by clicking on it, or you can define your own custom color (the color mixing process is explained in your Windows documentation). Click on the OK button to save any changes. Setting the default Zoom Change the default zoom for all new documents (the current window won’t be affected) on the Zoom page of the “Options” dialog, reachable through the Options command from the Tools menu. Choose a default zoom from those listed. 92 Spreadsheet Spreadsheet A spreadsheet is a tool that is used to organize, track and calculate financial and numerical information. You can use a spreadsheet to analyze figures, calculate totals or averages, or project business trends. In addition, you can use spreadsheets to experiment in “what if” scenarios, seeing what happens when you change the numbers. You can use spreadsheets to solve complex problems (like calculating mortgage repayments), as well as simpler problems (like calculating miles to the gallon). Here are some more examples of how you can use a spreadsheet: • Create a yearly budget • Analyze quarterly sales figures • Set sales quotas • Analyze stock investments • Project loan repayment amounts • Compute interest payments at variable rates • Project income and profit figures Starting Spreadsheet To start Spreadsheet, follow these steps: 1. Click the Start button on the Windows Taskbar 2. Select Programs 3. Select Ability Office 4. Select Ability Spreadsheet Spreadsheet will open with a new spreadsheet displayed, ready for entering data. The spreadsheet window The area in which you work on a spreadsheet is called the spreadsheet window. The different areas of the spreadsheet window are shown on this diagram: 93 Spreadsheet Clicking on a column letter on the column bar selects that column, while clicking on a row number on the row bar selects that row. You can select multiple rows or columns by dragging the cursor across several row or column bars, or you can select the entire sheet by clicking the button at the intersection of the row and column bars. A spreadsheet is organized into rows and columns, like a table. The rows are numbered sequentially down the left edge of the spreadsheet window. The columns are labeled with letters across the top of the spreadsheet window. (The column letters run sequentially from A to Z, then from AA to AZ, then from BA to BZ, and so on, finally ending with IA to IV). The maximum size for a spreadsheet is 65,536 rows and 256 columns. Each Ability spreadsheet has 15 associated worksheets. These allow you to work with related information from different worksheets, which are then stored in the one spreadsheet file. The toolbars and formatting bar Across the top of the window are the various toolbars for spreadsheet. These contain the buttons and drop-down lists that enable you to format and manipulate the cells and figures quickly and easily, without needing to open the menus. Note: You can choose not to display the toolbar and/or the formatting bar. To do this, click on the Toolbars option from the View menu. Click on the Standard checkbox to turn the toolbar on or off, and on the Format checkbox to turn the formatting bar on or off. When the feature is shown, a check is put next to it; when it is not shown, the check is removed. 94 Spreadsheet The formula bar The formula bar is where you enter text, numbers and formulas into cells and fields. The formula bar shows the name of the current cell and what type of information it contains. You can click anywhere within the contents of the formula bar to edit the spreadsheet cell. There are three buttons to assist in editing the cell contents: • Confirm button spreadsheet. • Cancel button previous state. • . Calls on a list of over 200 built-in functions. For more Functions button information, see Function reference on page 480. or Enter key. Saves the contents of the formula bar into the or Esc key. Aborts the current edit and returns the cell to its Coolbars mode and large buttons You can choose how the toolbars will be displayed. Coolbars are normal toolbars but with the borders around the buttons removed. Large Buttons are merely larger versions of normal toolbar buttons and with descriptive text added. To switch to coolbars mode and/or large buttons, select Toolbars from the View menu. Click on the Coolbars Mode and/or Large Buttons checkbox to turn these on or off. Moving around a spreadsheet To move around a spreadsheet, you would usually use the mouse and then click to put the cursor where you want it. You can also use the scroll bars at the right and bottom of the screen to move either vertically or horizontally through the spreadsheet. However, you can also move the cursor with the cursor movement keys, and there are times when this can be quicker. The following table shows all the ways you can move the cursor. Key Description 95 Spreadsheet Arrow keys The arrow keys move the cursor one cell at a time in the direction of the arrow (up, down, left, or right). page up Moves up one screen at a time. page down Moves down one screen at a time. home Moves to column A in the current row. end Moves to the last column that contains information in the current row, or to the last column of the whole spreadsheet if the current row contains no information. tab Moves one cell to the right. shift + tab Moves one cell to the left. ctrl + home Moves to the first cell (A1) in the spreadsheet. ctrl + end Moves to the intersection of the last column and the last row that contains information. ctrl + page up Moves one screen to the left. ctrl + page down Moves one screen to the right. ctrl + Î Moves to the next cell on the right that contains information. ctrl + Í Moves to the next cell on the left that contains information. ctrl + Ï Moves to the next cell upwards that contains information. ctrl + Ð Moves to the next cell downwards that contains information. Going to a particular cell If you are working on a small spreadsheet, it is easy to find the cell you require (for formatting, deleting, hiding, or whatever). However, if you have a very large spreadsheet, it can be quicker to ask Spreadsheet to find the cell (or range of cells) you want. Select the Go To command from the Edit menu. The “Go To” dialog is displayed. In the Category box, click on the location type. The categories include typical spreadsheet locations such as cells, named ranges, columns and rows. Next, enter the location you wish to go to (you can choose most of these from the drop-down box). Then click on the OK button and the spreadsheet will be redrawn, with the location you asked for selected and active. 96 Spreadsheet Spreadsheet definitions There are certain terms that are used in virtually all spreadsheet programs. It is worth becoming familiar with them, as it will make your spreadsheet work much simpler. You can read about cells, cell addresses and cell ranges in the following sections. Cells The spot where a row and column intersect is called a cell. A cell is the place in a spreadsheet where you enter text, numbers, or formulas. For example, in the following illustration, January appears in the cell C4, where column C and row 4 intersect: The active cell is shown by a heavy cell outline - in this example, B2. Cells can also be called fields (the word cell is part of the special spreadsheet vocabulary). You use fields throughout Ability – in Write, and Database – and they always work in similar ways and can call on the same function list. You can apply what you learn about fields (known here as cells) in Spreadsheet to the fields you work with in other applications. Cell addresses Each cell in a spreadsheet has a unique identifier, called a cell address. The cell address tells you the exact location of a piece of information, just as a home address such as 12 Maple Avenue pinpoints a specific house. A cell address consists of a column letter and a row number. For example, the cell located where column C and row 2 intersect has the cell address C2. Cell ranges A range is simply a group of cells. For example, the cells A1, A2, A3, A4, A5 can be referred to individually when using them in a formula but it is quicker to use a range. The following formulas, which give the same result, demonstrate this: =SUM(A1, A2, A3, A4, A5) 97 Spreadsheet =SUM(A1..A5) You can give a cell range a unique name and refer to it in formulas using the name, rather than specifying the first and last cells in the range. You can also treat fields in a database table as ranges so that, for example, you can sum all the records in an invoice database. Creating a spreadsheet To create a new spreadsheet, click on the New button on the toolbar or select the New command from the File menu. A new blank spreadsheet will be opened in the Spreadsheet window. When you first open a spreadsheet, it is given a default page set-up. This means that the paper size and margins are already set for you. For the majority of spreadsheets, these settings will probably be what you want, but you might want to change them, for instance to give a large left margin on a document that is going to be bound (see Page set-up). Opening an existing spreadsheet To open an existing spreadsheet, first start Spreadsheet - see Starting Spreadsheet on page 92. Next click on the Open button on the toolbar or select Open from the File menu. The "Open" dialog is displayed. When you have located the required spreadsheet document (you need to locate the appropriate folder in the Look In box and set the Files of Type to Ability Spreadsheet, if it is not so set already), click on the Open button to open it. Worksheets Worksheets are the pages, so to speak, of a particular spreadsheet and are where you enter data and perform calculations. There can be up to 255 worksheets associated with each spreadsheet. Whenever you create or open a spreadsheet you are immediately taken to the first worksheet in that spreadsheet − called Sheet1 by default, though you can rename the sheet if you like. The worksheets are listed along the bottom of the spreadsheet window, with the current sheet selected. 98 Spreadsheet If not all of the sheet names are visible, move the mouse pointer over the left edge of the bottom scroll bar (just to the right of the last visible sheet title). When the pointer turns to a cross, drag the scroll arrow till the required number of sheet names are visible. To select another sheet, just click on its name. You can rename, delete, insert, copy and move worksheets, and also create links between sheets in the same spreadsheet or sheets in different spreadsheets. Note: The terms worksheet and sheet are used interchangeably in these help notes and have the same meaning. Sometimes the term workbook is used for a spreadsheet file and its associated worksheets, with Spreadsheet being reserved for the program (or application) itself. Renaming a worksheet Rename a worksheet by right-clicking on the sheet name and selecting Rename from the drop-down list. In the “Rename worksheet” dialog type the new name and then click on OK. The new sheet name immediately replaces the old one along the bottom of the spreadsheet window. Deleting a worksheet Delete a worksheet by right-clicking on the sheet name and selecting Delete from the drop-down list. You will be asked if you want to continue with the deletion − click on Yes. The deleted sheet name immediately disappears from along the bottom of the spreadsheet window. Inserting a worksheet Insert a new worksheet directly to the left of an existing sheet name by right-clicking on the sheet name and selecting Insert from the drop-down list. In the “Insert worksheet” dialog you should enter the name of the new worksheet and then click on OK. 99 Spreadsheet The new sheet name is immediately inserted at the right place along the bottom of the spreadsheet window. Copying and moving worksheets Copy or move a worksheet by right-clicking over the appropriate sheet name and selecting Copy/Move from the drop-down list. In the “Copy or Move Worksheets” dialog follow these steps: 1. Select the sheet to be copied or moved in the Copy/Move selected sheets box (note that all the sheets are listed in order). 2. In the To workbook box the current spreadsheet is displayed. (If you would like to copy or move a sheet to a different spreadsheet, make sure the spreadsheet is already open and then select it in the To workbook box.) 3. All the sheets in the selected spreadsheet are listed in the Before sheet box. Select the sheet before which you want to copy or move the sheet selected in Step 1. 4. Choose whether to copy (duplicate without deleting the original) or move (duplicate and delete the original) by selecting either the Copy or the Move button. Copy or move as many sheets as you want while you are in the dialog. 5. Click on OK to close the dialog. Calculating across worksheets The basic syntax for a formula that will work across worksheets is: =sheetname!cell For example, =Sheet1!A1 entered in any cell in any sheet in the spreadsheet will access the data in cell A1 of Sheet1. The result can be mixed into a formula any way you like. For example, to take the contents of cell D4 from a sheet called Sheet5 and multiply it by 2, use the following formula: =Sheet5!D4 * 2 To refer to a range from another sheet, just prefix the first part of the range with the sheet name: 100 Spreadsheet =SUM(Sheet1!A1..A10) will add up the contents of cell A1 through to A10 in Sheet1. Entering information You can put two main types of information into a spreadsheet: text and numbers. Ability will automatically sense which type of information you are entering and give it a default justification within the cell. When you enter text, Ability will left justify your entry; when you enter numbers, Ability will right justify them. Here are some examples of the type of information you can enter and the way Ability deals with them. Enter this text Spreadsheet displays Type of information Hello world! Text 123 Number $123,000.00 Currency 12/12/98 Date In this example, Currency and Date are actually numbers with a format applied. There are other types of number formats and you can change the way Ability displays the result. See Formatting numbers using the toolbar on page 106. Any information you type will be put into the cell that has the dark border around it. This is the active cell. To activate a cell, click on it, or move the dark border to it by using the arrow keys. Entering text When you start typing text, you will notice that it does not immediately appear in the active cell. Instead, it is shown in the formula bar. This means that you can make changes to it more easily, as it is slightly larger and easier to see. When you have finished typing the text, do one of the following: • Click on the Confirm button active cell. • Press one of the arrow keys. Your text will be entered and the active cell will move according to which arrow key you pressed. This saves having to use a keystroke if you’re entering a long column or row of information. on the formula bar. The text will be inserted into the • 101 Spreadsheet Press the Enter key - the text will be entered and the active cell will move down one row. • Click the Cancel button on the formula bar to abandon the text entry. Ability will display the word “Text” in the Cell Type box on the formula bar. The following section shows you how to enter text that is wider than the cell. Entering a long text item When you create a new spreadsheet, each column is 80 points wide by default. A point in this case is 1/96 of an inch or 0.026cm and is not the same as the typographical measure (where a point is 1/72 of an inch and used to measure font size). If the text you want in the cell is longer than the default width, you can enter the text and let it overflow into the next cell. If there is no information in the cell to the right, the whole text is displayed, otherwise Ability ‘clips’ the text at the cell boundary. An alternative is to allow the text to be wrapped within the cell (see Cell alignment on page 105). Entering values You enter values in the same way as you enter text: point to the cell where you want the value to appear, then type it in. Finish the entry in the same way as you would finish a text item (see Entering text on page 100). Ability will display the word “Number” in the Cell Type box on the formula bar. Note: Values are automatically put to the right of cells – this is to make sure that columns of figures line up neatly. You can change this alignment if you prefer (see Cell alignment on page 105). Entering currency values You can include a currency symbol when entering numbers. Ability will understand that you want a currency format. All these are valid currency entries: $12 $123,456 $123,456.00 Note: The currency symbol you use must match the setting in the Windows Control Panel. For example, this will be the dollar symbol ($) if you are in the US and the pound 102 Spreadsheet symbol (£) in the UK. If not, Ability will treat the cell content as text and you won’t be able to perform arithmetical calculations on it. Entering a time Use a colon to separate hours from minutes. Here are some examples of entries that Ability will recognize as time values: 23:45 11:45 AM 11:45 PM For a description of how Ability deals with dates and time, see Date and time functions on page 486. Entering dates You should use the shorthand method to enter dates (if you prefer the long display for dates, change the format – see Formatting a date on page 108). These are all OK to enter: 3-6-64 12/2/1995 01.01.95 September 12, 1995 But these will be treated as text only: 3rd June 1964 September 12th, 1995 If you don’t use the shorthand method, Ability could treat your entry as text and you won’t be able to change the format or perform date arithmetic. You can enter the year as two or four digits. Two digit years below 30 will default to the 21st century (see Year 2000 on page 487). For example: Enter 1/1/20 1/1/29 1/1/30 Date stored as 1/1/2020 1/1/2029 1/1/1930 For a description of how Ability deals with dates and time, see Date and time functions on page 486. 103 Spreadsheet Entering numbers you don't want to calculate Whenever you enter a number, Spreadsheet assumes that it is a value and that you might want to use it in a calculation. If you enter a number that is obviously not meant to be used in calculations, such as a phone number like 6684123, Spreadsheet can't automatically tell that it is supposed to be text. So, to enter numbers like phone or invoice numbers, you need to tell Spreadsheet not to calculate them. To do this, type a single quote (‘) before you enter the actual number. This is necessary if you want a formula expression, such as =26 - 11, to appear as text rather than returning the result of a calculation. In this case, type '=26 - 11. The single quote doesn’t show up in the spreadsheet. It simply indicates that the number should be treated as text rather than as a value. Formatting the spreadsheet Whether you enter text or a number into a cell, you can specify how you want the cell contents to appear. You can format a single cell or range of cells in the same way. Most formatting options are available through the “Format” dialog box and some can also be implemented using the Format toolbar. Access the “Format” dialog box by selecting Cells from the Format menu (alternatively, right-click and select Format Cells from the drop-down menu). The Format box contains six main sections, all of which have their own page. These can be accessed by clicking on the appropriate tab along the top of the box. In addition, there is a button at the bottom right of the box that gives you access to the Styles page for designing, naming and saving format combinations. The formatting options available through the “Format” dialog box are: • Number (see Formatting a number on page 106) • Alignment (see Cell alignment on page 105) • Font, font style, size and color (see Cell font and style on page 104) • Borders (see Adding Borders on page 112) • Background colors (see Selecting the background color on page 111) • Locking and hiding cells (see Locking and hiding cells on page 114) 104 Spreadsheet • Styles: formats saved for future use (see Styles on page 129) Some of the above can also be implemented through the Format toolbar. For instance, if you are formatting numbers, take a look at the formats you can apply by just clicking a button on the toolbar (see Formatting numbers using the toolbar on page 106). Note: When you format a cell and then copy it, the formatting is also copied and is therefore pasted to a new cell. Cell font and style Use any or all of the following methods to select cell font and style using the toolbars: • Click on the arrow to the right of the Font box font. • Click on the arrow to the right of the Size box directly into the Size box). • Click on the Bold, Italic, Underline and Strikethrough buttons apply styling. to choose a to choose a size (or type a size to The Bold, Italic, Underline and Strikethrough buttons have two states: up and down. If the active cell shows a button down, the effect has been selected; up and the effect is turned off. You can also choose fonts and font styles by using the menus. Using the menus to select cell font and style To choose a font, select Cells from the Format menu, which opens the “Format” dialog box, and then select the Font tab. (The “Format” dialog box can also be accessed by right-clicking your mouse and then selecting Format Cells). • Choose a font for the text in the Font box, and select a style in the Font Style box. • Choose a size for the text in the Size box. • Choose to strikeout and/or underline text in the Effects box: click on the checkbox next to the effect(s) you require. • Select a text color in the Color box. A sample of the options you have chosen is given in the Sample box. When you have finished, click on the OK button and the text will be formatted to your specification. 105 Spreadsheet Cell alignment By default, Ability will align text to the left and numbers to the right of a cell. Both will be aligned to the bottom of the cell and each cell is formatted to sit on a single line (i.e. cell wrapping is off). You can override the default alignment by using either the formatting bar or the Alignment command. Using the formatting bar you can: • Click on the Left, Right or Center buttons alignment. • to choose vertical Click on the Top, Middle or Bottom buttons alignment. Depending on the size of the cell, this might not make much difference to the appearance of the text. • Click on the Wrap button to wrap the text within the cell. This switches the cell from a single line to as many lines as it needs to fit all the text within the cell. to specify horizontal Alternatively, you can use the Alignment tab in the “Format” dialog box (select Cells in the Format menu or right-click and select Format Cells): To set the horizontal alignment of the text, click on the button next to Left, Center or Right. To set the vertical alignment of the text, click on the button next to Top, Center or Bottom. If you want text that is too long for the cell to wrap round onto a line below within the cell (rather than writing on into adjacent cells), click on the checkbox next to Wrap Text. The cell will look something like this: 106 Spreadsheet A sample of the options you have chosen is given in the Preview box. When you have finished, click on the OK button and the text will be formatted to your specification. Formatting numbers using the toolbar Various formats can be applied to cells. However, the most important in Spreadsheet are the number formats. These will be effective if the cell contains any form of numeric value (including plain numbers, dates, formulas, currencies). The quickest way to apply number formats is to use the number format buttons on the toolbar, as follows: - Add currency format to cell. - Add percentage format to cell. - Format thousands with comma separator. - Increase number of decimal places by one. - Decrease number of decimal places by one - the numbers will be rounded to the nearest decimal place. These buttons can be used together - for example, a cell may contain the number 32. Click on the Currency button, then twice on the Increment precision button, to display $32.00. For more detailed number formatting, select the Number tab in the “Format” dialog box (select Cells in the Format menu or right-click and select Format Cells). Formatting a number To format a number: 1. Select Cells in the Format menu (or right-click and select Format Cells). 2. Select the Number tab in the “Format” dialog box. 3. Select (for example) Number from the type list. The “Number” group box will appear. 4. In the Decimal Places box, specify the precision of the number. You can have a minimum of none and a maximum of fourteen. (You can also use the increment precision button on the formatting toolbar − see Formatting numbers using the toolbar on page 106). 107 Spreadsheet 5. Auto Precision automatically sets the precision of the number at the maximum of fifteen i.e. any number that has greater than fifteen digits (or fourteen decimal places in scientific form) will be rounded to fifteen significant digits. 6. Select the Thousands With Commas checkbox for comma formatted numbers, i.e. whether to have 1,345,622 or 1345622. (You can also use the commas button on the formatting toolbar − see Formatting numbers using the toolbar on page 106). 7. Select the Negatives In Brackets checkbox to enclose negative numbers in brackets, i.e. whether to have (123456) or -123456. (Surrounding negative numbers with brackets is a common practice in accountancy.) 8. Select the Negatives In Red checkbox to display negative numbers in a red font. 9. In the Trail/Lead String option you can choose to have either trailing or leading characters. Enter your text in the text box or choose from one of the existing group. You can create your own number formats, including alternative currency formats. Here are some examples: 2 lb. 2.2 Kg 1.2 $bn FFr 23.56 DM 23.56 Note: Trailing and Leading text is managed in the Options dialog. You can add and delete entries here. See General options on page 89 for more details. A sample of the options you have chosen is given in the Preview box. When all is set, click on the OK button and the number will be formatted to your specification. You can use a variety of number types, all of which are displayed in the list at the left. To format the appropriate type of number (e.g. Number, Currency, Fraction, etc.) click on it in the list. The settings displayed to the right of the list change according to your selection. The following sections give details on how to modify these settings for each type of number. Note that the General option applies no special number formats. Formatting a currency To format a number as currency: 1. Select the Cells command from the Format menu (or right-click and select Format Cells). 2. Select the Number tab in the “Format” dialog box. 108 Spreadsheet 3. Select Currency from the number list. The “Currency” group box will appear. 4. The currency symbol will automatically be attached to the number. The rest of the currency options are the same as for the Number format - see Formatting a number on page 106 for details on how to set these. You can also use the Currency button to add a currency symbol directly. Note: The currency symbol used by Ability is taken from the Regional settings in the Windows Control Panel. Formatting a time To format a time: 1. Select the Cells command from the Format menu (or right-click and select Format Cells). 2. Select the Number tab in the “Format” dialog box. 3. Select Time from the numbers list. The “Time” options box will be displayed. 4. Click on the checkbox next to Seconds to display seconds as well as hours and minutes. 5. Click on the checkbox next to 0..12 to use the 12-hour clock and thereby display a trailing AM/PM. Leave the checkbox blank to use the 24-hour clock. Formatting a date To format a date: 1. Select the Cells command from the Format menu (or right-click and select Format Cells). 2. Select the Number tab in the “Format” dialog box. 3. Select Date from the numbers list. The “Date” group box will display. 4. In the Month group box, specify how you would like the month represented: Digits: Short Name: Long Name: 1 Jan January 5. Choose the separator you wish to appear between the different elements of the date in the Separator group box (e.g. 15/7/97 or 15-7-97). 109 Spreadsheet 6. In the Year group box, choose between None, Short Form (e.g. 97), or Long Form (e.g. 1997). 7. In the Order group box, choose whether you would like the day or the month to come first. You can also choose to display the time alongside the date: click on the checkbox next to Add Time and then choose a time format. A sample of the options you have chosen is given in the Preview box. When you have finished, click on the OK button and the date will be formatted to your specification. Formatting a percentage To format a number to be displayed as a percentage: 1. Select the Cells command from the Format menu (or right-click and select Format Cells). 2. Select the Number tab in the “Format” dialog box. 3. Select Percent from the numbers list. The “Percent” group box will be displayed. 4. The percentage symbol will be attached to the number. The rest of the percentage options are the same as for the Number format - see Formatting a number on page 106 for details on how to set these. Note: You can also use the Percentage button percentage formatting. on the formatting toolbar to apply Formatting a fraction To format a real number as a fraction: 1. Select the Cells command from the Format menu (or right-click and select Format Cells). 2. Select the Number tab in the “Format” dialog box. 3. Select Fraction from the numbers list. The “Fraction” group box will be displayed. 4. In the Display As box, you can select Auto (the nearest representation of the number as a fraction) or round the fraction to the nearest 100th, 10th, 16th, 8th or 4th. 110 Spreadsheet You can also choose to have the integer part of fractional numbers displayed with commas, negatives in brackets or in red, as with other numbers - see Formatting a number on page 106. A sample of the options you have chosen is given in the Preview box. When you have finished, click on the OK button and the fraction will be formatted to your specification. Formatting a scientific number To format a number to display in scientific notation: 1. Select the Cells command from the Format menu (or right-click and select Format Cells). 2. Select the Number tab in the “Format” dialog box. 3. Select Scientific from the numbers list and then set the decimal places as described in Formatting a number on page 106. Ability defaults to Scientific format if the number is too big (or small) to display with significant precision in the width of the current cell. Note: Scientific format coverts the original number into a base number, between 1 and 10, multiplied by a power of 10. This is useful for working with very large or very small numbers. For example, 1 meter is defined as the distance light travels in 0.000000003335640952 seconds. Entering such a value is hard on the eye. Selecting scientific format gives you a simplified display of 3.34E-09 (which is 3.34 x 10-9). Formatting a boolean value To format a number as boolean: 1. Select the Cells command from the Format menu (or right-click and select Format Cells). 2. Select the Number tab in the “Format” dialog box. 3. Select Boolean to display either TRUE, for all numbers that are non-zero, or FALSE, for cells containing zero. Note that there are no options to choose from here – just selecting Boolean will ensure the above result. Clearing a format You can clear a format from a cell (or range of cells) without deleting the contents. 111 Spreadsheet 1. Select the cell (or range) and then right-click your mouse. 2. Select Clear and then select the Format option from the drop-down menu. Alternatively, select the Clear command from the Edit menu and then select Format. Selecting the background color To change the background color of a cell, or range of cells, first select the cell, or range, and then do the following: 1. Select the Cells command from the Format menu (or right-click and select Format Cells). 2. Select the Color tab in the “Format” dialog box. The “Color” dialog is displayed. 3. Select a color from the Basic colors box. 4. Click OK to apply the color to the selected cell or range. In addition to the basic colors you can “design” your own custom color: 1. Enter the “Color” dialog box as above. 2. Click on the Define Custom Colors button. This expands the right side of the box to display a color chart. 3. Use your mouse to pick a color from the chart. Once you’ve done this you can refine your choice in the color bar at the side of the chart. The result will be previewed in the Color/Solid box below. 4. Click on Add Custom Color to add the color to the Custom colors section at the left of the box. 5. Click on OK to apply the custom color. In future you can enter the box and choose any of the custom colors you have designed and saved. Note that there are boxes for Hue, Saturation and Luminosity, as well as Red, Green and Blue. The values in these boxes change with the color selections you make. You can type in values directly that will find and display the matching color. Also, note that a background color can be applied to the whole of a worksheet in a spreadsheet. To do this follow these steps: 1. Select Sheets from the Format menu. 112 Spreadsheet 2. Select Background from the drop-down list. 3. The “Color” dialog box is displayed. 4. Follow the same procedures as above. The applied color will affect all of the current worksheet, rather than just selected cells. Adding borders There are two ways - a simple way using a button and a more complex way using the menus - of adding borders to a cell or a range of cells in your spreadsheet. To add a border to a cell or a range of cells using the button: 1. Select the cell or range of cells around which you wish to put the border. 2. Click on the arrow attached to the Format Border button A small “Borders” box is opened. on the formatting bar. 3. Click on the borders you would like to be placed around the selection: All Borders puts a border around the whole selection; Left, Right, Top and Bottom can be used to place individual borders; Clear Borders clears all borders from the selection. Note that in using the Format Border button the borders are placed around the boundary of the selection. If you want to put borders around individual cells within a larger selection, then you need to use the menu, as shown below (although you could, of course, select the cells one by one and repeat the above procedure). To add borders to a cell or range of cells using the menu: 1. Select a cell or range of cells. 2. Select Cells from the Format menu (or right-click and select Format Cells). 3. In the “Format” dialog box, select the Border tab to open up the “Border” box. 4. The general procedure for creating a border is first to choose a border color, followed by a line-style, and then to click on the appropriate border or borders to apply the selected color and line-style. Of course, you may want to give different borders different colors and/or line-styles. In this case, you have to repeat the process in each case. The following sections explain how to select borders, line-styles and colors. 5. In the Borders group box at the left, you can specify which edges of the selection you want to put borders around. Outline puts a box around the whole of the selected area; Left, Right, Top and Bottom act on each of the cells. If you switched on all of 113 Spreadsheet these at once, you would get a selection surrounded by a border, with all the cells within the selection also surrounded by borders. This allows you to have, for example, a thick-lined box of one color that contains broken-lined cells of another color. 6. You can also have double borders, once again choosing these individually or as a whole in the Borders box at the left. 7. Choose a color for the border in the Color box. Clicking on the arrow displays a range of colors. Note that all of the line-styles take on the color that is selected, until you choose another. 8. In the Style box at the bottom, you can choose the line-style you would like a border to have. The easiest way to set your borders is to pick a line-style first and then click on each of the border edges in turn. Often you’ll want a different outline style, so click on the outline box and then click on a different line-style to finish. For example, to set a border style that looks like this: go through the following steps: (i) Click the Border button on the toolbar. (ii) Select a thin line style. (iii) Click on Left, Right, Top and Bottom border boxes. (iv) Click on the Outline box. (v) Select a heavier line style. (vi) Click OK to finish. 9. Remove a border by clicking on it in the Border box. This will cancel the line-style. Alternatively, select the blank line-style in the Style box and then click on the appropriate border. 10. Any line-styles, colors or borders you set will be displayed in the Preview box. 11. Once you are satisfied with your settings, click on OK. 114 Spreadsheet The “Format” dialog box will close and your settings will be applied to the currently selected cells in the spreadsheet. Protecting a spreadsheet To “protect” a spreadsheet, that is to say, to prevent unauthorized changes to the contents and formats of locked cells and to ensure that the contents of hidden cells are not displayed, follow these steps: 1. First, lock and hide the relevant cells (see Locking and hiding cells on page 114). 2. Next, select the Protect command from the Tools menu. The “Protect” dialog box is displayed. 3. Type in a password of your choosing. You will not see the letters; they are represented by asterisks to prevent anyone seeing your password accidentally. 4. Click on the OK button. You will be asked to re-enter your password. 5. The box will close and any locked or hidden cells will be unalterable until the Protect command is cancelled. 6. Unprotect the spreadsheet by selecting Unprotect from the Tools menu and entering the same password in the box. Locked and hidden cells will now be accessible again. Note: You can protect a spreadsheet without entering a password. To do this, just click on the OK button of the “Protect” dialog box without entering a password. Obviously this is not a safe method, although it is an easy way to stop yourself altering cells you don’t want changed. Write your password down in a safe place. If you forget your password, you will never be able to unprotect your spreadsheet! Locking and hiding cells You can lock and hide cells to help protect information you don’t want to be altered or seen. For this to be effective you also need to protect your spreadsheet (see Protecting a spreadsheet on page 114). When you protect a spreadsheet, it is only the locked and hidden cells that are affected. • Locking a cell prevents the cell from being changed when the spreadsheet is protected. • Hiding a cell means that its value will not be displayed, either in the cell itself or on the status bar, when the spreadsheet is protected. 115 Spreadsheet Since it is possible to alter a cell that is hidden, even though it is protected and the changes would not be visible on screen, it is a good idea to lock any hidden cells. These features can be useful, for instance, if someone else uses your spreadsheet and you do not want them to accidentally alter values or formulas in certain fields or to view sensitive information. To lock or hide cells: 1. Select the cell or range of cells you want to lock or hide. 2. Click on either or both of the Lock and Hide buttons on the formatting bar. Alternatively, select Cells from the Format menu and then click on the Cell Attributes tab in the “Format” dialog box. 1. Click on the checkbox next to Lock to lock the cells, and on the one next to Hide to hide the cells. You can choose both to lock and hide cells. 2. Click on the OK button to close the “Format” dialog box. 3. The cells will be redrawn with hatching over them (forward slashes for Hide, backward slashes for Lock) to help you remember which cells have been locked or hidden, or both, while you are designing your spreadsheet. Once you have locked or hidden cells, you should protect the spreadsheet. The Lock and Hide commands are then activated (see Protecting a spreadsheet on page 114) and the hatching disappears. You can unlock and unhide cells again by selecting them and clicking on the Lock and Hide buttons on the formatting bar or by going into the Cell Attributes page of the “Format” dialog box to cancel the selections. First, though, you need to unprotect your spreadsheet. Note: Once a document is protected you cannot lock and hide cells, and so the Lock and Hide buttons and their equivalents in the “Format” dialog box are made inactive. Changing column width Letting text overflow into the adjacent cell is fine as long as you don’t put information into that adjacent cell. However, in the body of most spreadsheets you’ll want columns of information side by side, and if you do put information into the adjacent cell the end of the long text is ‘clipped’. To avoid this, you can alter the widths of the columns so that the texts will fit in them without leaking over into adjacent cells. You can change the width of a single column or several columns at once. 116 Spreadsheet To change the width of a single column, position the mouse pointer over the right edge of the column bar. The mouse pointer will change to a movement indicator: Drag the mouse (keep the mouse button pressed while moving) to resize the column. To change several columns at once, first select them and resize any of the selected cells. Alternatively, you can select the Column Width command from the Format menu. The “Column Width” dialog box is displayed. Do one of the following: • In the Column Width box, type the width you require in points. A point is 1/96 of an inch, or 0.026cm, so type 96 if you want the column to be 1 inch. • You can ask Spreadsheet to find the best width, given the texts you have entered. To do this, click on the Best Fit button. Spreadsheet will then look at the longest text in the chosen column and adjust the width so that the text will be displayed in its entirety. If you have highlighted several columns, Spreadsheet will find the appropriate best width for each of the columns. • If you want to go back to the default width of 80 points, click on the checkbox next to Standard. When you have altered the column width to suit, click on the OK button and the spreadsheet will be redrawn to your specification. Note: You can tell Spreadsheet to keep the width of a column, and instead of writing across into adjacent cells, move extra text down onto a new line within the same cell. To do this, select the cell in question and choose the Alignment command from the Format menu. Then click on the checkbox next to Wrap Text in the “Alignment” dialog box. Changing row height Ability will automatically adjust the height of a row to match the largest font you’ve used, so you won’t normally need to change row height. To change the height of a single row, position the mouse pointer over the top edge of the row bar. The mouse pointer will change to a movement indicator. Drag the mouse (keep the mouse button pressed while moving) to resize the row. To change several rows at once, first select them and resize any of the selected rows. 117 Spreadsheet Alternatively, you can select the Row Height command from the Format menu. The “Row Height” dialog box is displayed. Do one of the following: • In the Row Height box, type the height you require in points. A point is 1/96 of an inch, or 0.026cm, so type 48 if you want the row to be a half-inch tall. • You can use Spreadsheet to find the best height, given the texts you have entered. To do this, click on the Best Fit button. Spreadsheet will then look at the highest text in the chosen row, and adjust the height so that the text will be displayed in its entirety. If you have highlighted several rows, Spreadsheet will find the appropriate best height for each of the rows. • Select the Standard checkbox to return to the default height. When you have altered the row height to suit, click on the OK button and the spreadsheet will be redrawn to your specification. Copying and moving information In a spreadsheet you can copy or move information: • From one cell to another • From one range of cells to another range of cells When you copy information, Spreadsheet creates duplicate information in the destination cells you specify and the information also remains in the original cells. Any formulas in the copy range are propagated in the destination range. For example, a reference to the cell A1 in a formula in cell A2 will become a reference to cell B1 if the formula is copied to cell B2. You can override propagation (see Absolute addresses on page 132). When you move information, Spreadsheet removes it from the original cells and displays it at the destination cells instead. When you move formulas, any cell references within the range are adjusted so they work in their new location. References made to cells outside the range are preserved. In either case, if there is already information in the destination cells, Spreadsheet replaces it with the new information. The most effective way of copying and moving information is to use drag and drop (see Drag and drop on page 25). 118 Spreadsheet You can also use cut and paste in a number of ways, as explained in the following sections. Note: As Spreadsheet is a Windows program, anything you copy or cut is placed in the Clipboard. This means that you can paste it into another spreadsheet or another type of document entirely, such as a database. Copying and moving from one cell to another cell To copy or move a single cell’s contents to a new location: 1. Click on the “source cell” - the cell you want to copy. 2. Select the Copy button or the Copy command from the Edit menu. If you wish to move the information, use the Cut button instead. 3. Click on the “destination cell”. 4. Select the Paste button or the Paste command from the Edit menu. Copying and moving from one range to another range You can also copy or move the contents of a range of cells from one place to another. 1. Select the range of source cells. 2. Select Copy from either the toolbar or the Edit menu, or by right clicking your mouse. If you wish to move the information, select Cut 3. Select the range of destination cells, and then select Paste Edit menu, or by right clicking your mouse. instead of Copy. from the toolbar or Provided the copy range can fit exactly into the paste range (i.e. the paste range is an exact multiple of the copy range), you can copy information to a much larger area than the copy range. To do this, select the paste range before pasting. The paste range will contain an exact multiple of the copy range. This is extremely important when building spreadsheets. For example, you can make a formula work for one column and then copy it, in one operation, to many columns. Copying one cell to many other cells You can copy one cell and paste it into any number of destination cells. In the example below, a formula has been entered in cell C4, =C3*$A4, to convert January’s figure from £ to $: 119 Spreadsheet You can copy the formula to make it work for February, March and April: 1. Click on cell C4 to make it the active cell. 2. Click the Copy button on the toolbar. 3. Select cells D4 through to F4 to mark the destination range. 4. Click the Paste button on the toolbar. Note the use of the absolute reference in the formula – as you copy it to February, March and April, the reference to C3 changes to D3, E3, F3 respectively, but they all still refer to A4 to get the exchange rate (see Absolute addresses on page 132 for more details). The above operations can also be used to move the contents of one cell to many other cells, if Cut is used instead of Copy. Copying many cells to one This saves you from having to select an area the same size as the copy range when pasting: just point to the top left-most cell in the destination range and Ability will fill in the rest. In the following example, a new line for DM has been added: You can copy the formulas in row 4 and make them work for row 5: 120 Spreadsheet 1. Select cells C4 through to F4. 2. Click the Copy button on the toolbar. 3. Click on cell C5 to mark the top left corner of the destination range. 4. Click the Paste button on the toolbar to fill row 5 with formulas. The above operations can also be used to move the contents of many cells to one cell, if Cut is used instead of Copy. Copying many cells to many other cells The number of cells in the copy range must divide exactly into the paste range. In the following example, cells C4 and C5 have the correct formulas, which need copying to D4 through to F4 and D5 through to F5. 1. Select cells C4 through to C5. 2. Click the Copy button on the toolbar. 3. Select cells D4 through to F5 to mark the destination range. 4. Click the Paste button on the toolbar to copy the formulas. The above operations can also be used to move the contents of many cells to many other cells, if Cut is used instead of Copy. Drag and drop "Drag and drop" is a technique, using your mouse, for moving, copying, filling in and deleting spreadsheet data. "Drag and drop" in Ability is supplementary to the more traditional copy, cut, paste, delete and fill commands, although easier to use once learnt. 121 Spreadsheet The following sections show you how to drag and move, copy, fill or delete. Drag and move To move the contents of a cell (or selected range): 1. Click on the cell whose contents you want to move. 2. Point anywhere along the cell's border. 3. When the mouse pointer changes to an arrow, hold down the left mouse button. 4. Drag the cell outline to the target cell. Release the mouse button. The contents of the cell will be moved to the target cell. This has the same effect as cut and paste. Drag and copy To copy the contents of a cell (or selected range): 1. Click on the cell whose contents you want to copy. 2. Point anywhere along the cell's border. 3. When the mouse pointer changes to an arrow, hold down the left mouse button and the Ctrl key. 4. Drag the cell outline, while keeping the Ctrl key depressed, to the target cell. Release the mouse button and Ctrl key. The contents of the cell will be copied to the target cell. This has the same effect as copy and paste. Drag and fill You can drag and fill the contents of a single cell, or range of cells, to another range of cells. Certain types of ordered data, such as numbers, days and months, are incremented automatically. Follow these steps: 1. Click into the source cell. 2. Move the mouse pointer over the cell handle in the bottom right corner of the cell: 122 Spreadsheet 3. When the mouse pointer turns to a cross, hold down the left mouse button and drag the cell outline till it covers the area you want to fill. The contents of the source cell will fill the selected cells. Note that only cells adjacent to the source cell -either up, down, left or right - can be filled. To fill an area, rather than just a column or row range, follow steps 1 to 3 above then drag the range you've just created to fill the remaining area. If the source cell contains a number or a text string with a number at its end, the selected cells will be filled incrementally. Here are some examples: Source cell 1998 Product1 Jan Monday Target range after drag and fill 1999, 2000, 2001 Product2, Product3, Product4 Feb, Mar, Apr Tuesday, Wednesday, Thursday The last two examples show how the built-in ordered lists can be used (see Custom lists on page 150 for more information). Sometimes, when the source cell contains a number or member of a custom list, you may not want a range to be filled with incremental values. In these cases, you should first select the required range and then select the Fill command from the Edit menu or click on the Fill button on the toolbar. In the "Fill” dialog make sure you leave the Series box unselected and then click on OK. The contents of the source cell will be copied exactly (without incrementation) to each of the cells in the selected range. Filling cells automatically You can automatically fill a whole range of cells with values. You might use this, for example, when you set up a spreadsheet in which you want a column for every year from 1984 to the present. Column A would be 1984, column B would be 1985, and so on. There are two types of fill: Normal and Series. In normal fill, the same value is put in each selected cell. In series fill, a different value (calculated in a specified increment from the starting value) is put in each cell. To automatically fill in a range with a particular value, using Normal Fill, follow these steps: 1. First enter the value in a cell. 2. Next, select the range you want to fill (click and drag the mouse across and/or down the spreadsheet to select a range, making sure the first cell in the selected range is the cell containing the value). 123 Spreadsheet 3. Click on the Fill button dialog is displayed. or select the Fill command from the Edit menu. The “Fill” 4. Click on OK (note that the fact that the Series box is left unselected indicates that this is a normal fill). 5. The range will be filled with the value of the active cell. With normal fill, the fill is performed in one direction at a time. If the range spreads over an area greater than a single row or column, then you need to repeat the operation, specifying a different fill direction, to fill the whole area. For instance, you might first fill an area down and then right. (See below for details) To automatically fill in a range with an incremented value, using Series Fill, follow these steps: 1. First select the range you want to fill. 2. Next, select the Fill command from the Edit menu or click on the Fill button on the toolbar. 3. In the “Fill” dialog select the Series checkbox by clicking on it. This activates the Series box. 4. In the Start box enter the value from which you want to start. 5. In the Step box enter the step-size by which you want the value to be incremented. (Note that Ability recognizes various incremental lists, including numbers, text that ends with a number, and the lists, such as days of the week, contained in Custom Lists (under Options from the Tools menu)). If you leave the Step box empty, Spreadsheet will automatically use an increment of 1. 6. The range will be filled incrementally according to the direction selected in the Direction box. If the range stretches over rows and columns the fill will proceed in the same direction throughout the range. (See below for details) 7. When all is set, click on the OK button. The selected cells will be filled. Direction of Fill With either fill type, if the selected range spreads over an area greater than a single row or column, then you can choose in which direction you would like the fill to work. Left Fills the cells to the left of the active cell with its value Right Fills the cells to the right of the active cell with its value 124 Spreadsheet Up Down Fills the cells above the active cell with its value Fills the cells below the active cell with its value • Series Fill automatically fills the whole of an area, according to the selected direction. • Normal Fill fills in only one direction at a time. So, for instance, to normal fill a selected area with a particular value, you might select Down first and then select Fill again and select Right. Note: Fill will work with formulas as well as values. Filling with a formula works in the same way as copying a formula: each formula is propagated throughout the range. The formula should be entered in the active cell, as for normal fill, before selecting the range to be filled (see Copying a formula on page 132 for more details). Example 1 To fill the area A1..D10 with a particular value, say the number 1, do the following: Enter 1 in A1 and then select the range A1..D10. Select Fill from the Edit menu or click on it on the toolbar. The "Fill" dialog will be displayed. Leave the Down button switched on and then select OK. The first column in the range will be filled. Next, select Fill again and this time switch on the Right option by clicking on it. The rest of the range will be filled. Example 2 To fill the range A1..D10 with an incremented series of invoice numbers, where the first one is ABC45, the step is 2 and the range is to be filled along the rows, do the following: Select the range to be filled. Select Fill from the Edit menu or by clicking on the toolbar. The "Fill" dialog will be displayed. Click on the Series checkbox to activate it. In the Start box put ABC45. In the Step box put 2. Select the Right option. Select OK. The range will be filled along the rows in increments of 2, from ABC45 to ABC123. Inserting and deleting cells, rows and columns The following sections show you how to delete and insert cells, rows and columns in your spreadsheet. Drag and delete To delete the contents of a range of cells: 125 Spreadsheet 1. Select the range. 2. Move the mouse pointer over the cell handle: 3. When the pointer changes, press on the left-hand mouse button and drag back across the range. The range will be grayed out as you drag. 4. Release the mouse button when the range is totally gray. The contents of the range will be deleted. Erasing the contents of a cell You can erase the contents of a cell. To do this, activate the cell you wish to delete (usually by clicking on it), and then press the del key. This will delete everything in the cell, including contents and format. If you wish to delete particular features of the cell while leaving others intact, select the Clear command from the Edit menu. The “Clear” dialog will appear. In this dialog, you are given five choices: All Erases everything from the cell. Values Erases the value from the cell, leaving formulas and formats intact. Formulas Erases only a formula from the cell - the result of the formula will be left intact. Contents Erases only the contents of the cell, that is values and formulas; anything else you put in this cell will take on the existing formatting. Format Erases only the formatting of the cell – the contents will be left intact. You can also access Clear by right-clicking your mouse, although the options to clear formulas and values are not available in this way. Select the option you require, and click on the OK button. Inserting cells, rows and columns When you are building a spreadsheet, you may discover that you need to insert new cells, columns or rows. 126 Spreadsheet To insert cells, select the cells where you want the new cells to go. Next, select Cells from the Insert menu (or by right clicking your mouse). The "Insert Cells" dialog will appear. Choose whether you want the selected cells and their contents to be shifted down or right. Click on OK to insert the new cells. To insert a row, click on the row bar to select where you want the inserted row to appear. The whole of the row is selected, rather than a range of cells. Select Cells from the Insert menu (or by right clicking your mouse). The new row will be inserted, and the selected row and all rows beneath the selected row will be shifted one row down. Note that the "Insert Cells" dialog does not appear when inserting rows. To insert a column, click on the column bar to select where you want the inserted column to appear. The whole of the column is selected, rather than a range of cells. Select Cells from the Insert menu (or by right clicking your mouse). The new column will be inserted, and the selected column and all columns to the right of the selected column will be shifted one column to the right. Note that the "Insert Cells" dialog does not appear when inserting columns. It is possible to insert several rows or columns at once by selecting the required number of row or column bars. Note: Spreadsheet readjusts formulas and range references to compensate for inserted rows and columns. Deleting cells, rows and columns Note: When you delete cells, rows or columns, any information they contain is also deleted. To delete a cell (or cells), select the cell(s) you want to delete. Next, select Delete from the Edit menu (or by right clicking your mouse). The "Delete Cells" dialog will appear. Choose whether you want the deleted cells to be replaced with cells from the same column(s) or row(s). Click on OK to delete the selected cells and shift cells from the same column (up) or row (left). To delete a row, click on the row bar to select the row you want to delete. The whole of the row is selected, rather than a range. Select Delete from the Edit menu (or by right clicking your mouse). The selected row will be deleted, and all the rows beneath the deleted row will be shifted one row up. Note that the "Delete Cells" dialog does not appear when deleting rows. To delete a column, click on the column bar to select the column you want to delete. The whole of the column is selected, rather than a range. Select Delete from the Edit menu (or by right clicking your mouse). The selected column will be deleted, and all columns to the right of the deleted column will be shifted one column to the left. Note that the "Delete Cells" dialog does not appear when deleting columns. 127 Spreadsheet It is possible to delete several rows or columns at once by selecting the required number of row or column bars. Note: Spreadsheet readjusts formulas and range references to compensate for deleted rows and columns. Comments It is possible to attach comments to cells in a spreadsheet. When you need to remind yourself what sort of information the cell contains e.g. a formula whose purpose you have forgotten, it is easy to bring up the comment box with your previous note. To create a comment box, do the following: 1. Click on the cell to which you want to add the comment. 2. Right-click your mouse and select Insert Comment (alternatively, select Insert Comment from the Insert menu). 3. A box is displayed next to the selected cell. Type your comment directly into the comment box. 4. To close the comment box, click anywhere outside it. 5. A red mark will appear in the top right-hand corner of any cell that has an attached comment. While you are working in a spreadsheet, you can display the comment boxes attached to the cells by running your mouse pointer over this mark. The box will remain visible till you move the mouse away (see Editing comments on page 127 for details on how to edit a comment). Note that a comment box will accept only text. If you attempt, for instance, to insert a function into a comment box, it will be inserted into the cell itself. Likewise, any attempt to change the font characteristics of the comment text will affect the cell contents instead. Editing comments You may decide that you would like to change the text in a comment box. To do this, follow these steps: 1. Click on the appropriate cell. 2. Right-click and select Edit Comment from the drop-down menu (alternatively, select Edit Comment from the Insert menu). 3. The comment box is displayed with its text. The box will remain visible on screen till you click outside it. 128 Spreadsheet 4. Click in the box and edit the text as you would with any other text (with the proviso that you can’t apply any font effect). 5. Once you are satisfied, click outside the box to close it. You can edit the comment at any time and as many times as you like. Deleting comments You can delete a comment box attached to a cell by following these steps: 1. Click on the appropriate cell. 2. Right-click and select Delete Comment from the drop-down menu. The comments box will be deleted, this being indicated by the disappearance of the red mark in the top right-hand corner of the cell. Merging and splitting cells You can merge a range of cells to form one cell and split an already merged cell back into its component cells. In this way it is possible to have a large cell and its contents stand out among otherwise normal cells. Merge a selected range of cells as follows: 1. Select the cells you want to merge. 2. Select Merge Cells from the Format menu. The cells will be merged to form one big cell. Note that the individual cell borders disappear and that when you click anywhere within the merged cell the whole cell is selected, as you would expect. If you would like to convert a merged cell back into its component cells, follow these steps: 1. Select the merged cell you wish to split. 2. Select Split Cells from the Format menu. The cell will be split into normal cells. Note: The merge and split options are useful as aids to designing your spreadsheet’s appearance. Once this is settled, you can then enter the required data. However, if a range of cells that are to be merged already contain data, it is only the data in the top lefthand cell that is displayed in the new merged cell. To retain all of the data in the cells that 129 Spreadsheet comprise the range, you should use copy or cut and then paste into the top left cell of the range before merging. When you split a merge cell the data is displayed in the top left cell after the split has been performed. Styles The styles option allows you to design and save for future use formats and combinations of formats that you may want to apply to certain cells in your spreadsheets. Styles can save you a lot of time, especially when the combinations of formats are complicated. Design a new style as follows: 1. Open up the “Format” dialog box by either selecting Cells from the Format menu or right-clicking and selecting Format Cells from the drop-down menu. 2. In the box, click on the Styles button at the bottom left corner to open up the Styles Design box. 3. You can now use any, some or all of the six format options (accessible through the six tabs along the top of the box) to help design the new style. Set the required formats and then click in the top line of the Styles Design box. 4. Type the name of the style. This will activate the Add button, which you should now click on to place the new style in the box below, in which styles are listed and saved for future use. (Note that the add button will only be activated if the new style has a different name from those already listed.) 5. Once this is done you can do one of three things: continue to design new styles, as described above, and add them to the list; exit the dialog box altogether without applying a style; or apply a style there and then. 6. Apply a style by selecting it from the list and clicking on Apply. When you click on OK the style will be applied to the currently selected cell or range of cells. (If you choose not to apply a style, clicking on OK will close the box without affecting the spreadsheet.) You can go back to the “Format” dialog box at any time to design new styles or apply old ones. Also, you can delete a style by selecting it and clicking on the Remove button. Using formulas This is the real heart of the spreadsheet. You can use formulas to add, subtract, multiply, and divide the numbers in your spreadsheet. For example, you can: • Add up a column of numbers 130 Spreadsheet • Automatically compute averages • Solve mathematical problems like 3456.87 x (345.2498 + 1224.1 + 45.3) • Use any of Ability's built-in functions With formulas, you can design spreadsheets that help you to explore “what if” possibilities. What happens to your profits if expenses creep up 9%? What if the payments on a new car stretch over 48 months instead of over 24? This “what if” analysis is a vital component of business and financial planning. The following sections show you how to work with formulas in Ability. You will also need to refer to the sections under Function reference on page 480. What is a formula? A formula is like a set of instructions for calculating or retrieving values. Here are some examples of formulas: =341 * .065 Multiplies 341 by .065. =A9 - C14 Subtracts the value in C14 from the value in A9. =(A3 + A4)/.125 Adds the values in A3 and A4, then divides by .125. =SALES - B5 Subtracts the value in B5 from the value in a field named SALES (you’ll read about naming fields later in this chapter). =TOTAL (D8..D11) Using one of Ability’s built-in functions, (TOTAL), adds the values in fields D8 to D11. =Sheet1!A1 * 2 Multiplies the contents of cell A1, in the worksheet called Sheet1, by 2. Arithmetical operators You can use formulas to add, subtract, multiply and divide numbers. You should use the following standard arithmetic operators in your formulas: / division * multiplication + addition 131 Spreadsheet - subtraction Note: These arithmetic operators are listed in the natural order of priority, from highest (calculated first) to lowest (calculated last). You can use parentheses to group information and to control the order of calculation. In addition, you can use these logical operators: % The percentage sign simply divides a number by 100. For example, 25% means 0.25. ( ) Parentheses group parts of a formula and also control the order in which calculations are performed. For example, A2 * (B3 + C4) tells Spreadsheet to add B3 and C4 first, and then multiply the result by A2. Without the brackets, Ability would multiply A2 by B3 before adding C4. ^ The caret raises a number to a power (exponentiation). For example, 3^2 raises 3 to the power of 2, or squares it. You can also raise numbers to fractional and negative values. For example, 3^0.5 or 3^(1/2) finds the square root of 3 and 10^-2 gives the result of 1/(10*10), which is 0.01. Ability will automatically strip excess brackets from a formula to display it in its simplest form. How to enter a formula You build a formula by making reference to other cells. For instance, to display the total of two cell values in a third cell, you would put the formula (location of cell 1) + (location of cell 2) in the third cell. When the contents of cell 1 or cell 2 change, cell 3 is updated to reflect the change. Formulas are entered in the active cell just as you enter text or values. However, you always start a formula with an equals sign (=). Note: You can begin a formula with other operators if you like, for example “+” or "-". Now you’re ready to build the formula. Lets use an example of adding cell A1 and A2 together and putting the result in cell A3. First, click on A3 and type “=”. Next, click on cell A1, type “+” and then click on cell A2. Note that the formula bar will read: =A1+A2 132 Spreadsheet You can type the entire formula directly if you want. Often though, you’ll find it easier to refer to a cell in a formula by simply clicking on it. When you have finished the formula, click on the Confirm button on the status bar, or press enter, and the results of the calculation will be inserted into the active cell. If you make mistakes while you’re building a formula and you want to start over again, on the formula bar. Spreadsheet erases the press esc or click on the Cancel button formula and you can start again by entering an equals sign. If you want cells to show their formulas instead of the results, open the View menu and click on the Formulas command. When formulas are showing, this command has a check next to it. To show results again, click on the command to remove the check. Copying a formula You can often save time by copying a formula from one cell to another. To do this, activate the cell whose formula you wish to copy. Then select Copy either from the toolbar or the Edit menu, or by right clicking your mouse. Next, click on the cell to which you wish to copy the formula, and select Paste either from or the Edit menu, or by right clicking your mouse. The formula is copied the toolbar into the destination cell. However, you may notice that the formula has been altered slightly. This is because Spreadsheet automatically adjusts the cell addresses in the formula so that they work logically in the new location. To give an example, let’s say you entered the formula B8*C8 in cell D8. If you then copied it to cell D9, Spreadsheet would turn it into B9*C9, and in cell D10 it would become B10*C10. If you do not want the cell addresses to be adjusted in this way, you need to specify them as absolute addresses. Absolute addresses As described in Copying a formula on page 132, Spreadsheet normally adjusts the cell addresses so that the formula works in the new locations. Occasionally, though, you might not want the cell addresses to change. For example, when you copy a formula like B8*C8 to a new location in a spreadsheet and still want the formula to multiply the value in B8 by the value in C8. 133 Spreadsheet In this case you don’t want the formula to adjust the field addresses for the new location. In other words, you want B8 and C8 to be absolute field addresses in the formula. To include absolute field addresses (as opposed to adjustable addresses) in a formula, precede the field address with a dollar sign ($). The dollar sign tells Spreadsheet to copy the formula exactly, and to leave the field addresses unchanged. You can use a dollar sign to make: • absolute row addresses, e.g. B$8 • absolute column addresses, e.g. $B8 • absolute row and column addresses, e.g. $B$8 Clearing formulas Once you have entered a formula, you might decide that you no longer want the cell to contain the formula, but simply to display its result. Consequently the current contents of the cell will be protected from change (when, for instance, one of the other cells referred to in the formula changes). To turn a current formula result into a static cell value, select the cell whose formula you wish to clear. Then choose the Clear command from the Edit menu and select Formulas. This indicates to Spreadsheet that you want to clear the formula from the cell but without deleting the result. Click on the OK button. You can clear the formulas in a range by first selecting the range and then repeating the above operation. This procedure is irreversible (i.e. you cannot later turn the values back into the formulas which created them), so use it with care. Note: Clearing formulas also clears any links, turning them into static values. Automatic totals Auto-sum is a quick method of summing values in a column, row or range. To use auto-sum, do one of the following: • Click into a cell below the column or to the right of the row that you want to sum and . Ability will show you the range about to be summed select the Sum button accept this with the Confirm button, or press the Enter key. The SUM function will be pasted in the cell. 134 Spreadsheet • Select a range of cells and click the Sum button - Ability will fill in row and/or column totals in the appropriate place. Example 1 - totaling a column of figures Say the range A1 though A10 contains numbers you want to total. Click into cell A11 (or A12 if you prefer to leave a gap) and click the Sum button. Ability will outline the range and wait for you to press Enter or click the Confirm button. Example 2 - totaling a column of figures As an alternative to Example 1, again say the range A1 though A10 contains numbers you want to total. This time select A1 through A10. Click the Sum button - Ability will put the total in cell A11. If instead you select cells A1 through A12, the total will be placed in A12 (that is to say the total will always be placed in the last, or last+1, cell of the selected range). Example 3 - including row and column totals in one go Suppose the range A1 through D5 contains values and you want row and column totals and a grand total. First select the cells A1 through D5. Next, click the Sum button. All the totals will appear below and to the right of the range with a grand total in cell E6. Calculating current selection Sometimes it is useful to see the results of calculations as you work in a spreadsheet but without having these results inserted into the spreadsheet itself. To this end Ability provides a status bar box called Autocalc, in which calculations can be performed automatically on any range of values that is currently selected. To activate Autocalc right-click on the right most box on the status bar. A menu will appear with functions for Count, Sum, Average, Max and Min. Click on the function you require. This function will be active until you choose another one. Select the range of cells to which you want to apply the function. The result of the calculation will appear in the Autocalc box. To apply another function right click on the box again and click on another function to make it the active one. To switch off Autocalc click on None. For example, to perform the full set of automatic calculations on values in the range A1..D10, you should first select the range and then activate Autocalc. Selecting the available functions one by one will tell you how many non-empty cells there are in the range and the sum, average, maximum and minimum of the values. To apply the currently selected function to another range, just select that range. 135 Spreadsheet Turning recalculation on and off Spreadsheet has an auto-calculation feature. This feature is turned on by default, so Spreadsheet automatically calculates the results of all formulas after each entry you make that affects a formula. To turn off auto-calculation, select the Auto Calculate command from the Tools menu: the check next to the command in the menu will be removed. Select the Auto Calculate command again to turn it back on. When auto-calculation is disabled, you need to select the Calculate Now command from the Tools menu to calculate the results of formulas. Manual calculation of this sort is useful if you have many formulas, or are putting in a lot of data, and you do not want to wait for Spreadsheet to recalculate after every entry that affects a formula. Auto Calculate and Calculate Now operate on the current spreadsheet as a whole and not just on a selected cell or range. Linking You can link a field in a Spreadsheet to another field in: • the same spreadsheet • a different spreadsheet • a Write document or Database Linking is a way to tie information in one field to information contained in another. When you link fields, if you change the value in one field, the value in the other field automatically changes too. Links can be either one-way or two-way: • A one-way link, at its simplest, is just a cell reference; for example, =A1 entered in cell A5 creates a one way link. You can make changes to A1 that will be reflected in A5, but not the other way round. • A two-way link is similar but the data can be changed at either end. A logical consequence of this is that two-way links cannot be used in building a formula (unlike one-way links). One-way and two-way links can work between documents: a spreadsheet can have a one-way or two-way link to another spreadsheet or a Write document (see Linking through fields on page 400). 136 Spreadsheet One-way links The easiest way to set up a one-way link is to type it directly into the destination cell. For example, if A1 contains 123, type the formula =A1 in any other cell, say E10. The contents of E10 will always be the same as A1. This is identical to a standard spreadsheet formula, so =A1 + 10 is also valid. As an alternative, you can use a paste special operation to achieve the same result. For example: 1. Click in cell A1 2. Select Copy by right-clicking your mouse 3. Click in cell E10, which is to contain the linking expression 4. Select Paste Special by right-clicking your mouse 5. Select Paste Link from the "Paste Special" dialog Two-way or hot links The easiest way to create a two-way link is to type it directly. For example, if A1 contains 123, type the formula ! A1 in any other cell, say E10. The contents of E10 will always be the same as A1 and you can edit data at either end of the link. For example, entering 456 in E10 or A1 will cause both E10 and A1 to display the same result - 456. As an alternative, you can use a paste special operation to achieve the same result. For example: 1. Click in cell A1 2. Select Copy by right-clicking your mouse 3. Click in cell E10, which is to contain the linking expression 4. Select Paste Special by right-clicking your mouse 5. Select Paste Hot Link from the "Paste Special" dialog 137 Spreadsheet To convert a one-way link into a two-way link, select the Edit Source button or select the Attributes command from the Format menu, and then check Edit Formula Source. Selecting the Edit Source button again will convert the two-way link back into a one-way link. Naming cells and ranges Cells and ranges of cells can be assigned names. After a cell is named, you can use the name instead of the cell address in formulas and other references to that cell. For example, supplies might be one expense category and utilities another. By giving names to the grand total cells for both supplies and utilities, you can build a formula that looks like this: =SUPPLIES+UTILITIES In addition, you might find it easier to remember SUPPLIES than a precise cell address. So, if you want to use the Go To command from the Edit menu to move the cursor to that cell, you can simply enter the name SUPPLIES rather than a cell address. Assigning names to cells and ranges To name a cell, activate it (usually by clicking on it), and then select the Range Name command from the Insert menu. The “Range Name” dialog is displayed. The cell you have selected is displayed in the Range box. Type in a name for the cell in the Name box. The existing cell and range names are listed below in the Ranges box. Click on the Add button and the cell name will be added to this list. Notice how the addresses of named cells and ranges are given in square brackets after the names. Select Close to save the new name. If you want to name a range, the steps are the same as for a cell, only make sure you select the range before selecting the Range Name command (although it is possible to type in the range directly). The name you have chosen will appear in the Cell Index box on the formula bar. To refer to named cells or ranges in formulas, just use the name wherever you would otherwise use the cell address. For example, if you name the range A1 to A10 as MYLIST, these two formulae are equivalent: =TOTAL(MYLIST) =TOTAL(A1..A10) 138 Spreadsheet Changing or removing names You can easily change or remove a name assigned to a cell or range. Click on the cell to activate it or select the range, then choose the Range Name command from the Insert menu. In the “Range Name” dialog, use the Delete and Delete All buttons to delete as required. You can select and delete the named cells and ranges at will. To rename a cell or range, click on it in the Ranges box in the Range Name dialog, and then click on the Name box. Delete the name by selecting it and then either using Del on the keyboard or right-clicking on your mouse and selecting Cut. Type in the new name and select the Add button. The new cell or range name will appear in the Ranges box. Note that the old name, which is now inactive, is still there. To erase this, select it and click on the Delete button. Sorting You can sort the fields of your spreadsheet. Sorting is a way of re-arranging items in a specific order, according to the contents of a key row or column within the selection. To sort rows and columns in a spreadsheet, first shade the range to be sorted. Then select the Sort command from the Tools menu. The “Sort” dialog box is displayed. In the Sort box, you can choose between sorting by Rows and sorting by Columns. In the three boxes below the Sort box, you can specify up to three sort levels. For each sort you should specify which column to sort by when sorting rows, or which row to sort by when sorting columns. For each sort you can also choose between Ascending order (where normal ascending numerical or alphabetical order is applied) and Descending order (where normal descending order is applied). Normal sort order can be overridden by selecting a Custom List from the Order box. This enables you to sort columns or rows that contain, for example, days of the week or months, or any lists that you may have added to Custom List yourself. If you apply more than one sort, columns or rows with duplicates in the first sort level are sorted according to the second and third sort levels. If you have not specified second and third sort levels, rows or columns with duplicates in the first sort are left in the order in which they are found. To sort on more than three levels, use the Sort command several times using the least significant keys first. Note that when a sort is applied using Normal order, the following criteria apply: • numbers are sorted according to their numerical order, words according to their alphabetical order; 139 Spreadsheet • numbers come before letters (3 before a; 3a before a3); • a lower case letter comes before its upper case equivalent (if you want letters to be ordered without regard for case, then check the Ignore Case box by clicking on it). Searching You can search a spreadsheet for a cell that contains a particular text string, value, or on the toolbar or select result of a formula. To begin a search, click the Find button the Find command from the Edit menu. The “Find” dialog box is displayed. In the Find what box, type the text, value or result of a formula you wish to find, or paste it in from the clipboard. In the Where box select Values if you only want to find text or a value; select Formulas if you only want to find the result of a formula; select Both if you want to find either text/value or a result of a formula. For instance, if you enter 53 in the Find what box, and if cell A10 contains the value 53, while cell A11 contains 53 as the result of a formula, say =21 + 33, then setting Values will find A10 but not A11, setting Formulas will find A11 but not A10, and setting Both will find both A10 and A11. In the Direction and Scope boxes, choose where you would like to look for the item: All Search from the beginning of the spreadsheet or selection Down Search from the active cell to the end of the spreadsheet or selection Up Search from active cell to the beginning of the spreadsheet or selection Whole document Search the whole document Selection Search only the selected cells. Use this option to search a specific row or column by first selecting a row or column, or to search a selected area Select the Match Case checkbox to find only those occurrences with the combination of uppercase and lowercase letters specified in the Find what box. Select the Match whole words only checkbox to find occurrences that are words by themselves, and not part of a larger word. When everything is set, click on the Find Next button and Ability will find the next occurrence of the text, value or result of formula, as specified. If no matches are found, a message will tell you that the search was unsuccessful. 140 Spreadsheet Finding next occurrence You can repeat the last performed search by selecting the Find Next command from the Edit menu. Since Ability remembers what you last searched for, you do not have to go back into the Find dialog to set up a search. Finding a formula If you want to find a formula, select Formulas from the View menu first. The spreadsheet will display formulas rather than their results. You can then use Find to search for formulas directly. Note that when formulas are displayed they are treated as values for the purposes of Find, so the Where box should be set to Values. Replacing To replace a particular text string, value or result of formula with another one, click on the Replace button on the toolbar or select the Replace command from the Edit menu. The “Replace” dialog box is displayed. This is very similar to the “Find” dialog box. However, it has some additional sections. In the Find what box, type the text, value or result of a formula you wish to find, or paste it in from the clipboard. In the Where box select Values if you only want to find and replace text or values; select Formulas if you only want to find and replace the result of a formula; select Both if you want to find and replace either text/values or the result of a formula. For instance, if you enter 53 in the Find what box, and if cell A10 contains the value 53, while cell A11 contains 53 as the result of a formula, say =21 + 33, then setting Values will find A10 but not A11, setting Formulas will find A11 but not A10, and setting Both will find both A10 and A11. In the Replace with box, type the text, value or formula you want to replace the found item (or paste it in from the clipboard). Note that you can replace a value or text with a formula, or an existing formula with another, and vice versa. In the Direction and Scope boxes, choose where you would like to look for and replace the text, value or result of a formula: All Search from the beginning of the spreadsheet or selection Down Search from the active cell to the end of the spreadsheet or selection Up Search from active cell to the beginning of the spreadsheet or selection 141 Spreadsheet Whole document Search the whole document Selection Search only the selected cells. Use this option to search a specific row or column by first selecting a row or column, or to search a selected area Select the Match Case checkbox to find only those occurrences with the combination of uppercase and lowercase letters specified in the Find what box. Select the Match whole words only checkbox to find occurrences that are words by themselves, and not part of a larger word. When everything is set, click on the Find Next button and Ability will find the next occurrence of the text, value or result of formula as specified. If no matches are found, a message will tell you that the search was unsuccessful. Since Find Next finds values one by one you can choose to replace these as you go along by clicking on the Replace button. Ability will then automatically replace the present occurrence and proceed to search for the next one. If you choose not to replace a particular occurrence, click on Find Next instead. Alternatively, click on the Replace All button to replace all occurrences of the find item with the replace item. Replace next occurrence You can repeat the last performed replacement by selecting the Replace Next command from the Edit menu. Since Ability remembers what you last entered in the Replace dialog, you do not have to go back into the dialog to set up a new search and replace. Transposing ranges You can transpose selected cells in a spreadsheet. Transposing is a way of rotating the cells in a spreadsheet, from horizontal to vertical, with the top row becoming the first column; the second row, the second column; and so on. Transposing cells in a spreadsheet can be useful when you are including data in a document. For instance, what appears in rows of a spreadsheet might be more appropriately displayed as columns in a report. To transpose an area of the spreadsheet, select the range of cells you wish to transpose. Then select Cut from the toolbar or the Edit menu, or by right clicking your mouse. You can use the Copy command instead if you wish to keep the original. Select the range in which you wish to put the transposed values, and then select the Paste Special command from the Edit menu. In the “Paste Special” dialog, click on the checkbox next to Transpose. Click on the Paste button and the spreadsheet will be redrawn with the data transposed. 142 Spreadsheet Transforming ranges You can transform selected cells in a spreadsheet. Transforming is a way of adding, subtracting, multiplying or dividing two ranges. To transform an area of the spreadsheet - the target range- first type in and select the range of cells you wish to use to effect the transformation. Then select Copy from the toolbar (or the Edit menu, or by right clicking your mouse). Next, select the target range and then select the Paste Special command from the Edit menu (or by right clicking your mouse). In the Operation group box, click on the Add, Subtract, Multiply or Divide button. Click on the Paste button and the spreadsheet will be redrawn with the data transformed. Example 1 The target range contains 1, 2, 3, 4, 5, which you want to multiply by 2. Enter 2 into a spreadsheet cell and Copy this cell. Select the target range and then select Paste Special. Select Multiply and then click on the Paste button. Each of the target cells will be multiplied by 2 to give 2, 4, 6, 8, 10. Example 2 The target range contains 25, 20, 15, 10, 5, which you want to divide by 5, 4, 3, 2, 1, the transformation range. Type in and select the transformation range. Copy this range and then select the target range. Select Paste Special and click on Divide. Click on the Paste button. The values in the target range will be divided by the corresponding values in the transformation range to give 5, 5, 5, 5, 5. Page set-up Whenever you open a new file in Spreadsheet, it is given a default set of margins. To change these defaults for the current spreadsheet, select the Page Setup command from the File menu. The “Page Setup” dialog box is displayed. Here’s how the different Margin and settings affect your page: 143 Spreadsheet As the diagram above shows, all the measurements are from the edge of the page. The header and footer sit within the top and bottom margins respectively. So if your top margin is too small, you won't see all your header text. To control the margins for header and footer, select Header & Footer from the Format menu. Enter a value in the From edge box in the header and footer tabs. If you want to set new default margins for all subsequent spreadsheets then select Options from the Tools menu and click on the Page Margins, Header and Footer tabs. The new default settings will not affect existing spreadsheets or the current one if its settings have already been altered. Note: To change the units of measurement used, select the Options command from the Tools menu and click on General. You have a choice between S.I. and Imperial units. Headers and footers You can add information, such as a spreadsheet title and page number, that will appear at the top and bottom of every page when you print the spreadsheet. Text that appears at the top of every page is called a header; text at the bottom is called a footer. To print the header, you need to leave enough space between the top of the spreadsheet and the top of the page so that the header text can fit into it, bearing in mind the fonts you have used. The same applies to footers. The defaults Ability uses will fit most header and footer definitions. You can fine-tune these dimensions in the "Header and Footer" dialog. 144 Spreadsheet Adding a header and footer To add a header and/or footer, select the Header & Footer command from the Format menu. The “Header & Footer” dialog appears. To create a header click, on the Header button in the dialog; to create a footer, click on the Footer button. The “Header & Footer” dialog contains three boxes to set up the header and footer information. You can type any text you like into these boxes. Text in the Left box will start printing at the left margin, text in the Right box will end at the right margin, and text in the Center box will appear in the middle. Use the Font button to set the font for each individual header or footer area. You can have Ability insert information automatically. Position the cursor in the box where you want the text to appear and then: Click on this button... To... Using this code... Page Number Insert the current page number at print time. &P File Insert the name of the spreadsheet file. &F Time Insert the time the spreadsheet was printed. &T Date Insert the date the spreadsheet was printed. &D When you select one of these buttons, Ability inserts a code in the dialog box instead of the actual text (since the text changes depending on the current time and date and the number of pages and name of the spreadsheet). You can delete the codes (or add them by typing them directly) in the same way as you can edit any other text. If you want to change the default margin between the top and bottom edges of the paper and the header and footer respectively, then click on the From edge box, delete the default setting and type in the new margin in each case as required. This will change the settings for the current spreadsheet. If you want to set a new default for all spreadsheets then select Options from the Tools menu. Click on the Headers or Footers button in the "Options" dialog. Change the default From Edge setting as required. Note that this changes the setting for all subsequent spreadsheets but not for existing spreadsheets or the current one if it has already been altered in the Headers & Footers dialog under the Format menu. 145 Spreadsheet The First Page box tells Spreadsheet from which page it should begin printing the headers and footers. The default is 1, which you should replace as required. If you want to create a footer as well as a header, then click on the Footer button and create the footer in the same way as you created the header, before selecting OK to save the new settings. Freezing sections of a spreadsheet As you fill more and more rows of a spreadsheet, the top rows move up and out of view. Therefore, if you've put titles in a row, they move up out of view too. Similarly if you've put titles in a column, they move out of view as you fill more and more columns to the right. You can use the Freeze command to freeze particular rows, columns and ranges. When you freeze a spreadsheet, the frozen part remains visible on the screen as the rest of the spreadsheet moves out of view. To freeze a row or several rows: 1. Select the rows using the row bars to the left of the row. 2. Select the Freeze command from the Window menu. The frozen rows will move to the top of the screen and stay visible no matter where you are in the spreadsheet. You can freeze columns in the same way by first selecting the columns you want to freeze. To freeze rows and columns in one go, first select the intersection of the rows and columns to be frozen. For example, suppose you want to freeze the first three rows and columns A and B, follow these steps: 1. Select the range A1..B3. 2. Select the Freeze command from the Window menu. Note that you can exclude rows and/or columns from those that are displayed by excluding them from the selection. In the above example, if the range A2..B3 were selected instead, row 1 would not be visible. Also note that the effects of freeze will go through to print time as well - you can use it to make sure each page has the same row and/or column repeated at the top or left side. To turn off the freeze, select the Unfreeze command from the Window menu. 146 Spreadsheet Splitting a spreadsheet It is possible to split the spreadsheet screen into vertical or horizontal sections. These sections are different views of the same spreadsheet and not separate spreadsheets. The advantage of this is that when a spreadsheet contains a large amount of data, you can view data that would normally be off-screen in one section, while working with the data of your choice in another section. To split the screen horizontally, depress and hold down the left mouse button over the bar attached to the vertical scrollbar. A horizontal axis will be displayed. Move this to where you want the screen to be split and release the mouse button. To split the screen vertically, depress and hold down the left mouse button over the bar attached to the horizontal scrollbar. A vertical axis will be displayed. Move this to where you want the screen to be split and release the mouse button. Both horizontal and vertical splits can be applied at the same time to the one spreadsheet. Scroll through the views as required, till you have located the data you want to remain visible on screen while you are working. You can choose to work in any or all of the sections, since anything you add, edit or delete in a particular section applies to the whole spreadsheet. To clear a horizontal or vertical split, just double-click on one or both of the axes as appropriate. You can also use the Split command from the Window menu to split the screen. Printing You can print the whole of the document you are working on, or only certain pages. You can also print to a file rather than to paper (perhaps for taking to a professional print bureau). The following sections explain print set-up, print preview, and how to print a spreadsheet. Print preview Before starting to print, you might like to see how your document is going to look on paper. To do this, click on the Print Preview button the File menu. on the toolbar or select it from The display switches to print preview mode, in which the document is shown at a reduced size to give you an overall view. 147 Spreadsheet Print set-up To choose which printer, paper size and orientation you want to use and which bin you want the paper to feed from, select the Print Setup command from the File menu. The “Print Setup” dialog box is displayed for you to select the relevant settings. In addition, there are scaling and print-to-fit options available. These help you to control the appearance of your spreadsheets when they are printed. Set up the scaling options in the Scaling section as follows: • Select the Adjust to button to reduce or enlarge the printed spreadsheet by percentage of the normal size. Set the percentage in the % normal size box by either typing it directly or using the scroller. • Select the Fit to button to make the printed spreadsheet fit onto a specified number of pages. Enter the required pages, by width and height, in the accompanying boxes (or use the scrollers). Typically, if you want to fit the spreadsheet onto 1 page, leave the boxes set at 1 for both width and height. Click on OK once you have selected your print settings. Printing the spreadsheet To print the spreadsheet, click on the Print button on the toolbar or select the Print command from the File menu. The “Print” dialog box is displayed. The active printer is displayed at the top of the dialog box. To change this, click on the arrow at the right of the Name box and scroll through till you find the printer you want. In the Print range group box, you can specify how much of the spreadsheet you want to print: All Prints the entire spreadsheet. Pages Prints the range of pages you specify in the from and to boxes. Selection Prints the selected cells only. Check the Print To file box to create a new file on disk, instead of sending the document to the printer. You will be prompted to give the file a name. Type the number of copies you require in the Number of copies box and leave the Collate box checked if you want the pages to be printed in sequence (rather than all page 1s, then all page 2s, and so on). If you want to select further properties click on the Properties button. The properties are printer dependent and therefore vary from printer to printer. 148 Spreadsheet When all is set, click on the OK button and the printing process will commence. There will be a pause while the information is sent to the printer, and then the physical printing will begin. Ability will divide your spreadsheet into pages, left to right and top to bottom. If you find, for example, that page 2 and 4 print out with a single column, and you really wanted to fit the entire spreadsheet onto two pages, either reduce the width of one or more columns or reduce the left and right margins (and then check with print preview). Note: If you don’t want the grid to print out, select the Grid command from the View menu to turn the grid off prior to printing. Spell-checker and thesaurus The Spell-checker and Thesaurus are both available from the Tools menu. They operate in Spreadsheet in the same way as they do in Write. See Spell-checker and thesaurus in Write on page 53 for more details. To change the way spell-checker and thesaurus work, select the Options command from the Tools menu and then select Spelling & Thesaurus. Click on the checkbox next to Always suggest to ensure that the spell-checker always suggests alternative spellings for words it does not recognize. Click on the checkbox next to Use only main dictionary if you do not want the spellchecker to take account of any words that you might have previously added to the dictionary yourself. You will usually want to leave this box unchecked. The main dictionary is the original dictionary that is supplied with Ability. The User Dictionary contains any words you might have added and is kept separate from the main dictionary. This can be edited by clicking on the button to the right of the box and then opening up the file from the Open dialog that appears. Language is the form of English used in the dictionary i.e. American or British English. You can choose to have automatic spell checking by clicking on the Auto recognize spell errors box. This works as you type and immediately tells you if the dictionary does not recognize a word, by showing the word in the color you have chosen from the Spell error text color box. Autospell Autospell is a quick way of automatically checking a spreadsheet document for spelling mistakes, as you work, and correcting these on the spot. To activate Autospell right click on the box second from the right on the status bar. Clicking on Auto Recognize will cause Ability to display in red any words that it does not recognize. To add an unrecognized word to the User Dictionary or to examine suggested corrections, you should first select the cell containing the word and then right click on the 149 Spreadsheet Autospell box again. The Add option adds the word to the dictionary. If Ability can find any suggestions, these will be displayed at the top of the Autospell menu. Click on one of these if you want it to replace the word in red. Auto Recognize will stay switched on until you switch it off. You can also check for spelling mistakes by using the Spelling option. This goes through your document searching for errors and brings up a dialog whenever an error is found. Here you are able to change or ignore the word or add it to the dictionary. Spelling operates only when you select it and is closed down when you exit the dialog. Default settings Whenever a new spreadsheet is created, certain defaults are applied. For example, the font might be 9pt Arial and the background color white. Although you can always change these for individual spreadsheets, it's useful to be able to set them for all new spreadsheets as well. Select the Options command from the Tools menu. The “Options” dialog box is displayed. In most cases, each tab of this dialog works in a similar way to the equivalent command from the Format menu - but as well as changing the current spreadsheet, the global defaults for all new spreadsheets are set. You can read about the available options and how to set them in the following sections. • General − spreadsheet size, units of measurement, trailing/leading formats (see General options on page 89) • Font − fonts and styles (see Using the menus to select cell font and style on page 104) • Color (see Selecting the background color on page 111) • Header & Footer (see Adding a header and footer on page 144) • Page Margins (see Page setup on page 72) • Spelling & Thesaurus (see Spell checker and thesaurus on page 53) • Custom Lists (see Custom lists on page 150) General options To modify the General page of the Options tab, select the Options command from the Tools menu and then select General. Set any of the following as defaults for all new spreadsheets (as well as the current one): 150 Spreadsheet • Spreadsheet size (the maximum setting is 256 columns and 65536 rows) • Column width and row height • The list of leading and trailing characters e.g. currency symbols • Zoom, view grid and view page breaks • Unit of measurement, Autocalc and Undo Custom lists To modify the Custom Lists page of the Options tab, select the Options command from the Tools menu and then select Custom Lists. Ordered lists are, typically, days of the week or months, and are automatically filled in on drag-copy of a cell containing a member item. For example, enter "Jan" in cell A1 and use drag-copy to fill A2 to A12 with the remaining months. • In the Custom Lists box, select an ordered list for editing or removal. Use NEW LIST to create new custom lists. • The List Entries box displays individual items from the current ordered list. You can edit the items in this list, or add new ones (use Ctrl-Enter to create new line). To save the modifications, click the Modify button. • To create a new list, make sure NEW LIST is selected in custom lists, add some items in List Entries and click the Add button. • To remove a list select it in the Custom Lists box and click on the Remove button. 151 Chart Chart Chart lets you plot a series of numbers from a spreadsheet. There is a wide range of chart styles to choose from; multiple series can be plotted and 3D views created. The resulting chart can be saved in a separate window, attached to the spreadsheet, or inserted into the middle of a spreadsheet. A single spreadsheet can contain, or have attached, many different charts. You can insert charts into Write documents and, since Spreadsheet can display information from database tables, chart information from databases. Creating a chart To see how to create a chart, look at the following example. The data shows the output of raw materials over four months and includes both row and column titles. To create a chart from this data: 1. Select the range A1..E4. 2. Select Chart from the Insert menu. 3. Choose On This View to insert the chart into the current spreadsheet or As New View to create a new window that is attached to the spreadsheet (see Attached charts on page 157 for more details). 4. Follow the steps in the chart wizard. The chart wizard will prompt you for the following: • Data − in this case, A1..E4 - does the series run down with the data points across, or vice versa? (see Data range on page 155) • Style − choose from bar chart, pie, x/y plot, and so on. (see Style on page 152) • Titles – what title text to display • Legend – for multiple series, display a legend or not 152 Chart • Series – series attributes Once these options are created, you can modify any of them using the Chart toolbar and Chart dialog, and further modify the way the axes are drawn and how the background of the chart is drawn. Style To change the style of chart, whether you want to display a pie, bar, or other type of chart, right-click over a chart and select the Style command from the menu. • Category. Select a chart category - for a brief description of each chart type, see Gallery of chart styles on page 152. • Style. Pick from the styles offered for a particular category. • Border and Shadow. Choose from a range of border styles – none, single line, with or without shadow effects. Note that the border applies to the chart and not the background, which can be set separately. • Fill style – color and gradient fill for the body of the chart. • Font – used for drawing the values on the axis. Gallery of chart styles The different chart styles are arranged under these categories: Column Plots a column for each data point in a series. Bar Plots a horizontal bar for each data point in a series. Line Plots a point for each data point in a series and connects the series with a line. Pie Plots the percentage values for the data points in a series, using a pie chart. If there is more than one series, only the first series is charted. XY (Scatter) Plots a set of points using a column (or row) of values as the Xvalues and the values from another column (or row) as the Yvalues. See More on scatter charts on page 153 . Area Joins the data points in a series with a line and shades the area under this line. 153 Chart Stock Plots the extent of the range of values in a series, where the values plotted are the highest, the lowest and the closing value and opening values. See More on stock charts on page 154 . Strata Cumulative bar charts Radar Plots a point for each data point in a series along an edge terminating at a pole, where each data point in the series has its own edge. Bubble Plots points similar to XY (Scatter) charts. Bubble charts take a third column that plots the size (by area or radius). To create a Bubble chart, you'll need three columns of data. Vector Plots points similar to XY (Scatter) charts. Takes two further, relative, points and plots a line showing scale and direction. To create a vector chart, you’ll need four columns of data. Scatter charts: example The following is an example of a scatter chart. You wish to chart the performance over 2 hours of two backup systems you have been testing, where the results are as they appear in this table: Time (Mins) Backup 1 (%) Backup 2 (%) 0 0 0 30 23 15 60 59 34 90 84 59 120 98 74 Scatter can be used to plot the backup performance for both systems, measured against the Y-axis, against the time, measured against the X-axis. 154 Chart Hi-Low-Open-Close charts: example Hi-Low-Open-Close charts are very similar to Candle charts. Both take four points for a data series a high, low, opening and closing value. The difference is that a Candle chart displays the open and close values as a rectangle and the High-Low-Open-Close as a step. The following is an example of a Candle chart. Assume a record of the temperature in central London, between 12 a.m. and 3 p.m., on July 31st, over a period of 5 years can be tabulated as follows: Date High Low Open Close 31/7/93 29 26 28 26 31/7/94 33 30 31 32 31/7/95 29 26 27 29 31/7/96 35 31 34 33 31/7/97 33 24 30 30 The vertical lines in the chart show the extent of the High-Low difference; the horizontal bars show the extent of the Open-Close difference: 155 Chart Note that if the Close value is less than the Open value, the Open-Close difference is shown in dark blue. If they are equal, a line is drawn. Hi-Low-Close charts are especially useful for charting the highs and lows of daily share prices, as well as showing their closing value. Note that in the above example, Chart assumes that the date column contains data, since dates are ultimately represented as numbers by Ability. Therefore make sure you switch First Column (or First Row where appropriate) to Labels. See Vertical and horizontal series on page 156 for more details. Data range To change the data range Chart is to plot, or to alter the way the series will run, right-click over a chart and select Data Range from the menu. Set any of the following: • Data. This is the range, including series and data point titles. Usually this will be done by first selecting the data before entering the chart wizard. Suppose instead that you need to exclude certain series. For example, in the sheet below, you want only to plot the results for Cobalt. In Data, separate the ranges using commas as follows: A1..E1, A3..E3 In a similar way, you can plot discontinuous data by entering a series of values like: B2, D3, E3, E4 • Series run in. Treat each data column (when set to Columns) or data row (when set to Rows) as a series of values of a variable. See Vertical and horizontal series on page 156 for more details. • First Column contains. In the example below, the first column of the data range (A1..E4) obviously contains labels rather than data. If the first column had contained numbers that you wanted treated as labels rather than as data, this option would need to be set to Labels. 156 Chart • First Row contains. Determine whether the first row contains labels or data in the same way as for First Column. Vertical and horizontal series Using the following example data: with Series Run In set at Rows, there are three series, namely Iron, Cobalt and Copper, each of which has a set of associated measurements or data points. The data points are the measurements for April, May, June and July. The different series are assigned different colors, which are maintained for each data point that is plotted throughout the chart. The data points are plotted measured against the scale along the left-hand axis (the Y-axis): To plot the chart with the months as series and the values for the metals as the data points, switch the Series Run In setting to Columns. There will now be four series, namely April, May, June and July, each with three associated data points: 157 Chart Editing a chart Use the Chart toolbar to edit your chart. The toolbar becomes visible whenever you select a chart (i.e. click on it). Use the toolbar to arrange the elements (legends, titles, chart area) within the chart. Select the element you want to resize or reposition from the chart drop-down box and drag and drop the element anywhere on the chart or resize using the handles. You can go to any of the pages on the Chart dialog directly – right-click over the chart and select any of the menu options to open the dialog at the appropriate page. Attached charts When creating a chart, you are given the choice whether to insert the chart into the current spreadsheet window (On This View) or into another window that is connected to the current spreadsheet (As New View) - see Creating a chart on page 151. If you choose On This View, the chart will be embedded in the current spreadsheet and will remain visible in the spreadsheet as you work. You can resize and move an embedded chart (see Resizing and moving an embedded chart on page 158). If you choose As New View, the chart will be occupy a new worksheet. 158 Chart Resizing and moving an embedded chart Once a chart is embedded in a spreadsheet you can edit, resize or move it. Move the chart by holding down the left-hand mouse button when the cross cursor is showing over the body of the chart. A chart outline will be displayed. Drag this to where you want the chart to appear and release the mouse button. The chart will be displayed in its new position. Resize the chart by clicking on it, pointing at one of the handles and holding down the left-hand mouse button when the cursor changes to a double-headed arrow. An up-down arrow is displayed along the top and bottom borders; a left-right arrow along the left and right borders; and a diagonal arrow at the corners. You can use these to increase or decrease the height, width, or height and width together of the chart. Drag the border till it is the size you require and then release the mouse button. The chart will be displayed with its new dimensions. Deleting a chart from a spreadsheet To delete an embedded chart from a spreadsheet, click on the chart once to select it and then press the Del key. To delete a separate chart sheet, right-click over the chart name (on the worksheet selector at the bottom of the screen) and select Delete. Printing a chart Printing is simply a case of printing the worksheet containing the chart. Select the Print button from the toolbar or the Print command from the File menu. 159 Database Database A database is a collection of information or data. At its simplest, a database can be a list of names and phone numbers, forming a personal phone book. Ability stores such lists in tables. Tables can be: • combined to form relations • arranged in various ways to create queries Queries are themselves formed from query components: • Sort Orders • Column Views • Filters In turn, you can view a table, relation or query in one of three ways: • Grid view • Form view • Report view A single database then, is a collection of one or more tables and all the associated queries and relations, which can be viewed in grids, forms, and reports. The Ability database provides an easy environment to manage all your data requirements. The following sections explain the meaning of basic database terminology in greater depth. What is a table? Tables are the fundamental database objects. It is here that your data is stored. A table is arranged in rows and columns. A table may be used, for instance, to store the names and associated phone numbers from your personal phone book. Each row will contain all the data for one entry in your phone book, and is called a record. Each column will contain one item of data for all entries in your phone book, and is called a field. Since tables are the fundamental database objects, deciding what tables you need is always the first step in designing a database. 160 Database Tables are used to contain information and data that can be structured according to a similar format. Typical examples of tables are: • mailing lists • inventory lists • customer lists • product lists • medical records • league tables For more information on tables, see Creating fields in a database on page 189. What is a relation? Tables may be related to one another - an invoice table naturally combines information from a customer table and a product table. In this case, the invoice table is called a relation. You can create a relation from selected fields from related tables. The relation then becomes a table in its own right, albeit dependent on the tables from which it is formed. For more information on relations, see Creating a relation on page 229. What is a query component? You can arrange the data from a table in a number of ways: • Sort Orders - sort the table by one or more columns • Column Views - choose the columns to display and their display order • Filters - define conditions to include only specified records Ability calls these different arrangements of your data query components. You can use the query components individually or collectively in queries. For more information on query components, see Query components on page 164. What is a query? A query is a table that has been constructed out of one or more query components when these have been applied to an underlying table. Queries enable you to combine various sort orders, column views and filters, which can all be applied at once to a specified table. For more information on queries, see Queries on page 224. 161 Database What is a table view? Whether you’re working with a table or query or relation, you can choose between three different on-screen views: • grid view - displays the table in a grid with rows and columns • form view - each record occupies the entire window for easy editing and allows for custom layout of the screen • report view - the data is arranged in a format suitable for printing, and also allows for a custom layout. Grid view can be regarded as the natural way to view a table, since we usually think of tables as being arranged into rows and columns. Accordingly the term table will often be used to refer to a table when in it is in grid view. Nevertheless the table itself is distinct from any of the ways of viewing it. For more information on the different ways of viewing your tables, see Grid view on page 197 Form view on page 232 Reporting on page 250 Starting Database To start Database, do one of the following: • Click on the Start button, select Programs, Ability Office and then Ability Database. • Click on the Database button on the toolbar of any open Ability application. • Click on Database in the Ability Launcher. For further details, see The Ability Launcher on page 30. The Ability Database window is opened. Opening a database To open a database, follow these steps: 1. Click the Open button menu). on the toolbar (or select Open Database from the File 2. Make sure Files of type shows Ability Database Files (*.adb) 162 Database 3. Use the Look in box to locate the folder in which the database is contained. Once the folder has appeared in the main box, open it by double clicking (or clicking on Open). 4. Open the database itself by double clicking on the database name (or clicking on Open). 5. Ability will open the database and display the Database Manager. Database Manager Whenever you open a database, the database is displayed in Database Manager. Database Manager is where you manage all the objects in your database, that is to say, all the tables, relations, queries, forms and reports that make up the database. You can use it to create, delete, restructure and open all of these database objects. In addition, you can import (see Importing tables on page 266) and export tables (see Exporting tables on page 266) while in Database Manager. To view the Database Manager, should some other window obscure it, select Database Manager from the View menu. Database Manager lists all the database objects in a tree structure - individual branches can be opened and closed, revealing more detail as required. 163 Database To open a branch, click on the ‘+’ sign before the database object name. ‘+’ will change to ‘-‘, and back again with a further click. Here’s an expanded view of a sample database: Closing a database To close a database you should first close any tables you are working in. This will return you to Database Manager. Close the database by selecting Close Database from the File menu. Once the database is closed the command will be grayed out. Some commands require you to close a database before they will work, for instance, Repair Database. You can close the Database Manager screen by clicking on the button at the top left of the Database Manager and selecting Close from the menu. This merely closes the Database Manager, not the database itself. To display the Database Manager again, select Database Manager from the View menu. 164 Database Query components A query component is a particular arrangement that you apply to a table. The query components are of the following type: • sort order • column view • filter They are always attached to a table and are listed beneath each table in Database Manager. Using the query toolbar, you can always choose combinations of query components wherever you make use of the table - this could be in a form or report, or in Write and Spreadsheet. Relations can have associated query components in the same way. Imagine a Wineshop database that contains several tables. Each table can have several named entries underneath - the query components. These are grouped according to whether they are Column Views, Sort Orders or Filters. For example, an Employee table might show a Column View - “Name & Address”, two Sort Orders - “By Age” and “By Name”, and a Filter - “UK Employees”. These are all different ways of viewing the data contained in the Employee table. You can use combinations of these query components to view only certain columns from selected records of a table, and in a particular order. For example, you can filter the Employee table using "UK Employees", viewing only the columns defined by "Name & Address", in an order determined by "By Name". You can also save combinations of query components as a named Query, which can then be applied whenever you like (see Queries on page 224). See the following sections: Rearranging columns using a columns selection on page 212 Hiding and showing columns using a columns selection on page 214 Sorting using a sort order on page 216 Filtering using a named filter on page 219 165 Database Opening a table To open a table, do one of the following in Database Manager: • Double-click the table name to make all rows and columns available • Double-click a named query component belonging to a table to open the table and apply the selected sort order, column view or filter • Right click on the table name or named query component belonging to the table and select Open. Moving around a table There are four ways to move around the table: • Use the mouse to click into any visible field directly. • Use the horizontal and vertical scrollbars - with them you can reveal any part of the table, but the cursor won’t reposition until you click into a field. • Use the Record toolbar above the top of the table window. There are buttons for , last , next and previous moving to the first options are available from the Record menu. records. The same • Use the Record scroll bar at the bottom left of the table window. • Use the keyboard as follows: Key Description up, down, left & right arrow keys The arrow keys move the cursor one field at a time in the direction of the arrow home Edit the current field and move to the beginning of the field. end Edit the current field and move to the end of the field. ctrl + left Moves the cursor to the first field in the current record. ctrl + right Moves the cursor to the last field in the current record. ctrl + up Moves the cursor to the first record in the current field. ctrl + down Moves the cursor to the last record in the current field. ctrl + home Moves the cursor to the first record and field. ctrl + end Moves the cursor to the last record and field. tab Moves the cursor one field to the right. 166 Database shift + tab Moves the cursor one field to the left. Creating a new database To create a new database: 1. Select New Database from the File menu or click on the New button toolbar. on the 2. The "Create a new database" dialog is displayed. The Save as type box should automatically be set at Ability Database Files (*.adb). In the File name box, type the name of the new database. Don’t worry about a file extension − this will automatically be added by Ability. 3. Before clicking the Save button, select the folder you want to save to in the Save in box. After saving, the dialog is closed and the Database Manager (see page 162) window is displayed. A database tree is created for the new database and you are now free to create the tables, queries, relations, reports and forms that are to go into it. Designing a new table To create a new table, do one of the following: • Right-click anywhere in the Database Manager window (see Database Manager on page 162) and select New and then Table from the displayed menu. • Select New and then Table from the File menu. The "New Table" dialog is displayed. This contains a Table Wizard option and a Blank Table option. The Table Wizard enables you to choose pre-designed fields from a selection of tables that come as part of the Ability system (the system database is called abdata.adb and is the equivalent of a database template). See Creating fields in a database using Table Wizard on page 190 for more information on using Table Wizard. • Click on the Blank Table button. The “New table” design window is displayed. The design window is where you create the structure of your table. This is the framework in which you will store your data, so it is worth spending time at this stage planning how you will use the table and deciding what fields you will need (see Planning field details on page 167). • Each table will contain one or more fields. For each field you need to assign a name in Name (see Field names on page 168) and a data type in Type (see Field data types on page 169), these being compulsory. • 167 Database In addition, each field can be given an optional summary description in Description. After setting these you can format a field to give it a caption (see Captions on page 64) and a default value, these being optional. The fields can also be formatted for such properties as width, validation, justification, number type, etc. depending on the data type of the field. For full details of how to create the fields for a new table, see Creating fields in a database on page 189. Planning field details • It is very important that you plan your table design in accordance with the table’s intended purpose. This sounds too obvious – and it is, which is why it is so often overlooked. Think in terms of the information you will want to be able to extract from the table in a week's time, a month's time, and a year's time. • If it is likely that you will not be the only user of the table, talk to others who may be expected to produce useful, efficient work with your design. They may operate in slightly different ways to you and their experience will be a useful supplement to your own. Basically, a clear idea of the potential functions of your database should guide you in its design. • It is recommended that you sketch out the design for your table on paper, in row and column layout, with field names at the head of each column. Pencil in a few rows of data to confirm that you have made allowance for all the relevant data items you need. If not, just add some more columns and field names in a second sketch, and repeat the process until you have established fields for all required data items. • Consider also, at this point, the order of the columns. If you have a large number of fields, it is usually better to keep all the most commonly accessed columns to the left of the layout. In this way you will minimize the need to scroll the table window left and right to enter, edit or view your most important data. You will however be using Query files to see many different views of your data, each with only the columns you want, arranged in the order you require for a particular purpose. • Once you are satisfied with the overall layout of your table, and have allocated meaningful field names to your columns, you need to determine the properties of each field. Typically these will include the type of data that a field is to contain, such as text or numbers; whether the records in your table are to contain any default data; the width of the fields; and so on. See Creating fields in a database on page 189. 168 Database Field names Each item of information or data you wish to store, manipulate or extract using Ability, must be uniquely accessible by the entire Ability system. Ability does this by calling on the address of the data, whose location is identified by the database title, table name, field name and record number. You specify the field name in the Name cell. It is usually helpful if it is easily identifiable by you as well, a year or two after you created the table, so make the name relatively descriptive. For example: first_name last_name The underscore character is often used as a link between words. These examples could be reduced in length without losing any clarity. For example: FirstName and LastName or fname and lname This will save typing effort if later on you use these field names in computed fields or in links with other Ability applications. Note: The following rules should be observed with regard to field names. They can be up to 64 characters long, and contain any mixture of letters, numbers and underscores. They cannot contain spaces, periods, commas, colons, brackets, slashes or other punctuation marks, nor can they contain hyphens, dashes or ASCII characters. The names of pre-existing functions, such as “Sum” or “Title”, are also inadmissible. The following are all legitimate field names: bank_account BankAccount bankaccount bank_acc bank_acc_1 BankAcc1 For more details of how to create fields in a database, see Creating fields in a database on page 189. 169 Database Data types Ability understands many types of information: • textual • numeric • date • time In addition to these basic data types, Ability can also work with: • Large blocks of text: comments and memorandums • Automatically incremented numbers: invoice numbering, membership registration. • Automatically calculated formulas: cost equals unit_price multiplied by quantity. • Predetermined lists of valid entries: {yes | no | pass}, {Green | Blue | Brown} • Predetermined logical entries: {yes | no}, {true | false}, {1 | 0} • OLE objects: pictures, graphics files, other file formats Ability recognizes that all of these different types of information have unique requirements for data entry, storage and formatting. When you create a field in the design window, you must choose one of the ten standard data types, and appropriate formatting for the type of field (see step 3 of Creating fields in a database on page 189). As the most common type of field, the Character data type is the default. The following sections explain the various field data types (Character, Numeric, Date/Time, Memo, Incremental, Calculated, Logical, Enumerated, OLE) and their associated formatting properties. Character data type A field with Character data type (see Data types on page 169) can contain any characters – letters, numerals or symbols. You can enter up to 255 characters, which includes multiple sentences, but only one paragraph. If, during data entry or when editing, the amount of text you type into a character field exceeds the column width of the display column, Ability scrolls the field box to show the text as you type it. You then need to adjust the width of the field by dragging the right edge of the bar at the top of the column (hold down the left-hand mouse button to do this). 170 Database The formatting properties available on the General page in the Format dialog are: • Width (this is the number of characters allowed in the field, not the column width, up to a maximum of 255 characters - the default is 50) – see Character field size on page 170 • Initial Value (enter a default value that will automatically appear in this field every time a new record is created, unless another value is entered instead of it − see Initial value on page 189) • Caption (enter a caption to replace the field name above the column in Table View − see Captions on page 64) • Validation Rule (set a rule to validate possible data entries − see Validation rule on page 186) • Validation Text (write a display message for cases of invalid data − see Validation text on page 187) • Required (when checked a value is required in field − see Required property on page 188) • Allow Zero Length (allows zero-length string in field − see Allow zero-length property on page 188) • Index (choose from Primary Key, Indexed, No Index & Indexed (Unique) − see Indexes and primary keys on page 191) The formatting properties available on the Format page are: • Case (Mixed, Upper & Lower - the default is Mixed) • Mask (various options that control the pattern for certain types of data, such as telephone numbers and zip (post-) codes). See Masks in database fields on page 171. Character field size If you examine any initial paper sketch of the design of your table, produced in the planning stage, you will notice how some columns have plenty of white space and others are densely packed. Real data rarely conforms to an idealized table with evenly sized columns. Those densely packed columns are probably text fields. It is a good design principle to decide, for each separate text field, the number of characters required to accommodate the largest individual item of information likely to be entered. Write this figure down for each of the text fields. The maximum size of a standard text field is 255 characters. For larger quantities of textual information you may need to use a memo. See Memo on page 177. 171 Database The other non-character data items in your table design will not require a specific field size to be entered when you create the table. Ability has built-in defaults to make table creation as easy as possible for you. Masks in database fields A mask is a field formatting property that determines the pattern of data entered into a field and controls the type of data allowed. A typical example is an invoice number, which is usually a combination of letters and numbers in a set order. An appropriate mask helps data in-putters follow the convention defined by the mask. Masks are used in conjunction with the Character field type (see Character on page 169). There are three default masks provided with Ability. These are: • ###-##-#### (Social Security Number) e.g. 456-23-9847 • (###) ###-#### [####] (Phone) e.g. (447) 756-1252 [4589] • #####-#### (Zip Code) e.g. 67845-6564 To choose one of these when formatting the field (see step 3 of Creating fields in a database on page 189), click on the arrow at the side of the Mask box on the Format page of the “Format Field” dialog. You can, however, create your own masks, using the following codes to determine whether to allow numbers, letters, other characters, or combinations of any of these: • # (number) • & (all standard keyboard characters) • A (numbers and upper and lower case letters) • ? (lower or upper case letter) • U (upper case letter) • L (lower case letter) All of these can be left blank when filling in the mask. The mask can be formatted to contain, between the codes, any characters that are not in the above list, for example, . , ; : ( ) [ ] { } / \ < > a b c 1 2 3 and all the other characters on your keyboard except for #, &, A, ?, U, L. Example You can create a mask that will take invoice numbers of this form: 172 Database (ABC)-[12345 a] Type the following in the Mask box of the “Format Field” dialog when formatting the field (see step 3 of Creating fields in a database on page 189): (UUU)-[##### L] Note that the two types of bracket, the hyphen, and the space, constitute the basic structure of the mask. U will accept upper case letters, # numbers, and L lower case letters. If you try to enter data not allowed by the mask you will not be allowed to proceed. Numeric data type A field with Numeric data type (see Data types on page 169) can contain a variety of numbers, including ones with decimal places. The formatting properties available on the General page are: • Width (choose from Byte, Integer, Long, Currency, Single, Double − the default is Long − see Width properties in numeric fields on page 175) • Initial Value (enter a default value that will automatically appear in this field every time a new record is created, unless another value is entered instead of it − Initial value on page 189) • Caption (enter a caption to replace the field name above the column in Table View − see Captions on page 64) • Validation Rule (set a rule to validate possible data entries − see Validation rule on page 186) • Validation Text (write a display message for cases of invalid data − see Validation text on page 187) • Required (when checked a value is required in field − see Required property on page 188) • Index (choose from Primary Key, Indexed, No Index & Indexed (Unique) − see Indexes and primary keys on page 191) The formatting properties available on the Format page are specifically connected with the various types of number − see Number formats in database on page 173. 173 Database Number formats in database Whenever you set a numeric data type for a field in a table, you will need to select which number format to use. Number formats are set on the Format page of the “Format field” dialog (see − Numeric on page 172). There are five number types: Number, Currency, Percent, Fraction, and Scientific. Each of these has an associated set of options, which are displayed and can be set when you click on the relevant number type. For information on the each of the number types and their associated options, see the following: Number format on page 173 Currency format on page 174 Percentage format on page 174 Fraction format on page 174 Scientific format on page 175 Number format 1. Select Number from the list. 2. In the Decimal Places box, specify the precision of the number. You can have a minimum of 0 and a maximum of 15. 3. Select the Thousands with Commas checkbox for comma formatted numbers i.e. 1,345,622 rather than 1345622. 4. Select the Negatives in Brackets checkbox to enclose negative numbers in brackets i.e. (123456) rather than -123456. 5. Select the Negative in Red checkbox to display negative numbers in red font. 6. In the Trail/Lead String option you can choose to have either trailing or leading characters. Enter your text in the text box or choose from the existing group ($, £, DM, cm, kg, etc.). You can create your own number formats, including alternative currency formats. Here are some examples: 1.2 $bn FFr 23.56 174 Database DMarks 2.36 7. Check that the options you have chosen are correct by glancing at the Preview box and then click on OK. Currency format 1. Select Currency from the list. This will prefix the number with the currency symbol. 2. In the Decimal Places box, specify the precision of the number. You can have a minimum of 0 and a maximum of 15. 3. Select the Thousands with Commas checkbox for comma formatted numbers i.e. $1,345,622 rather than $1345622. 4. Select the Negatives in Brackets checkbox to enclose negative numbers in brackets i.e. ($123456) rather than -$123456. 5. Select the Negative in Red checkbox to display negative numbers in red font. Note: The currency symbol used by Ability is taken from the Regional settings in the Windows Control Panel. Percentage format 1. Select Percent from the list to display numbers as percentages e.g. 1 as 100%, 0.3 as 30%. 2. In the Decimal Places box, specify the precision of the number. You can have a minimum of 0 and a maximum of 15. 3. Select the Thousands with Commas checkbox for comma formatted numbers i.e. 1,345,622% rather than 1345622%. 4. Select the Negatives in Brackets checkbox to enclose negative numbers in brackets i.e. (123456) rather than -123456. 5. Select the Negatives in Red checkbox to display negative numbers in red font. Fraction format 1. Select Fraction from the list to display numbers as fractions e.g. 0.5 as ½, 2.5 as 2½. 2. In the Display as box, specify the precision of the fraction. You can choose from Auto, which will display the most accurate fraction possible in Ability, to 4ths, that is the number will be rounded to the nearest ¼ fraction. 175 Database 3. Select the Thousands with Commas checkbox for comma formatted numbers i.e. 1,345,622 rather than 1345622. 4. Select the Negatives in Brackets checkbox to enclose negative numbers in brackets i.e. (2½) rather than -2½. 5. Select the Negatives in Red checkbox to display negative numbers in red font. Note that with the Fraction format you should set the width to either Single, Double or Currency to take account of the fractional part of a number i.e. the digits to the right of the decimal point. Fractions cannot be expressed in a field with Long width, since this can only contain numbers without a decimal part. Scientific format 1. Select Scientific from the list to display numbers in scientific form e.g. 2.5E+003 rather than 2500. 2. In the Decimal Places box specify the precision of the number. You can have a minimum of 0 and a maximum of 15. Width properties in numeric fields The Width formatting option for numeric fields (see Numeric data type on page 172) determines how large a number the field will accept. The options are as follows: Byte The field will accept numbers from 0 to 255 Integer The field will accept numbers from -32,768 to 32,767 Long The field will accept numbers from -2,147,483,648 to 2,147,483,647 Currency The field will accept standard currency formats, including decimal places and currency symbols Single The field will accept negative numbers from -3.402823E38 to -1.401298E45 and positive numbers from 1.401298E-45 to 3.402823E38 Double The field will accept negative numbers from -1.79769313486231E308 to -4.94065645841247E-324 and positive numbers from 1.79769313486231E308 to 4.94065645841247E-324 Note that Double is the default width for all new Numeric fields. If you wish to enter numbers that that refer to another table's primary key where the primary key is an Incremental field, use the Long format. 176 Database Date/Time data type A field with Date/Time data type (see Data types on page 169) can only contain valid dates. The formatting properties available on the General page are: • Initial Value (enter a default value that will automatically appear in this field every time a new record is created, unless another value is entered instead of it − Initial value on page 189) • Caption (enter a caption to replace the field name above the column in Table View − see Captions on page 64) • Validation Rule (set a rule to validate possible data entries − see Validation rule on page 186) • Validation Text (write a display message for cases of invalid data − see Validation text on page 187) • Required (when checked a value is required in field − see Required property on page 188) • Index (choose from Primary Key, Indexed, No Index & Indexed (Unique) − see Indexes and primary keys on page 191) The formatting properties available on the Format page are: • Year (choose from Long Form e.g. 1999, Short Form e.g. 99, & None) • Month (choose from Long Name e.g. January, Short Name e.g. Jan, & Digits e.g. 01) • Order (choose from Month/Day e.g. Jan/12, & Day/Month e.g. 12/Jan) • Separator (choose from \ - . / or blank e.g. 12-05-99, 12.05.99, 12/05/99, 12 05 99, etc.) • Add Time (click on the check box to add time to the date: select 0..12 to display AM/PM rather than the 24-hour clock e.g. 03:45 PM rather than15:45, and Seconds to display seconds e.g. 15:45:34) If you only want to display the time, select Time rather than Date in the left-hand box and proceed as shown above. 177 Database Date/Time format Fields that contain dates or times can be formatted to control their appearance. Although dates and times are usually displayed in fields that have the Date/Time data type (see Date/Time data type on page 176), they can also be the result of calculations in fields with the Calculated data type (see Calculated data type on page 182). Dates and times are formatted in a similar way in any field that can contain them. To format the Date: 1. Select the Year format by choosing from Long Form e.g. 1999, Short Form e.g. 99, & None. 2. Select the Month format by choosing from Long Name e.g. January, Short Name e.g. Jan, & Digits e.g. 01. 3. Select the Order by choosing from Month/Day e.g. Jan/12, & Day/Month e.g. 12/Jan. 4. Select the Separator type by choosing from \ - . / or blank e.g. 12-05-99, 12.05.99, 12/05/99, 12 05 99, etc. To format the Time: 1. Select the Add Time checkbox to add time to the date. 2. Select 0..12 to display AM/PM rather than the 24-hour clock e.g. 03:45 PM rather than15:45. 3. Select Seconds to display seconds as well as hours and minutes e.g. 15:45:34. If you only want to display the time, select Time rather than Date in the left-hand box and proceed as shown above. Memo data type A memo field is similar to a character field, only much larger and can contain multiple paragraphs. The formatting properties available on the General page are: • Initial Value (enter a default value that will automatically appear in this field every time a new record is created, unless another value is entered instead of it − Initial value on page 189) • Caption (enter a caption to replace the field name above the column in Table View − see Captions on page 64) 178 Database • Validation Rule (set a rule to validate possible data entries − see Validation rule on page 186) • Validation Text (write a display message for cases of invalid data − see Validation text on page 187) • Allow Zero Length (allows zero-length string in field − see Allow zero-length property on page 188) • Required (when checked a value is required in field − see Required property on page 188) The formatting properties available on the Format page are: • Memo Type (Plain or Rich Text: Rich text allows formatting of individual portions of text in bold, italics, etc., whereas Plain text only allows formatting for all the text in a field) • Append in New Record: (click on the check boxes to have the date and/or time appear automatically in the Memo) Note that when you go to the table view and enter data in a particular record, the date and/or time will not appear in the memo field for that record until you go to the next row. Incremental data type An incremental field assigns a unique sequential number for each record added to a table. The starting value is 1 and the step value is also 1. When you add the first record to the table, the incremental field is set to the start value. When you add additional records, the incremental field will automatically be filled in with the value from the last entered record plus the step value. Even if you subsequently delete records from the table, old values are not re-used. This makes an incremental field ideal for use as a primary key field. The formatting properties available on the General page are: • Caption (enter a caption to replace the field name above the column in Table View − see Captions on page 64) • Index (choose from Primary Key, Indexed, Indexed (Unique), No Index). See Indexes and primary keys on page 191. The formatting properties available on the Format page are the same as for Numeric fields (see the Format page in Numeric on page 172) 179 Database Logical data type The logical type enables a field to have one of two logical values. Ability has four ways of expressing logical values: True/False, Yes/No, On/Off, 1/0. The formatting properties available on the General page are: • Initial Value (enter a default value that will automatically appear in this field every time a new record is created, unless you overwrite it with another logical value − Initial value on page 189) • Caption (enter a caption to replace the field name above the column in Table View − see Captions on page 64) • Validation Rule (set a rule to validate possible data entries − see Validation rule on page 186) • Validation Text (write a display message for cases of invalid data − see Validation text on page 187) • Required (when checked a value is required in field − see Required property on page 188) • Index (choose from Primary Key, Indexed, No Index & Indexed (Unique) − see Indexes and primary keys on page 191) You can choose the type of logical value on the Format page: • In the Values box choose from Yes/No, True/False, On/Off, 1/0 Once you go to Table View each new record will display the negative logical value by default i.e. False or No or Off or 0. To select a positive logical value, click on the arrow in the field and select it. Alternatively, at the formatting stage, you can choose the positive value as the default in the Initial Value box. Boolean calculated field: example A calculated field (see Calculated on page 182) can be formatted to return Boolean values i.e. TRUE or FALSE. An example of the usefulness of such a field is the following. Imagine you have two sets of data, for which you want to make a direct comparison item by item e.g. yearly income and expenditure over a five-year period. The Success column is a calculated field and contains this formula: =IF(Income>Expenditure, True, False) 180 Database Income 30,000 28,000 33,000 100,000 Expenditure 39,000 27,000 33,000 40,000 Success FALSE TRUE FALSE TRUE Enumerated data type A field with the enumerated data type allows you to choose from a list of values that have been chosen by you. The available formatting properties on the General page are: • Initial Value (enter a default value that will automatically appear in this field every time a new record is created, unless you overwrite it with another value from the enumerated list − Initial value on page 189) • Caption (enter a caption to replace the field name above the column in Table View − see Captions on page 64) • Validation Rule (set a rule to validate possible data entries − see Validation rule on page 186) • Validation Text (write a display message for cases of invalid data − see Validation text on page 187) • Required (when checked a value is required in field − see Required property on page 188) • Index (choose from Primary Key, Indexed, No Index & Indexed (Unique) − see Indexes and primary keys on page 191) You can enter your values for the enumerated list on the Format page: • In the Values box type the entries one per line (e.g. Brown, Blue, Red), using CtrlEnter to go to the next line in each case. See Adding enumerated field types on page 180 for more information on enumerated fields and an example. Adding enumerated field types You can add your own enumerated field types to a database table. An enumerated field is one that limits the values that can be put into the field to a pre-defined set, these being defined by you. This is useful where a field would naturally contain one of a limited set of values. For example, if you create a patient identification table, and it includes fields for 181 Database height, weight and eye color, you can make the eye color field an enumerated field and permit only the values blue, green, brown and hazel. To create an enumerated field for eye color, do the following: 1. Type a name for the field in Name, for example, EYECOLOR; set the field type at Enumerated in Type; and click on the Format button to display the "Format Field" dialog (See Creating fields in a database on page 189 for information on creating table fields). 2. In the "Format Field" dialog click go to the Format page. In the Values box type the members of the enumerated set: BLUE, GREEN, BROWN, HAZEL. The values should be entered one per line, using Ctrl-Enter on the keyboard to proceed to the next line each time. 3. Click on OK to save the new information and close the "Format Field" dialog, and click OK again to close the "Format Table" dialog. 4. The table grid is displayed. Select the EYECOLOR field to display a drop-down menu arrow. When you click on the arrow all the valid values for that field are displayed. These are the only values allowable in this particular column. Click on one of these to insert it into the table cell. 5. When you are adding records to the table and you type a value into the enumerated field and press Tab to move on, one of three things will happen: (a) If you have put in one of the acceptable values, Ability will accept it. (b) If the value you enter is not in the enumerated set, Ability will not accept the value and the cell will remain blank. (c) If you type the first letter (or several letters) of a valid value, Ability will display the first alphabetical entry from the list that matches this letter (or letters). OLE data type The OLE data type allows you to link to or embed various OLE-compatible objects, such as pictures, graphics, sound, spreadsheets and other files. The only formatting you need to decide on at this stage is what caption (see Captions on page 64) you will have, if any, and whether or not to make it obligatory that each record contain an OLE object in this field (see Required property on page 188). Once you have set up the OLE field and gone to the Table Grid View, you need to insert the OLE object. 1. Double-click on an OLE data type cell. This displays a box into which an object can be inserted. 182 Database 2. Select File from the Insert menu to insert an existing object, or select New Object if you wish to create a new object. For example, to insert a new Ability Spreadsheet into a Database cell, select New Object from the File menu and then select Ability Spreadsheet from the Object Type box in the "Insert Object" dialog. Once you have inserted a new or an existing OLE-compatible object, you can resize the object window and edit the object's contents in the usual way. To edit the object, a spreadsheet say, double-click inside the object to put it in edit mode. All the familiar editing and formatting menus become available across the top of the window. To resize the object window, click once outside the window and then use the borders and handles of the window to move and resize the object. Calculated data type The calculated data type enables you to resolve simple arithmetic formulae based on single or multiple field values within the current record. The current record may belong to a Relation, thereby enabling you to use fields from different tables in a calculation. The formatting properties available on the General page are: • Caption (enter a caption to replace the field name above the column in Table View − see Captions on page 64) • Index (choose from Primary Key, Indexed, No Index & Indexed (Unique) − see Indexes and primary keys on page 191) The formatting properties available on the Format page are for various types of number, date and time, and the Boolean operator. These determine the format of the answer yielded by the calculated field: • General (the general number format) • Number (see Number format on page 173) • Currency (see Currency format on page 174) • Percent (see Percentage format on page 174) • Fraction (see Fraction format on page 174) • Scientific (see Scientific format on page 175) • Date and Time (see Date/Time format on page 177) • 183 Database Boolean (use for calculations that return either TRUE or FALSE − see Boolean calculated field on page 179) On the Formula page you can either type in a formula yourself or click on the Function button to display the “Insert Function” dialog, in which you can choose from the standard Ability functions (see Using built-in functions on page 480 and Using the function dialog box to build formulas on page 481 for general information on creating functions). Once the formula has been inserted into the Formula box, type in the field names you want to act as arguments for the formula) Using the calculated data type in a table You can use the calculated data type to perform calculations with values from fields in the same table. You can also perform calculations using fields from different tables by joining these fields in a relation (see Using the calculated data type in a relation on page 184). The following example should make it clear to you how to perform calculations in a single table. Imagine you have a table that contains fields for the product ID, the quantity in stock of each product, and the cost of each product: Product _ID A001 A002 A003 A004 Quantity 5 7 4 6 Cost 27.99 45.50 20.00 8.99 StockValue 139.95 318.50 80.00 53.94 You want to add the extra column to calculate the total value of each product in stock. Follow these steps: 1. If you are already in your table, select Table from the Format menu to display the “Format table” dialog. 2. In “Format table” go to the next empty line. Type “StockValue” in the Name column and select Calculated in the Type column. 3. Click on the Format button to display the “Format Field” dialog. 4. On the Format page select either Number or Currency and make sure Decimal Places is set at 2. 5. On the Formula page type the following in the Formula line: =Quantity * Cost 6. Click on OK to return to “Format table”. 184 Database 7. Click on OK to return to your table. The table will be redrawn to show the result of the calculation, for each record, in the StockValue column. Using the calculated data type in a relation You can use the calculated data type to perform calculations using fields from different tables by joining these fields in a relation. You can also perform calculations with values from fields in the same table (see Using the calculated data type in a table on page 183). The following example should make it clear to you how to perform calculations in a relation. Example Imagine you have two tables: one called Orders, which records the product and quantity for each order, and one called Products, which records the price of each product and gives a description of the product. Each order and product is given an ID and both tables have the Product ID field in common. It is your aim to calculate the total value for each of the orders. Orders Order_ID ORD1 ORD2 ORD3 ORD4 ORD5 ORD6 Product_ID A003 A001 A003 A002 A002 A004 Quantity 5 7 4 3 2 6 Value Products Product_ID A001 A002 A003 A004 Description Cost File Lamp Pen Fan 2.99 25.50 1.20 18.99 The total value for each order can be calculated from multiplying the values from Quantity (in Orders) by the values from Cost (in Products) for each Product ID. Since Quantity and Cost are in different tables, you need to join the tables to create a relation. Before doing this you also need to add to one of the tables a field that will contain the total value. In this case I have added the field to Orders and called it Value. This field will be given the 185 Database Calculated data type and formatted to return the result of multiplying the values in the Quantity and Cost fields. 1. Create a table, Orders, with the four fields: Order_ID, Product_ID, Quantity, and Value. Order_ID and Product_ID should be given the Character data type; Quantity the Numeric data type; and Value the Calculated data type (make sure Value is either Number or Currency). See Creating fields in a database on page 189. 2. Use the “Format Field” dialog to format the fields as follows (most of the formats are OK as they stand): (a) Make Order_ID a Primary Key (this will prevent duplicates) (b) Make Product_ID a non-unique index i.e. Indexed (this will make sort and search operations more efficient when you have many records) (c) Reduce Decimal Places in Quantity to 0 (all quantities will be whole numbers) (d) Increase Decimal Places in Value to 2 (to display cents or pennies properly) (e) Type the formula =Quantity * Cost into the Formula line on the Formula page for Value (see Calculated on page 182 and Using the calculated data type in a table on page 183 for an example of how to enter a function) For more information on formatting, see Formatting database fields on page 206. 3. Next, create a table, Products, with the three fields: Product_ID, Description, and Cost. Product_ID and Description should be given the Character data type, and Cost the Numeric data type. 4. Use the “Format Field” dialog to format the Product_ID field as a Primary Key (to prevent duplicates). 5. Next, create a new relation based on these two tables (see Creating a relation on page 229). The Join Field in both tables should be Product_ID and the Join Type should be Inner (so that only the products which are listed in both tables will be displayed) The Relation table will look like this: Orders. Order_ID ORD2 Orders. Product_ID A001 Orders. Quantity 7 Orders. Value 20.93 Products. Product_ID A001 Products. Description File Products. Cost 2.99 186 Database ORD4 A002 3 76.50 A002 Lamp 25.50 ORD5 A002 2 51.00 A002 Lamp 25.50 ORD1 A003 5 6.00 A003 Pen 1.20 ORD3 A003 4 4.80 A003 Pen 1.20 ORD6 A004 6 113.94 A004 Fan 18.99 You would undoubtedly want to sort the first column into ascending order and hide either the second or fifth column. Note that you can rearrange and hide columns, sort and filter records, just as in any other table. See Query components on page 164 for more information. Captions In addition to the name of the field, you can also give the field a caption. The caption is the name that will appear above the field when the table is open. It is entered in the Caption box when you format the table. If it is left empty the name above the field will be the same as that in Name. Captions are different from names in that they are usually more descriptive and do not have any of the restrictions on the types of character that can be used in a name. Note: Although a caption will appear above a column in a table when the table is open, you must refer to the field name, as defined in Name, when you are trying to make a link to the database from another Ability (or non-Ability) application. The field name is the official name, so to speak, and is obligatory, unlike the caption. Validation of data Ability will automatically check that any data you try to enter into a database field is of the right type (as set when you designed the table). As you would expect, a field set to take numeric values will not be allowed to accept text. However, there is another level of validation available to you when you are formatting fields. This allows you to exclude data that is of the right data type for the field but is perhaps outside the range of data you want to appear in this field. You can specify a validation rule (see Validation rule on page 186) for what is acceptable or unacceptable within the data type you set. Furthermore, you can write your own error message or validation text (see Validation text on page 187), which will be displayed whenever you attempt to enter data that breaks the validation rule. Validation rule A typical validation rule is a formula that determines what is to be included or excluded in a field. You can use standard Ability expressions to design the validation rule. The rule 187 Database will then be compared with any data you attempt to enter into the field. If the data is allowed by the validation rule it will be accepted by the field; if not then the data will be refused and a validation text displayed (see Validation text on page 187). Typical examples of validation rules are: • >= “20” AND <= “40” for a numeric field (allows any numbers from 20 to 40 inclusive) • = “Smith” OR “Jones” for a character or enumerated field (allows only “Smith” or “Jones” but no other names) Note that the data elements in each of the formulas should be surrounded individually by quotes. Since a validation rule determines what can be put into a field and will cause an appropriate message to be displayed if the rule is broken, it turns out that a blank field governed by a validation rule will be illegitimate and the validation text displayed as if the rule had been broken. Obviously there are cases where you will want fields to be left empty. To overcome this problem you should do the following: • Add the expression Is Null to the end of the Validation Rule. • Make sure that the Required box is unchecked (this indicates that data is not required) For example, a validation rule might read: = “Smith” OR “Jones” OR Is Null which will allow “Smith”, “Jones” or a blank field. Validation text Validation text always accompanies a validation rule (see Validation rule on page 186) for a database field and is displayed when that rule is broken. You will not be allowed to go to the next line of a table until you have entered data that is allowed by the validation rule. Only then will the validation text not be displayed. If you decide not to create your own validation text, Ability will generate a default message to tell the user what rule has been broken. Note that in any line there may be several fields that have an attached validation rule and its accompanying validation text. In this case only one validation text at a time will be displayed. Once you have dealt with this by entering legitimate data into the appropriate field, it may still be the case that one or more of the other fields contains illegitimate data. Validation text will continue to be displayed, in turn, for each of the fields still containing illegitimate data, until you have dealt with all these fields. 188 Database Typical examples of validation text are: • Must be either Smith or Jones when the validation rule =“Smith” OR “Jones” is broken. • Must be either Smith or Jones or Blank when the validation rule =“Smith” OR “Jones” OR Is Null is broken • Number must be between 20 and 40 inclusive when the validation rule >=“20” AND <= “40” is broken. Required property The Required property should be switched on if you do not want blank fields to be allowable, that is if you require that a field contain a value. Any attempt to leave a field blank when it has been formatted with the Required property switched on, will return an error message. For details of how the Required property relates to Validation Rules and the Zero-length property, see Validation rule on page 186 and Allow Zero-Length Property on page 188. Allow zero-length property The Allow Zero Length property, when switched on, permits a field to contain a zerolength string (“”) as value. This should be distinguished from the Null value, which allows fields to be blank and is permitted when the Required option is switched off. The basic difference between a field that has a null value and one that contains a zerolength string, is that the former field contains − and has contained − absolutely nothing, that is no spaces have been entered, no deletions taken place, etc., whereas the latter may be empty to the eye but in fact has at one time contained data, even though it has since been deleted. Hence, as you would expect, the two types of formatting cause fields to behave in different ways. Likewise, the various format combinations, using both the Required property and the Allow Zero Length property, also have different effects, as shown below: • Allow Zero Length and Required both set to No: Null value stored when Enter or Spacebar is pressed, but zero-length string is not allowed (i.e. you will not be allowed to delete a existing value, although you will be able to replace it) • Allow Zero Length and Required both set to Yes: Null value not allowed (i.e. when you press Enter), but zero-length string stored when you press Spacebar or enter a zero-length string (i.e. as when you delete an existing value) • • 189 Database Allow Zero Length set to Yes and Required set to No: Null value stored when Enter or Spacebar pressed, and a zero-length string stored when it is entered (i.e. as when you delete an existing value) Allow Zero Length set to No and Required set to Yes: Null value not allowed (i.e. when you press Enter or Spacebar), and a zero-length string not accepted (i.e. as when you try to delete existing value) Initial value You can set an initial or default value for a field, depending on its data type. This is set when you are formatting the field (see Data types on page 169). Later on you can reformat the field to change the initial value. To do this just type the new default in the Initial Value box in the “Format Table” dialog for the relevant field. Every time a new record is added to a table, all the fields that are formatted to have initial values will automatically be updated. You can of course replace an initial value in Table Grid View by entering an alternative value. Note: Initial values must be compatible with the data type of the field e.g. characters for a Character field, numbers of the right format for a Numeric field, dates of the right format for a Date field, and so on. When you change the default value of a field, only new records receive this value; existing records retain their old values, which may be there through the old default or because they were directly entered by you. Creating fields in a database You can create fields for a new table or add to and modify them in an existing one. • Create a new table by right-clicking your mouse anywhere in the Database Manager window and selecting New. Select either the Table Wizard or the Blank Table button. The following notes assume you have selected Blank Table (see Creating fields in a database using Table Wizard on page 190 for more information on using Table Wizard). The "New Table" design dialog is displayed. • If you want to add fields to an existing table, select the table in Database Manager and right-click your mouse. Click on Format from the displayed menu to go to the "Format Table" dialog. "Format table" and "New Table" work in exactly the same way, so follow these steps for each of the fields that is to be created: 1. Click in the Name box to enter a name for the field. This must be unique for that particular table. See Field names on page 168. Note: It is good practice to use standard field names in your table designs. Since Ability uses field name references when calling data from other applications, standard 190 Database field names will give you greater freedom to switch Forms, mailing labels and mail merge documents from one table to another. See Creating fields in a database using Table Wizard on page 190 for more information on standard field names. 2. Press Tab to move into the Type box. Ability automatically displays the Character field type. If you need to change the field type, click the arrow next to the Type box to display a list of all field types. Select the required type with a single click. For more information, see Field data types on page 169. 3. Once you have set the field type, it becomes possible to format the field. The format properties differ according to the type selected. It is a good idea to set the format properties immediately after setting the type. To format a field, click once on the Format button at the bottom right of the window. The "Format Field" dialog is displayed, in which the various properties can be set, depending on the type. See Field data types on page 169 for an explanation of the various data types and their associated formatting properties. 4. Press Tab to move to the Description box. Here you can type an optional description that will help remind you or others what the field is supposed to contain. 5. Once you have reached the end of the line, that is, defined one field, press Return or Tab to go to the next line and define another field in the same way. 6. When you have defined all the fields that you will need, you can give the table a general description in the Table Description box. 7. Next click on the Index button to check (or set up) your indexes. See Indexes and primary keys on page 191. When all is set, click on OK to create a table based on your design. Creating fields in a database using Table Wizard You can design a database table using Table Wizard. This is a quick and easy way of creating a table based on standard table and field designs. These are meant to reflect the requirements of the average database user and should be adequate for most purposes. To use the Table Wizard follow these steps: 1. Right-click your mouse when in the Database Manager window and select New followed by Table. 2. Click on the Table Wizard button in the "New Table" dialog. The "New Table Wizard" dialog is displayed. 3. In the Available Tables box the set of standard tables is listed, for example, Customer, Product and Employee. Click on one of these, say Customer, to select it and then click on Next. 191 Database 4. The Available Fields box displays the standard fields that come with the table you have selected. For the Customer table these include name and address fields etc. Select the field that you want to be the first in your table and then click on the Add button (the topmost). The selected field is moved from the Available Fields box and placed in the Selected Fields box. Repeat this operation for the rest of the fields that you require. 5. If you decide that you don't want to use a field after you have moved it to the Selected Fields box, then select the field and click on the Remove button (the second) to return it to the Available Fields box. Likewise, if you want to change the order of fields, you can move selected fields back and forth - including groups of selected fields - by using the Add and Remove buttons. To move all the fields in the Available Fields box over to the Selected Fields box, use the Add All button (the third). The Remove All button (the fourth) moves everything in Selected Fields back to Available Fields. 6. Once you have chosen all the fields you want, click on Finish. This takes you to the "New Table" dialog, where you can format the fields, create captions and descriptions, define initial values, and even add extra fields that are not available through Table Wizard. See Creating fields in a database on page 189. Indexes and primary keys Indexes are used by Ability to speed up sort and search operations on table fields. They are also used to determine the type of link that can be made from one table to another in a relation (See Joining tables on page 228). Each record in the field is given its own index position, so to speak, by which it can be ordered. You should set an index for a field if you think you may need to search or sort on that field frequently. Indexes can also be used to prevent certain fields holding duplicate data. The only disadvantage in using indexes is that they may sometimes slow down various table operations, such as query operations, especially when there are many records in the table. You set an index for a field when you set the data type. The fields that can be indexed are those that are capable of being ordered, either numerically or alphabetically, such as numeric, character, date and time fields (See Creating indexes and primary keys on page 192). There are three types of index: primary keys, unique indexes, and non-unique indexes. In addition, you can create multiple-field indexes. 192 Database Primary key A primary key is an index that uniquely identifies each record in a table. It can be set for one and only one field, which is known as the primary key field. This field will not accept duplicate or blank values. If you have entered a duplicate value or left the field blank, you will not be able to move to the next or previous record until you change or delete the duplicate value or replace the blank with a unique value. Primary keys are useful when you use Ability Database to set up relations between tables. In addition, the Primary Key field in a table automatically sorts the table into ascending order according to the values in the field. If you add extra records, they will be automatically ordered according to the Primary Key field when you close and re-enter the table. Note: If you haven't set a primary key while designing a table, you can set it after records have been entered. However, if the field already contains duplicate values or if it contains blanks, then Ability will display an error message asking you to remove duplicates or to replace blanks with a unique value before it accepts the field as the primary key field. The primary key will not be set for a field with duplicate values or blanks and will format the field so that it has no index. If you can't edit the field to rid it of duplicate values, you can create an extra field and give it the Incremental data type. This will number all the records and ensure their uniqueness. Even when you delete records and add new ones, the new records will not be given numbers that have already been used. This is obviously useful as the basis of an invoice table, where invoices are required to be unique. Unique indexes A unique index is similar to a primary key in that it will not allow duplicate values in the field for which it has been set. However, it is unlike a primary key in that you can set as many unique indexes as you wish for a table, and you are allowed to leave a unique index field blank for any record. This is obviously useful in that you may not want duplicate data to be allowable in a particular field, though you do want to allow certain records to be blank in this field. A unique index field, unlike a primary key field, will not count two or more blanks as duplicates. Non-unique indexes A non-unique index enables a field to have duplicate values and blanks, thereby enabling you to search and sort faster on fields that will contain repeat information as well as some blanks. You can set as many non-unique indexes as you wish for a table. Creating indexes and primary keys To create an index or a primary key for a field in a database table, you first need to choose a type for the field in the Type box (see Field data types on page 169). At this 193 Database stage, you may be designing a new table or editing/formatting an existing table design (see Creating fields in a database on page 189). Once you have set the type for the field, click on the Format button in the dialog (either "New Table" or "Format Table"). In the "Format Field" dialog, click in the Value box to the right of Index. Click on the arrow to display all of the Index formatting options. The full set comprises: • No Index (no index applied to this field) • Primary Key (primary key applied to this field) See Primary key on page 192. • Indexed (a non-unique index applied to this field) See Non-unique indexes on page 192. • Indexed (Unique) (a unique index applied to this field) See Unique indexes on page 192. Click on one of these to select it. Note that only one field can be formatted as a Primary Key field. If you afterwards choose another field as the Primary Key, the first field will automatically become Indexed (Unique) instead. Not all of the available data types can be index formatted. Obviously it makes no sense to index Memo or OLE fields, therefore no indexing options are provided for these. Moreover, though you could set a Primary Key for a Logical field, this would only make sense if you intended your table to contain a maximum of two records. The Incremental data type, if it is set for a field, is automatically the best choice to made the Primary Key. Here is a list of index options and the data types that can be used with them: Primary Key Indexed Indexed (Unique) Character Numeric Date Time Enumerated Incremental Logical Calculated Character Numeric Date Time Enumerated Character Numeric Date Time Enumerated Incremental Logical Calculated Logical Calculated You can check which fields have indexes set for them at any time. In addition, you can create multiple-field indexes. 194 Database See Multiple-field indexes on page 195. Checking indexes and primary keys Once you have set the indexes and primary key for a table, you can check them by clicking on the Index button in the "New Table" or "Format Table" dialog. In the Table Indexes box all the indexes set for a particular table are listed: • Under Index Name the name of the index is displayed. By default this is the same as the name of the field, in Field Name, for which the index was set (although you can rename the index here, if you wish). • Sort Order is Ascending by default - click in the box to change this to Descending. The sort order determines how certain fields are displayed when you go into Table Grid View. If you have set a Primary Key this will take precedence over any of the other indexes and the records will be sorted into ascending or descending order according to the values in the primary key field. If you have not set a primary key, then the records will be sorted according to the first index listed in the Table Indexes box. Every time you go into a table, the sort index will take account of any new records previously added and will make sure that the table is correctly sorted. To check what kind of index has been set for a field, click anywhere in that field's row in the Table Indexes box. The two check boxes at the bottom of the dialog - Primary Key and Unique - will be activated. Together these enable you to determine the kind of index set for each field: • If Primary Key and Unique are both checked, then the index is the Primary Key (remember that only one primary key is allowed per table and that it is called unique because it does not permit duplicates) • If Primary Key is not checked and Unique is checked, then the index is Indexed (Unique) (you can have many of these in a table, but duplicate values, except for blanks, are not permitted) • If Primary Key and Unique are both not checked, then the index is Indexed (you can have many of these in a table and duplicate values are permitted) For information on how to set indexes in the Table Indexes box, see Editing and setting indexes and primary keys on page 194. Editing and setting indexes and primary keys Although you will usually set the indexes for your table by using the Format button when you set the data types for the fields, you can also set or edit them in the Table Indexes box of the “Format Table” (or “New Table”) dialog. You first need to click on the Index button to access the Table Indexes box. 195 Database To set a new index: 1. Click in an empty row in the Field Name column. 2. Click on the arrow to display all the available fields and then click on a field. 3. Give the index a name in the Index Name column (it's best to use the same name as for the field). 4. Once you have given the index a name, click anywhere else in the row to activate the Primary Key and Unique checkboxes. You can now set the index type by checking the appropriate boxes: • Check Primary Key to set a Primary Key index (note that the Unique box is automatically checked) • Check Unique to set a unique index i.e. Indexed (Unique) • Leave Primary Key and Unique unchecked to set a non-unique index i.e. Indexed You can edit indexes in the Table Indexes box. Click in the row that contains the index to be edited and then check or uncheck Primary Key and Unique checkboxes, as appropriate. For more details on editing indexes, see Checking indexes and primary keys on page 194. Multiple-field indexes It is possible in Ability Database to create multiple-field indexes. These are combinations of two or more table fields that together are unique. This is useful when you want each field in the multiple-field index to be able to hold duplicate data, though you don't want all the fields together to hold duplicate combinations of data. For example, think of a field that contains orders and one that contains products. You want to be able to duplicate the order number, for there may be several products on any one order. Likewise one product may be attached to more than one order. What you don't want is that a particular product and order number together occur more than once, that is, that more than one record contains a duplicate combination on these fields. To create a multiple-field index you need to be in the "Format Table" dialog (for an existing table) or the "New table" dialog (when creating a new table). See Creating fields in a database on page 189. To create a multiple-field index for an existing table, follow these steps: 196 Database 1. Open the table and select the Table command from the Format menu (alternatively, right- click on the table name in Database Manager and select Format). The "Format Table" dialog is opened. 2. Click on the Index button to go to the index page. 3. Click in the first empty row in the Table Indexes box. 4. A multiple-field index for two fields is defined by two rows of the Table Indexes box: • To set the first row, click in the Field Name column for that row. Choose the appropriate field from the drop-down list. Give the index a name in the Index Name column. This name will be the name for the multiple-field index as a whole. • To set the next row, click in the Field Name column for that row. Choose the second field from the drop-down list. Do not enter a name in Index Name for this row. Ability recognizes this combination - one row with an Index Name, the next without - as a multiple-field index. 5. Next, click again anywhere in the first row. This will activate the Primary Key and Unique checkboxes. You can set the multiple-field index as either a primary key in its own right (check Primary Key) or as a unique index (check Unique). Whichever you choose, you can have duplicate values in each of the fields but not a duplicate combination of values. With Primary Key you are not allowed to have blanks in any of the fields of the Multiple-field Index. With Unique you are allowed to have duplicate blanks for either field or both in any row. Although it is unlikely that you will need to create a multiple-field index with more than two fields, it is possible to add more fields as required. Again, with a three-field or higher multiple-field index, it is only the first field that is given a name in Index name. Saving a new table Once you have designed a new table and entered all the fields you require, click on the OK button at the bottom of the "New table" dialog. If this is the first time you have saved the table, the "Save As" dialog will be displayed. Enter a name for the table in the Table box. The new table name will appear in the list of tables, for the current database, in Database Manager. Opening a table using database manager To open a table, double click on the table name in Database Manager. Alternatively, select the table and right click your mouse. Click Open in the displayed menu. The table is opened in Grid View. There are three types of table view: Grid, Form and Report. 197 Database Grid view When you open a table in Grid View (also known as browse mode), you can add and delete records and generally edit the table's contents. In Grid View your data is displayed in a standard table, where every row is a record and every column is a field. Note: You will notice that the menu bar changes when you enter Grid View. This allows you easy access to the various commands you will need. Table record indicators When you are in a table, in Grid View (see Table views on page 161), you will notice several indicators in the left-hand row bar. Here’s what they mean: • the new record is always indicated by a star • the current record is indicated by a pointer • the record that is being edited or into which new data is being entered, but which has not yet been saved (i.e. you haven’t yet gone to the next line), is indicated by a pencil. Modifying records Once you’ve created your table, you’ll probably spend most of your time working with the data in the records. There are various ways of working with records when in Grid or Form View, including adding, editing, deleting, copying and finding records. Adding records Whenever you open a table, the last row of the table is always a new record (i.e. blank) and is referred to as the new row. Adding a new record is therefore just a matter of typing data into the new row. The same applies to the forms based on the table. To add a record, do any one of the following: • Use the scroll bars to move to the bottom of the table and click on the new row. • in the Select New Record from the Record menu, or click on Add Record Record toolbar. The active cell will become the first position of the new row. You can now enter data in the fields of the new record. Whenever you begin to enter data in the New Record, another blank New Record is automatically created. 198 Database Rather than entering fresh data into the new record, you may want to duplicate an existing record. Duplicating records You can create a new record, in a table, based on the contents of the current record. This may be useful if, for example, you are adding several contacts from the same company to your database. Rather than re-type address details, select the Duplicate Record command from the Record menu (in Grid View you must select the whole record first by clicking in the left row bar, but in Form View it is sufficient to have the form on screen). This will create a new record with the details of the current record copied to it. You can then edit the new record as you like. Entering data and editing records To fill in a blank field, first click on it or go to it using the Enter key. This will make it the active cell. Next, just type in or select the appropriate data for that field, according to the data type you set for the field. To change the contents of a field, first go to it either by clicking in the field or using the Enter key. There are three possible operations you might want to perform on the cell: • delete the contents • replace the contents • edit or add to the contents. With most types of field you can click at the position in the field where you want to edit, or append new text to, the current contents. To replace or delete the current contents, double-click in the field to select the field contents and then type replacement text or press Del (if you entered the field using the Enter key, you can delete or replace text without clicking). The method of editing fields depends to some extent on the data type of the field: • Character, Memo and Numeric fields are straightforward and their contents can be edited, deleted or replaced, as outlined in the previous paragraph. With other fields the procedure is slightly different but just as obvious: • Enumerated: delete the contents by double-clicking in the field to select the contents and then press Del. Enter one of the members of the enumerated list by clicking on the arrow and selecting the appropriate one from the drop-down list, or alternatively type it yourself directly (what you type will only be entered if it is in the enumerated list). • 199 Database Logical: you can't delete the contents of a logical field but only change the field’s value. If you try to delete the contents, they will be restored to the default value (No, False, Off or 0) as soon as you move to another record. • Date: delete the contents by double-clicking in the field to select the contents and then press Del. Type the date according to the format you set when creating the field. The field will only accept dates that match the chosen format. • Time: delete the contents by pressing Del. Type the time according to the format you set when creating the field. The field will only accept times that match the chosen format. • Incremental: the contents of this field can't be edited or deleted. Incremental values are set when you format the field and are one way of uniquely identifying a record. If you delete an incremental value you won't be able to move out of the current record. To restore the value, press Esc. An incremental value can only be deleted by deleting the row in which it occurs. • Calculated: the contents of this field are determined by the formula you set and therefore can’t be edited or deleted. The only way to change the contents is to change the contents of the fields that are referred to in the formula. Deleting the formula in Table Format will of course remove all the results that are calculated by the formula. • OLE: delete an OLE object by pressing Del. Insert an OLE object by double clicking in the field to display the OLE Table. Select either File (to insert an existing file) or New Object (to insert a new object) from the Insert menu (see OLE data type on page 181). Usually, when you are editing fields, you can abandon the current edit by pressing the Esc key. The field will revert to its previous state. After editing a field’s contents, click on the field you want to edit next (or use the cursor movement keys). Finding records If you know the record number of a particular record in a table, it is quite easy to locate the record by using the Go To command in the Edit menu. However, sometimes you may not know the record number and therefore have to search for the record by finding a particular piece of data, which you know is held in a field of the record. If you are working on a small table it should be fairly easy to find the cell you require (for formatting, deleting, editing, or whatever) by eye. However, if you have a very large table, it can be quicker to ask Ability to find the cell you want. Whether in Table Grid View or Form View follow these steps: 200 Database 1. Click on the Find button on the toolbar or select the Find command from the Edit menu. The “Find” dialog is displayed. 2. In the Find what box, type the text you wish to search for. 3. In the Direction box choose whether you want to search Up, Down or in All directions from the current position. Ability searches down columns: for example, down one column from the present position, then down the next column, and so on. 4. In the Scope box choose whether you want to search in the Whole document or only in a Selection. 5. In the Options box you can choose to Match case and/or to Match whole word only. 6. Click on the Find Next button to begin the search. Ability will find the next occurrence of the search text and the cursor will move to that cell. Click on Find Next again to go to the next occurrence, and so on till there are no more to be found. Deleting records This section explains how to delete records in a table. In Grid View you can delete several records at once, but only one at a time in Form View. You can delete one record, a group of records, or all the records in table Grid View. All of these are done through the same "Delete" dialog. 1. If you want to delete just one record it is best to make this record the current one. Do this by clicking anywhere in the record. The current row pointer is displayed in the left row bar. If you want to delete several records at once, you can select (or mark) these records by clicking your mouse on the left row bar and dragging till the required records are all selected. 2. Next, click on the Delete button on the Record toolbar (or select Delete Record from the Record menu). The "Delete" dialog is displayed. Depending on whether you selected a current record, or marked one or more records, one of the following is checked in the dialog for deletion: • Current Record (deletes the record that has the pointer at its left) • All Marked Records (deletes all the marked records - note that the current record is not necessarily one of the marked records) • All Records (if you want to delete all records, then select this yourself - you can't delete the new record, of course) 201 Database 3. Click on OK when you have chosen the records to be deleted. You will be warned that you cannot recover deleted records and asked to click Yes to continue with the deletion. The table will be redrawn with the deleted records removed. The Delete command deletes the record and the row it occupies. However, if you use the Cut command instead, although the record and its row are both deleted, you can use the Paste command to paste the cut record in the new row at the end of the table. To delete the current record in Form View, click the Delete button on the Record toolbar or select the Delete Record command from the Record menu. You will be asked if you are sure that you want to proceed with the deletion. The deleted record will no longer appear as one of the forms and is also deleted from the attached table. Deleting the contents of fields in a database table • To delete the contents of the current field in a table, first click in the field to select it and then right-click your mouse and select Cut (alternatively press the Del key, click on the Cut button on the toolbar or select Clear from the Edit menu). • To delete the contents of several fields, select the fields and again select Cut, Clear or Del. You can select several fields in several rows by dragging the mouse. • If you used Cut to delete the contents of the field(s), you can of course use Paste to move the contents to another field(s). Copying records To copy records do the following: 1. Select the record by clicking on the left-hand row bar. 2. Click on the Copy button in the toolbar (or right-click your mouse and select Copy from the menu). 3. Select the new row at the end of the table and click on the Paste button in the toolbar (or by right-clicking your mouse). The record will be copied to the new row. To copy several records, follow the above instructions but make sure you first select the relevant records by dragging your mouse before copying and pasting. In the same way, you can copy records from one table and paste them into another. Take care though, you need to have the same – or almost the same – table structure to be able to do this sensibly. 202 Database Records can also be copied to and from Spreadsheet and Write documents. Managing your tables You can rename, delete, export and import database tables in Database Manager. • To Rename a table (or query, relation, form, or report), click once on the table name to select it, wait a moment and click once again. The table name will be displayed in Rename mode, surrounded by a box. Type the new name or click in the box and edit the current name. Click once outside the Rename box to close it. The new table name is displayed. • To Delete a table (or query, relation, form, or report), right-click your mouse on the table name and select Delete from the menu. Ability will ask you if you are sure that you want to delete the table. Click on Yes. The table will be deleted from the database. Be careful when deleting tables: DOS and Windows techniques to recover files won’t work if you want to recover a deleted table. • For information on exporting tables, see Exporting tables on page 266. • For information on importing tables, see Importing tables on page 266. Redesigning a table After you have designed your table and started to use it, that is to say, entered data in the fields, it is possible to change your design without having to start from the beginning. To change the structure of a database table – that is, to add, delete, redefine or reformat fields – do the following: • If the database tree is on screen in Database Manager, click on the table you want to redesign to select it and then right-click your mouse. From the drop-down menu click on Format. • If you are already in a table in Grid View, select Table from the Format menu. The "Format Table" dialog is opened. This dialog should be familiar to you from when you first designed the table, although it was then called "New Table". In the Table Fields box, in "Format table", you will see all the fields from the table, along with their associated Name, Type, Description. To go to the Table Indexes box, where all the indexes for the table are displayed, click on the Index button. There are several things you might want to do when redesigning a table: 1. To delete a field completely (equivalent to deleting a column in the table), click on the left-hand row bar in Table Fields to select the field. Next, press Del on the keyboard and the selected field will be deleted. Several fields can be deleted at once, by 203 Database dragging your mouse to select the relevant fields and then pressing Del. Be careful here: when a field is deleted the corresponding column in the table is deleted, along with all its data. So make sure you really no longer need this data, before deleting the field. 2. To add a field, go to the next empty line and create the field in the normal way (see Creating fields in a database on page 189). 3. To rename a field, just type the new name in Name. 4. To change the data type of a field, click on the arrow in Type and select a different type from the drop down list. Note: When you select a different type, the data in the table column will be lost if the data types are incompatible, which they usually are. You should assume that different data types are incompatible when redesigning a field. However, there are exceptions: for example, if you have text in a column which has Character data type and you change the data type of the associated field to Numeric, the contents of the column will be deleted. If, however, the text is made up of numeral characters, then the characters will be converted to numbers. Likewise, numeric data will be converted to text when you change the field type from Numeric to Character. 5. When you change the data type of a field, you will usually want to format the field anew, or you may wish to reformat a field even though you have not changed the data type. The formatting properties include width, validation, initial value, caption, primary key and indexes, etc. depending on the data type of the field. To reformat a field, make sure you are somewhere in the field and then click on the Format button (see Data types on page 169 for information on the various data types and their respective formatting options). 6. To change or add a description of the field, type the new description in Description. 7. If you think the redesigned table merits a different description, then type this in the Table Description box. 8. Once you have redesigned the table, click on OK to save it and return to Table Grid View. The table will be redrawn to reflect your changes and you can continue to enter data. Formatting columns in a database table Once you have designed your table and gone to Table Grid View - where you can begin to enter data - each field corresponds to a column. The formats you have already set for the fields – when designing the table - determine how data is displayed in the columns (see Formatting database fields on page 206 for more information). 204 Database However, there is another level of formatting available that can only be applied once you are in Table Grid View. Like the field formats, these formats also apply to the columns in your table and work alongside the corresponding field formats. The column formats are accessed through the Style command in the Format menu. The format options are: • Font • Colour • Borders • Align Since in a table only an entire column can be formatted, all you need to do to format the column is select the whole column by clicking on the bar at the top of the column or position the active cell anywhere in the column by clicking in any cell. You can also select several columns and format them together. Formatting fonts in a table Once you have selected a column (or columns), format the fonts as follows: 1. Select Style from the Format menu. The "Format Columns" dialog is displayed, turned to the Font page. 2. In the Font box choose a font for the contents of the column. 3. In the Outline box choose a style for the font. 4. In the Size box choose a size for the font. 5. In the Effects box you can switch on the checkboxes for Strikeout and Underline. 6. In the Textcolor box click on the arrow to display the full list of available colors and then click on the color you require. This option only colors the contents of the column, for instance, text or numbers. The formats you have chosen are displayed in the Preview box. Click on OK to apply the new fonts and styles to your table. Formatting a table for color Once you have selected a column (or columns), format them for color and 3-D effects, as follows: 1. Select Style from the Format menu. The "Format Columns" dialog is displayed. 205 Database 2. Click on the associated tab to turn to the Color page. 3. In the Interior group box there are two color palettes: one for Foreground and one for Background color. The box just above these is where you choose the pattern that combines the foreground and background color. The pattern and colors you choose will fill the whole of the column you are formatting, with text displayed on top of the pattern (in the color you chose, if any, in Textcolor on the Font page). Note: The default setting is white on white, that is to say, the white color button is depressed for both foreground and background. Obviously no pattern can be formed from this combination, as you can see from the absence of options if you click on the arrow in the pattern box. Likewise for any other color when it is selected in both palettes. To form a pattern, proceed as follows: 1. Click on a color in the Foreground palette and one in the Background palette (note that white is also a valid color option for either or both of the palettes). 2. Click on the pattern box arrow and select one of the displayed patterns. The pattern and its color combination are shown in the pattern box and also in the Preview box. You can proceed to combine different colors by experimenting with the palettes and the available patterns. 3. In the 3D-Effect group box choose whether you want the column to display its pattern in down mode (choose Inset), up mode (choose Raised), or normal mode (choose Normal). 4. The pattern, color and 3D effect are all displayed in the Preview box. 5. Click on the OK button to save and apply the new color formats. Formatting borders in a table Once you have selected a column (or columns), you can format the borders of all the cells in the column (or columns) as follows: 1. Select Style from the Format menu. 2. In the “Format Columns” dialog click on the Borders tab to go to the associated page. 3. Click on the Type and Color that you want to set for the borders. Click on the borders in Border for which you want to set the new type and color. As you click on these − Left, Right, Top, Bottom − one by one, the new formats will be displayed. If you wish to set border types and colors individually for the borders, click on the 206 Database relevant border along with the type and color you want it to have, and so on till you have formatted all the borders. Note that in setting borders in a particular table column all the cells in the column are affected. Alignment in database fields Once you have selected a column (or columns), you can determine how the data contained therein will be aligned or justified. 1. Select Style from the Format menu. 2. Click on the Align tab to go the associated page. 3. In the Horizontal box choose from Standard, Left aligned, Center and Right aligned. 4. In the Vertical box choose from Standard, Top, Center and Bottom. 5. Below these you can switch on Wrap Text, Allow Enter and Auto Size. Formatting database fields When you design a database table and create the fields for the table, you can also format the fields for such properties as: • case (whether text is to be upper, lower or mixed case) • width (the width of the field) • precision (how many decimal places a number can have) • indexes (primary key, unique index, or non-unique index) and other format properties, depending on the data type of the field. This is the field formatting level. (See Field data types on page 169 for information on data types and their associated formatting properties.) Once you have designed your table and gone to Table Grid View - where you can begin to enter data - each field corresponds to a column. The formats you have set for fields determine how data is displayed in the columns. However, there is another level of formatting available that can only be applied once you are in Table Grid View. Like the field formats, these formats also apply to the columns in your table and work alongside the corresponding field formats. These include font style 207 Database and size, background and foreground color, text color, alignment, and border styles (see Formatting columns in a database table on page 203 for more information). Changing the grid style To alter the way the grid (the border around the field contents) is used in the table, do the following: 1. Select the Options command from the Tools menu and go to the Grid Display page in the “Options” dialog. 2. In the Titles and GridLines group box most of the Grid display options are switched on by default: • 3D-Buttons - the bars at the top of the columns are 3D rather than flat • Vertical Lines - sets the vertical lines for the Table Grid • Horizontal Lines - sets the horizontal lines for the Table Grid • Mark Current Row - an arrow in the left hand row bar marks the current row • Mark Current Column - the bar at the top of the column is shown as up when column is not selected, otherwise down 3. In the Color group box you can select a color for the Table Grid. Click on the options for which you wish to set a color (Grid Lines, Fixed Lines, Tracking Line, Dragging Line, Background) and then select a color from the palette. 4. In the User Properties group box set the row and cell properties for the Table Grid: • Row resize mode (Automatic resizes all rows when you resize one row; Single allows you to resize single rows independently of other rows; None does not allow any row resizing) • Row print mode • Current Cell (choose a border thickness for the current cell i.e. the selected cell, from the drop-down list) 5. The changes you make are shown in the Preview box. Click on OK to redraw your table with the new Grid Style settings. Note that the new grid style is applied not only to the current table but also to any other tables you may open or create. 208 Database Changing the column width To change the width of a column: 1. Position the mouse pointer over the right hand edge of the column bar. 2. When the pointer turns to a cross, hold down the left mouse button and move the cross to where you want the edge of the column to appear. 3. Release the mouse button and the column will be redrawn with its new width. The new column width will be saved with the table and so will not be lost when you leave the database. Performing calculations in tables You can extract certain types of data about the records and columns in a table, query or relation, as well as perform some calculations. Select the Data option on the menu bar to access options for: • Count • Average • Sum • Calculate Average, Sum and Calculate can be used with a selection of the records rather than the whole table by defining a filter condition on the Condition page (see Performing calculations in a filtered table on page 210). • Count has options for All Records - counts the total number of records in the table (filters are disregarded); Current Filter - counts the number of records in the filtered table (if no filter has been applied the result is the same as for All Records); and Marked Records - counts the number of currently selected records. Select one of these and select OK. • Average allows you to find the average value of one or more numeric columns. In the Average page of the "Calculate Totals" dialog, click on the fields (columns) in Available Fields for which you want to find the average, and click on Add to move them to Selected Fields. If you want to move a field into a position between fields that have already been moved over, click on the field in Selected Fields above which you want the field to be inserted and use the Insert button rather than Add. Click on OK. The result is displayed in a "Summary Results" dialog, with an average value for 209 Database each selected column. You can print this or copy it to the clipboard. Click on Done to close the dialog when you have finished. • Sum allows you to find the total value of one or more numeric columns. In the Sum page of the "Calculate Totals" dialog, click on the fields (columns) in Available Fields for which you want to find the sum, and click on Add to move them to Selected Fields. If you want to move a field into a position between fields that have already been moved over, click on the field in Selected Fields above which you want the field to be inserted and use the Insert button rather than Add. Click on OK. The result is displayed in a "Summary Results" dialog, with a total value for each selected column. You can print this or copy it to the clipboard. Click on Done to close the dialog when you have finished. • Calculate allows you to perform various calculations on values in numeric columns. Select it to display the "Calculate Totals" dialog. In the Expressions group box you design the calculation you want to perform on a particular column: a. In the Field box click on the arrow to display a full list of the numeric columns in the table. Click on a field (column) to place it in the Formula box. b. Build the formula by clicking on "+", "-", "*", "/", "(", ")" in turn, as required, to insert them into the formula box, and by typing directly into the Formula box any numbers needed. c. Note that you can place as many fields as you want in the Formula box. If you make a mistake double-click on the inserted symbol, number or field to select it and then right-click and select Delete (or press Del on the keyboard). d. Once you have constructed the formula, click on the Add button to insert it into the large box at the bottom of the dialog. e. Click on Test to test that the formula is well formed, that is to say, it doesn't break any of the syntax rules for a formula, such as an unmatched bracket or a "+" sign with no expression following it. f. To clear the formula click on the Clear button. To remove selected expressions, first select the expressions to be removed and then click on Remove. g. Finally, click on OK to apply the formula. h. A "Summary Results" dialog is displayed, with the results of the formula shown in a column. You can copy this to the clipboard or print it. When you have finished, click on Done to close the dialog and return to the table. You can also perform a calculation on a limited number of the records by using Calculate in conjunction with filter conditions you set in the Condition box. 210 Database Example of a formula If you have two numeric fields, called Income and Outgoings, in a table called Thrift, which records the state of your monthly finances, you can apply the following formula to your table to work out the percentage of your income that you spend month by month: (Thrift.Outgoings / Thrift.Income) * 100 The formula will produce a summary column, displaying the monthly ratio of spending to income on a percentage basis. Performing calculations in a filtered table You can calculate averages and sums and perform various other calculations on the columns in a table (see Performing calculations in tables on page 208). In addition, you can carry out calculations on a selection of the records rather than all of them by defining a filter condition in conjunction with the calculation. When you select Average, Sum or Calculate from the Data menu, the “Calculate Totals” dialog is displayed with a Condition tab. This allows you to average, sum or perform calculations on a subset of the records in the table. Basically, the Condition box enables you to filter a table according to conditions you have specified and then extracts data from the filtered table according to which fields you selected in Average, Sum or Calculate. A Condition is always set in conjunction with one of Average, Sum or Calculate. To set a Condition follow these steps: 1. First choose the fields you want to perform the calculation on (see Performing calculations in tables on page 208). 2. Next, click on the Condition tab to go to the page where you design the condition expression. 3. The three boxes along the top line - Field, Operator, Value - are used to define a filter condition for each of the fields that is to be used in the filter. Ability takes the field you select and compares all the values in this field to the condition you specify for the filter. The filter selects only those records where the field value fulfils the specified condition. • Click on the arrow in the Field box to display the full list of fields in your table and then click on one of the fields to select it. • Click on the arrow in the Operator box to display the full list of operators that can be used to construct a condition. These include operators for: 211 Database Equals (=) Contains ($) Begins With (<$) Ends With (>$) Less Than (<) Greater Than (>) Less Than or Equal To (<=) Greater Than or Equal To (>=) Not Equal To (< >) Is Empty ("") Not Empty (!!) • In the Value box you type the value that is to be compared, using the operator, to the values in the field you selected in Field. For example, in a table that contains details on customers, you might select, say, Customer_Name in Field and < in Operator, and type S in Value. This would filter the table to show only the records where the Customer_Name begins with any letter less than S, that is, any letter before S in the alphabet. 4. Next, you need to insert the condition into the Condition box. Click on the Insert button to do this. 5. You can construct more complex conditions by using the Group Start, And, Or and Group End buttons. These allow you to use And and Or to link condition expressions, and to control the order of their evaluation using opening and closing brackets Group Start ( and Group End). Whenever you insert a condition into the Condition box, it is placed after the current contents of the box. Therefore, if you have already inserted a condition, you need to insert either an And or an Or before inserting the next condition. Also, judicious use of brackets will ensure that complex condition expressions are evaluated properly. 6. Once the conditions making up a filter are inserted and the relevant brackets have been placed, you can test the filter to check that it is well-formed, that is to say, it follows the syntax rules or "grammar" for a condition expression. Click on Test. If the condition expression is well-formed a message is displayed: "The Query is Correct!"; if it is not well-formed, an error message is displayed with an indication of what the error is e.g. brackets don't match, syntax error, etc. Note that a well-formed filter expression is merely "grammatically" correct, but doesn't necessarily mean what you want it to mean. For that you need to make sure the filter is well designed according to the purposes you set for it. 7. To delete the contents of the Condition box as a whole, click on the Clear button. If you only want to delete selected text, first select the text and then right-click your mouse and select Delete (or press Del on the keyboard). 8. After you have constructed the filter from the constituent conditions and tested it to check that it is well-formed, click on OK to apply the condition to your table. The 212 Database calculation you defined in Average, Sum or Calculate will only be performed on the filtered table. Note: The conditions set through the Data menu in this way are temporary and cannot be saved. If you wish to perform certain calculations regularly on a particular set of selected records, it may be better for you to design a named filter and apply it to your table before using the options in the Data menu. In this case you would not have to bother setting any conditions in the Condition box of the “Calculate Totals” dialog. Rearranging columns using the mouse You can rearrange columns in a database table. This is useful when you need to have two or more columns visible together on screen. To move a column: 1. Click once on the bar above the table to select the whole column. 2. Click again but hold the mouse button down. A small rectangle is displayed. 3. Continue to hold down the mouse button and move the rectangle to the column immediately to the right of where you want the selected column to be positioned. 4. Release the mouse button and the table will be redrawn with the columns rearranged. You can rearrange as many columns as you like. Note: Ability allows you to rearrange columns as an aid to working efficiently with your tables. It does not, however, overwrite the field order you established when you first designed the table. Any rearrangement of the columns will be lost when you close the table and the original order will be reinstated. However, if you want to re-use a particular column rearrangement, you can create a Columns selection that can be applied to your table at any time. Rearranging columns using a columns selection Ability allows you to rearrange columns in a table. This can be done very easily using your mouse (see Rearranging columns using the mouse on page 212). However, whenever you close a table the original column order, which you set when designing the table, is reinstated. If particular column rearrangements are to be used frequently, it is a good idea to create a columns selection. The selection can then be applied to the table at any time. The rearrangement defined by the selection will be applied until you close the table or apply another selection. To create a columns selection, do the following when in Table Grid View: 213 Database 1. Click on the Columns button in the Query toolbar (alternatively, select Columns from the Format menu). The "Format Query" dialog is opened at the Columns page. In the right-hand box, Selected Fields, all the fields in the table are listed. 2. Click on Remove All to move all the fields to the Available Fields box. 3. You can now start moving the fields back to the Selected Fields in the order you want. Click on the field you want to be first in the table and then click on the Add button. The field is then moved back to the Selected Fields box. 4. Click on the field you want to be second in the table and again click on Add. The field is moved back to Selected Fields and placed after the first field. 5. Repeat the operation till all the fields have been moved and placed in the order you want. 6. You can now give the column rearrangement its own name. Type a name in the Name box and then click on OK. You will be asked if you want to create a new column definition. Click on Yes. You will be returned to the Table Grid View with the new column arrangement applied. Note that the name of the columns selection appears in the box to the left of the Columns button on the Query toolbar. When you next want to apply this columns selection, all you have to do is click on the arrow at the right of the box and select the appropriate columns selection from the drop-down list. Hiding and showing columns in a database table While you are working in a table you might find it convenient to hide one or more columns. This is useful if you are currently working with only a few of the columns and find the others a temporary distraction. • To hide a column right-click your mouse anywhere within the column. Select Hide Columns from the displayed menu. The table will be redrawn on screen with the column hidden from view. • To hide several adjacent columns in one go, click and drag along the column bars to select the appropriate columns. Next, right-click and select Hide Columns from the displayed menu. The selected columns will be hidden. Ability prevents you from hiding all the columns by ensuring that at least one column remains visible, but you are free to hide all the rest. To show hidden columns, do this: 214 Database 1. Right-click your mouse and select Show Columns. The Columns page of the "Format Query" is displayed. The hidden columns are shown in the Available Fields box. 2. Click on a column that you want to show again and then click on Add. The column will be moved to the Selected Fields box. 3. Repeat the operation till all the columns you want to show are moved to Selected Fields. 4. If you want to show all the hidden columns, click on Add All. 5. Click OK and the table will be redrawn with the selected columns shown. Ability will hide columns until you choose to show them again or until you close the table. When you next open the table all previously hidden columns will be displayed once again. However, if you think you might want to hide the same columns frequently, you can create a columns selection, which can be applied at any time to your table. Hiding and showing columns using a columns selection Ability allows you to hide columns in a table. This can be done very easily as you work in your table (see Hiding and showing columns in a database table on page 213). However, whenever you close a table all the columns, which you defined when designing the table, are reinstated. If you want to hide the same columns frequently, it is a good idea to create a columns selection. The selection can then be applied to the table at any time. The columns selection will be applied until you close the table or apply another selection. To create a columns selection to hide select columns, do the following when in Table Grid View: 1. Click on the Columns button in the Query toolbar (alternatively, select Columns from the Format menu). The "Format Query" dialog is opened at the Columns page. In the right-hand box, Selected Fields, all the fields in the table are listed. 2. Click on a column that you want to hide, followed by Remove. The column will be moved to the Available Fields box. Repeat the operation till you have moved, from Selected Fields to Available Fields, all the columns you want hidden. The columns remaining in Selected Fields will be shown; those in Available Fields will be hidden. 3. You can give this columns selection its own name. Type it in the Name box. 4. Click on OK and then Yes, when you are asked if you want to define a new columns selection. You will be returned to the Table Grid View with the new columns selection applied. Note that the name of the columns selection appears in the box to the left of the Columns 215 Database button on the Query toolbar. When you next want to apply this columns selection, all you have to do is click on the arrow at the right of the box and select the columns selection from the drop-down list. The appropriate columns will then be hidden. Note that the converse of hiding selected columns in a table is that you show the remainder. This columns selection could just as well be defined as a selection of columns to be shown, rather than as columns to be hidden. To show columns that you have previously hidden, click on the arrow in the Columns box on the Query toolbar and select Columns - All from the drop-down list. This restores all of the columns in the table. If you don't want to show all the hidden columns follow these steps: 1. Right-click your mouse and select Show Columns from the menu. The Columns page of the "Format Query" dialog is displayed. 2. Click on the columns to be shown and click on Add to move them to Selected Fields. 3. Click on OK. You will be asked if you want to save the column definition. Click on No. (Only click on Yes if you want to change the definition of the original columns selection that was used to hide selected columns). The table will be redrawn with the selected columns shown. You can define a columns selection to show particular columns, which can then be applied to your table whenever you like. Sorting a table You can sort your table records alphabetically or numerically according to the values of key fields. In Ability sorting works in conjunction with the indexes and primary keys you have set for fields in your table. An indexed field will sort faster than one without an index. Also, when determining which fields to sort on, you need to take into account the types of indexes you have assigned to the fields. For instance, non-unique indexes allow duplicate values, and so you may wish to sort on a second field, in addition to the first, when it is possible for the first to contain duplicates (see Indexes and primary keys on page 191). You can perform a simple sort on a single field or more complex sorts on several fields at once. In addition, since any sort applied to a table is undone when the table is closed, you can save a sort as a Sort Order and re-apply it whenever you choose. Sorting on a single field To do a quick sort on a single field, follow these steps: 216 Database 1. Go into Table Grid View and click on the bar above the column (field) you want to sort on. The column will be selected. 2. Next, right click your mouse and select Sort Ascending or Sort Descending. The records will be sorted according to the values in the column. (You can also right click your mouse anywhere within the column without having first selected the column, except in the current cell if it is in edit mode). If you repeat the operation on another column, the records will be sorted according to the values in that column without regard for the first sort. Note: The Sort Order box on the Query toolbar indicates that the sort is Sort Order Untitled. This is the name given to any temporary sorts you apply to your table and is redefined for each temporary sort you apply. To cancel a sort and return to the original order of the records, right click anywhere in the table and select No Sort (alternatively, click on the arrow in the Sort Order box and select Sort Order - None from the drop-down list). Closing the table also cancels the sort. If you want to re-apply a particular sort order, it is a good idea to save it as a named Sort Order (see Sorting using a sort order on page 216). Note: If you have set a Primary Key for your table, canceling a sort returns you to the order imposed by the Primary Key. Sorting using a sort order A Sort Order allows you to sort on several fields at once. In addition, you can save a sort order and re-apply it at will. To create a sort order for a table, first go into the table and then follow these steps: on the Query toolbar (or select Sort Order from 1. Click on the Sort Order button the Format menu). The "Format Query" dialog is opened at the Sort Order page. All the fields of the table are initially listed in the Available Fields box. You need to select the fields you wish to sort on - and in the right order, to determine the priority for each of the sort fields. 2. Select the first field by clicking on it and then click on Add. The field will be moved to the Selected Fields box. 3. Select the next field and again click on Add to position it after the first field. 4. Repeat the operation till all the fields you wish to sort on have been moved to Selected Fields. The first field has priority one; the second field priority two; and so on. 217 Database 5. If you decide that you don't want to sort on a particular field or you have given a field the wrong priority, just click on the field in Selected Fields and click on Remove. The sort proceeds in this way: First sort: the first field is sorted - this is the main sort, with priority one. Second sort: the second field is sorted, but only if there were duplicate values in the first field i.e. the second field is sorted within the groups determined by the duplicate values in the first field. Third sort - the third field is sorted, but only if there were duplicate values within the groups in the second; and so on. Note: This has the consequence that if your table has a primary key or a unique index (or indexes) i.e. no duplicate values are allowed, and this is the first field to which a sort is applied, then sorting on the other fields can have no effect, no matter what type of indexing they have. The basic rule is that it makes sense to sort up to a primary key or unique index field, but not beyond. So if the first two fields, say, in a sort order are not indexed or have a non-unique index, and the third has a primary key or unique index, you would sort up to the third field but not beyond. 6. Once you have decided which fields to use in the sort order and the order of sorting, you can determine whether each of the fields is to be sorted in ascending or descending order. To do this click on each of the fields in turn and click on the Descending checkbox to impose descending order. The default is ascending, which is indicated by an unchecked Descending checkbox. Ascending order is A…Z, 1…n, descending order Z…A, n…1, as you would expect. 7. Give the sort order a name in the Name box and click on OK. You will be asked if you want to create a new sort order. Click Yes to save the sort order under the name you have given it. You are returned to the Table Grid View with the sort order applied. The name of the sort order is displayed in the Sort Order box on the Query toolbar. Whenever you need to apply this sort order in future, just click on the arrow in the Sort Order box and select the sort order from the drop-down list. Note: If you don't give a name to the sort order, the sort order you have defined will still be applied but it won't be saved for future use. In this case the Sort Order box on the Query bar will say Sort Order - Untitled, which is the title given to the last applied unsaved sort. Filtering a table Filtering is a way of selecting records from (or creating subsets of) a database table, according to values that you specify for certain fields. The filter can be either a simple 218 Database filter on a single field or a more complex filter on several fields at once. You can save and name complex filters for future use. Moreover, you can fine tune a named filter to apply conditions before selecting the records. Since any filter applied to a table is undone when the table is closed, you can save a named filter as a Filter and re-apply it whenever you choose. Filtering on a single field To do a quick filter on a single field, follow these steps: 1. Go into Table Grid View. 2. Choose a value in a particular column as the filter value. 3. Right-click your mouse on the cell that contains the chosen value and select, from the drop-down menu, one of the following: • • Filter Using Selection (choose one of the following operators to make a comparison with the current selected cell e.g. if the cell contains 10 and the operator selected is >, then only the records that have a number greater than 10 in this field will be selected) = Equal > Greater Than < Less Than >= Greater Than or Equal <= Less Than or Equal <> Not Equal Filter Excluding Selection (select only the records that do not include this value in this field/column). The table will be redrawn to show only those records allowed by the filter. Another filter can be applied on top of the first one: 1. Again right-click your mouse on a value in a particular column (this can be the same column as before or different). 2. Select either Filter Using Selection or Filter Excluding Selection. 219 Database You can apply as many filters as you like, each being applied to the records remaining on view after the application of the previous filter. To clear a filter or succession of filters, right-click anywhere within the table and select Remove Filter from the drop-down menu (alternatively, click on the arrow in the Filter box and select Filter - None from the drop-down list). Closing the table will also clear all filters. Note: The Filter box on the Query toolbar indicates that the filter is Filter - Untitled. This is the name given to any temporary filters you apply to your table and is redefined for each temporary filter or succession of filters you apply. If you want to re-apply a filter you can save it as a named filter, which can then be used as many times as you wish. Filtering using a named filter A named filter allows you to filter the records in a table and to save the filter for future use. You may also filter according to the values in several fields at once. In addition, you can specify conditions for the filter in order to fine-tune the record selection. Named filters can be saved and re-applied whenever you like. Note that if you only wish to filter according to the values in a single field, it is easier and quicker to use your mouse (see Filtering on a single field on page 218). To create a named filter for a table, first go into the table and then follow these steps: 1. Click on the Filter button on the Query toolbar (alternatively select Filter from the Format menu). The "Format Query" dialog is opened at the Filter page. The final filter expression will be contained in the Condition box but built up using the Condition Item box. 2. In the Condition Item group box you define a filter condition for each of the fields that is to be used in the filter. Ability takes the field you select and compares all the values in this field to the condition you specify for the filter. The filter selects only those records where the field value fulfils the specified condition. • Click on the arrow in the Field box to display the full list of fields in your table and then click on one of the fields to select it. • Click on the arrow in the Operator box to display the full list of operators that can be used to construct a condition. These include operators for: Equals (=) Contains ($) Begins With (<$) Ends With (>$) Less Than (<) 220 Database Greater Than (>) Less Than or Equal To (<=) Greater Than or Equal To (>=) Not Equal To (< >) Is Empty ("") Not Empty (!!) • In the Value box you type the value that is to be compared, using the operator, to the values in the field you selected in Field. Alternatively you can click on the arrow and choose a field from the drop-down list. In this case, the values of the field in Field will be compared to the values of the field in Value, for each record in the table. For example, in a table that contains details on customers, you might select, say, Customer_Name in Field and < in Operator, and type S in Value. This would filter the table to show only the records where the Customer_Name begins with any letter less than S, that is any letter before S in the alphabet. 3. Next, you need to insert the condition you have specified into the Condition box. Click on the Insert button to do this. 4. You can construct more complex conditions by using the Start, And, Or and End buttons. These allow you to use And and Or to link condition expressions, and to control the order of their evaluation using opening and closing brackets (Start and End). Whenever you insert a condition into the Condition box, it is placed after the current contents of the box. Therefore, if you have already inserted a condition, you need to insert either an AND or an OR before inserting the next condition. Also, judicious use of brackets will ensure that complex condition expressions are evaluated properly. If you make a mistake, you can edit the condition expression in the normal way by right-clicking your mouse. 5. Once the conditions making up a filter are inserted and the relevant brackets have been placed, you can test the filter to check that it is well formed, that is to say, it follows the syntax rules or "grammar" for a condition expression. Click on Test. If the condition expression is well formed a message is displayed: "The Query is Correct!"; if it is not well formed, an error message is displayed with an indication of what the error is e.g. brackets don't match, syntax error, etc. Note that a well-formed filter expression is merely "grammatically" correct, but doesn't necessarily mean what you want it to mean. For that you need to make sure the filter is well designed according to the purposes you set for it. 6. You can update or replace a particular condition. Select the condition you want to replace, including its surrounding brackets, in the Condition box and create a new condition in the Condition Item box. Click on the Update button. The selected condition will be replaced by the new condition. Note that everything you select in Condition will be replaced by the one condition you specify in Condition Item, so be careful to select only the text that you want replacing before selecting Update. 221 Database 7. To delete the contents of the Condition box as a whole, click on the Clear button. If you only want to delete selected text, first select the text and then right-click your mouse and select Delete (or press Del on the keyboard). 8. After you have constructed the filter from the constituent conditions and tested it to check that it is well formed, you can choose whether you want the filter to replace, act on top of or be added to a currently applied filter. You do this in the Filter Action box at the top right corner of the dialog. Click on the arrow and select one of Replace, And or Or from the drop-down list: • Replace is the default. Any filters currently applied to your table are ignored and the new filter is applied to all the records in the table. • And causes the new filter to be applied only to those records that are already selected by a currently applied filter. • Or causes the new filter to be applied to all the records in the table but will also leave selected any records that are already selected by a current filter. 9. Finally, you can give the filter a name in Name. 10. Click on OK to apply the filter. You will be asked if you want to create a new filter. Select Yes if you want the filter to be saved for future use under the name you have given it. You are returned to Table Grid View with the filter applied and the filter name displayed in the Filter box on the Query toolbar. When you next want to apply the filter, just click on the arrow in the Filter box and select the filter name from the drop-down list. Filter example This example applies some of the principles of filter design explained in Filtering using a named filter on page 219. Note: If you are new to filters, don't be put off by the length of the example. Since all of the conditions that go into making the filter are created in a similar manner, most of the example consists of "variations on a theme". Nevertheless, it should make clear to you the importance of thinking about the structure of a filter before actually creating it, the proper use of bracketing, and the difference between AND and OR. Imagine you have a table, called Contacts, with three fields, viz. Name, Age, and Occupation. You want to construct a filter that will display all contacts who are lepidopterists and more than 70 years of age, and whose names are either Smith or Jones (perhaps you wish to invite a select company to a private viewing of your butterfly collection). 222 Database The problem is to find all records such that: (Occupation = Lepidopterist) AND (Age > 70) AND (Name = Smith OR Name = Jones). Note that the two ANDs are specified across fields, that is we want to select records which contain field values that satisfy the first condition AND the second condition AND the third condition together. The one OR, which occurs within the third condition, is specified down records, that is we want to select only those records that have either 'Smith' or 'Jones' in the Name field. In the example, I have put AND and OR in capitals to give you an idea of the logical structure of the final condition expression. This requires us to create four conditions in total: three main conditions connected by ANDs, where the third condition is constructed out of two sub-conditions connected by OR. In the Condition Item box, create the first condition: 1. Click on the arrow in Field and select Contacts.Occupation. 2. Click on the arrow in Operator and select = Equals. 3. Click in the Value box and type Lepidopterist. 4. Click on the Insert button to insert the condition into the Condition box below. The expression inserted is: (Contacts.Occupation = 'Lepidopterist'). Note that the expression, as a whole, is surrounded by brackets, the typed value is surrounded by single quotes, and the expression is selected. 5. Next, you need to insert an AND. AND is inserted at the cursor position and will replace any selected text, so click at the end of the expression to deselect it and then click on the And button. This gives: (Contacts.Occupation = 'Lepidopterist') AND. 6. In the Condition Item box create the second condition: 223 Database 7. Select Contacts.Age in Field. 8. Select > Greater Than in Operator. 9. Type 70 in Value. 10. Again click on Insert. In the Condition box this gives: (Contacts.Occupation = 'Lepidopterist') AND (Contacts.Age > 70). Note that 70, as a numerical value, is not surrounded by quotes. 11. Click at the end of the compound expression and click on And to get: (Contacts.Occupation = 'Lepidopterist') AND (Contacts.Age > 70) AND. In the Condition Item box you can now create the third and most complex condition: 12. First, select Contacts.Name in Field and = Equals in Operator, and type Smith in Value. 13. Click on Insert to insert the condition. 14. In the Condition box click at the end of the compound expression and click on Or. This gives: (Contacts.Occupation = 'Lepidopterist') AND (Contacts.Age > 70) AND (Contacts.Name = 'Smith') OR. In the Condition Item box create the second part of the OR expression: 15. Select Contacts.Name in Field. 16. Select = Equals in Operator. 17. Type Jones in Value. 18. Click on Insert. In the Condition box this gives: (Contacts.Occupation = 'Lepidopterist') AND (Contacts.Age > 70) AND (Contacts.Name = 'Smith') OR (Contacts.Name = 'Jones'). 224 Database All the relevant conditions have now been inserted to form a compound condition expression. However, you must now insert brackets in the right places to make sure that the expression is evaluated properly. At present a filter using this expression will correctly select all the Smiths who are lepidopterists aged over 70, but will incorrectly select all Joneses, no matter what their occupation or age. This is because the OR has not been restricted to work only within the scope of the third - joint - condition. Therefore, you need to surround the two conditions connected by OR by another pair of brackets. 19. Click immediately before (Contacts.Name = 'Smith') and then click on Start ( to insert an opening (left-hand) bracket. 20. Click immediately after (Contacts.Name = 'Jones') and then click on End ) to insert a closing (right-hand) bracket. This gives you the final compound condition expression for your filter: (Contacts.Occupation = 'Lepidopterist') AND (Contacts.Age > 70) AND ((Contacts.Name = 'Smith') OR (Contacts.Name = 'Jones')). Rearranging it on the page should make the structure of the condition expression clearer: (Contacts.Occupation = 'Lepidopterist') AND (Contacts.Age > 70) AND ((Contacts.Name = 'Smith') OR (Contacts.Name = 'Jones')). Compare this with the outline of the problem I gave at the start of this example. Note that using Test will indicate a well-formed expression for both the correct version and the previous one with the extra brackets missing. This is because both expressions are perfectly legitimate, though they give different results. In addition, when I put in the extra brackets after inserting all the conditions, I did this to show you the difference brackets make to evaluation. There is nothing to stop you putting in extra brackets immediately they are needed. Queries A query is a way of applying various combinations of query components to tables and relations: • sort orders 225 Database • filters • column views • SQL statements Queries are useful in that they allow you to apply their components all in one go, rather than having to individually apply each one. The outcome of a query is a table in its own right. The query table is live and so reflects the latest state of the table or relation on which it is based. Queries can be saved, thereby allowing you to apply them whenever you need to. To apply a query you first need to have created a table in your database. You can create a query from Database Manager, and you can then apply it whenever you need to. Alternatively you can create a query while you are working in a table, and the query can then be applied immediately. Creating and applying a query The following steps show you how to create a query and then apply it to a table (you follow the same steps when you want to apply a query to a relation): 1. Go into Database Manager. 2. Right-click your mouse and select New and then Query. The "Format Query" dialog is opened. This is where you design the new query. 3. In the Based On box click on Table (or on Relation if you want to base the query on a relation) and then click on the arrow in the box just to the right. The drop-down list displays all the tables in the current database. Click on one of these to select it. This is the table that the query will be based on. 4. Next you need to select the query components that you want to apply to the table. It may be that you have already created some of these separately in Columns, Sort Order or Filter. If so, you can click on the arrows in the boxes in the Select Query Components group box. In each case the existing components will be displayed in a drop-down list. Click on the required components to select them. 5. However, you may need to design the query from scratch. Notice that the "Format Query" dialog has pages for Columns, Sort Order and Filter, as well as Query. Click on the respective buttons at the top of the dialog to access these pages in turn and to design the query components. For information on designing query components, see these sections: Rearranging columns using a columns selection on page 212 Hiding and showing columns using a columns selection on page 214 226 Database Sorting using a sort order on page 216 Filtering using a named filter on page 219 6. After you have designed and named a query component on a particular page, click on a button for one of the other pages to design another component. You will be asked if you want to create a new filter/column_definition/sort order, depending on the page. Click on Yes (alternatively click on OK if you want to apply the component immediately and close "Format Query"). 7. You can return to a page as many times as you like to design as many components as you think you might need for future queries based on this table. 8. Once you have finished designing the query components, go back to the Query page of "Format Query". 9. In the Select Query Components group box choose the components that you want the query to apply from the respective drop-down lists in the boxes. All the query components you have just designed will appear in the lists. 10. Finally, give the query a name in Query Name and click on OK. The query will be applied to your table and a Query table created. This is based on the original table, with the component conditions of the query applied. In Database Manager the new query will appear under Queries. Whenever you are in the database you can select the query directly without having to open the original table first. The query will always reflect any changes you have made to the table. Note that the individual query components - sort orders, column views, filters - are listed under the table from which the query was designed. Select the View SQL button to design more complex queries (see SQL Guide on page 464 for more information). Creating a query while working in a table If you want to apply a new query while working in a table, follow these steps: 1. Select Query from the Format menu to open up the "Format Query" dialog. Note that the table name is already selected in the Based on box. The table name is also grayed out to show that the query you are about to create must be applied to this table, that is you can't choose another table (or relation). 2. Select the required query components, if there be any, in the Select Query Components box, or use the individual component pages to design new components, as explained in Creating and applying a query on page 225. 227 Database 3. If you want to use this particular query again, then give it a name in Query Name and click on OK (otherwise leave the name blank). The query will be applied to the table, but you will remain in Table Grid View. If you gave the query a name, it will appear under Queries in Database Manager. Thereafter it can be used just like any other query; that is to say, if you select it again in future it will open up a Query table based on the original table, without you having to go into the table first. Editing a query To edit a query right-click on the query name in Database Manager and then select Format. The "Format Query" dialog is displayed. Alternatively, if you are already in a table, query table or relation, you can select Query from the Format menu. You can edit a query by going to the Query page in "Format Query". If you change the name of the query, the edited query will be saved under the new name and the original retained. If you then wish to delete the original, you can do so in Database Manager (see Deleting a database object on page 265). To edit a query without changing its name, that is to say, the edited query is saved under its existing name, use the drop-down lists in the Select Query Components group box to select the new query components (select None if you want to exchange a selected component for no other component). Note that in editing a query you can go to the other pages in the "Format query" dialog and edit or create new query components as required. See Editing query components on page 227. When you have finished editing the query click on OK. Editing query components You can edit a query component in the “Format Query” dialog. This has pages for Columns, Sort Orders and Filters, as well as Queries (see Editing a query on page 227). There are various ways of opening the dialog: • In Database Manager right-click on the query component name (this will be under the relevant table or relation name either in Column Views, Sort Orders, or Filters) and select Format. • If you are already in a table, query table or relation, you can select Query, Sort Order, Columns or Filter from the Format menu. Alternatively click on the relevant button on the Query toolbar. You can edit the query component by selecting the component name in the Name box and making changes as required in the body of the dialog. When you click on OK or 228 Database move to another page in "Format Query", you will be asked if you want to save the edited component. Click on Yes and the component will be saved with the changes made. If you also change the name of the component, you will be asked if you want to create a new component. In this case the edited component will be saved under its new name and the original component will not be changed. If you want to delete the original you can do this in Database Manager (see Deleting a database object on page 265). Joining tables When designing tables in Ability, you will often find that you are about to create a field for information that is already held in another table. For example, you may have a table that contains customer account information and another that contains invoice details. It would be inefficient and unnecessary to have customer names and addresses in both tables. In this case you would create a field, say for a unique customer account number, that both tables could have in common, and put the names and addresses of the customers in the customer accounts table alone. In order to relate such tables, Ability allows you to use the device of Relations to join tables. Joined tables must have at least one field in common, called the join field, by which they are related, thereby making it possible to view the contents of two tables together. The resulting table is called a Relation and you are allowed to apply Queries, Column Views, Sort Orders and Filters to it, just as you can with normal tables. You can join more tables to the tables you have already joined, with the proviso that each join is between common fields for adjacent tables. For example, a name field in one table may be joined to a name field in a second table, and an age field in the second table may be joined to an age field in a third table, even though the first and third tables do not share a common field. Note: The term common field requires that the joined fields have at least the same data type. For a join to make sense the fields should also contain similar data, that is to say, there should be the possibility that some of the records in the joined tables contain exactly the same data in the joined fields, otherwise there can be no match. The data contained in a relation is a live reflection of the data contained in the tables that are joined in the relation, that is to say, any change of data in the original tables is reflected in the related table. Likewise, any changes you make in the related table cause similar changes in the original tables. You can therefore update several tables while working only in the one related table. Whenever you join tables, all the fields from the original tables are shown in the relation. However, what records are shown from each of the original tables depends on the type of join you use. There are three options: • 229 Database Inner - only the records that have matching values in their join fields are shown • Left outer - all the records in the left hand table are shown but only the matching ones from the right hand table • Right outer - all the records in the right hand table are shown but only the matching ones from the left hand table Creating a relation To create a relation you should have already created at least two tables in the current database. In addition, the tables should have at least one field in common. See Joining tables on page 228 for more information. Note: It is important that the tables to be related have their join-field, that is the field that is to be common to the tables, set as either a primary key (in the case of the left-hand table) or as a non-unique index or no index (in the case of the right-hand table). See Indexes and primary keys on page 191 for more information. Indexes can be used to control what data is entered into a field: for instance, allowing no duplicates in a primary key field or as many duplicates as you like in an indexed or no index field. Obviously the use of indexes facilitates a relation between, say, a customer table, which wouldn’t normally contain more than one record per person, and an invoice table, which will often contain several records for the same customer. Follow these steps to create a relation between two tables: 1. In Database Manager right-click your mouse and then select New followed by Relation. The "New Relation" dialog is displayed. 2. In the Relation Structure box you decide which tables are to be joined, which fields are to be used as the join fields, and the type of join to be applied. Each line represents one join from one table to another. 3. Click in the Left Table field and click on the arrow to display a drop-down list of all the tables in the current database. Click on one of these to select it as the left table. Notice that the large left-hand box, just above the Relation Structure box, now displays all the fields in the table, with the name of the table appearing just above the box. 4. Next, click in the Join Field and click on the arrow to display a drop-down list of all the fields in the left table. Click on the field that you want to use as the join field. 5. Click on the arrow in the Right Table field to display a drop-down list of all the tables in the database, excluding the table already selected as the left table. Select one of these as the right table. 230 Database 6. Click in the Join Field and select the field from the right table that is to be joined to the join field from the left table. Notice that a connecting line is drawn between the two join fields, from the left table box to the right table box. 7. Finally, select the type of join from the Join Type box. The default is Inner, with Left outer and Right outer as alternatives. 8. You have now defined a relation between two tables. Give the relation a name in the Relation Name box and click on OK. You are returned to Database Manager, with the new relation listed under Relations. 9. Open the relation by double-clicking on the relation name in Database Manager. The relation table is displayed, along with all the fields from the two tables and the records allowed by the join fields and join type you chose. See Joining tables on page 228 for more information on types of join. At this point, if you want to join another table to the new relation, select Relation from the Format menu. This returns you to the "Format Relation" dialog. Notice that the table you chose as Right Table in the first line of the Relation Structure box is selected automatically as Left Table in the second line. Proceed along the line, selecting the table, join field and join type as appropriate. You can edit the data in a relation table and thereby change the data in the underlying joined - tables. Column views, sort orders and filters can be applied in exactly the same manner as for ordinary tables (see Queries on page 224 and Query components on page 164). Relating tables using forms You can relate tables by using a Database Field while in Form mode to see data from a field in another table. The following example shows you how to go about this. Example You have two tables, Orders and Products, as shown below. It is your aim to design a form that will show, for each order, the product name, the quantity, and the cost per item. Orders Order_ID Product_ID Quantity ORD1 ORD2 ORD3 A003 A001 A003 5 7 4 ORD4 A002 3 231 Database ORD5 ORD6 A002 A004 Product_ID A001 A002 A003 A004 Description File Lamp Pen Fan 2 6 Products Cost 2.99 25.50 1.20 18.99 1. Open the Orders table. 2. Click on the View Form the Orders table. 3. Click on the Design button on the toolbar to open up an auto-form based on button. 4. You now need to insert two lookup fields from Products, namely, Description and Cost. You will need to insert each field separately, using the “Insert Field Wizard”. To see how to do this, go to Inserting a lookup field on page 239. Note: In this example the following selections should be made in “Insert Field Wizard”. Since the field that connects the two tables is Product_ID, you should select it as both the Data Field and the Lookup Field. Select the Products table as the Lookup Source. Since we want to show the product name rather than just the Prodcut_ID, we will choose the Description field from the Products table as the Display Field. The same selections are made when inserting the second lookup field, only this time you should select Cost as the Display Field. Once you have inserted the lookup fields you should return to browse mode to scroll through the records. The two lookup fields will display the name and the cost respectively for each order. You can hide any field you don’t want to see in your form (see Hiding fields from the form on page 235). 232 Database Form view A form is an alternative view of a database table. In a form, the data is displayed one record at a time in whatever layout you want. It is often easier to add and edit records in a form than it is using the table grid view. There are two processes in forms - creating forms and using forms - and so it has two modes of operation: design mode and browse mode. Design mode is used to create the page layout and to create and position fields. The operation of a form in design mode is similar to Draw. Browse mode is used for working with the data – you can view and edit records, create filters to select subsets of records, hide and show fields, rearrange the order of fields, apply sort orders and print records, just as you can in table grid view. Any changes you make in a form are reflected in the underlying table. The form can be created either by opening a standard auto form, or else by creating and designing the form yourself. Opening an auto form The easiest way to get started with a form is to look at an auto form. 1. Select the table (or query or relation) you want to use in Database Manager. 2. Click on the View Form the View menu. button on the toolbar, or select the Form command from A form is created based on the current table, along with any column views, sort orders and filters that have already been applied in Table Grid View. The auto form is opened in Browse mode (see Using browse mode in a form on page 233). You can modify an auto form according to your own design while in Design mode. Design mode You may decide you want to make modifications to the layout of an auto form. Auto forms make a good starting point for designing your own customized forms. Click on the Design button View menu. on the toolbar or select the Design command from the 233 Database Forms switches from browse to design mode and the toolbar changes to the Draw toolbar. Design mode works in a similar way to the Draw module – you can add and edit text boxes and graphical elements (see Creating a drawing on page 386 for information on how to use the Draw module). Ability allows you to reposition fields in the form and to insert various types of object: database fields, formula fields, summary fields, table grids, page numbers, date and time, pictures, and other objects (see Creating a new form on page 236 for information on how to use these). If you have made any changes to the form while in design mode, you will be asked if you want to save the changes when you try to switch to Grid View or close the form. You will then be asked to give the form a name. This form will now be classed as a Saved Form, rather than an auto form, and will be attached to the relevant table. Next time you are in the table and you switch to Form View, a "Change Form Type" dialog will be opened, which will give you the opportunity of choosing a new auto form view or the named (saved) form view. You can create as many named form views, attached to the one table, as you like. These can be opened directly from Database Manager (see Opening an existing form on page 233). To go back to working with your data, switch to browse mode by selecting the Browse button on the toolbar or the Browse command from the View menu. See Editing fields in forms and reports on page 249 for information on editing and moving fields in form design mode. Opening an existing form • To open an existing form in browse mode, select the form in Database Manager and double-click to open it (alternatively right-click and select Browse). You will go straight into the form view without having to go into the corresponding table first. • To open the form in design mode, select it in Database Manager, right-click and select Design. Using browse mode in a form You use browse mode to actually work with the data from your database table. In browse mode you can page through your records, edit, add and delete records, create filter queries to select subsets of records, hide and show fields, and apply sort orders. These operations are the same as those you use when working in Table Grid View. You can switch to browse mode, if you are in design mode, by clicking on the Browse button on the toolbar or selecting the Browse command from the View menu. 234 Database Here’s a summary of the things you can do in forms browse mode: • Page up and down through the database table (see Moving around in a form on page 234) • Edit, add and delete records (see Adding records on page 197, Editing records on page 235, and Deleting records on page 200) • Print records (current form, all forms or a subset of forms). • Switch to a table grid view or to form design mode. • Create filters (see Filtering a table on page 217) • Apply sort orders (see Sorting a table on page 215) • Hide fields (see Hiding fields from the form on page 235) • Show fields (see Showing hidden fields in the form on page 236) Moving around a form To move around a form, you would usually use the mouse and click to put the cursor where you want it. You can use the scroll bars at the right and bottom of the screen to view more of the form. However, you can also move the cursor using the keyboard, and there are times when this can be quicker. The following table shows all the ways you can move the cursor, whether within a particular form (the same record) or to another form (another record). Key Description tab Go to the next field. shift+tab Go to the previous field. home Go to the start of current field. ctrl+home Go to the first record (form) end Go to the end of current field. ctrl+end Go to the last record. page up Scroll one screen upwards, but go to previous record when top of page is reached 235 Database ctrl+page up Go to the previous record. page down Scroll one screen downwards, but go to next record when end of page is reached ctrl+page down Go to the next record. You can also use the buttons on the Record toolbar to move through the records in your table. Browsing through the database table You can use the four movement buttons on the browse Record toolbar to move forwards and backwards through the records in your table (whether in Grid View or Forms): Next Previous First Last You can also use the Record menu to access the same commands. Editing records In browse mode all the data is “live” – you can edit the contents of fields by moving the cursor to them and typing in new information. Any changes you make will automatically be saved as soon as you move to another cell. You can reverse the changes you’ve made to the current field by clicking on the Undo button on the toolbar (or selecting the Undo command from the Edit menu). Hiding fields from the form You don’t need to display every field from the database table on your form. To remove a field from Form View, right-click your mouse and select Columns. The Columns page of the "Format Query" dialog is displayed. Remove the columns you want to hide from Selected Fields to Available Fields. This works in the same way as for a table (see Hiding and showing columns using a columns selection on page 214). 236 Database Note: If you have already hidden some fields while in Table Grid View, these fields will also be hidden when you go to Form View. This will not be the case the other way round though, unless you use a named columns definition in forms to hide columns. Showing hidden fields in the form You can show hidden fields by right clicking your mouse and selecting Columns. The Columns page of the "Format Query" dialog is displayed. Transfer the columns you want to show from Available Fields to Selected Fields by using the Add buttons. This works in the same way as for a table (see Hiding and showing columns using a columns selection on page 214). Creating a new form Forms can be created in three ways: • an auto form directly from the table (see Opening an auto form on page 232) • an auto form which is redesigned in design mode, given a name and saved as a named form (see Design mode on page 232) • a new form which is designed from scratch and is not based on an auto form (see Creating a form from scratch on page 236) Creating a form from scratch To create a form from scratch rather than basing it on an auto form, follow these steps: 1. Go to Database Manager and right-click your mouse. 2. Select New and then Form from the displayed menu. A "Create Form Wizard" dialog is displayed. 3. On the first page of the dialog choose the layout of the form in the Types box: Fields arranged down form Fields arranged across form Click on Next to go to the following page. 4. On this page choose whether you want to base the form on a Table, Query or Relation. Selecting, say, Table causes all the tables in your database to be displayed in the Choose a database object box. Click on the table (or query or relation) you want the form to be attached to, and then click on Next. 237 Database 5. On this page you choose which fields in the table (query or relation) you want to appear in the form. Select these one by one in the Available Fields box and click on the Add button each time to move them to the Selected Fields box (use the Add All button if you want to move all of the fields across). You can determine the order of the fields as you are doing this. If you make a mistake or change your mind, use the Remove buttons. 6. Click on Finish. A new form is created and displayed in design mode. The fields chosen from the attached table (or query or relation) are displayed in the order and with the form layout type you set. It is a good idea at this point to save the form and give it a name. Select Save Form from the File menu. You will then be asked to give the form a name. Click on OK once you have done this. Note that in form design mode the drawing toolbar is displayed. This has the same functionality as the toolbar in Draw. You can draw lines, shapes and frames, and add text. Ability allows you to insert database fields (that is, fields from the attached table that you may have forgotten to select in Available Fields), formula fields, summary fields, table grids, page numbers, date and time, pictures, and other objects. You can resize form fields and inserted fields or move them to different locations in the form: click on the field and drag the handles to resize, or move the field by dragging and dropping the whole field in a new position when the crossed arrows appear. See Inserting the date and time into a form or report on page 248 Inserting a picture into a form or report on page 248 Inserting an object into a form on page 248 Inserting fields into a form You can insert various types of field into a form when in design mode: • Database Field • Formula Field • Lookup Summary Field 238 Database • Table Grid These can be accessed individually by selecting them from the Insert menu. All four use the standard "Insert Field Wizard" dialog, with each being designed on its own page. Inserting database fields into a form To insert a database field into a form you first need to make sure you are in form design mode. You can insert any field from those already in the attached table or a field from another table. If you based the form on an auto form, then you merely need to show fields that you have previously hidden. However, it could be that you want a field to appear more than once in the form. In this case you need to specifically insert the field. If you created a new form and did not base it on an auto form, then it could be that you forgot to include a particular field or that you want some field to appear more than once. Again, in this case, you need to insert the field. For information on how to insert a database field, see Inserting a database field on page 81. Inserting a database field To insert a database field into a form or report, follow these steps: 1. Select Database Field from the Insert menu. 2. The mouse pointer will turn to a cross. Use your mouse to position the cross at the point where you want the database field to appear (you can move this again later, if you want). 3. Click once. The "Insert Field Wizard" dialog is displayed, turned to the database field page. 4. In the Database Field group box you choose the field you want to insert. Note that the Database Name line gives the name of the current database and its file path, and the Data Source line identifies the table (or query or relation) to which the form or report is attached. 5. Click on the arrow in the Data Field box to display a drop-down list of all the fields in the attached table. Select the field you want to insert. The name of the field will also appear in the Field/Label Name box. This is the name that will appear as the label for the field in the form or report. You can edit the label name if you want, although the field itself will retain the name you gave it when designing the table. 239 Database 6. Click on Next to go to the Control Type page. Here you can select a control type for the field (see Control types on page 416). If you want to insert the field you chose, in step 5, from the attached table, leave all the control types blank. (However, see Inserting a lookup field on page 239 for information on using the combo box control type with lookup fields). 7. Click on Next to go to the next page, where you can determine the font, alignment, gap and position for the field label (see Editing field labels on page 259). 8. Click on Finish to close the "Insert Field Wizard" and return to form design mode or report view. The new database field will be inserted. Repeat the process for every database field you want to insert. Inserting a lookup field A lookup field is a type of database field and can be inserted into a form or report. It is useful when you want to insert a field from another table into a form or report based on the current table. A lookup field can also be used to link to a field in another table while displaying the data from a different field. To insert a lookup field into a form (or report), you should first make sure you are in form Design mode (or Report View for a report), and then follow these steps: 1. Select Database Field from the Insert menu. 2. The mouse pointer will turn to a cross. Use your mouse to position the cross at the point where you want the database field to appear (you can move this again later, if you want). 3. Click once. The "Insert Field Wizard" dialog is displayed, turned to the database field page. 4. In the Database Field group box you choose the field you want to insert. Note that the Database Name line gives the name of the current database and its file path, and the Data Source line identifies the table (or query or relation) to which the form or report is attached. 5. Click on the arrow in the Data Field box to display a drop-down list of all the fields in the attached table. Select the field you want to insert. The name of the field will also appear in the Field/Label Name box. This is the name that will appear as the label for the field in the form or report. You can edit the label name if you want, although the field itself will retain the name you gave it when designing the table. 240 Database 6. Click on Next to go to the Control Type page. To insert a lookup field select the Combobox option (see Control types on page 416 for more information on control types). 7. Click on Next to go to the next page, where you can determine the font, alignment, gap and position for the field label (see Editing field labels on page 259). 8. Click on Next to go to the design page for the Combobox control type. 9. In the Control Source group box click on the Lookup Choices checkbox to switch it on. 10. Click on the Lookup Source button and select a table (or query or relation) from the “Lookup Source” dialog. 11. Click on the Lookup Field arrow and select a field from the lookup source table. 12. Click on the Display Field arrow and select the field whose contents you want to be displayed in the inserted lookup field. 13. Click on Finish to close the "Insert Field Wizard" and return to form design mode or report view. The new lookup field will be inserted. In forms you should now click on the Browse button to return to browse mode, where you can scroll through your records. Inserting formula fields into a form or report To insert a formula field into a form (or report), you need to be in form design mode (or report view) first, and then follow these steps: 1. Select Formula Field from the Insert menu. 2. The mouse pointer turns to a cross. Place this where you want the field to appear and click once on your mouse. The "Insert Field Wizard" dialog is displayed, turned to the formula field page. 3. In the Formula Field group box you design the formula you want to insert. You can either type a formula directly into the Formula box or create a formula by clicking on the Functions button to access the standard Ability functions. If you leave the Formula box empty the inserted formula field can be used as a normal text field. 4. If you want to show the formula rather than its result, click in the Show Formula checkbox to switch it on. 5. Click on Next to go to the control type page, where you can choose what sort of control to use with the formula (see Control types on page 416). 241 Database 6. Click on Next to go to the last page, where you can set field specific attributes, such as Hide Zeros, Hide Errors, and Edit Source.(for setting up two-way links). 7. Click on Finish to close the "Insert Field Wizard" and return to form design mode (or report view). The formula field will be inserted at the place you chose. Repeat the process for every formula field you want to insert. Inserting a lookup summary field into a form or report The lookup summary field establishes a join between a selected field in one table (the table that is attached to your form or report) and a matching field in a second table (the joined table). It then uses this join to summarize the information held in a selected numeric field from the joined table. The matching records from the joined table are grouped together according to the field values from the first table. To insert a summary field into a form (or report) you need to be in form design mode (or report view) first, and then follow these steps: 1. Select Lookup Summary Field from the Insert menu. 2. The mouse pointer turns to a cross. Place this where you want the field to appear and click your mouse once. The "Insert Field Wizard" dialog is displayed, turned to the lookup summary field page. 3. In the Data Field box you select a field from the attached table. Click on the arrow to display a list of all the fields in this table and click on one of these to select it. 4. In the Lookup Field Source group box you select the table (or query or relation) and field you want to join to and the field in the joined table for which a summary is to be calculated: • Click on the button to the right of the Join Source box. A list of all the tables (or queries or relations) in the current database is displayed. Click on the table you want to join to, and then click on OK. • In the Join Field box, click on the arrow to display a list of all the fields in the table you have just selected in Join Source. Click on one of these. (Note that it is your aim to match records in the table to which Data Field belongs with records in the Join Source table, so make sure you select fields that have the same data type and the possibility of some matching values. For example, you might select a Surname field in both.) 242 Database • In the Lookup Field box, you select the field in the joined table that contains the information which is to be summarized. Since most summary information is calculated using numeric values, this should nearly always be a numeric field. • In the Lookup Formula box you select the type of formula to apply to Lookup Field. Choose from the following list: Count (counts the number of matching records) Sum (sums the values in the matching records) Minimum (finds the minimum value in the matching records) Maximum (finds the maximum value in the matching records) Average (finds the average value of the matching records). Obviously this normally requires that the field you select in Lookup Field be of numeric data type. The exception is Count, which can be used to count the number of matching records irrespective of the data type of the Lookup Field. 5. Finally, click on Next and then on Finish to insert the lookup summary field at the place you chose. Using lookup summary fields in forms or reports: example This example shows you how to use lookup summary fields in forms and reports (see Inserting a lookup summary field into a form or report on page 241). You have two tables in a database, one called Employees which contains employee names and ID numbers, and another called Holidays, which contains employee ID numbers and information on holidays yet to be taken by each employee by the end of the year, excluding the general Christmas holiday. Employees ID Surname First_name 1 SMITH JACKIE 2 ROACH PHILIPPA 3 ENGLAND CHRIS 4 COLEMAN JOEL 5 SMITH JAMES 243 Database 6 HOWLETT PAULINE Holidays ID Holidays Days 6 November 2 - 5 4 5 October 2 - 15 10 4 October 3 - 7 5 6 December 1 - 5 5 1 October 21 - 23 3 4 December 2 - 4 3 5 November 18 - 22 5 Your aim is to make a summary of each employee’s holiday entitlement. Note that not all the employees have holiday entitlement and that of those who do some have more than one period, that is to say, they are listed more than once in the Holidays table. Note also that there are two employees called Smith, hence the importance of using a unique identifier, in this case an ID number, for each employee. You can insert a lookup summary field into any form or report that is already attached to the Employees table. Make sure you are in form design mode or report view first. To insert a lookup summary field follow these steps: 1. Select Lookup Summary Field from the Insert menu and click once at the place where you want the field to appear. 2. In "Insert Field Wizard" do the following: • In the Data Field box, select the ID field from the Employees table. • In the Join Source box, select the Holidays table. • In the Join Field box, select the ID field from the Holidays table as the common field. 244 Database • In the Lookup Field box, select the field from which you want to extract summary information. Obviously in this case it is the Days field in the Holidays table. • In the Lookup Formula box, select one of Count, Sum, Minimum, Maximum and Average. In this case select Sum. These work as follows: Count gives the number of periods of holiday for each employee; Sum gives the total number of days of holiday for each employee; Minimum and Maximum give the number of days of holiday in the shortest and longest periods respectively for each employee; Average gives the average number of days of holiday for each employee across all the periods. 3. Click on Next and then click on Finish. 4. It is a good idea to save the form (or report) at this point. Select Save Form (or Save Report) from the File menu and give the form a name. The summary field is inserted. If you have inserted the lookup summary field into a form, click on the Browse button to go to browse mode. You can now use the Record buttons to move through the forms. Each form corresponds to a record in the original Employees table. Since you have selected Sum in the Lookup Formula box, the result in the summary field in each form will be the total number of days of holiday for the corresponding employee i.e. the corresponding ID number. For employees without holiday entitlement, that is those with ID numbers that do not appear in the Holidays table, a #REF message is displayed in the summary field, indicating that there is no reference from that ID number in Employees to a corresponding ID number in Holidays. Inserting a table grid into a form Ability allows you to insert a table grid into a form. The inserted table establishes a join between a selected field in the attached table (on which the form is based) and a matching field in a second table (the joined table) from the same database. It then uses this join to select matching records from the two tables according to the values in the join field. The join fields should be of the same data type and have the possibility of containing common data. To insert a table grid into a form you need to be in form design mode first, and then follow these steps: 245 Database 1. Select Table Grid from the Insert menu. 2. The mouse pointer turns to a cross. Move this to where you want the field to appear, hold down the left button and drag the cross to create a box outline for the table. Release the button. The "Insert Field Wizard" dialog is displayed, turned to the table grid page. 3. In the Data Field box click on the arrow to display a list of all the fields in the form's attached table. Select the field that is to be the join field. 4. Click on the button to the right of the Join Source box to display a list of all the tables (or queries or relations) in the current database. Select the table you want to join to, and then click on OK. 5. Click on the arrow in the Join Field box to display a list of all the fields in the table you selected in Join Source. Select the field that you want to join to the field you selected from the attached table in Data Field. Click on Next to go to the next page. 6. On this page you select the fields (columns) from the joined table that are to be displayed in the inserted table. By default all the columns are listed in the Hidden columns box. Select the columns, in turn, that you want to be visible, and then click on Show for each one to move it to the Visible columns box. Note that in this manner you can also determine the order of the columns in the inserted table. 7. Finally, click on Finish to insert the table into the form. 8. Since the form is in design mode, click on the Browse button mode. to switch to browse In browse mode you can scroll through the records from the attached table using the Record buttons. The inserted table will display the information from the fields you chose to show from the joined table, according to whether the join field matches the corresponding field in the attached table. Where there was no match the inserted table will be empty. Inserting a table grid into a form: example You have two tables in a database, one called Employees which contains employee names and ID numbers, and another called Holidays, which contains employee ID numbers and information on holidays yet to be taken by each employee by the end of the year, excluding the general Christmas holiday. The aim is to display a table in forms for each of the records in the attached table. Employees 246 Database ID Surname First_name 1 SMITH JACKIE 2 ROACH PHILIPPA 3 ENGLAND CHRIS 4 COLEMAN JOEL 5 SMITH JAMES 6 HOWLETT PAULINE Holidays ID Holidays Days 6 November 2 - 5 4 5 October 2 - 15 10 4 October 3 - 7 5 6 December 1 - 5 5 1 October 21 - 23 3 4 December 2 - 4 3 5 November 18 - 22 5 Assuming you have already created a form that is attached to the Employees table and that you are in form design mode, follow these steps: 1. Select Table Grid from the Insert menu. 2. Position the cross at the place you want in the form, depress the left mouse button and release. 3. In "Insert Field Wizard" make the following selections: • In Data Field select the ID field from Employees 247 Database • In Join Source select the Holidays table • In Join Field select the ID field from Holidays • Click on Next to go to the next page 4. Move the ID and Days fields from Hidden columns to Visible columns, using the Show button. 5. Click on Finish to insert the field. 6. Click on the Browse button to switch from design mode to browse mode. Use the Record buttons to move through the forms. Since each record in the attached table has a corresponding form view, there will also be a corresponding table in each form. The table will have fields for ID and Days. The first form will show a table with ID number 1 and Days 3; the second form (for ID 2, that is Philippa Roach) will show a blank table (there is no ID 2 in the Holidays table); the sixth form will show a table with two records (ID 6, that is Pauline Howlett, has two holiday periods of 5 and 4 days respectively); and so on for the other forms. Inserting a page number into a form or report To insert a page number field into a form (or report) you need to be in form design mode (or report view): 1. Select Page Number from the Insert menu. 2. The mouse pointer turns to a cross. Place this where you want the field to appear and click once on your mouse. 3. The page number field will be inserted at the chosen place. (a) In forms, click on the Browse button to switch to browse mode. As you use the Record buttons to scroll through the forms, each form will display its own page number. If you alter the order of the records by applying a sort order, the new order of forms will still be numbered consecutively from 1 upwards. (b) In reports, click on Print Preview. Each page will be numbered in order. Note that with a report it makes sense to put the page number in the Page Header or Page Footer. 248 Database Inserting the date and time into a form or report To insert the current date and time into a form (or report) you should be in form design mode (or report view): 1. Select Date and Time from the Insert menu. 2. The mouse pointer turns to a cross. Place this where you want the date and time field to appear and click once on your mouse. 3. The field will be inserted at the chosen place. (a) In forms, click on the Browse button to switch to browse mode. Each form will now contain the current date and time. (b) In reports, click on Print Preview. Each page will display the date and time. Note that the date and time field is repeated every time the section where it was inserted is repeated. Note that the date and time field is live and so will alter as the date and time change. Inserting a picture into a form or report To insert a picture into a form (or report) you should be in form design mode (or report view): Select Picture from the Insert menu. The "Open" dialog is displayed. You should locate the directory of the required picture file as normal and then double-click on the file (or click on Open) to close the dialog and insert the picture. Note that before the picture is inserted the mouse pointer, which will have turned to a cross, should be moved to a suitable position in the form before clicking once. You can always move or resize the picture once it has been inserted. Once you have inserted the picture field, click on Browse to switch to browse mode in forms (or click on Print Preview in reports). The inserted picture will be displayed in each of the forms (or in the report). Inserting an object into a form To insert an object into a form you should be in form design mode: 1. Select Object from the Insert menu. 2. The mouse pointer turns to a cross. Move this to where you want the object field to appear, click and drag your mouse to create a box for the object field, and release. 249 Database 3. The "Insert Object" dialog is displayed, in which you can locate the object that is to be inserted. 4. Once you have inserted the object field, click on Browse mode. to switch to browse The inserted object will be displayed in each of the forms. Editing fields in forms and reports You can change the position and size of any field in your form (or report) and edit the field's properties. To do this you need to be in form design mode (or report view): Left-click on the field to resize it using the handles and to reposition it by dragging. To change the properties of a field, left-click on the field to select it and then right-click and select Properties from the drop-down menu (alternatively, left-click on the field to select it and edit individual properties by selecting them from the Format menu). The "Format Object Style" dialog is displayed. Note that the properties accessible in the dialog depend on the type of field you are editing. The following table lists the properties that you can edit: Field property Description General Data fields, data sources, formulas used in the field, etc. Color Background and foreground color of the field Font Font styles and sizes Style Pen and brush styles Border Border types Align Align the field's contents left, right or center Control Edit control type Label Edit placement and alignment of label Attributes Choose various field attributes e.g. Hide Zeros, Edit Source Format Display format for numbers, dates, and times 250 Database Multi-page forms Ability allows you to use more than one page when designing a form. You may find that you have too many fields to fit onto a single page, and so need to use another. Before selecting the type of field to insert or the shape that you want to use to create a drawing, go to the required page by using the right hand and bottom scroll bars (to scroll below and to the right of the first page respectively). The new page will be visible on screen for you to insert fields and design drawings. Note that extra pages are available both below and to the right of the first page. Reports Reports provide a powerful method of analyzing database information and allow you to present your data in a more attractive and effective way. The basic data in a report comes from an underlying table (or query or relation), although you can summarize the data and also insert various types of field. The report can be designed using the full resources of the Draw module. You can preview a report on screen and then print it for maximum impact. Opening an auto report Auto reports are an easy and efficient way of creating reports. When browsing any table, relation or query, you can always create an auto report with a single click, as in step 4 below. To get the most out of this feature though, it is best to select the columns, sort order and filter conditions for the report first , as follows: 1. In table grid view, select the columns you want to see in the report – if you start with all columns, use the right mouse button to hide the columns you don’t want (for more details on column selections, see Hiding and showing columns in a database table on page 213). 2. Apply any filters you want. Use the right mouse button to perform a quick filter selection; alternatively use the filter dialog for a more complex filter– see Filters on page 217 for more details. 3. Still in table grid view, select a sort order for the report. Sorting has special significance for the auto report: data will be sorted and grouped together, with group totals appearing automatically. You can sort on multiple levels – see Sort orders on page 215 for more details. 4. Finally, select the Report button or select Report from the View menu. 251 Database The report is initially divided into several sections separated by bars. Each bar heads its own section, in which you can display data or enter text and graphics. Here is a list of the bars and what they stand for: • Report Header - a header for the whole report on the first page • Page Header - a page header for every page (by default, the table field names) • Detail - the main body of the report, which displays the table fields • Page Footer - a page footer for every page • Report Footer - a footer for the whole report on the last page, which automatically displays total summary information for some of the fields Note that the Draw toolbar is also displayed. Detail of an auto report • An auto report places the fields from the underlying table in the Detail section. • In the Page Header section the names of these fields are displayed underlined in text boxes. You can see that the page headers will be used as titles for the columns in the report. • The Report Header and Page Footer sections are left empty for you to insert fields, if you wish. • The Report Footer section automatically displays total summaries for several of the fields displayed in the Detail section: the first Character field (Count) and all the Numeric fields (Sum). The basic detail filled in by the auto report is sufficient to produce a good example of how on the toolbar to see how the auto a report works. Click on the Print Preview button report will look when printed, with all the relevant data displayed (see Viewing a report in print preview on page 263 for information on previewing your reports). Return to Report View by clicking on Close. You can edit an auto report to change its layout, add or delete fields, insert summaries, format the sections, and so on (see Editing reports on page 257). Any graphics, fields or text boxes you insert into a section will be repeated whenever the section is repeated in Print Preview. For instance, since a page header is repeated at the top of every page, any objects inserted into the page header section will also be repeated at the top of every page. Also, since the fields in the Detail section represent 252 Database one record in the underlying table, any objects inserted will be repeated for every record displayed in Print Preview. If you make changes to an auto report, when you try to close it you will be asked if you want to save the report. If you say Yes, you will then be asked to give the report a name. In future when you switch to Report View from an open table, you will be given the choice of opening another auto report or an already existing named report based on this table. You can open a named report directly from Database Manager (see Opening an existing report on page 252). Opening an existing report To open an existing report, select the report name in Database Manager and then do one of the following: • Double-click to open the report in Print Preview • Right-click and select either Preview to go straight into Print Preview, or Design to go into Report View. You will go straight into print preview or report view, without having to open the corresponding table first. Creating new reports To create a new report from scratch, follow these steps: 1. You first need to go into Database Manager. 2. Right-click your mouse and select New, followed by Report. The "Create Report Wizard" dialog is opened. 3. On the first page of the dialog you choose the type of the report, from these options: • Fields arranged across report • Fields arranged down report • Labels (see Types of report on page 254 for more information) The following steps assume you have selected either Fields arranged across report or Fields arranged down report (since Labels works slightly differently, see Labels in reports on page 255). 253 Database 4. Click on Next to go to the next page of the dialog. 5. On this page you choose a database object on which to base the report. Select one of the following: • Tables • Queries • Relations Selecting Tables, say, will cause all the tables in the current database to be displayed in the box. Click on one of the tables (or queries or relations) to select it as the database object, and then click on Next to go to the next page. 6. On this page you choose the fields whose data you want to be displayed in the main body of the report, that is in the Detail section. Click on these one by one and use the Add button to transfer them from the Available Fields box to the Selected Fields box. Remember that you can determine the order of the fields at this point. If you make a mistake just use the Remove buttons and start again. Go to the next page. 7. On this page you choose the way the report is to be grouped. Since you can have groups determined by the values of one field, and groups within these groups determined by the values of another field, it is important to order the fields correctly. Therefore make sure that the field which determines the primary group comes first, the field which determines the secondary group comes second, and so on. To select the fields for the groups, click on these one by one in the Available Fields box and use the Add button to transfer them to the Selected Fields box. If you make a mistake use the Remove buttons and start again. You can select up to three group fields. See Sorting and grouping in a report on page 260 for more information. Note: Groups automatically have a sort order applied to them. By default this is ascending for each group field (hence the “ASC” appended to each field in Available Fields), although you can change this when you edit a report. 8. On the last page, you choose the fields for which you want to calculate summary values: • In the Field column all the fields to which summaries can be applied are listed. • Next, select the type of summary you want to be applied. The options are: Count (counts the number of records) Sum (calculates the total for the values in a numeric field) Avg (calculates the average of the values in a numeric field) 254 Database Min (finds the smallest of the values in a numeric field) Max (finds the largest of the values in a numeric field). Note that the type of summary available depends on the data type of the field. So for a character field, for instance, the only summary option is to count the number of records, and for a numeric field all the summary options are applicable. By default, the first character field has its Count option switched on, and all numeric fields have their Sum option switched on. You can change these and also select extra summary types for a particular field. 9. Once you have chosen the layout, associated table, report fields, group fields and summary options for your report, click on Finish to close the dialog. The new report, based on the database object you chose, is displayed. The selected fields are displayed in the Detail section and the selected group fields are displayed in the Group Header sections. The Group Footers and the Report Footer all display the summary fields and types of summary you chose. Whether labels and/or page headers are also displayed depends on the type of the report. See the following sections for more details: Type of report: vertical fields on page 255 Type of report: horizontal fields on page 255 Labels in reports on page 255 At any time you can switch to Print Preview to check what the report will look like. The new report can be saved and named. Select the Save Report command from the File menu and enter a name for the report. Alternatively, if you close the report you will be asked whether you want to save it, and if so what name you want it to have. The report will appear under Reports in Database Manager and can be opened directly from here in future. See Editing reports on page 257 for information on how to edit your report. Types of report When you create a new report from scratch, you can choose from one of three basic report types. These are: • Fields arranged across report (see Type of report: horizontal fields on page 255) • Fields arranged down report (see Type of report: vertical fields on page 255) 255 Database • Labels (see Labels in reports on page 255) Once the report is created, based on one of the three types, it is likely that you will want to edit it to suit your own purposes. For instance, you can rearrange fields, display some fields and hide others, choose whether to display labels, resize sections, etc. and, of course, insert graphics, other fields and text. Type of report: vertical fields • In the Detail section of this report type the selected fields are arranged vertically, one above another, with their labels displayed to the right, one for each field. • Each group field (if there are any) is placed in its own Group Header section, with its label placed directly above it. The primary group field is placed at the left of its header; the secondary group field is placed at the next position along in its header; and so on. • The effect of this in Print Preview is to display the values from the fields in a column, each value being identified by its label. If the report is grouped, the groups are clearly sectioned off from one another and each section is headed by a different value from that particular group field, along with the group label, which remains the same throughout the sections defined by a particular group field. Type of report: horizontal fields This report type has the same basic format as an auto report. • In the Detail section of this report type the selected fields are arranged horizontally, but no labels are displayed. Instead, the names of the fields are displayed as titles in text boxes in the Page Header section. • Each group field (if there are any) is placed in its own Group Header section, with its label placed directly above it. The primary group field is placed at the left of its header; the secondary group field is placed at the next position along in its header; and so on. • The effect of this in Print Preview is to display the values from the fields in a row, each value being identified by the title in Page Header under which it falls. If the report is grouped, the groups are clearly sectioned off from one another and each section displays a different value from that particular group field, with the group label remaining the same throughout the sections. Labels in reports You can create mailing and other types of label in a labels report. The report is based on a table (or query or relation). Obviously for mailing labels the table should contain names 256 Database and addresses. To create a label report from scratch, go to Database Manager and do the following: 1. Right-click your mouse and select New followed by Report. 2. In the "Create Report Wizard" select Labels. 3. On the next page: • select the type of label from the Available labels box (the default is Custom) • select the number of columns of labels per page in the Columns box (the default is 2) • fine tune the label width and height in the Label box • change the horizontal and vertical gap between labels in the Gap box 4. On the next page select the table, query or relation on which you want to base the label report. 5. Next, choose the fields that are to be displayed in the first line of the label report (e.g. these might be title, first name and surname fields). Use the Add button to transfer these from the Available Fields box to the Selected Fields box. 6. On the next page you choose the fields that are to appear on the subsequent lines, making sure that you transfer them in the order you want (just use the Remove button if you make a mistake). Label reports display one record per label, using only the fields you have previously selected. 7. Click on Finish to close the dialog and go into Report View. The selected fields are displayed in a column in the Label section. Note that in the case of a label report you cannot rearrange the fields at the Report View stage (if you have made a mistake in the order of the fields which you haven’t corrected at the Wizard stage, then it is best to start again). You can change the font style, the fore- and background colors, the border style, and so on, of any field. In addition you can exchange one field for another. To do any of these select the field you wish to format by clicking on it. Right-click and select Properties from the drop-down menu. In the “Format Object Style” dialog select from the available tabs: General, Color, Font, Style, Border, Align, Label. You can also use the Draw toolbar on the left to insert shapes and text boxes. To see what the labels will look like, click on the Print Preview button on the toolbar. 257 Database At this point you can click on the Print button to print the labels, otherwise click on Close to return to Report View. If the printing of the label contents appears to near to the edge of the physical label, select all the fields and drag them left and/or down. To save and name the report, select the Save Report command from the File menu. Inserting fields in a report You can insert various types of field into a report. These are accessible through the Insert menu: • Database Field (see Inserting a database field on page 81) • Formula Field (see Inserting formula fields into a form or report on page 240) • Lookup Summary Field (see Inserting a lookup summary field into a form or report on page 241) • Group Summary Field (see Group summary fields on page 261) If you want an inserted field to appear just once in every report, you need to insert it into the Report Header or Footer. If you want it to appear on every page, insert it into the Page Header or Footer. Insert it into the Detail section if you want it to appear with every record. Editing a report You can edit a report to: • Add and remove fields (see Inserting fields in a report on page 257) • Format sections (see Format sections in reports on page 259) • Relocate and edit fields (see Editing fields in forms and reports on page 249) • Edit field labels (see Editing field labels on page 259) • Add graphics and text (see Creating a drawing on page 386) • Resize sections (see Resizing the sections in a report on page 258) 258 Database Resizing the sections in a report When you first enter a report you will see that the sections of the report are placed in close proximity to one another. To resize the sections so that there is enough space to enter text, create graphics and insert fields, you should do the following: 1. Resize a section by moving your mouse pointer to the border of the bar above the following section. The mouse pointer turns to a double vertical arrow. 2. Click and drag the border to the required place, and then release the mouse. The section is resized. For instance, to resize the Report Header section, move the mouse pointer to the top of the Page Header bar. When the vertical arrows appear, click and drag and then release to resize. You can perform this operation on any of the sections, whenever and as many times as you like, till you get a suitable size for all the sections. Appropriate section sizes are important, not just for creating space to design a report but also for display purposes. For instance, if you reduce a section so that certain fields are not visible in Report View, neither will these fields be visible in Print Preview, and hence they will not be shown when the report is printed. You can also resize the height of sections in the “Sections Properties” dialog (see Format sections in reports on page 259). Headers and footers in a report There are three types of headers and footers in a report: • those for the report as a whole • those for the pages • those for the groups (see Sorting and grouping in a report on page 260 for more information on group headers and footers). The Report Header will appear once at the top of the report, that is, on the first page, and the Report Footer will appear at the bottom of the report, that is, on the last page. The Page Header and Page Footer will appear at the top and bottom respectively of the individual pages in the report. When you open an auto report directly from its underlying table, the Page Header section contains by default the field names, underlined, from the table. These will be displayed at the top of each page, although you can edit them (or delete them if you don't want them to appear at all). 259 Database To enter text or graphics into a header or footer, use the buttons on the Draw toolbar (see Creating a drawing on page 386. You can also insert page numbers (see Inserting a page number into a form or report on page 247) and the date and time (see Inserting the date and time into a form or report on page 248) into a header or footer. Note that if you have created a report header and a page header, the report header always occurs before the page header on the first page of the report. Similarly, a report footer always occurs after the page footer on the last page of the report. Format sections in reports You can format the sections in a report in various ways. In Report View select the Sections command from the Format menu. The “Section Properties” dialog is displayed. All the sections in your report are listed in the Section Name column, including any group headers and footers you may have created. For each section you can format the following properties: 1. Background Color: click in the field to display an arrow and then click on the arrow and select a color from the drop-down list. The default is white. 2. Height: type in a new height for the section. 3. Breaks: click in the field to display an arrow and select one of the following from the drop-down list: • Continuous: sections run on from one another (this is the default) • New Page: a new page is started every time the section is printed 4. Visibility: click in the field to display an arrow and select one of the following: • Yes: the section will be displayed in Report View and Print Preview (this is the default) • No: the section will not be displayed in Report View or Print Preview 5. Click on OK once you have formatted the new section properties. Report View is redrawn to reflect the new formats. Editing field labels You can determine the font, alignment, gap and position for database field labels in forms and reports (and group summary fields in reports). This can be done when you insert a new field (see Inserting a database field on page 81 and Group summary fields on page 261). Alternatively, for an already existing field with a label, first select the field by clicking 260 Database on it once when in Form Design Mode or Report View, then right-click and select Properties, followed by Label in the “Format Object Style” dialog. On the Label page, follow these steps to edit a label: 1. Choose whether you want the label to be displayed (or not) by clicking the Show Label box on (or off). 2. In the Placement box you choose whether the label is to be displayed Over, Under, Before or After the field. 3. In the Horizontal Align box (for Over or Under) or Vertical Align box (for Before or After), choose whether to align the label Left, Center or Right, or Top, Baseline or Bottom respectively. 4. In the Gap box you can edit the default value to set the gap you want between the label and the field. 5. Click on the Font button to set a font, style, size and color for the label. Sorting and grouping in a report Ability allows you to group records that have common values in a particular field. This is accomplished by sorting on the field. In Reports the sorting command automatically sorts the records in ascending order (according to the values in the chosen field) and then sections off the records with common values. Within the groups created by this primary grouping, you can create a secondary grouping for records with common values in another of the fields, and so on. The secondary grouping is created by the second sort. In this way Ability provides an effective method of structuring the data in a report. In addition, you can manipulate a report so that the values of group fields act as titles for each group. You can choose which fields to sort and group on in both Table Grid View and Report View. This is accomplished through the Sort Order page of the “Format Query” dialog, although grouping itself will only be applied when you are in a Report. To create groups in an auto report or in an already existing report do the following: 1. Click on the Sort Order button on the Query toolbar. The “Format Query” dialog is opened at the Sort Order page. 2. The Available Fields box shows all the fields in the table (or query or relation) upon which the report is based. To group records by a particular field, click on the field name to select it and then click on the Add button. The field name is copied to the Selected Fields box. Ability will look at every value under this field in the table and arrange the records into groups, each group of records having a common value in the specified field. 261 Database 3. You can choose ascending (the default) or descending order for the records. Click on the field in Selected Fields to activate the Descending checkbox. For a descending order, make sure the Descending checkbox is switched on, and for an ascending order, leave it blank. 4. It may be that you want to group the records within the primary groups. To do this, click on the field in the Available Fields box that you want to group by, and again click on Add to copy it to the Selected Fields box. It is placed after the primary group field. This tells Ability to sort and group by the first field, and then, within the groups so created, sort and group by the second field. 5. Again you can set an order for the secondary group field. Select the field in the Selected Fields box and switch the Descending checkbox on or off. Note that the secondary grouping can have a different sort order from the primary grouping. You can have as many groups as there are fields in the original table, although of course you would only want to group where it is appropriate. 6. To sort and group you need to switch on the Group on report checkbox for each of the selected fields that you want to group. If you leave the checkbox blank, the sort order (or orders) will be applied but the sorted records will not be grouped. 7. Once you have defined your groups and their sort order, click on OK to close the dialog and return to the report. The report is redrawn to show a new set of headers and footers for each group. Anything you insert into a group header or footer will be displayed at the head or foot of each group in the report (the full effect of this is only apparent when you go in to Print Preview - see Viewing a report in print preview on page 263). Ability automatically gives your report a default layout – see Layout of a grouped report on page 262. Group summary fields Group summary fields are used to provide summary information of various types for the groups in a report. You can summarize any or all of the groups individually by inserting a Group Summary Field into the relevant Group Footers or Headers. In addition, you can obtain a total summary for all of the groups combined, by inserting a Group Summary Field into the Report Footer or Header. To insert a Group Summary Field into a report, follow these steps: 1. Make sure you are in Report View. 2. Click in either a Group Header or Footer section (for individual group summaries), or in the Report Footer or Header section (for total report summaries). 3. Select Group Summary Field from the Insert menu. 262 Database 4. The mouse pointer will turn to a cross when you move it over the report. Use your mouse to position the cross at the point in the section where you want the Group Summary Field to appear (you can move this again later, if you want) and click once. 5. The “Insert Field Wizard” dialog is displayed, turned to the Group Summary page: (a) In the Database Field box, the current database is displayed in Database Name and the table upon which the report is based is displayed in Data Source. These are fixed and can’t be changed by you. Click on the arrow in Data Field and choose, from the drop-down list of all the fields in your table, the field for which you want a summary. Note that a label is created for this field in the Field/Label Name box, which you can edit if you like. (b) In the Formula box, click on the arrow to display the list of available summary options for the chosen field. These are: • Count (counts the number of records) • Sum (adds the values if the field is numeric) • Minimum (finds the minimum value if the field is numeric) • Maximum (finds the maximum value if the field is numeric) • Average (finds the average value if the field is numeric) 6. Click on the Next button to go to the next page. Here you can set various formats for the label that accompanies the inserted field (see Editing field labels on page 259). 7. Click on Finish to close the dialog and return to Report View. The Group Summary Field is inserted into the section. If you want to insert another field just repeat the above steps. To see what the report will look like, click on the Print Preview button on the toolbar. Note that a Group Summary Field inserted into a group header or footer provides summary information for each of the groups, and one inserted into a report header or footer displays total summary information for all the groups combined. Layout of a grouped report • Once you have chosen the groups for your report and returned to Report View you will see that extra headers and footers have been added for the groups. These group headers and footers are named after the fields they have been based on. The group headers are placed between the page header and the details section, and the group footers are placed between the page footer and the details section. The first or primary group header is placed above the secondary group header, and so on for 263 Database any other group headers. The primary group footer is placed below the secondary group footer, and so on for any other group footers. • The group headers cause the report to display the value for each of the groups at the head of each group. The same is true for any secondary groups that are contained (nested) within the primary groups. Each of the values from a group field can be said to act as a title for its own group section. You may wish to display the labels that accompany the group fields. Switch to Print Preview to get a clearer idea of the effect of grouping. • In the Detail section the report automatically displays all of the fields from the underlying table. Since for a grouped report the values from one or more of these fields will appear at the head of each group, you may want to delete some of the fields in Detail. • In the group footers and the report footer, there are displayed several summary fields: the first Character field from the underlying table is counted and all the Numeric fields are summed. Thus each grouped section has its own summary information. This applies to the secondary and lower level groups, as well as the primary ones. You may want to delete some or all of these, or add others. Similarly, the Report Footer contains summary information for the whole of the report, and can also be edited. • You can easily relocate fields within the sections by clicking and dragging. • The default report layout is designed to contain enough information to make subsequent editing easier for you. For instance, it is much easier to delete the fields you don’t want and to relocate the remaining fields, than to have to insert fields that are not displayed. See Editing reports on page 257. Using queries in reports When you create a report, it will retain any query formats that were already set in the underlying table. This includes filters, column views, and sort orders. If you then save the report it will retain the query formats. These can be changed in Report View by using the options on the Query toolbar. You can do this in the same way as for Table Grid View (see Query components on page 164). Viewing a report in print preview Whenever you enter a Report View you are enabled to view the basic design of the report. Here you can insert objects, create graphics, resize the sections and generally edit the report's design. What you do not see is the report as it will appear when printed, that is, with all its data, summaries, groups, etc. 264 Database • To view the report as a report you need to click on the Print Preview button the Standard toolbar (or select Print Preview from the File menu). on This takes you to the print preview page, where the report as it will appear when printed is displayed. At this stage you can check the report for its overall layout, its group order, the contents of headers and footers, the position of labels, and other features. • Use the Zoom and Page buttons and the scroll bars to see more of the report. To make changes click on Close to close the preview and return to Report View. Printing a report To print a report, follow these steps: 1. Open the report as a Report View 2. Switch to Print Preview (use the button File menu) on the toolbar or the command in the 3. Click on the Print button in Print Preview to print the report. Note that to set up a page prior to printing a report, you need to be in Report View, not Print Preview. Select Page Setup from the File menu and choose the page margins, paper orientation, paper size, and printer. You can then print from Print Preview. Deleting a database To delete a database, you should be in the Ability Database window and make sure that the database you want to delete is closed: 1. Select Open Database from the File menu. The "Open existing database" window is displayed. 2. Locate the database to be deleted and right click on it. 3. Select Delete from the displayed menu. You will be asked if you are sure that you want to delete this database. Click on Yes and the database will be deleted. If the database is open, an error message will be displayed and you will not be allowed to go ahead with the deletion (see Closing a database on page 163). 265 Database Deleting a database object To delete a database object (tables, relations, forms, reports, queries, sort orders, filters, column views) follow these steps: 1. Go to Database Manager. 2. Right click on the object you wish to delete and select Delete from the menu. 3. You will be asked if you are sure that you want to proceed with the deletion. Click on Yes and the object will be deleted. Note that when you delete a query, any query components you created when designing the query are retained under the relevant table name. Repairing a damaged database On rare occasions you may find that you are unable to open a database, or, if you can open it, that its behavior is unpredictable. It is more than likely that the database has somehow become damaged. This can be caused, for instance, by a power failure when you are trying to write to the database, or by a general hardware fault. Repair Database will try to solve any such problems. In addition, you may have deleted data from the database and therefore wish to reclaim space that is no longer used. Compact Database compresses the database and frees up the unused space. Ability combines these operations in the one command. To repair and compact a database, follow these steps: 1. Make sure you are in the Ability Database Window but that the database you want to repair is not open (select Close Database from the File menu to close the current database). 2. Select Compact and Repair Database from the Tools menu. 3. In the Database to Compact From box select the required database. 4. The title of the box will change to Compact Database Into. Give the database a new name in the File name line and click on Save. 5. After a few seconds the database will be compacted and repaired. Note that you can now delete the old database and rename the new one with the original name, if you wish. 266 Database Importing tables You can import tables into an Ability Database. The imported tables can come from an earlier version of Ability, another database in Ability, or another program altogether. In addition, you can append an imported table to an existing table in Ability (see Appending imported tables on page 267). To import a table you should first open the Ability database into which the table is to be imported (see Opening a database on page 161). Once you are in Database Manager do the following: 1. Select Import from the File menu. The “Import” dialog is opened. 2. In the Data Source box, select the type of database from which you want to import and then click on OK. The “Open” dialog is displayed with the selected database type in the Files of Type box. 3. Locate the database you want to import from by using the Look in box. Once it has been placed in the File name box, click on Open. 4. The “Import” dialog is opened. All the tables in the source database are listed in the Objects box. Click on the table you want to import, to select it, and then click on OK. The table will be imported to the current Ability database and will be listed under Tables in Database Manager. You can now go ahead and work with the imported table as you would with any table created in Ability. Exporting tables You can export tables from an Ability Database. The exported tables can be exported to another database in Ability or another program altogether. To export a table you should first open the Ability database from which the table is to be exported (see Opening a database on page 161). Once you are in Database Manager, do the following: 1. Select Export from the File menu. The “Export” dialog is opened. 2. In the Data Destination box select the type of database to which you want to export and then click on OK. 3. In the Objects box all the tables in the current Ability database are listed. Select the table you want to export and click on OK. 4. The “Save As” dialog is opened. The destination database type is displayed in the Save as type box. Locate the destination database in the Save in box and select it to place it in the File name box. 267 Database 5. Click on Save to export the table to the selected destination database. Open the destination database and the exported table will be shown in the Database Manager (or equivalent, depending on the program). You can now go ahead and work with the exported table as you would with any table created in the destination database. Appending imported tables You can append an imported database table to a table in Ability. This is useful if you want to append, say, an address table to an address table. The two tables should therefore have similar contents and the fields that are to be matched should be of the same data type (for instance, it wouldn’t make sense to append a character field to a numeric field). To append the imported table (the Source table) you should first open the table in Ability that you want to append to (the Destination table), and then follow these steps: 1. Select Import from the File menu. The “Import” dialog is opened. 2. In the Data Source box, select the database type from which you want to import. Note that the Append to current table box is switched on. Click on OK. 3. In the “Open” dialog, use the Look in box to locate the source database and place it in the File name box. Click on Open to open the “Import” dialog. 4. In the Objects box, select the table you want to import and then click on OK. 5. The “Field Correspondence” dialog is opened. The Source table fields and Destination table fields boxes list all the fields in the two tables. The Current correspondences among the fields box displays, on the left, all the fields in the source table and, on the right, any matches Ability has been able to make between the tables. You can add and delete matches as follows: • To remove a match, select that line and click on Delete. • To make a match select the fields to be matched in the Source table fields and Destination table fields boxes respectively, and then click on Add. The matched fields are linked in the Current correspondences among the fields box. If you attempt to match fields with incompatible data types, an error message will be displayed and the match will not go ahead. • Once you have created the appropriate matches, click on OK to close the dialog and return to the destination table. Records will be appended to your table from the imported source table, with values shown in the appropriate match fields. 268 Photopaint Photopaint Photopaint is an image editing and creation program that allows you to perform a wide range of design tasks, from editing of family photographs for fun to creation of subtle effects in the design of advertisements to promote your business. To this end you will find all the necessary tools for manipulating and experimenting with images, allowing you to paint, tone, erase, edit and apply special filter effects. The secret of successful image editing and creation lies in the use of two important Photopaint features: selections (see Selections on page 274) and layers (see Layers on page 317). Most of the time when you begin to work with any image, you will find it useful to select some area that you want to concentrate on, while leaving the rest of the image untouched. (Selections can be seen as similar in concept to the highlighting of text in a word processor before changing a font.) In Photopaint you can select the whole image or drag the mouse over a rectangular or other shaped area. Once an initial selection is made, you can change the shape of that selection, proceed to select all other parts of the image of a similar color, and so on. Moreover, once you have made a selection you can then zoom in on the selected area, thereby making it easier to apply delicate and subtle effects. There are many powerful tools to help you select exactly what you want. Although a printed image is a two-dimensional arrangement of colors, the creation of the image can utilize a feature called layers. Layers allow you to create a finished image by adding to and editing the image on different levels, which can be understood on the analogy of several panes of glass stacked together. They have a certain (controllable) transparency, and different images can be painted on each layer, the overall effect depending on what order you use to stack the layers. The order of the layers can be changed as you see fit. Mastering layers simplifies the task of combining component images. So, the basic elements of Photopaint are: Selections on page 274 Paint and draw tools on page 284 Filters on page 304 Layers on page 317 269 Photopaint Starting Photopaint Start Photopaint from the menus: 1. Select the Start button on the Windows task bar 2. Select Programs and then Ability Office 3. Select Ability Photopaint The first thing you’ll notice about the opening screen is the lack of standard toolbars. This is because you need as much of your screen as possible to view the image. Photopaint has floating toolboxes that automatically appear according to the task in hand. The only toolbar that is immediately visible is the Tools bar, which contains the various paint and selection tools. In addition, there are three other basic toolboxes: Layers, Information and Recent Colors. These can be turned on and off in the View menu. Creating a new image Create a new image by selecting New from the File menu. The “New” dialog is displayed. Here you can set the width, height and resolution of the image window that is to be created and choose a scale of measurement (pixels, inches, cm, picas, or points). Give the image a name in the Title box if you don’t want to use the default name. The Contents box allows you to choose a color for the default background layer: Fore color, Back color, or Transparent. The default is Transparent, which normally shows as a checkerboard pattern. (You can change the shading and size of the checkerboard pattern in File/Preferences/Grid. A grid size of none in effect creates a blank sheet, either light, medium or dark according to the setting.) For now, just press OK. A new image window will be created. 270 Photopaint Note that the background is displayed as a checkered pattern (officially called Level 1 in a new image - see Layers on page 317). This denotes transparency , a concept which is of great importance in Photopaint. It may seem odd at first, but there is an important difference between “nothing” and, say, a white background: you can put images onto a transparent background and whatever is beneath the background will show through where there are no other images. If it were solid white, any background would be obscured. Of course if there is only one layer, there is nothing to see beneath a transparent background. The full effect of transparency is best seen with the use of layers (see Layers on page 317). Along the bottom of the image window you can see the current magnification (actual size is 100%) and the number of pixels available for the width and height of the image. 271 Photopaint On the left the Tools bar is visible. You can at this point begin using the paint tools straightaway (see Paint Tools on page 284). At the bottom of the Tools bar you’ll see the Foreground and Background Color boxes. These will be important throughout Photopaint. (See Color selection on page 271) Color selection The two boxes at the bottom of the Tools bar are the Foreground and Background Color boxes. They are interchangeable using the double-arrow button just below. The higher box is always the foreground color and the lower box the background color. Whenever you use a paintbrush or pencil tool, it is the current foreground color that is applied. Whenever you erase pixels from the background or lowest layer in an image, it is the current background or foreground color, depending on which one you chose in the “New” dialog, that shows through in a printout, in Print Preview or when viewed through a higher transparent layer. 272 Photopaint You can change the color in either of the boxes by clicking on the box to open up the “Select Color” dialog. In here you can select a color by using the mouse to drag the crossed lines in the larger box or the single line in the tall thin box. The latter gives you an approximate color range, while the former enables greater fine tuning. Alternatively, you can set a color exactly by entering the right figures for Hue, Saturation, Brightness, Red, Green and Blue in the boxes to the right. You can also use the respective sliders to do this. The result will be displayed immediately in the Preview box. Whichever way you set the color all the relevant indicators will change together to reflect the current color: the color boxes, the Preview box, the sliders, and the measurement boxes. Once you are satisfied, click on OK. The relevant color box on the Tools bar will be given the new color. Note that as you change the colors in the Foreground and Background Color boxes, the old ones are stored in the “Recent Colors” dialog. (If this is not visible, select Recent Colors from the View menu.) 273 Photopaint Select any of these colors to make it the current Foreground Color. You can use the Color Picker (see Color picker on page 300) to select a color from an image and make it the Foreground Color. While we are on the topic of color it is worth mentioning that the Information dialog (select View/Information if this is not visible) can give you useful data about the color values in an image, amongst other valuable pieces of information (see Information dialog on page 274). Opening an existing image You’ll probably spend most of your time editing already existing images, especially photographs that have been scanned, rather than designing new images. In this case, select Open from the File menu and use the “Open” dialog to locate and open the required file. The image file will appear in the Photopaint window as a file of the type in which it was originally opened. Since there are some file types which do not preserve any layers you might have added, you may choose to use Save As from the File menu to convert the file into a Photopaint image file (that is, with extension .apx). This guarantees that any layers you add will be preserved, rather than being flattened onto the original image’s background (where they cannot be recovered on a subsequent opening of the file). Photopaint files will, of course, require more memory to preserve layers. Once you have opened the file, the image will appear in the image window. At first it will be displayed using the actual pixel size and therefore might be larger than the image window. If you would like to see the whole of the image, select Fit on Screen from the View menu. The image will appear on a layer called Background, unlike a new image where the background layer is called Level 1 (see Layers on page 317 for some notes on the difference between the two). At this point you can immediately begin to use the paint and selection tools on the image. However, you probably don’t want to change the background image itself, so it is best to create a duplicate layer, hide the background and proceed to edit the duplicate or create further layers. All this is explained in the section on layers (see Layers on page 317). 274 Photopaint Another option is to create a duplicate of the image file, using Duplicate in the Image menu. You can then work with the duplicate and leave the original untouched. Whatever you do it is highly recommended that you have at least one untouched version of the original file. Information dialog The “Information” dialog contains useful information about the color values, selection dimensions and current position of the pointer in an image window. It can be a valuable source of instant information as you work on an image. To open up the dialog, select Information from the View menu. There are four sections in the dialog: R G B in the top-left corner gives the respective values (between 0 and 255) for red, green and blue in any color that the pointer is currently passing over. C M Y K in the top-right corner gives the respective percentage values for cyan, magenta, yellow and black in any color the pointer is currently passing over. X Y in the bottom-left corner gives the coordinates in pixels (horizontal and vertical respectively) of the current pointer position. W H in the bottom-right corner gives the width and height of a current selection, hence helping you to size selections accurately as you make or edit them. Selections Photopaint allows you to select parts of images or photographs. The advantage of selection is that you can work on a particular area within an image, without having to worry about altering areas outside the selection boundary. You may, for instance, want to change the color scheme in only one part of an image, leaving the rest of the image untouched. Since all images in Photopaint are pixel-based there is no way of automatically selecting, say, the head of a man from a picture that includes the rest of his body. Unlike a mere software package, only you, as perceiver, have a definite concept of parts of the body. This is where the selection tools come to your aid in helping you target the areas you want to work on. 275 Photopaint There are several ways of making selections, each achieved through its own selection tool. The selection tools are grouped together at the top of the Tools bar, which is visible on the left-hand side of the screen when you open up a file. (If it is not visible, select Tools from the View menu). Once you have made a selection, you can later edit it to refine its borders, change its position or alter it in some other way. There is a range of editing options available through the Transform Selection tool and the Select menu. If you have already made a selection, the application of another selection will always override the first. The selection tools available are: Rectangular Selection on page 275 Elliptic Selection on page 275 Single Row Selection on page 276 Single Column Selection on page 276 Lasso on page 276 Polyline Lasso on page 276 Magic Wand on page 276 B-Spline Selection on page 277 Crop on page 277 Rectangular selection Outline of selection is always comprised of horizontal and vertical outlines, joined in a tool on the Tools bar. Hold down the rectangle. Click on Rectangular Selection mouse and drag the cross until required horizontal and vertical area is selected. Elliptic selection Outline of selection is always elliptical or circular. Click on Elliptic Selection tool on the Tools bar. Hold down mouse and drag the cross till required area is surrounded by ellipse or circle. 276 Photopaint Single row or single column selection A single line selection selects one row or column of pixels. Click on Single Row or tool on the Tools bar. Click mouse once at point through Single Column Selection which you want row or column to run. To reposition line just click at another point. Lasso The lasso tool gives you the freedom to create a selection outline by hand. Click on the tool on the Tools bar. Hold down mouse and drag lasso symbol around area Lasso you wish to select. When mouse is released the ends of an incomplete outline will automatically be connected by a straight line. This may cut off part of the area you wish to select, so it is best to complete the outline yourself by finishing off at the starting point. Polyline lasso The outline is formed by a series of straight lines, joined point to point. Click on the tool on the Tools bar. Click at the point where you want the outline Polyline Lasso to start. Click at the next point. A straight line will immediately connect the two points. Continue clicking at various points till the outline is complete and then right-click. If you do not complete the outline by finishing on the start point, the start and finish points will automatically be connected by a straight line. See Selections on page 274 Magic wand This tool automatically makes a selection based on the brightness of adjacent pixels within a certain threshold. For example, if you click on a solid yellow circle placed within a larger blue one the selection will outline the yellow smaller circle. If you click on the blue circle the outline will appear round the blue circle and also round the yellow circle, that is, it will select the whole of the blue area and exclude the yellow area (rather like a ring doughnut). Click on the Magic Wand tool on the Tools bar. The “Magic Wand” dialog allows you to set the threshold value between 0 and 255. The default value is 32. The threshold determines what range of pixels will be selected by the Magic Wand in relation to the original selected pixel. A value of 0 will result in only the adjacent pixels of exactly the same brightness being chosen. The higher the threshold value the greater the range of pixels selected, according to brightness. At 255 almost everything is guaranteed to be included in the selection. 277 Photopaint Anti-aliasing is a technique for softening the edges of a selection by surrounding the edges of the selection with a one-pixel transition. You should nearly always leave the Anti-alias box checked. B-spline selection The outline of this selection uses smooth curves to join a series of points. Click on the B-Spline Selection tool on the Tools bar. Click at the point where you want the selection to begin. Click at the next point. The two points will be joined by a curve. Proceed with the clicking as you move around the area to be selected. Try to keep the points close-in to the area to ensure the accuracy of the selection. Finally click on, or at least near, the start point. To finish, just right-click. The start and finish points will automatically be joined to complete the selection. Crop The Crop tool allows you to draw a rectangular border round the area you want to keep, everything outside this selection being discarded. tool on the Tools bar and drag the mouse until a reasonably Click on the Crop accurate selection is made. Release the mouse button. You can refine the crop by moving the mouse over the handles, at which point a cross will appear. Depress the left button and drag till you are satisfied with the selection on that particular border. Do the same with the other borders, as required. To perform the crop, right-click and select Crop. Selection editing Once you have made a selection using any of the selection tools (see Selections on page 274), it is possible to fine tune the selection in various ways, for instance, to make it fit an area more closely or to expand the selection borders. There are two main ways of editing selections. In the Select menu you can apply such features as feathering, inversion, smoothness, and so on. Using the Transform Selection tool you can alter a selection dynamically, changing the selection’s position, angle, shape, and so on. Both of these will be dealt with. 278 Photopaint Selection menu You can edit a selection in various ways through the Select menu. Most of the options in this menu are grayed out until you have actually made a selection using one of the selection tools, as you would expect. Here are some of the most important option available through the Select menu. • All selects the whole of the visible window, putting a selection border around it. (Note that it is best not to use this option if it is your intention to edit the whole of the image. Although the image as it stands may occupy only the visible window, it is possible that at some time you may only have a part of the image visible, the rest stretching outside the window boundaries. In this case the selection will always be restricted to just that part of the image that is visible. It is best, therefore, to select the appropriate layer without making a selection within the layer. • None clears any current selection. (Note that on occasions you may try to add color to an image to no avail, even though you are on the right layer and the layer is visible. It is more than likely that in these cases you have not cleared a selection properly, that is, you have clicked on the screen when a selection tool is active and reduced the selection to a barely visible dot, outside of whose boundaries nothing can be done until the selection is cleared.) • Invert reverses the area currently selected in the visible window. If, for example, you have a small circle selected and you then apply Invert, a selection border will appear around the whole of the visible window in addition to the circle selection. This means that the selection is now the area between the circle border and the outer selection, that is everything in the visible window excluding the area within the original selection. • Feather softens the edges of a selection when color is applied at the selection boundaries. In effect, feathering creates a transition area of increasing transparency, which gives an appearance of gradual, gentle succession from the selected to the unselected pixels. The Feather radius is set in the Radius box in the “Feather” dialog and is measured in pixels. The greater the radius (2 to 50 is the range) the greater the extent of the feathering. Note that the effects of using Feather are only seen with colors applied after feathering has been applied to a selection. The immediate effect is merely to expand the selection boundaries in accordance with the radius set by you. • Border takes the current selection as a basis for creating a new selection of a specified width. The original selection is then abandoned. The border width is set in the Width box of the “Border” dialog and is measured both in and out from the boundary of the current selection. 279 Photopaint If, for example, you have a circular selection and then you apply a border of 5 pixels, the new selection will consist of a circular band with borders 5 pixels in and five pixels out from the original selection, rather like a ring doughnut. • Smooth reduces the rough edges of a selection. Only the selection outline is affected, not the colors within the selection. In the “Smooth Selection” dialog, set the Radius at a value from 2 to 50 pixels. The higher the radius the greater the smoothing that will occur. • Expand increases a selection by expanding its boundaries outwards. The degree of expansion is determined by the value you enter in the Expand by box in the “Expand” dialog. The range is from 2 to 50 pixels. • Contract decreases a selection by contracting its boundaries inwards. The degree of contraction is determined by the value you enter in the Contract by box in the “Contract” dialog. The range is from 2 to 50 pixels. • Transform Selection is used for dynamic editing of selections and actually activates the Transform Selection tool on the Tools bar (see Transform selection tool on page 279). • Grow uses a current selection to select adjacent areas of the same color as the selection. Grow works best when the currently selected area contains a single color. • Similar uses a current selection to select the same color throughout an image. The areas of color need not be adjacent. Similar works best when the currently selected area contains a single color. • Selection to Alpha deletes the whole of the image on the current layer except for any areas you have selected. • Alpha to Selection selects all colored areas on the current layer. On a layer which is otherwise transparent there will be as many selections as there are separate areas of color. • Make Pattern uses the current selection to store a pattern in the “Pattern” dialog. This dialog is called upon by several of the tools, especially the Pattern brush on page 288 . Transform selection tool This tool enables you to take a selection and transform it in various ways. Transform Selection works only on the selection boundaries and not on the image within the selection (use Transform Image on page 283 if you want to transform the selected image itself). To transform a selection, obviously you need to have made a selection first, using one of the selection tools on the Tools bar (see Selections on page 274). 280 Photopaint Click on Transform Selection on the Tools bar. A rectangular box is placed around the selection, no matter what the shape of the selection. Handles are placed on the boundaries of the box and a moveable star-like symbol placed at its center. The mouse pointer becomes an arrow inside the box, a cross while placed over any of the handles, and a curved double-headed arrow outside the box. To move the selection as a whole, place the pointer inside the box and drag the arrow to a new position. The whole of the selection is moved to the new position. Note that the image within the original selection boundaries stays put when the selection is moved. To stretch the selection, place the pointer over the relevant handle or handles and drag the cross to a new position. The selection border will be repositioned. To rotate the selection, move the pointer anywhere outside the box and drag the curved double-headed arrow to a new position. Note that the selection rotates round the star-like symbol at the center of the box. You can move this symbol by clicking and dragging on it; the selection will henceforth rotate round the new position. You can cancel a transformation by pressing Esc on the keyboard or selecting Undo Transform from the Edit menu. The above operations are together known as Free Transforms, that is they are applied by you by hand, using the mouse, and are all available simultaneously. More precise and automatic transforms can be performed by right-clicking (or selecting Transform in the Edit menu) and choosing an option from the displayed menu (see Transform options on page 281). In choosing one of these options, you automatically make the others unavailable. For instance, while scaling you will be unable to rotate the selection. See also: Transform Image on page 283 281 Photopaint Transform options The Transform options are applicable to both Selections (see Transform Selection on page 279) and Images (see Transform Image on page 283). They are available either by right clicking over a selection box or by selecting Transform in the Edit menu i.e. after you have selected either the Transform Selection or the Transform Image tool in the Tools box. Note that each of the options transforms either the selection itself or the image within the selection, depending on whether you have chosen Transform Selection or Transform Image respectively. The options include: Scale Scale the transformation box either horizontally or vertically by dragging the handles. The selection will be scaled to match the new box dimensions. Rotate Rotate the transformation box by dragging the double-headed arrow outside the box. The selection will rotate with the box. Note that the starlike symbol acts as the center of rotation and can be repositioned. Skew Skew the transformation box by dragging a handle in the direction of the line on which it is situated. You can drag the handle in only one direction at a time. The selection will adjust to fit the skewed box. Note that dragging a center-of-line handle moves the whole of the line. Distort Distort the transformation box by dragging any handle in any direction. The selection will adjust to fit the distorted box. Note that dragging a center-ofline handle moves the whole of the line. Perspective The dragged handle will move in the direction of the line of the transformation box. If the handle is at a corner, the opposite corner will move the same distance in the opposite direction. Note that dragging a center-of-line handle moves the whole line. 282 Photopaint Numeric In the “Numeric Transform” dialog set the Position values in the X (horizontal) and Y (vertical) boxes. Leave the Relative box checked if you want the transformation box to move relative to the current position, rather than move to a position starting from the top left-hand corner of the window i.e. X = 0 & Y=0. Set the Scale values in the Width and Height boxes. These will scale the width and height of the transformation box. If you want the scaling to be in proportion leave the Constrain Proportions box checked. Whatever you set for the width will also be automatically set for the height, and vice versa. Uncheck the box to set these separately. Set the Skew values, in degrees, in the Horizontal and Vertical boxes. You can set the angle of skew anywhere between -60 and 60 degrees. Set the Rotate value, in degrees, in the Angle box. The possible values run through -179 (clockwise 283 Photopaint from the x-axis) to 180 (anti-clockwise from the xaxis) degrees. Note that there is also an Angle Indicator: use your mouse to turn the little circle on the circumference of the big circle to set a new angle. The value in the Angle box will be automatically adjusted. Rotate Rotate the selection by 180 degrees, 90 degrees clockwise or 90 degrees counter-clockwise. Flip Flip the selection either horizontally or vertically. Transform Image This tool enables you to take a selected image or part of an image and transform it in various ways. This distinguishes this tool from the somewhat similar Transform Selection (see Transform selection tool on page 279), which merely transforms selection boundaries rather the image that is selected. Note that Transform Image only works with a selection and therefore you need to apply one of the standard selection tools first. on the Tools bar. Handles will appear on the boundaries Click on Transform Image and a moveable star-like symbol will appear in the center of the selection. The mouse pointer becomes an arrow inside the selection, a cross while placed over any of the handles, and a curved double-headed arrow outside the selection. To move the selected image as a whole, place the pointer inside the selection and drag the arrow to a new position. The whole of the selected image is moved to the new position. To stretch the selected image, place the pointer over the relevant handle or handles and drag the cross to a new position. The selection border will be repositioned and the image stretched to fit the new border. 284 Photopaint To rotate the selected image, move the pointer anywhere outside the selection and drag the curved double-headed arrow to a new position. Note that the selection rotates round the star-like symbol at the center of the selection. You can move this symbol by clicking and dragging on it; the selection will henceforth rotate round the new position. You can cancel a transformation by pressing Esc on the keyboard or selecting Undo Transform from the Edit menu. The above operations are together known as Free Transforms, that is they are applied by you by hand, using the mouse, and are all available simultaneously. More precise and automatic transforms can be performed by right-clicking (or selecting Transform from the Edit menu) and choosing an option from the displayed menu (see Transform options on page 281). See also: Copy, Cut and Paste on page 327 Paint tools The paint tools allow you to apply and edit colors and special tone effects. These tools can be found on the Tools bar on the left-hand side of the screen (Select Tools from the View menu if this is not visible). The available paint tools are: Pencil on page 285 Paintbrush on page 286 Airbrush on page 286 Eraser on page 287 Duplicate on page 288 Pattern Brush on page 288 Blur on page 289 Sharpen on page 289 Emboss on page 290 Dodge on page 291 Burn on page 291 285 Photopaint Smudge on page 292 Historic Brush on page 298 Pencil This tool enables you to draw using a brushstroke with hard edges, as with a real pencil. Click on Pencil on the Tools bar. In the “Brushes” dialog choose the method of applying the pencil from the following: • enables you to draw directly with the current foreground color, the Free Hand path of the applied color following the movement of the mouse when the button is depressed. • Spline enables you to plot a series of connected curves by clicking at the relevant points. To finish, right-click and the curves are replaced with the foreground color. • enables you to plot a series of connected lines by clicking at the Line Drawing relevant points, which are replaced with the foreground color when you right-click. • enables you to draw an ellipse by dragging the mouse till you have the Ellipse wanted shape and size. On releasing the mouse button the ellipse is converted into the foreground color. • enables you to draw an arc (or incomplete circle). Click on the spot which Arc you want to be the center of the arc and move the mouse (there’s no need to keep the button depressed) till you have the required dimensions. Click once more and use the mouse to move clockwise to reduce the angle of the arc from a full circle or anticlockwise to increase the angle from zero. Click once more to replace the arc with the foreground color. • Rectangle enables you to draw a rectangle by dragging the mouse till you have the required dimensions. On releasing the button the sides of the rectangle are replaced with the foreground color. Select a shape and size for the pencil stroke from the Brushes box (see Brushes on page 294). Select a mode in the Mode box (see Brush modes on page 295). 286 Photopaint Change the degree of transparency in the Opacity box. Note that Pencil produces a “harder” outline than Paintbrush, which employs a technique called “dithering” to soften the edges of a painted shape. Basically, dithering consists in softening the edges of an area of color by fading it into the surrounding color. This results in a less stepped edge than is produced by Pencil. The effect of dithering becomes more apparent if you increase the size of the image (see Zoom on page 293). Paintbrush This tool enables you to paint using a brushstroke with soft edges, as with a real paintbrush. Click on Paintbrush on the Tools bar. In the “Brushes” dialog choose the method of applying the pencil from Free Hand, Spline, Line Drawing, Ellipse, Arc, Rectangle (for information on each of these, see Pencil on page 285). Select a shape and size for the brushstroke from the Brushes box (see Brushes on page 294). Select a mode in the Mode box (see Brush modes on page 295). Change the degree of transparency in the Opacity box. Note that Paintbrush produces a “softer” outline than Pencil, employing a technique called “dithering” to soften the edges of a painted shape. Basically, dithering consists in softening the edges of an area of color by fading it into the surrounding color. This results in a less stepped edge than is produced by Pencil. The effect of dithering becomes more apparent if you increase the size of the image (see Zoom on page 293). Airbrush This tool allows you to paint with soft, hazy brushstrokes, as with a real airbrush. Moreover, the color is fed out continuously and so will thicken whenever you keep the pointer in one place for a while or move it very slowly across the page. Click on Airbrush on the Tools bar. Choose a brush size and shape from the options in the “Brushes” dialog (see Brushes on page 294). You can decide how transparent the paint should be by altering the value in the opacity box. 100% is, of course, the maximum. 287 Photopaint Eraser This tool allows you to “erase” pixels. In reality the effect of the Eraser tool is to change existing color values by: • applying the current background color when used on the background layer • converting the colored pixels of an image on any other layer to fully transparent pixels Click on Eraser on the Tools bar. Select a brush shape and style from the “Brushes” dialog (see Brushes on page 294). Depending on the brush chosen you can erase colored pixels in a variety of ways, sometimes getting a complete erasure and sometimes a faded effect. Change the degree of transparency in the Opacity box. The higher the value the more pixels will be erased by the selected brush. At the bottom of the box there is checkbox that allows you to switch on the Red Eye Reduction option, which is useful for reducing the red eye effect that is a common problem with flash photography. See Red Eye Reduction on page 287 for more details. Red Eye Reduction The Red Eye Reduction option enables you to reduce the red eye effect that often occurs with flash photography and transforms perfectly respectable friends and relatives into extras in a vampire film. You can access this option in the box that is displayed when you click on the Eraser tool on the Tools Bar. First, though, it is a good idea to select the area to be altered by using the Magic Wand tool, hence restricting the area across which changes are to be made. 1. Click on the Magic Wand tool and then set the tolerance so that the appropriate area is selected when you click on the area of red eye on the image. See Magic wand on page 276 for usage details. 2. Once you have selected the red eye area (you’ll have to do the complete red eye removal one eye at a time), click on Eraser to open up the “Eraser” dialog box. 3. Click on the Red Eye Reduction box at the bottom to switch it on. 4. Three sliders will be displayed: Threshold, Power, Red Range. The default setting should usually be fine for most red eye removal, but you can play around with the sliders to study the different effects. (Note that the Threshold value here works independently of the one you set using the Magic Wand, which is restricted to determining a selection. The red eye threshold value determines the range of the 288 Photopaint pixels to be changed according to color and tonal values, although any changes will of course be restricted to the area within the selection.) 5. Proceed to remove the red eye by clicking with the eraser on the appropriate eye, that is, on the area within the current selection. 6. Repeat the above operations for the other eye. Duplicate (New topic text goes here.)This tool allows you to “clone” a part of an image and then paste it elsewhere. It is useful if you have an image that needs retouching and it would be appropriate to use a similar color and pattern from elsewhere in the image. Click on Duplicate on the Tools bar. Select a brush mode from the “Texture Brush Options” dialog (see Brushes on page 294). This will determine the shape of the area to be cloned. Select a mode in Mode (see Brush modes on page 295). Change the degree of transparency in Opacity. Next, press Alt on the keyboard and click once on the area that you want to clone. Move the pointer to the area you want to paste to and press on the mouse button for a couple of seconds. The clone will be pasted in the shape of the brushstroke you chose. Drag the mouse if you wish to duplicate over a larger area. Note that cloning can duplicate every part of an image window, starting from the paste point and copying everything that the cross moves over. The original position of the cross coincides with the copy point. If you wish to clone within a selected area you can use one of the selection tools first (see Selections on page 274). Pattern brush This tool allows you to paint with a pre-defined pattern. Click on Pattern Brush on the Tools bar. In the “Pattern” dialog select the pattern you want to paint with. 289 Photopaint In the “Duplicate Options” dialog (this contains the same brushes as in the “Brushes” dialog) select a brush style with which to apply the pattern. Proceed to paint with the brush by dragging the mouse. You can, of course, draw the pattern in a restricted area by using a selection tool. (Note that to use the Pattern Brush you must already have created a pattern. To create a pattern, use one of the selection tools to select the area containing the pattern you want to paint with. Next, select Make Pattern from the Select menu. Alternatively, you can use a pattern from a external file by loading the file in the Patterns Editor - see Patterns Editor on page 353.) Blur This tool blurs an image by reducing the contrast between adjacent colors. Click on Blur on the Tools bar. Select a brush style and shape in the “Brushes” dialog (see Brushes on page 294). Keeping the mouse button depressed, drag the pointer over the area that you want to blur. Sharpen This tool sharpens an image by increasing the contrast between adjacent colors. Click on Sharpen on the Tools bar. Select a brush style from the “Brushes” dialog (see Brushes on page 294). Keeping the mouse depressed, drag the pointer over the area you want to sharpen. 290 Photopaint Emboss This tool enables you to cause an area of an image to stand out, as in a relief made of stone or metal. You can choose to maintain the color of the image or convert the image to grayscale as you paint with the emboss tool. Click on Emboss on the Tools bar. In the “Emboss Options” dialog select a style and shape for the brush (see Brushes on page 294). Use the sliders to set an Azimuth between 0 and 360 degrees, an Elevation between 0 and 180 degrees, and a Depth between 0 and 100%. These control the amount and direction of light and shadow in the embossed image. You can think of the Elevation and Azimuth as determining the angle of a single light source in the vertical and horizontal planes respectively. The Depth determines the depth of the relief. The combination of these determines the appearance of the embossed image. (As you would expect, an elevation of 90 degrees i.e. the light source is directly above the image, makes the embossed image brighter, and an elevation of 0 or 180 degrees leads to a darker image. A depth of 0%, since it flattens the image, reduces the contrast between lights and shadows and therefore produces a more uniform embossed image, whether dark or light. The azimuth, since it determines the angle of light in the horizontal plane, alters the direction of light and shadow.) Select Emboss for grayscale, otherwise select Bumpmap to preserve color. Drag the brush over the area of the image you want to emboss. 291 Photopaint Dodge This tool allows you to lighten the tones of the colors in an image. Click on Dodge on the Tools bar. In the “Dodge Options” dialog select the style and shape of the brush (see Brushes on page 294). Choose the tonal range on which to concentrate from the following: • Highlights concentrates on the lighter tones, making them lighter still, but also affects the darker tones. • Midtones concentrates on all tones, making them lighter, apart from the very light or dark. • Shadows concentrates on the darker tones, making them lighter, but also affects other tones. Adjust the value in Exposure to change the amount of tonal lightening you want to allow. A higher value results in a greater lightening over the tonal range chosen. (This effect is similar to a photographer’s use of light intensity when exposing a negative.) Proceed to drag the brush across the relevant areas. Burn This tool allows you to darken the tones of the colors in an image. 292 Photopaint Click on Burn on the Tools bar. In the “Burn Options” dialog select a size and shape for the brush (see Brushes on page 294). Choose the tonal range on which to concentrate from the following: • Highlights concentrates on the lighter tones, making them darker, but also affects the darker tones. • Midtones concentrates on all tones, making them darker, apart from the very light or dark. • Shadows concentrates on the darker tones, making them darker, but also affects other tones. Adjust the value in Exposure to change the amount of tonal darkening you want to allow. A higher value results in a greater darkening over the tonal range chosen. Proceed to drag the Burn pointer over the areas you want to change. Smudge This tool allows you to smear an image. The effect on the color values of the image is determined by the brushstroke used and amount of pressure selected. A larger sized brush will smear a greater amount of color and a higher pressure will redistribute the color over a wider range. Click on Smudge on the Tools bar. 293 Photopaint In the “Smudge Options” dialog select a size and shape for the brush (see Brushes on page 294). Use the slider to set the pressure in the Pressure box. Proceed to drag the Smudge pointer through the appropriate areas of the image. View tools There are two tools that make it easier for you to view an image: Hand and Zoom. Hand This tool allows you to move an image when the image is larger than the current window. Since you can drag the image in any direction, this gives you more freedom than when using the scroll bars. Also it is handy for those times when you are using Full Screen view and the scroll bars are not visible. Click on Hand on the Tools bar. Keeping the mouse button depressed, use the hand to drag the required portion of the image into view. Zoom This tool allows you to magnify the image in the current window. Zoom comes with a selection outline that gives you the power to “zoom in” on a part of the image. You choose which part of the image you want to fill the window with after using Zoom. The smaller the selection the greater will be the magnification applied to the image as a whole. This is because the selected area is zoomed up to fill the whole of the window. Once you have applied Zoom, you can use the Hand tool to move around the image. Alternatively use the vertical and horizontal scroll bars. With the magnified image before you, you can proceed to apply the paint tools as normal. There are several ways of magnifying an image, as follows: Click on Zoom on the Tools bar. The pointer becomes a magnifying glass. Click anywhere in the window and zoom will be applied. 294 Photopaint To zoom in on a specific area, left click and drag the pointer till you are satisfied with the selection borders, that is, you have surrounded the area you want to zoom in on. Release the mouse and zoom will be applied, the selected area filling up the window. If you want to cancel a selection before zoom is applied, press ESC on the keyboard. You can then go ahead and make another selection. For further zoom options, right-click and select from Zoom In (increases magnification), Zoom Out (decreases magnification), Actual Pixels (reduces image to original size) and Fit To Screen (fits image to screen. The maximum magnification is 1600% or 16 times the original size. Brushes Every time you select a Paint tool a dialog is displayed with an array of brushes. Although the same brushes are common to each of the Paint tools, the dialogs in which the brushes are displayed are slightly different from one another, depending on the particular tool selected. The brushes vary in size, shape and solidity, and determine how quickly color is applied, toned or erased, and over how large an area. This allows you to work, on the one hand, very quickly with large uniform patches of color, and, on the other hand, to concentrate on the details in a small area of an image. You can switch between brushes with ease. The two main tools for painting are Pencil and Paintbrush (see Paint Tools on page 284). Whenever you choose a paint tool, you have the option to choose a brush through which the paint tool can be applied. If you do not specifically select a brush, the last brush used by the particular paint tool remains selected. (Pencil produces a “harder” outline 295 Photopaint than Paintbrush, which employs a technique called “dithering” to soften the edges of a painted shape.) Whenever you select a brush its name and the number of pixels in the brush shape are displayed above the “Brushes” box. For instance, one of the squares has this attached information: Square <10, 10>. This means that the selected shape is a square that is 10 pixels by 10 pixels. Another option is: Circle, radius = 17 <35, 35>, for a circle with radius 17 pixels, and vertical and horizontal axes through the center of the circle i.e. the diameter, of 35 and 35 pixels respectively. There are 53 standard brush styles in all. You can create and edit your own brushes by right-clicking in the “Brushes” dialog and selecting an option to open up the “Brush Options” dialog. Alternatively, select the Brush Editor from the Tools menu, where there is a full set of tools for editing and creating brushes. (See Brush Editor on page 349) The effect of applying any Paint tool and therefore the particular brush style used with a tool, is to change the color value of every pixel that comes into contact with the brush. Three concepts relating to the application of Paint tools need to be understood: Base color: the pixel color before the brush is applied. Blend color: the color you wish to apply. Resultant color: the color after the blend color has been combined with the base color using a particular brush style. These notions are important in understanding the way the various Brush modes work (see Brush modes on page 295), that is the way the applied color blends with the already existing color. The default value for the blending mode is Normal, as you can see in the Mode box. Another important concept when selecting a brush style and blend mode is that of opacity, which is set in the Opacity box. If an applied brushstroke has opacity of 100% and the mode is set at Normal, the brushstroke will completely over-paint any color that it comes into contact with. The lower the opacity the more transparent or “see-through” the applied color will be, hence enabling you to see through to the colors beneath. Obviously opacity is a matter of degree and it is certainly worth experimenting with it to understand its full effect. Brush modes You can set a brush mode for several of the tools, for example, Pencil, Paintbrush, Duplicate, Fill and Gradient Fill. The brush modes determine how an applied brush stroke affects the colors already in an image. Essentially, this can be understood in terms of the existing or base color of a pixel, the color that will be applied by the brushstroke, and the color that results from the combination of the base and applied colors, as determined by the selected brush mode. For instance, if you paint a blue line over a 296 Photopaint patch of red in an image, do you want the red to be completely replaced by the blue, or somehow blended with it? The brush modes allow you to decide how and to what extent the applied color will affect what is already there. The main options, which you can select in the Mode box in the “Brushes” dialog, are: • Normal The color is applied in full, that is to say, the existing base color is totally over-painted. • Dissolve A color applied with a less than 100% opaque brush is converted “dissolved” - to 100% opaque randomly scattered pixels. The effect is of a rough brushstroke rather than an evenly transparent one. • Multipy The brightness values of the base and applied colors can be combined to create a darker tone. This is done by multiplying the two brightness values when they are expressed as fractions. For example, white has a brightness value of 255 (the maximum) and is represented as 255/255 or 1; black has a brightness value of 0 (the minimum) and is represented as 0/255 or 0. All other brightness values are represented as fractions between 0 and 1 e.g. 150 is represented as 150/255; 100 as 100/255. Therefore, using Multiply we get the result (100 * 150) / (255 * 255), which works out at 59/255. You can immediately see that the resultant brightness will always be lower than (or equal to) the brightness of either one of the multiplied fractions. This intuitively fits in with our experience of placing one transparent sheet on top of another, where the result is always darker. Note that the above means that if the applied color is white, the resultant color is the same as the base color. If the base color is white, the resultant color is the same as the applied color. If either the base or the applied color is black, the resultant color is black. If the base color is transparent, the result of applying any color is black (since a transparent layer counts as 0, that is the same as black). • Screen This mode has the opposite effect from Multiply, combining the base and applied colors to create a lighter tone. These are some of the more important options but there are many others that it is worth experimenting with: Behind, Overlay, Difference, Addition, Subtraction, Darken Only, Lighten Only, Hue, Saturation, Color, Luminosity, Divide, Color Burn, Color Dodge, Hard Light, Soft Light Typing and color fill tools In addition to the selection and paint tools, there are several other useful tools that enable you to insert text or color into an image. These include: 297 Photopaint Type Tool on page 297 Historic Brush on page 298 Fill Tool on page 299 Color Picker on page 300 Gradient Fill on page 301 Type tool This tool allows you to enter text. The text is placed in the document as if it had been painted directly by you i.e. it is pixel-based rather than object-based. This means that the text can be edited, using the full range of tools, just like any other part of an image, but cannot take normal text editing. 1. Click on Type on the Tools bar. The pointer will turn to a T-symbol. 2. Position the T where you want the text to go and click once. 3. In the “Type Tool” dialog type your text in the top box. 4. Choose from Left, Center and Right in the Alignment box. 298 Photopaint 5. In the Angle box type a new angle or use the arrows to scroll. The angle will be measured anti-clockwise from the horizontal. 6. If you would like the text to go on a new layer, check the Add Layer box. A Text Layer will then be created for the text. Note that unless you explicitly change layers all new paint or text operations will take place on this new layer. 7. Check the Outline box to make text appear in outline rather than as solid. 8. All the usual font commands for your text are available through the Font button. 9. The text and the applied formats will appear in the Preview box, giving you the opportunity to make changes before clicking on OK. See Paint Tools on page 284 Typing_and_color_fill_tools on page 296 Historic brush This Historic Brush on the Tools bar, enables you to reverse the last operation performed on an image. In this it is like the Undo command but limited to undoing the last operation only. However, unlike Undo the Historic Brush allows you to partially recover pixels from the result of the last complete operation rather than recover the whole result. (By “complete operation” is meant the action carried out between one click of the mouse and the next click.) The Historic Brush can be used in conjunction with the History palette to recover the state before a previous incarnation of an image (see History palette on page 298). History palette It is possible to go back to an earlier state of an image by selecting the History option under the Edit menu. The “History” dialog lists the states that you can recover. The actual states are shown on the left of the dialog and the operation that corresponds to each of the states is shown on the right. 299 Photopaint Use the scroll bar, if necessary, to see more of the states of the image, and then click on the state you would like to recover. You can then proceed to work with the recovered image. Note that any intermediate states between the current and the recovered state are lost, unless you choose one of them from the “History” dialog. Also there is a limit to the number of previous states remembered in the dialog. You can use the History palette in conjunction with the Historic Brush (see Historic brush on page 298). The History palette functions in a similar way to the Undo option in the Edit menu. Consequently, the Purge Undo command in the Edit menu empties both the History palette and the Undo store. Fill tool This tool allows you to apply color by clicking on an image. The color you click on will be taken as the standard, and all adjacent pixels within a certain tolerance, using either the default or one set by you, will be filled in with the Fill color. The tolerance is a measure of the brightness of pixels and stretches out in either direction from the selected color. The Fill color itself is the currently selected foreground color. Click on Fill on the Tools bar. 300 Photopaint 1. In the “Fill Options” dialog set the following options: 2. Select a mode in the Mode box (see Brush modes on page 295). The default is Normal. 3. Set the opacity in the Opacity box: 0 is total transparency, that is the underlying color shows through totally; 100 is total solidity, that is the fill color covers the underlying color totally. 4. The tolerance is set in the Threshold box: 0 causes only adjacent pixels with exactly the same color (strictly speaking, brightness) to be filled; 255 causes all pixels in the image to be filled. 5. Leave Color Fill checked to apply a color fill. 6. Pattern Fill allows you to use a pre-saved pattern instead of the selected foreground color. (To create a pattern you first need to use one of the selection tools to select the area containing the pattern you want fill with. After this, select Make Pattern from the Select menu. The selected pattern will then appear in the Pattern box and will also be available for future use.) 7. Once you have chosen a suitable color or pattern and set the threshold, opacity and mode, just place the Bucket pointer over the area to be filled and click once. The fill will go ahead according to the settings you chose. Color picker This tool allows you to define a new color for either the foreground, background or paint tools by clicking on a part of an image. Click on Color Picker on the Tools bar. The pointer turns to an eye-dropper. Position the eye-dropper over a color and click once. The foreground color box on the Tools bar becomes the same color as the color you clicked on. You can now use a paint tool to paint with this color, or redefine the background color by exchanging the foreground color box with the current background color box. 301 Photopaint (Note that the Recent Colors box displays a collection of the most recent colors picked out by the Color Picker, or selected in the Select Color dialog - see Color selection on page 271 - when you are choosing a color for the foreground. If it is not visible, select Recent Colors from the View menu. Selecting any of the colors will make it the current foreground color.) Gradient Fill This tool allows you to fill an area, whether a selection or an entire layer, with a range of colors. Starting with one color and progressing to another, the colors in between are graduated according to the particular gradient used. The extent of the gradient is determined by the distance you drag the pointer. There are four basic features of Gradient Fill that you will need to understand to use it properly: • Gradient The various gradients available are ways of determining particular color progressions. Some use the current background and foreground colors to generate the gradient, others use different color schemes, depending on the choice of gradient (the gradient name is usually indicative of the range of colors to be used). • Gradient type The gradient type is the “shape” of the gradient. The default type, Linear, takes the gradient set in Gradient and spreads it in a straight line from the start to the finish point, that is to say, in a definite direction across the image window. The Spiral type forms a spiral gradient around the start point; the shorter the distance you drag the pointer, the tighter the spiral. There are many other gradients types from which to choose. • Mode The brush modes determine how the gradient will blend with any colors already there on the layer. Note that the mode determines a permanent state of the image and can only be undone by selecting Undo from the Edit menu. Some examples of blending are given in Brush modes on page 295 . • Opacity The opacity slider measures the degree of transparency or “seethroughness” of the applied gradient. A setting of 100% will completely cover any existing image with the applied gradient; anything less than this and the existing image will be visible through the gradient. Note that the opacity here determines a permanent state of the image and can only be undone by selecting Undo from the Edit menu. All of these features are available in the “Gradient Fill” dialog. 302 Photopaint To apply a gradient fill, do the following: 1. Click on Gradient Fill on the Tools bar. 2. In the “Gradient Fill” dialog set the following options: • Choose from the blend modes in Mode (see Brush modes on page 295). The default is Normal. • In Opacity use the slider to set the transparency of the gradient. The default is 100% or totally opaque. • In Gradient select a gradient. The default is FG to BG RGB mode. • In the Gradient Type box select a gradient type. The default is Linear. Once you have made your selections, click on a spot in the image window from where you want the gradient to start. Drag the gradient pointer to a finish point and release the mouse button. The gradient will be applied after a few seconds, in conjunction with the gradient type, mode and opacity. Note that the shorter the distance you drag the pointer the more tightly will the band of colors be packed. In addition, you can create and edit your own gradients, which can be saved for future use. To do this click on Edit to open up the Gradient Editor (see Gradient Editor on page 345) and set the required options. For some examples see Gradient Fill: examples on page 302. Gradient Fill: examples This section continues the explanation given in Gradient Fill on page 301 and also gives some examples. 303 Photopaint 1. In the Gradient box you can choose the basic colors for the gradient. The default gradient is FG to BG RGB (Red, Green, Blue) mode, followed by FG to BG HSB (Hue, Saturation, Brightness) mode. Both of these produce a gradient that runs from the foreground color through to the background color, blending the tones in between. The next option, Foreground to transparent, produces a gradient in which the foreground color gradually thins out. These three gradients all use the current foreground and background colors to produce their effects. There are many other gradients, most of which, like German Flag and French Flag, generate colors independently of the current foreground and background. 2. In the Gradient type box you can choose a shape or style for the gradient. The default type is Linear, which draws the gradient in a straight direction across a plane. The other options include Radial, Spiral Clockwise and Anti-Clockwise, Square, Conical Symmetric and Asymmetric, and BiLinear. Each of these defines a style for the gradient. For instance, if you select one of the spiral options and drag the pointer a short way across an image, a tight spiral will be drawn, of course using the currently selected gradient. If you drag the pointer a greater distance the spiral will be much wider. The same general principle goes for all the other gradient types. For instance, if you use the gradient FG to BG RGB (Red, Green, Blue) mode with the Linear type, the foreground and background colors will form solid blocks before and after the start and finish points respectively. 3. In the Mode box you determine how the gradient will be blended with the existing image. The default is Normal. There are many others, including Dissolve, Multiply and Luminosity. The best way to get to know how the modes work is to experiment. There is more explanation and some examples in Brush modes on page 295 . Two things worth remembering are: the mode used with the gradient is permanent once applied and can only be undone by using Undo from the Edit menu; in most cases the gradient will cover the existing image if the Opacity is set at 100%. 4. In the Opacity box you can choose the transparency of the gradient. The default is 100% opaque (or 0% transparent). As said above, you need to reduce the opacity from 100% in order to see the existing image show through the applied gradient. Remember that the effect of applying a gradient with an opacity is permanent and can only be undone by selecting Undo from the Edit menu. The gradient is always applied by dragging the pointer and then releasing the mouse. Different gradients will take longer or shorter periods of time to be take effect. All in all the final effect depends on the combination of settings made in the Gradient, Gradient type, Mode and Opacity boxes. Using these settings: 304 Photopaint this gradient can be produced: Filters Filters are the Photopaint equivalents of the filters used in photography to create various effects. As in photography, some filters are merely corrective in that they try to preserve the appearance of the original image while removing some defects, and others are creative in that they radically change the image. 305 Photopaint The best way to understand the effects of filters is to experiment with them a bit. Here only a few of the filters, of the many available, will be described. All of the filters are accessible through the Filters menu. They are grouped into several general categories, for example, Artistic, Sharpen, Distort, Tiles, and others. Within these categories there is a wide range of types, many of which are editable by you. Take a look at Super Nova under Light Effects. A dialog will open, making it possible to edit and preview the filter before applying it. • Use the Radius and Spokes sliders to increase and decrease the radius and number of spokes respectively of the super nova. The changes will immediately be displayed in the Preview box to the left. • The X and Y boxes give the horizontal and vertical positions respectively. You can set these precisely by typing new values into the boxes. Alternatively use the mouse to click on a spot anywhere in the Preview image. • The Color box contains the current background color. If you’d like a different color click anywhere in the Color box to open up the “Select Color” dialog. Here you can use the mouse to select a color. This will not affect the current background color. Once you have designed your super nova, click on OK and watch the filter take effect. Depending on the size of the image, it can take anything from a few seconds to a couple of minutes. Note that whenever a filter is applied it affects only the currently selected - or active layer. You can undo the filter by selecting Undo from the Edit menu. 306 Photopaint You can apply as many filters as you like to an image, whether on the same layer each time or across some or all of the layers, using many different types of filter. Taking the above super nova effect, you can add a page curl filter on top. This is another good filter to experiment with and again easily editable. Select Filters/Artistic/Page Curl to open the “Page Curl” dialog. • In the Parameters box use the sliders to set the Opacity, Ratio, Size and Angle of the curl. • Click the Shadow under curl checkbox on for a shadow effect. • (All of these effects will become obvious to you as you look at the immediate implementation of the changes in the Preview box.) • You can change the color of the curl in the Curl Shading Color box, using either the current foreground or background color, or even a previously saved pattern. • In the Orientation box choose between vertical and horizontal. 307 Photopaint • Lastly, choose a corner for the curl in the Location box. • Once again watch the changes take place in the Preview box and click on OK once you’re satisfied. The filter effects will take a few seconds to be implemented. If you decide you don’t like them, just select Undo from the Edit menu and start again. Note that once you’ve applied a filter you can make some further changes using the Fade … option at the top of the Filters menu. Thus in the case of Page Curl you can select Fade Page Curl to open the “Fade” dialog. In here you can change the opacity and the blend mode of the curl (or whatever was the last filter you applied). The effect is to fade the filtered image into the original unfiltered image by reducing the opacity from the maximum of 100%. As the slider approaches 0 in the Opacity box the effect of the filter becomes fainter until at 0 the unfiltered image is restored. You can experiment with fading and immediately see the results in the image window. The options in the Mode box - Normal, Dissolve, Behind, Multiply, and so on determine how the filter will blend with the existing colors. The modes work pretty much as they do in Blending between layers on page 324 , with the difference that once you’ve applied Fade the blend becomes permanent (although you can undo a fade or a filter by selecting Undo from the Edit menu). Click on OK to exit the dialog and apply the Fade, otherwise click on Cancel. For more examples of filters, see Filters: examples on page 307 . Filters: examples In the section on Filters (see Filters on page 304) you were introduced to the concept of filters and shown a couple of examples (Super Nova and Page Curl). Altogether there are 93 filters divided into 10 categories. In addition, the Custom Filter option allows you to design your own filters. With such an extensive range of filters there are obviously many 308 Photopaint possibilities for combining different filters to produce even more effects. As ever, the best way for you to learn about these possibilities is to experiment. The categories are: Artistic, Sharpen, Blur, Stylize, Edge Detect, Tiles, Distort, Noise, Light Effects, Effects, Custom Filter. Here we will describe a few more of the filters: Filter: Add Noise on page 308 Filter: Waves on page 309 Filter: Blur on page 310 Filter: Mosaic on page 313 Filter: Light Effects on page 315 Filter: Add Noise The Add Noise filter is accessible in the Noise category in the Filters menu. This filter concentrates on single pixels, increasing or decreasing their color values and thereby creating “noise” in the image. Noise can be defined as those single or small groups of pixels whose color values differ considerably from those of the bulk of nearby pixels. The overall effect can be like the grainy look of old film. In the “Add Noise” dialog set the following options: In the Parameters box: • • 309 Photopaint Use the slider to set the Amount of variation from the original colors. The lower the amount the closer are the pixels to the original image colors. Tick the Monochromatic box if you want to create noise that lightens or darkens pixels but leaves their hue unaffected. This results in most pixels being either black or white when Amount is set to high. In the Distribution box choose the type of random distribution to be used for the noise: • Uniform leads to a random distribution of even density throughout the image. • Gaussian leads to a much more random distribution than Uniform, in which noise can be concentrated in single pixels and groups of pixels, and there can be areas of no noise at all. All the changes you make can be seen immediately in the Preview box. Filter: Waves The Waves filter is accessible in the Distort category in the Filters menu. The effect is of an image being distorted when viewed under ripples of water. In the “Waves” dialog use the sliders to set the following in the Parameters box: • Amplitude The height of the waves between 0 and 100 • Phase The point in the wave cycle in degrees between 0 and 360 • Wavelength The wavelength between 0 and 50 All the changes are immediately shown in the Preview box. 310 Photopaint Filter: Blur There are several filters grouped together in the Blur category in the Filters menu. All of these filters blur images by searching out areas of strong color contrasts and sharp edges, which are then softened by converting pixels in the relevant areas to an average of their total color values. The most basic and quickest filters to use are: • Blur • Blur More • Heavy Blur None of these brings up a dialog for you to make your own settings and there is no way to preview the results. Essentially they are a rough and ready way of averaging the sharp contrasts in an image, though without being susceptible to fine control. As the names suggest they are, in ascending order, relatively stronger than one another in their effects. The following Blur filters give you much more control: Motion Blur on page 310 Gaussian Blur on page 311 Smart Blur on page 312 See also: Filters on page 304 Filters: examples on page 307 Filter: Motion Blur This filter, available through Filters/Blur/Motion Blur, makes the contents of an image look as if they were in motion. 311 Photopaint In the Parameters box of the “Motion Blur” dialog you can do the following: • Set the extent of the blur (between 0 and 255) by sliding the Length slider. • Use the Angle slider to set the direction of the blur. In the Blur Type box choose from these options: • Linear blurs in straight lines. (Note that when you use Linear, the blur will run in the direction you set and in the opposite direction.) • Radial blurs out from the center of the image. • Zoom blurs within the original area, concentrating the colors according to the setting in Length. All the changes you make can be seen in the Preview box. Filter: Gaussian Blur This filter, available through Filters/Blur/Gaussian Blur, gives a more naturalistic look to the transitions between adjacent colors when blurring. It achieves this by blurring unevenly, as is the case in real life, according to the distribution calculated using the Gaussian Bell Curve. Essentially this filter reduces detail in an image, while trying to avoid the artificial look of too smooth a blur across the image. 312 Photopaint In the “Gaussian Blur” dialog set the following: • Use the Blur Radius slider (or type in the value directly) to set the radius of blur, between 1 and 100. This controls the amount of blurring by using the blur radius, as a measure from the center of each pixel, for averaging of color values. The greater the blur radius the greater the overall blurring of the image. • The Blur Horizontally and Blur Vertically checkboxes are both checked by default. Click to uncheck either or both of these. As their names indicate they determine the direction of the blur. You would normally want to blur in both directions. Note that unchecking both boxes makes it impossible to blur at all. All your settings will immediately appear in the Preview box. Filter: Smart Blur This filter, accessible through Filter/Blur/Smart Blur, works to remove low-intensity “noise” from an image. It does this by preserving the areas where there is a sharp color contrast, such as edges, and blurring the areas where the colors are almost the same (within a tolerance set by you). As you can imagine, this is useful when treating grainy photographic images, since the grainy areas are usually only slightly different in color from the surrounding areas. The real detail of the image is largely left untouched. 313 Photopaint In the “Smart Blur” dialog set the following: • Use the slider to set the Radius - or type it directly into the box - between 1 and 50. The radius is a measure of the distance from the center of each pixel and determines the extent of the color averaging that constitutes the blurring process. Naturally the higher the radius, the greater the blurring. • Set the Maximum Delta, again by using the slider or typing, between 0 and 255. This is a measure of the threshold for blurring. At low values there is blurring only between very similar colors; at high values almost any colors, no matter how dissimilar, may be blurred together. The effects of your filter settings are displayed in the Preview box. Filter: Mosaic This filter is accessible through Filters/Artistic/Mosaic and gives you the power to apply a range of mosaic effects. The mosaic tiles are surrounded by a black border and the colors of the tiles themselves are based on the colors of the original image. Any spaces between tiles are colored black. 314 Photopaint Once you have entered the “Mosaic” dialog you have various options. In the Tiling Primitives box, choose the basic mosaic shape: • Squares • Polygons • Polygons & Squares In the Parameters box, set the following as you wish: • Tile Size: the size of the tiles between 5 and 100. The higher the value the fewer the tiles used to comprise the image. • Tile Height: the height of the tiles between 1 and 50. • Tile Spacing: the spacing of the tiles between 1 and 50. The lower the value the tighter the fit between the tiles. • Tile Neatness: the degree of neatness, or regularity of shape, of the tiles between 0 and 100%. The lower the value the more irregular the tile shapes. • Light Direction: the angle the light falls on the tiles between 0 and 360 degrees. • Color Variation: the color differences between the tiles can be heightened or lowered between 0 and 100%. The lower the value the closer the tiles are in color. In the Options box tick the boxes to set the following: • Anti-aliasing: This is a technique for softening the edges of the individual mosaic tiles by surrounding their edges with a one-pixel transition. • Color Averaging: This alter the colors of the individual tiles so that they are an average of their own color and the surrounding colors. • Pitted Surfaces: The tiles are given a pitted look, rather like an image of the surface of the moon. • FG/BG Lighting: The edges of the tiles are traced in the current foreground and background colors, according to the colors of the tiles they surround. All your settings are shown in the Preview box. 315 Photopaint Filter: Light Effects The Light Effects filters all work with the qualities of light in your images. You may already have seen one of these, Super Nova, described in the Filters section (see Filters on page 304). Here we will describe a few more of the light filters: Lens Flare on page 315 Discotheque on page 316 Star on page 316 See also: Filters: examples on page 307 Filter: Lens Flare This filter, accessible through Filters/Light Effects/Lens Flare, makes part of an image stand out by brightening the pixels, with the surrounding pixels becoming progressively less bright. As the name implies the effect is as of a bright flare. In the “Lens Flare” dialog set the following: • Use the Brightness slider (or type directly into the box) to increase the brightness of the flare. The maximum is 500% or five times the original brightness. • In the X and Y boxes you can set the location of the flare. The location is measured in pixels from the top left-hand corner of the image window. Your settings will be displayed in the Preview box. 316 Photopaint Filter: Discotheque This filter, accessible through Filters/Light Effects/Discotheque, imposes a bright disco-light effect on top of the original image. The light source is located in the center of the image. In the “Discotheque” dialog use the sliders (or type directly into the boxes) to set the following: • Rotation rotates the disco-lights through 0 to 360 degrees. • Scale increases and decreases the intensity of the light source and therefore the extent of the light-spread across the image from the center. • Transparency determines how much of the image is visible. A transparency of 0% causes the image to be not visible at all, with the disco-lights more or less the only thing visible, depending on the scale setting; at 100% the image is totally visible, with the disco-lights superimposed. The changes you make are immediately displayed in the Preview box. Filter: Star This filter, available through Filters/Light Effects/Star, allows you to apply various starlike effects. The possible variations are created through manipulation of the colors that comprise the image. 317 Photopaint In the “Star” dialog you can use the sliders to set the following: • Red, Green and Blue Density • Brightness • Red, Green and Blue Transparency These are all measured on a percentage scale. The effects are immediately shown in the Preview box before you apply them to the image itself. Layers Layers are one of the most useful features of Photopaint. They enable you to treat an image as a series of separate superimposed images, each occupying its own transparent layer. This allows you to make changes to an image on one layer without upsetting the images on the other layers. In addition, the order of the layers can be altered. Altogether, layers are an essential tool in helping you to control how your images are created and edited. The most important feature of layers is their capacity to be transparent in various degrees. Whenever you create a new layer it is shown as a transparent window, usually visible as a checkerboard pattern by default. (You can change the shading and size of the checkerboard pattern in File/Preferences/Grid. A grid size of none in effect creates a blank sheet, either light, medium or dark according to the setting. You can change the style of the layers either before or after opening a file.) To reiterate, the essential characteristic of layers consists in the fact that whenever you create or edit an image on a particular layer, the images on the other layers will be visible 318 Photopaint in so far as they can be seen through a transparent area of the layers above. Obviously with more than two layers, the potential for complexity increases, especially if you start changing the order of the layers. You can keep a check on the arrangement, visibility, opacity and blend mode of the layers you have created by selecting Layers from the View menu. This opens up the “Layers” dialog: The following sections will further explain how to use the various features available in “Layers”: Background layer on page 318 Creating and working with layers on page 319 Layer options on page 321 Background layer Each Photopaint document contains a background layer. There are several points you should be aware of in connection with the background. If you create a new Photopaint document from scratch, that is to say, using the New command in the File menu rather than opening up an already existing image file, the default layer is called Layer 1. Whenever you open up an already existing image file, using the Open command from the File menu, the default layer is called Background. The main difference between these is that a Background layer is always opaque, no matter what position you place it in the hierarchy of layers. If you erase any of the pixels in a Background layer the current background color is used to fill them in. With a new file where the default layer is called Layer 1, you can subsequently move this layer up the hierarchy of layers and it will behave in the same way as any other transparent layer. In 319 Photopaint both cases the bottom layer, whatever that is, will be opaque. This is as you would expect, since there is nothing to see beneath the bottom layer. Consequently, if you erase color from the bottom layer and it is called Background, the background color will show through, but if the bottom layer is any other type of layer a checkerboard pattern (or plain sheet) will show through. The checkerboard pattern does not mean that the bottom layer is transparent, as you can see if you select Print Preview from the File menu or print the document, in both of which the checkerboard pattern is converted into the current background color. Moreover, if you “look through” higher layers to parts of the bottom layer where erasure has taken place you will see the current background color. Given the above there would obviously be not much point in changing the position of a Background layer in the hierarchy of layers. However, you can use the duplicate command to create a layer called Copy of Background, which will then act in the same way as any normal layer. You can at any time rename any layer. Creating and working with layers The following section will show you how to create and work with layers, explain the relevant concepts, and illustrate some of the main operations that can be carried out with them. First, you may want to edit a picture file, for example, a photograph that you have already scanned in to your computer. Select Open from the File menu and locate and open the relevant picture file. The picture will be displayed in the Ability Photopaint window. If the picture is larger than the window and you want to see it as a whole, without having to use the scroll bars, then select Fit on Screen from the View menu. You can always select Actual Pixels to restore the picture to its original size. The picture occupies the Background layer, as explained in Background layer on page 318 . This is the default layer and can be edited directly or used as the basis for editing on other layers. It is best to keep the background layer clean; if you wish to edit it directly, work on a copy of it instead. (You might also choose to work on a copy of the original file: select Duplicate from the Image menu. A copy will be created and displayed. You can then close the original file by selecting it from the Window menu and continue to work with the copy, which is converted to an Ability Photopaint file. Note that Image/Duplicate creates a copy in which Background acts like any other layer.) To create a copy of the Background layer, first make sure the “Layers” dialog is visible (select Layers from the View menu). Background will be the only layer visible in the dialog until you create another one. Click on the Duplicate Layer button in the dialog to open up the “Duplicate Layer” dialog. Click on OK to create a copy of the background layer. 320 Photopaint Note that though these two layers are called Background and Copy of Background, they are in effect Layers 1 and 2 - if you add a new layer to them it will be called Layer 3. Any layer can be renamed by clicking on the Layer Options dialog. button in the “Layers” Now that you have created two layers you can see both of them listed in the “Layers” dialog. The bottom layer in the dialog is always the “background” layer, and the ones above are stacked on top of this. Any new layer is added to the top of the stack, that is, it becomes the layer furthest away from the background layer. The list of layers has several important features. These need to be grasped if you are to use layers successfully: • At the left-hand side of each layer there is an Eye button. As you would expect, this indicates that the layer is presently visible. Click once to switch off the eye button (and once again to switch it back on). By switching off a layer you make it impossible to see any image content from that layer, thereby making the content of the layer below visible (in so far as it was hidden by the image on the hidden layer). You can switch off as many layers as you like, and also have any combination of switched-on and switched-off layers. • The currently selected (or highlighted) layer is the active layer. Any editing you do is always implemented on the active layer. Since it is not possible to have more than one active layer at a time, none of the inactive layers will be affected by your editing. This is, of course, the main value of layers in the first place. You can make any other layer the active one simply by clicking on it. With this in mind it is important to note the following: a layer may be the active one and at the same time be invisible, that is with the eye button switched off. If this is the case, you will not be able to see the effects of editing until you switch on the eye again, but editing will be applied to the currently selected active layer whether or not it is currently visible. 321 Photopaint Layer options There are various layer options, available through the “Layers” dialog or, if not there, the Layers menu. These options show some of the most powerful features of layers. (The example “Layers” dialog shows an image of a house on the Background Layer - see Background layer on page 318 - and a Super Nova filter on Layer 2. The images can be combined in the image window to show a house with a super nova filter, or either layer can be switched off to show only the image on the other layer. The active layer in the example is Layer 2 and all actions will take place on this layer until the other one is selected.) We will go through the options in the “Layers” dialog not already dealt with in Creating and working with layers on page 319 . After that we will cover some of the options available through the Layers menu. Click on the New Layer dialog. button in the “Layers” dialog to open up the “New Layer” 322 Photopaint In the Name box the layer is given a default name e.g. Layer_3. You can change the name as you wish. (The Opacity, Group with previous and Mode options are dealt with in the account of the “Layer Properties” dialog later on in this section.) Click on OK to close the dialog and create the new layer. Note that whenever you create a new layer it is placed directly above the current highest layer in the stack, that is it becomes the layer furthest from the background. This can be observed in the “Layers” dialog. If you want to delete a layer, first select the layer in the “Layers” dialog and then click on the Delete Layer button. You can duplicate a layer by first selecting the correct layer in the “Layers” dialog and then clicking on the Duplicate Layer button. 323 Photopaint In the “Duplicate Layer” dialog the layer to duplicated will be given a default name which you can change as you wish. In the Destination box you can choose whether to have the duplicate layer saved to the present document, an already existing document or to a new document. There are several buttons that enable you to alter the order of the layers. In each case, first select the layer to be moved. • Click on Layer Up to move a layer one up the stack, that is one layer further away from the background. • Click on Layer Down • button takes the selected layer to the top of the stack, that is the The Layer First furthest away from the background. • button takes the selected layer to the bottom of the stack, that is The Layer Last makes it the background layer. Click on the Layer Options to move a layer one down the stack. button to open up the “Layer Properties” dialog. There are several options here which are also available in the “Layers” dialog itself, such as power to change the name, alter the opacity, and select a different blend mode for the layer. In addition, you can choose to group layers together. • Opacity: use the slider to reduce the opacity of the active layer. In effect, 100% opacity on a layer prevents you seeing through an image to the layer below. As you gradually reduce the opacity the image fades more and more. Note that altering the 324 Photopaint opacity merely changes the appearance of a layer, but does not effect a permanent change unless you choose to merge or flatten an image (see Merge operations with layers on page 326). • Mode: the blend mode determines how colors on the active layer will blend or combine with colors on the layers below (see Blending between layers on page 324 for more information). • Grouping: The Group with previous checkbox should be switched on if you want to “clip” the active layer to the layer below. Essentially, grouping causes the information on one layer to mask the information on the other. So, if you have two adjacent layers, with the upper layer clipped to the lower, the only part of any image on the lower layer that will “show through” is that which coincides with the image on the upper layer. The image on the upper layer will be seen as if filled with the colors from the image on the lower. Another way of thinking about this is to see the transparent areas of the upper layer as masking the equivalent areas of the lower layer. An example of the use of the technique is when you have some text on the upper layer, say “Happy Birthday”, which you want to be displayed with the colors that are directly underneath in the lower layer. You can cancel a grouping by clicking on the checkbox again or by selecting Ungroup from the Layers menu. • Click on OK to close the dialog and apply the changes. Blending between layers In the Layer Options section (see Layer options on page 321) we explained some of the various options available in the “Layers” dialog. One of the most useful is the Mode option, which determines how colors on the active layer will blend or combine with colors on the layers below. The effect of a Blend mode is usually obtained in conjunction with a setting for the Opacity of the layer. There are several options for blending. The list of these is the same as for Brush modes (see Brush modes on page 295). There are, though, important differences: • brush modes concern blending between colors on one layer, whereas blend modes concern blending between different layers; • brush modes can be limited to a selection on a layer, whereas blend modes work on the whole of a layer; • a brush mode will only take effect once you start to paint with it, leaving previously applied brushstrokes untouched unless you paint over them, whereas a blend mode is applied immediately it is selected to the whole of the layer and will continue to be applied as long as it is selected; • 325 Photopaint brush modes are permanent, unless you use the Undo option in the Edit menu, whereas blend modes can be changed or cancelled by selecting another blend mode. The usefulness of blending can be gauged from the following notes. The image window can contain many layers in a definite order. Each layer can have its own image but all the layers share the same “space”, namely the standard image window. However, when it comes to displaying or printing an image that is comprised of a series of layers, it is obviously impossible to display all the separate layer images. In other words, only one image can actually be displayed. Blending is a way of determining the final color values for an image you wish to display or print, when that image consists of more than one layer. Note that the Blend modes do not effect a permanent change and can be cancelled at any time by selecting Normal in Mode and setting the Opacity at 100%. For some examples of blending between layers, see Blending between layers: examples on page 325. Blending between layers: examples The following examples show you how to apply the techniques discussed in Blending between layers on page 324. Since blending is applied to the color values of the pixels on more than one layer, Photopaint has to calculate, for each pixel, the resultant color from a combination of the base color (or color of the layer below the active layer) and the blend color (or color of the active layer). The particular Blend mode used determines the way the resultant color is calculated. The default value for the blend mode is Normal, as you can see in the Mode box. Another important concept when selecting a blend mode is that of opacity, which is set in the Opacity box. For some blend modes an effect becomes apparent only if the opacity is set at less than 100% e.g. Dissolve. The main blend options, which you can select in the Mode box, are: • Normal The resultant color is the same as on the current active layer (subject to the amount of transparency set in the Opacity box, therefore visibility through to the lower layer). In effect, the base color is not used to help calculate the resultant color where the base and blend colors overlap. • Dissolve 326 Photopaint A layer with less than 100% opacity is converted - “dissolved” - to 100% opaque randomly scattered pixels. The effect is of a rough brushstroke, containing a mixture of blend and base pixels, rather than an evenly transparent one. • Multipy The brightness values of the base and blend colors can be combined to create a darker tone. This is done by multiplying the two brightness values when they are expressed as fractions. For example, white has a brightness value of 255 (the maximum) and is represented as 255/255 or 1; black has a brightness value of 0 (the minimum) and is represented as 0/255 or 0. All other brightness values are represented as fractions between 0 and 1 e.g. 150 is represented as 150/255; 100 as 100/255. Therefore, using Multiply we get the result (100 * 150) / (255 * 255), which works out at 59/255. You can immediately see that the resultant brightness will always be lower than (or equal to) the brightness of either one of the multiplied fractions. This intuitively fits in with our experience of placing one transparent sheet on top of another, where the result is always darker. Note that the above means that if the blend color is white, the resultant color is the same as the base color. If the base color is white, the resultant color is the same as the blend color. If either the base or the blend color is black, the resultant color is black. If the base color is transparent, the result of blending any color is black (since a transparent layer counts as 0, that is, the same as black). • Screen This mode has the opposite effect to Multiply, combining the base and blend colors to create a lighter tone. These are some of the more important options, but there are many others: Behind, Overlay, Difference, Addition, Subtraction, Darken Only, Lighten Only, Hue, Saturation, Color, Luminosity, Divide, Color Burn, Color Dodge, Hard Light, Soft Light Remember that you can always cancel or change the effect of a blend mode by selecting another one, especially the Normal blend mode. For information on how to make a particular blending permanent, see Merge operations with layers on page 326. Merge operations with layers The merge options, accessible in the Layers menu (see Layer options on page 321), provide a useful way of fusing the contents of layers to form one image on one layer. • Flatten Image merges all visible layers into a single background layer, leaving out and discarding non-visible layers (the ones with the Eye switched off). At the end of this operation there is only one layer left. • • 327 Photopaint Merge Visible merges all visible layers into the bottom-most visible layer, creating a single background layer and leaving non-visible layers untouched and above the background layer. Merge Down merges the active layer with the layer below it. The merge operations are permanent, although if you make a mistake with a merge just select Undo from the Edit menu to restore the previous state. Copy, Cut and Paste The Copy, Cut and Paste commands in the Edit menu work in conjunction with the Layers facility. Whenever you copy or cut a selected image or part of an image and then use paste, the selection is pasted onto a new layer. The pasted selection will be slightly off-center, rather than superimposed on top of the copied selection. 1. The Copy, Cut and Paste commands only become active after you have made a selection, in the normal way, using one of the selection tools (see Selections on page 274) or an option from the Selection menu (see Selection menu on page 278). 2. After making your selection, click on either Copy or Cut in the Edit menu. 3. Click on Paste in the Edit menu. The selection is pasted onto a new layer, which automatically becomes the active layer. Note that if you want to move a selected part of an image to another area on the same layer, you can’t just copy and paste. Instead, you should drag the Move arrow when the selection is in Transform mode (see Transform Image on page 283). Edit menu The Edit menu enables you to perform various editing operations. Nearly all of these have been dealt with in other sections: • Undo undoes the last applied command. You can undo several commands, the precise number depending on what part of Photopaint you’ve been using. The next command to be undone always appears just to the right of Undo e.g. Undo Ellipse selection. • Redo, as the word implies, restores the last undone command. Again the number of commands it is possible to redo depends on the nature of the commands. • History: see History palette on page 298 . • Cut, Copy, Paste: see Copy, Cut and Paste on page 327. 328 Photopaint • Stroke uses the current selection border as the basis for painting a band of color around the selection. The color used is the current foreground color (see Color selection on page 271 for information on how to select a new color). In the “Stroke Selection” dialog you can set the following: • Width: enter a value for the stroke width (in pixels). • Blending: choose a Mode and Opacity (see Brush modes on page 295 for information on the various ways of blending colors.) • Location: choose whether to have the stroke in the Center, Inside or Outside of the selection border. • Click on OK to exit the dialog and draw the stroke. The selection border will be traced with the foreground color, using the width and “location” chosen by you. When the selection is cancelled the stroke remains in place. • Fill enables you to fill in a selection using any color or pattern you like. In the “Fill” dialog set these options: 329 Photopaint Choose a Fill color in the Color box: Foreground: the current foreground color Background: the current background color Black: solid black 50% Gray: half white, half black White: solid white Custom Color: select a color in the Select Color dialog Pattern: select a pattern in the Pattern Editor dialog Note that the Fill color is displayed in the Preview box. In the Blending box set the Mode and Opacity (see Brush modes on page 295 for information on blending). Once you have set the Color, Opacity and Mode click on OK to apply the Fill. 330 Photopaint • • Clear: Deletes the contents of the current selection (or layer if a selection hasn’t been made). Note that the deleted selection is “replaced” with the current background color, not with the transparent grid and not with the color of any underlying layer. Free Transform and Transform enable you to transform either the selection boundaries, leaving the image unaffected, or the image itself. They are described in Transform selection tool on page 279 and Transform Image on page 283. Image menu The commands in the Image menu enable you to adjust the color values of and to resize, rotate, crop and duplicate images. The Adjust commands are especially useful when working with scanned images, since the colors are usually not perfectly duplicated in computer form. These are the main options in Image: Adjust on page 330 Duplicate on page 341 Image Size on page 341 Canvas Size on page 342 Rotate on page 344 Histogram on page 344 Adjust Image The Adjust command in the Image menu opens up a new menu containing a variety of commands: Auto Levels on page 331 Levels on page 331 Curves on page 333 Color Balance on page 335 Brightness/Contrast on page 337 Hue/Saturation on page 337 331 Photopaint Desaturate on page 339 Invert on page 339 Equalize on page 339 Posterize on page 339 Threshold on page 340 Use these to adjust the color values of the image. Auto Levels The Auto Levels command - from the Adjust section of the Image menu - applies an automatic tonal readjustment of the image by repositioning the endpoints of the tonal range. The tones are readjusted to fit in between the new endpoints. The effect is to increase the contrast in the image. The lightest and darkest pixels of the image are reset as white and black respectively, and then the intermediate pixel values are redistributed proportionately. The dark values get darker and the light values get lighter, hence causing the image to have higher contrast and greater color saturation. For more information on adjusting levels, see Levels on page 331. Levels The Levels command enables you to adjust the brightness of pixels, hence relocating the brightness values of an image. This is done by manipulating the controls which represent the shadows, mid-tones and highlights in the image. In effect the Levels sliders are used to expand or compress the current tonal range. The Histogram represents the tonal range of the image and measures how many pixels are colored with each of the tones between 0 (black) and 255 (white) (see Histogram on page 344 for more explanation). Access the Levels command in the Adjust sub-menu under Image. 332 Photopaint In the “Levels” dialog you can set the following: • Set the channel in Channels, choosing from Luminosity (red, green and blue combined), Red, Green, or Blue. Note that the histogram changes to reflect your setting. • The Input Level boxes display values for shadows and highlights, thereby determining the range of pixels that will be turned black or white. You set these values by dragging the sliders just below the boxes. For example, if you use the left-hand slider, which adjusts the shadow value in the left-hand box, to set a value of 60, then all pixels with a brightness value of 60 or less will become black. Likewise, using the right-hand slider to set a highlight value of 200 in the right-hand box causes all pixels with a brightness value of 200 and higher to become white. The range of values is from 0 to 255. The middle box and slider control the brightness of the mid-tones. The default value is 1 and the range through which you can move the slider is 0.09 at the right side to 10 at the left side. Moving towards the lower value darkens and towards the higher value lightens all the tones of the image that aren’t either black or white (these parts of the image stay the same). • The Output Level slider and boxes are used to compress the tonal range. This is done by restricting the darkest and lightest tones, hence causing a decrease in the 333 Photopaint number of possible tones in between the new darkest and lightest tones. The effect of this is to decrease the contrast in the image. Set the shadow value by moving the left-hand slider to the right: a value of 50 reduces the darkest tone to 80.4% of black i.e. 0 is black and 255 white, so a setting of 50 represents a reduction of 19.6%. Set the highlight value by moving the righthand slider to the left: a value of 200 increases the darkness of the lightest tone to 21.6% of black (alternatively, 78.4% of white). The tonal range is adjusted to fit in between the new limits of 50 and 200, there being nothing outside of this range in the 0 to 255 scale. Any changes you make are immediately applied to the image on screen. Click on Cancel to cancel these changes and exit the dialog; otherwise click on OK. Note that the Levels command isn’t as accurate or powerful as the Curves command (see Curves on page 333). Curves The Curves command (Image/Adjust) enables you to change the pixel values of an image. It allows you to focus with greater precision on certain tonal areas and is therefore more powerful than the Levels command (see Levels on page 331). The “Curves” dialog consists of a tonal graph on a grid background. The tones of the image are altered by manipulating this graph in conjunction with the tonal range represented by a particular square or squares. The graph can take either of two forms: one which allows you to manipulate the graph by using points or markers, the other which enables you to draw a curve freehand. The two forms of curve can easily be converted into one another. 334 Photopaint The “Curves” dialog contains the following options: • Channels: Choose to edit one of the individual channels - Red, Green or Blue - or all the channels combined - Luminosity. • Tone Graph: This is a diagonal straight line by default. It represents the spread of tones throughout the image. Pixel values are altered by manipulating this graph. The four-by-four grid against which the graph is set allows you to focus your changes on particular tonal areas. The horizontal bar at the bottom of the graph represents the gradual changing of the tonal range from black to white. So, if you would like to make the lighter tones darker you should concentrate on the squares towards the upper right-hand corner, but if you’d like to make the darker tones lighter concentrate on the squares towards the bottom lower left-hand corner. The square markers at the extreme ends of the graph represent the tonal end-points. It is not necessarily the case that the image contains these tones, so, for example, to alter the darkest tones in the image you may have to concentrate on a square that is further along the graph from the bottom left-hand square. The tones can be changed by clicking on the graph in the square that contains the relevant tones e.g. shades, mid-tones, highlights. A marker will appear on the graph 335 Photopaint at this point. There are two functions of markers. The first is to make tones lighter or darker by dragging the marker upwards or downwards respectively. The straight line graph will adjust to form a curve, using the marker as its point of origin, and the image will dynamically darken or lighten to reflect the new graph. With only one marker in place the whole graph bends into a curve and therefore affects the whole tonal range. Since you will usually want to concentrate on a limited range of tones, the second function of the markers is to anchor the graph, therefore restricting the curvature whenever you reposition a particular marker. To do this put several markers in place along the graph at regular intervals and then move the relevant marker up or down as required. Only a small section of the graph will be affected and hence only a small part of the tonal range will be altered. Note that the graph will attempt to form the smoothest curve possible between the markers when the Smooth curve option is set (see below for the difference between Smooth and Free curves). You can place up to fourteen markers on the graph. Reposition a marker by dragging it along the graph in the required direction. Remove a marker by dragging it horizontally till it disappears (dragging vertically alters the graph itself, of course). Usually you will only need to make small adjustments to the graph, anything greater altering the image tones radically. • Smooth and Free: The default setting is Smooth. This ensures that the curve is adjusted smoothly i.e. no “sharp corners”, therefore causing the tonal alteration in the image to be smoother too. Markers can be added only to smooth curves. The Free option removes any existing markers, including the end-points, and allows you to use your mouse to draw a “curve” freehand, without the rest of the graph being adjusted to remove sharp corners. You can switch between these at will. Note, though, that switching back to Smooth from Free smoothes out the curve and adds ten markers at key intervals i.e. it doesn’t return the markers that you may previously added while in Smooth mode. If you continually click on Smooth you will notice that the curve gradually straightens out, eventually returning to its original diagonal form. • Reset: This resets the graph to its original straight diagonal form and removes any markers, apart from those at the end-points. The image dynamically reverts to its original state. Once you are satisfied click on OK to save the changes and exit the dialog; otherwise click on Cancel to exit without saving. Color Balance The Color Balance command in the Adjust section of the Image menu allows you to make adjustments to colors by altering their position in the Red Green Blue (RGB)/Cyan Magenta Yellow (CMY) color scale. 336 Photopaint Each of the colors is linked with its complement on the color scale, for example, Cyan with Red, and connected by an adjustment slider. The Color Levels boxes just above the sliders display the current color values, reading from left to right, for the top, middle and bottom sliders respectively. The range of possible values lies between -100 and 100. The default is 0. Note that your adjustments should usually be small i.e. within about 5 units either side of 0, so that the color balance is not radically altered. In the “Color Balance” dialog you can adjust the colors as follows: • Color is added (or subtracted) by moving the slider towards (or away from) the color to be added (or subtracted). So, to add green move the middle slider towards the green end of the Magenta/Green scale. To subtract blue move the slider away from the blue end towards the yellow end of the Yellow/Blue scale, this in effect being the same as adding yellow. • There are three Tone buttons which allow you to concentrate change over approximate tonal ranges in the image. The selected button guides the changes towards the relevant tonal range, hence helping concentrate the changes. The tones are: a. Shadows for tones over 75% b. Midtones for tones between 25% and 75% c. Highlights for tones below 25% • 337 Photopaint The Preserve Luminosity button helps keep the current luminosity - or lightness - of the image. When this is unchecked the tonal values of the image are altered along with the colors. The changes you make will be implemented while you are still in the dialog. Click on Cancel if you want to cancel these; otherwise click on OK to keep the changes and close the dialog. Brightness/Contrast Use the Brightness/Contrast command - among the Adjust commands in the Image menu - to alter the overall brightness or contrast of the image. The brightness of an image is a measure of its overall lightness; the contrast is a measure of the difference between lighter and darker tones. Both values are set by sliders in the “Brightness/Contrast” dialog. Sliding to the right increases the brightness/contrast; sliding to the left decreases them. The current value for both brightness and contrast is shown as 0 before any changes are made. You can set the value for each at anything between -127 and 128, these being relative to the current value. Note that as you move the sliders the changes immediately take effect on screen. If you would like to cancel the changes just click on Cancel to exit the dialog and return to the previous state. Otherwise click on OK to close the dialog and keep the changes. Since the Brightness/Contrast command acts on all channels at once, that is you can’t make changes to individual color elements within the image (red, green, blue, for instance), you may want to look at Curves on page 333 . Hue/Saturation The Hue/Saturation command in the Adjust section of the Image menu allows you to edit colors using the Hue Saturation Brightness (HSB) model. 338 Photopaint Basically, you can take either all the image colors together or select a single color, then change the hue, saturation or brightness accordingly. In the “Hue/Saturation” dialog there are sliders for the hue, saturation and lightness (brightness). The setting is always 0 for each of these when you first enter the dialog. You can move the sliders through -180 to 180 for Hue, and between -100 and 100 for Saturation and Lightness. These are measured relative to the current setting. (Note that the Hue values can be imagined as being degrees on a circle, so that -180 and 180 result in the same color being selected.) On the left of the dialog there is a list of all the colors in the RGB and CMY scales. Any one of these can be selected and changed in its hue, saturation or brightness. The default setting is Master, that is , all the colors of the image are changed together. • The Hue slider takes a selected color - or all the colors together - through the range of colors in the RGB/CMY scales. Once the slider position is set the relevant image colors change to reflect the new hue settings. Note that when you next enter the dialog the color list is returned to its normal setting, ready for you to make more changes should you need to. • The Saturation slider increases or decreases the intensity of colors (or a selected color). Decreasing the saturation causes color to become grayer; increasing the saturation causes color to become brighter. • The Lightness slider increases or decreases the brightness of colors (or a selected color). Decreasing the lightness causes color tones to become darker; increasing lightness causes them to become whiter. 339 Photopaint All the changes you make in the “Hue/Saturation” dialog are immediately applied to the image on screen. Click on OK to exit the dialog and keep the changes; otherwise click on Cancel to close the dialog and abandon the changes. Desaturate The Desaturate command in the Adjust section of the Image menu causes all colors in an image to become gray. This is the equivalent of setting the Saturation slider to 0 while using the Hue/Saturation command (see Hue/Saturation on page 337). Note that the command is immediately implemented without your needing to access a dialog. Invert The Invert command in the Adjust section of the Image menu inverts all the pixel values in an image, that is changes them to their opposite value. More exactly, it calculates a new value for each pixel by taking the current value and subtracting it from 255. The new value then determines the brightness of the pixel, and therefore the brightness of all the colors in the whole image. Note that the command is immediately applied once selected. If you would like to revert to the original brightness it is usually safe to do a reverse inverse by just selecting Invert again. However, in some circumstances it is often safer to select Undo from the Edit menu. Equalize The Equalize command (in the Adjust section of the Image menu) is used to redistribute the tones in an image. It accomplishes this by examining the image for the lightest and darkest pixels and then changing the lightest to white and the darkest to black. The remaining pixels are adjusted so that their tone is spread between the new limits. Posterize The Posterize command (in the Adjust section of the Image menu) is used to reduce the number of tonal levels in an image. This is useful in creating a silk-screen effect, as in some of Andy Warhol’s pictures. In the “Posterize” dialog set the new number of levels in the Levels box (the default is 4, the maximum 255). The number you enter is used to give an average for the 256 levels making up each of the color channels. With a low number of levels the effect of posterization is to display conspicuous bands or areas of color, while with a high number the changes are much less obvious. At 255 the image remains the same. 340 Photopaint Any changes you make are immediately applied to the image, so you should click on Cancel if you want to abandon the changes and exit the dialog. Otherwise click on OK to keep the changes. Threshold The Threshold command (in the Adjust section of the Image menu) converts all the colors in an image to just two: black and white. The threshold is a limit value above which tones become black and below which they become white. Therefore you can decide how much of the image becomes black and how much white. In the “Threshold” dialog use the slider to set a threshold value anywhere between 0 and 255. Towards the upper end of the scale the image becomes darker and is completely black at 255; towards the lower end the image becomes lighter and is completely white at 0. The current threshold is displayed numerically in the Threshold Level box. The default threshold is 127 when you first enter the dialog i.e. half way between black and white. The histogram represents the distribution of image tones and can be used as a rough guide to help you set the threshold. The command is immediately applied when you enter the dialog, initially using the 127 default threshold value and then any other value you may set with the slider. To cancel these changes and return to the original image click on Cancel, otherwise click on OK to exit the dialog and keep the changes. Once you have applied the Threshold command you can only get back to the original colored image by selecting Undo Threshold from the Edit menu. 341 Photopaint Duplicate image The Duplicate command in the Image menu copies the open image to another window. The duplicate is given the title Copy of (name of open image) but can be renamed when you save it. The duplicate is in every way the same as the original and can be edited in all the usual ways, including the addition of layers. To switch between the duplicate and the original click on the Window menu and select the relevant name at the bottom of the menu. Image size The Image Size command in the Image menu allows you to alter the size of the open image. In the “Image Size” dialog there are several ways to do this: • Type the new dimensions into the Width, Height and Resolution boxes in the Image size group box. Note that just above this the amount of space needed to store the image is displayed. The original measure is recorded in brackets. You can force 342 Photopaint the dimensions of the image to change in proportion by selecting the Preserve Ratio box, that is, typing a figure in Width will automatically cause the figure in Height to change in proportion. • The Scale group box allows you to select from one of the displayed fractional scales: 1/4, 1/3, 1/2, 2, 3. • The Interpolation group box allows you to determine how the image will be affected when the size or resolution is changed. Since changing the dimensions of an image results in pixels being either added or removed, there needs to be a method of working out what color values the new pixels will have. Each of the interpolation values is used to spread color over a given range of pixels, in an attempt to maintain the appearance of the original image. The available interpolation values are: Nearest Neighbor, Linear, Quadratic, Cubic, Quartic, Quintic, 6th Order, 7th Order. The higher the order the better the result, although it takes more time of course. Once you are satisfied with your settings, click on OK to effect the changes. If you would like to reverse a resizing it is best to use the Undo command in the Edit menu, although you can of course resize in the opposite direction e.g. half the image size after a previous doubling. Canvas size The Canvas Size command in the Image menu allows you to alter the dimensions of an image. However, unlike the Image Size command, this is done without changing the resolution. In effect, when the width or height is reduced the image is cropped, and when it is increased transparent pixels are added to fill up the extra space. (Note that the image canvas is usually surrounded by a gray area if the canvas is smaller than the image window. This gray area is inaccessible to the Photopaint tools. Increasing the canvas size creates a newly accessible area, hence allowing you to add a caption, say, to the bottom of a scanned photograph.) 343 Photopaint 1. In the “Canvas Size” dialog you can make changes in the Width and Height boxes. Note that the amount of space required for the image is shown just above. 2. In the Anchor box there is a grid of nine squares which helps you to choose where the image will be located on a resized canvas. Since changing the canvas size results in either a cropping or expansion of the canvas, there are two basic uses of the anchor grid: • Use the grid to preserve a part of the image when cropping. For instance, if you are reducing the height by two units (of some scale) but wish to preserve the bottom of the image, you should click one of the bottom squares to ensure that the two units are cropped from the top of the image. Clicking on one of the middle (horizontal line of) squares will result in one unit being cropped from the top and one from the bottom of the image. The same principles can be applied to cropping from the left and right sides of the image. (Note that you can also crop using the Crop tool on the Tools bar - see Crop on page 277 .) • Use the grid to determine where in an expanded canvas the original image should appear. For instance, if you are adding two units to the width and height of the canvas and you would like these to be distributed evenly around the image, then click on the center square to create a one-unit band around the image. If you click the lower-left square, two units are added to the top and two to the right side of the image. Once you are satisfied with the width, height and anchor grid setting click on OK to implement the changes. 344 Photopaint Rotate The Rotate command in the Image menu allows you to turn the image through an angle set by you. (Note that, in effect, the image canvas is rotated and therefore the image along with it. This is different from the rotate commands in Transform Image - see Transform Image on page 283 - which turn a selection of the image without turning the canvas and therefore allow images to be “cropped” once they are outside the canvas area.) There are set options for rotating through 90 degrees clockwise (90 CW), 90 degrees counter-clockwise (90 CCW) and 180 degrees. In addition, you can flip the image either horizontally or vertically. The most versatile command is Arbitrary, with which you can specify an exact angle of rotation, anywhere between 0 and 360 degrees, and choose to rotate either clockwise or counter-clockwise. Histogram The Histogram option in the Image menu is purely there for informational purposes. It displays in graphical form the tonal values of the image, according to which of the channels you select. You can choose to see a histogram for either the Red, Green or Blue channel, or for all of them together by selecting Luminosity. The graph represents the darkest to lightest pixel values (reading horizontally from left to right) between 0 and 255. There are 256 lines representing 256 possible tones. The height of the line indicates the number of pixels in the image that have that particular tone. If a tone is not present in the image it will have no associated line in the histogram. For instance, if there is no pure black in the image there will be no line at the left-hand side of the histogram, and if there is only a small number of black pixels the line will be short. The same is true of the rest of the tonal range. This information can be useful in guiding you in your color correction strategy. 345 Photopaint The Tools menu The Tools menu contains commands through which you can create or edit gradients, patterns and brushes. The following sections show you how to do this: Gradient Editor on page 345 Brush Editor on page 349 Patterns Editor on page 353 Gradient Editor Although Photopaint already contains several default gradients, which are explained in Gradient Fill on page 301, it is useful to be able to create new gradients - or edit existing ones -to your own design. This can be done through the Gradient Editor. You can access the Gradient Editor in the Tools menu. (Alternatively, click on the Edit button at the bottom of the “Gradient Fill” box after selecting Gradient Fill on the Tools bar.) Once in the “Gradient Editor” dialog you can set the following: • Create a new gradient by clicking on the New button. In the Gradient Name box enter a name or leave the default name and click on OK. The gradient name is displayed in the top box. Any gradient you create will be displayed here and will appear each time you enter the Gradient Editor. • Change the name of a gradient by first selecting the gradient name and then clicking on Rename. Change the name in the Gradient Name box. • Remove a gradient by selecting the gradient name and clicking on the Remove button. The Gradient will be deleted from the list. • Copy a gradient by clicking on the Duplicate button. Give the duplicate a name in the Gradient Name box. Duplicates are useful if you plan to edit a gradient but also want to retain its original form. • If you are creating many gradients you may wish to put them into a separate file. Use the Save button to either create a new file or save to an existing file. Likewise if you want to use gradients stored in an separate file, use the Load button to load the file. When you first create a new gradient, it will have no distinguishing properties (all new gradients are shown as a solid line of color in the Gradient Bar). To begin creating the gradient proper, first make sure it is selected in the list of gradient names. 346 Photopaint In the body of the Gradient Editor you need to select colors and transparency values for the gradient, as follows: There are two Adjust checkboxes: • Color enables you to determine the color of the gradient. • Transparency enables you to determine the opacity of the gradient. 1. First select Color (it should be selected by default anyway). The long box just below the Adjust commands is called the Gradient Bar. This represents the gradient itself, namely how its color content is spread out when you create the gradient on screen. By default it will be a solid block of color until you design the gradient. Just below the Gradient Bar there are two Color Markers, one at either end of the Gradient Bar. Just above and half way along the bar, there is a Color Midpoint Marker. The Color Markers determine which colors the gradient will start and finish with; the Color Midpoint Marker marks the point where the two colors are equally blended. Select a color for the left-hand side of the Gradient Bar by clicking on the left-hand Color Marker. The little triangle on top of the marker will become black to show that it has been selected. 347 Photopaint Next, click on the Color box just below. The Select Color dialog is opened. Select a color for the marker (you can read about selecting colors in Color selection on page 271). Both the Color box and the left-hand marker are changed to the selected color. Set the color for the right-hand of the gradient in the same way. Note that the gradient runs through from the first color to the second with the Color Midpoint Marker showing where the two colors are equally blended. Initially this is half way along - select the marker and the Location box will read 50%. You can alter the location of the Color Midpoint Marker by dragging it either left or right. The point of equal blending between the two colors will be situated at the new location, which will be reflected in the Location box. Note that the Location box shows the position of the currently selected marker (the Color Markers are at 0 and 100% respectively). You are not restricted to just two Color Markers. To add another, click just below the Gradient Bar. A new marker is displayed. You can add several markers in the same way. If you would like to remove a marker just drag it away from the Gradient Bar and it will disappear. There are two important points you should note: • As soon as you add a Color Marker an extra Color Midpoint Marker is automatically added above the Gradient Bar. • This new Midpoint Marker is placed half way between the new Color Marker and an adjacent Color Marker. The rest of the Midpoint Markers are shifted along to take account of the new Color Marker. 348 Photopaint Once you have added a Color Marker you can proceed to create gradient sections between Color Markers, leaving the rest of the gradient unaffected. Moreover, you can drag any Color Marker, except the end markers, to a new position and thereby expand or contract particular sections of the gradient. Likewise, by dragging the Midpoint Markers you can alter the point of equal blending in any particular section. Note that when you click on a Color Marker its location is always displayed as a percentage of the whole Gradient Bar in the Location Box. However, with the Midpoint Markers the location is displayed as a percentage of the section between two Color Markers. If you have previously dragged a Midpoint Marker so that it is, say, 80% of the distance between the adjacent Color Markers, then it will retain this percentage distance no matter how many markers are added, until you choose to drag it to a new location. The gradient is also displayed in the Preview Bar at the bottom of the box. 2. Initially the opacity of the gradient is 100%. To alter this, click on Transparency. Note that the Color box changes to the Opacity box and the Gradient Bar becomes solid black. Opacity and transparency are set in a similar way to color, using the same tools. As with color, you can add Markers (below the Gradient Bar) and therefore Midpoints (above the box). Between any two markers there is one midpoint which indicates the half way point between the opacity of the two markers. Set the opacity for a marker by clicking on it and typing a percentage value in the Opacity box. 0% is totally transparent, 100% is totally opaque. 349 Photopaint You can set a transparency for the section between any two markers in the following way: Drag the midpoint to relocate the half way point between the markers. A marker of, say, 30% and one of, say, 70% will have a midpoint value of 50%. You can drag any marker, except the end markers, to a new position and thereby expand or contract particular sections of the gradient. The Location box works in the same way as for color, with midpoints being measured between adjacent markers and markers being measured along the Gradient bar as a whole. The gradient, with both its color and transparency values, is displayed in the Preview box. Once you are satisfied with your settings, click on OK to save the gradient and close the Gradient Editor. Apply the gradient by selecting Gradient Fill from the Tools bar. The new gradient will appear among the old gradients in the Gradient drop-down box in the “Gradient Fill” dialog. Apply the gradient by dragging the Gradient Pointer across the image window, as explained in Gradient Fill on page 301 . Brush Editor Although Photopaint comes with a full set of brushes for use with the various paint tools, you may sometimes find it useful to be able to create your own brushes. The Brush Editor enables you to add, delete and edit brushes. Open up the “Edit Brush” dialog by selecting the Brush Editor command in the Tools menu. 350 Photopaint In the Brushes box there is a list of all the existing brushes. The currently selected brush is displayed in the Preview box below. Note that unless you have already created a brush all the listed brushes will be the standard ones displayed by default in the “Brushes” dialog (see Brushes on page 294). You cannot edit or delete a standard brush. Create a new brush to your own design in the following way: Click on New to open up the “Brush Options” dialog. 351 Photopaint There are three basic brush types: • Elliptical: rounded and elliptical brushes. • Rectangular: rectangular brushes, which can be solid or hollow. • Bitmap: bitmap brushes, which can be created from the images in a separate bitmap file (use the Load Bitmap button to locate and load your bitmap images). Select one of these types before proceeding to create the brush. Once you have selected a brush type, various tools for determining the brush’s shape and size become available. The set of tools that can be used to create or edit a brush depends on the particular brush type. • Use the Radius slider to set the radius of the brush (only Elliptical and Rectangular) between 1 and 30 pixels. The radius is defined as half the maximum length of the brush. A long thin elliptical brush will therefore take as its diameter the distance between the extremities rather than the shorter distance. • The Hardness slider determines how soft (0%) or hard (100%) the brush (Elliptical, Rectangular or Bitmap) will be: the lower the value the fuzzier the brush, the higher the value the more defined the brush’s edges. • The Spacing slider determines the amount of space between the brush marks (Elliptical, Rectangular or Bitmap) when you use the paint tools. Note that the paint tools apply a series of identical brush marks in rapid succession, thereby creating the 352 Photopaint illusion of a solid line. If the spacing is set high enough the individual brush marks become visible. The spacing can be set at anything from 1 to 999%. This value is a relative measure of the spacing when compared to the radius of a brush shape. Anything below 100% will produce a continuous stroke; anything above will produce a stroke with space in between the brush marks. Note that the effects of spacing are more apparent when the brush stroke is applied quickly. If the application is slow the stroke will be solid even though the spacing is high, although the edges of the stroke will be “bumpy”. • The Width slider works only with the Rectangular selection and determines the thickness of the borders of the rectangle. The higher the width the thicker the border and the less space visible in the center of the rectangle. The width can be set at any value from 1 to 30 pixels. You can keep a check on your adjustments by looking at the changing display in the bottom right-hand Preview box. In addition to the above you can determine the roundedeness and angle of the brush (Elliptical or Rectangular only): • The Roundedness box determines the shape of the brush. Use the arrows to reduce the value from 100% (or type in a value directly). A value of 100% indicates that the shape is a circle (using Elliptical) or square (using Rectangular). As the value is reduced towards 0% the shape becomes flatter in one direction and therefore appears elongated. (Note that the Radius setting is not affected. This can only be changed by using the Radius slider and is always based on a shape’s maximum length.) • The Angle box determines the direction of the shape. Use the arrows to increase the angle from 0 to anything up to 360 degrees (or type in an angle directly). Increasing the angle rotates the shape anti-clockwise. • You can also set values for roundedness and angle in the Roundedeness and Angle box at the bottom left-hand corner. An outline of the shape is displayed, along with a direction-arrow and handles for adjusting the shape. Click anywhere on the boundary of the shape to set a new direction. Hold down the mouse and drag till the arrow is pointing in the direction you want (you can check this by glancing at the Angle box, in which the angle changes to match). Alter the roundedness by dragging one of the handles in or out. Likewise, the value in the Roundedness box will reflect your changes. Again, your changes can be viewed in the Preview box. Once you’ve designed your brush you can give it a name in the Brush Name box at the bottom of the dialog. 353 Photopaint Click on OK to return to the “Edit Brush” dialog. The new brush is displayed at the bottom of the Brushes box. Select it to see it displayed in the Preview box. If you now click on Close and select any of the paint tools on the Tools bar, the new brush will appear in the “Brushes” dialog, ready to use. The following are the remaining options available in the “Edit Brush” dialog: • You can edit a brush shape by selecting the Edit button. This opens up the same “Brush Options” dialog that is used to create a new brush. The process of editing is similar to creating a new brush. All the techniques explained above can be used to edit an existing brush. • Delete a brush by selecting the brush in the Brushes box and then clicking on Remove. The brush is deleted from the list. • Copy a brush by selecting the brush in the Brushes box and then clicking on Duplicate. It is a good idea to use this command when you want to use a standard brush as the basis for a creating a new brush. • Use Save to save all your current brushes, including new and edited brushes, to a separate file. Use Load to access brushes stored in a separate file. Once you have made all the changes you want click on Close to exit the dialog. Patterns Editor The Patterns Editor displays all your current patterns and enables you to access patterns that are stored in separate files. 354 Photopaint • New enables you to access a pattern from a separate file and display it in the “Patterns Editor” dialog as a new pattern. • Rename allows you to change the name of a selected pattern. • Remove deletes a selected pattern from the current list. • Load accesses patterns stored in a separate file. • Save enables you to save the current patterns to a separate file. Note that unless you load patterns from a separate file, you will have to create them from within Photopaint. See Pattern brush on page 288 for details on how to create a pattern. Image file formats As with other image editing programs, Photopaint can only use a file if it is saved in a file format that Photopaint recognizes. Photopaint recognizes a range of image file formats, including all the most important ones. If the file you want to open belongs to a format within this range you can open and save it directly in its own format, save as a native Photopaint file, or change it to any of the other formats that Photopaint supports. Why are there different image file formats? The short answer is that the different technical requirements of the chief graphics media require appropriate formats. For instance, if you wish to print an image the most common formats are TIFF and EPS. Web graphics are commonly held as GIF, JPEG or PNG. Multimedia graphics use PICT (for Macintosh) and BMP (for Windows). It is obviously useful to be able to transfer images between the various standard formats and between these and Ability Photopaint’s own format (apx). Some of the file formats display a dialog when you try to save an image in a new format. This is to enable you to set certain criteria for how the image will be saved, for example, the number of bits per pixel, whether the file is to be compressed, and so on. When considering how large an image file will be, there are two factors you need to take into account: The dimensions of the image, that is, the height times width in pixels, and the amount of information stored for each pixel within the image. The latter is measured in bits per pixel, the higher the number the greater the amount of information e.g. 8 bits per pixel allows a color palette of 256 colors, which will therefore give a more “accurate” image than an image stored as 4 bits per pixel. The way an image is stored is therefore determined by the extent of the information on each pixel, the dimensions of the image, and the degree of compression applied to the image. The full list of image file formats supported by Photopaint, along with their extensions, is as follows: Ability Photopaint (apx) on page 356 355 Photopaint Adobe tagged (tif) on page 356 Alias/Wavefront (pix) on page 357 Amiga IFF (iff, ilbm) on page 357 Bitmap (bmp, dib, rle) on page 357 Compuserve GIF (gif) on page 358 JPEG Images (jpg, jpeg) on page 359 Macintosh PICT Images (pct, pic, pict) on page 360 Portable Bitmaps (pnm, ppm, pgm, pbm) on page 361 Portable Network Graphics (png) on page 361 Raw Images (raw) on page 361 Targa (tga) on page 362 ZSoft Paintbrush (pcx) on page 363 No matter where it comes from, the image has to belong to one of the above formats if you are to be able to open or save it in Photopaint. To save an image file of one format as an image file of another format, do the following: 1. Open the file e.g. File/Open and then locate the file in the Open dialog. The file will be opened in its own format i.e. with the extension that already belongs to it. 2. Next, to save the file in another format, select File/Save As. In the Save As dialog, select the format you wish to convert the image to from the Save as type drop-down menu. The name of the file will already be displayed in the File name line, although you can change it here if you like. Use the Save in box to locate the folder where you’d like the file to be saved. Click on Save. 3. At this point, depending on the file format you’re saving to, either the save will immediately be implemented and the image in its new format displayed on screen, or another dialog will appear. The dialog allows you to determine certain features of the image before it is saved to its new format. Note that most of the dialogs are identical or almost so, with only a few being different. 4. Once you’ve made your choices in the dialog, click on OK to save the image in the new format. At the top of the window, the file extension will change to the new extension. However, the changes to the new file will be visible only when the file is 356 Photopaint closed and opened again (this allows you to do further format changes and saves on the image as it appeared in its original format). Note: The original image file remains unaffected (i.e. unedited and in its original format) by the Save As command. Ability Photopaint (apx) Ability Photopaint (*.apx) is Ability’s native image format. This format stores the maximum amount of information from the original file, that is, 24 bits per pixel and with no compression of the image. There is no dialog associated with this format, the image being saved straightaway. Adobe tagged (tif) Adobe Tagged Image File Format (*.tif) is the main format for transferring an image on to paper or film, although it handles only pixel-based information. The dialog allows you to set the bits per pixel i.e. how many colors are to be used to constitute the image: 1-bit for 2 colors (typically black and white), 4-bits for 16 colors, 8bits for 256 colors, etc. If you click on 8-bits, and make sure Color and User palette are selected, the Define button is activated. Click on this to enter the Color Table box. You can choose from a variety of color ranges from the drop-down list in the Table line at the top of the box: Custom, Black Body, Grayscale, Macintosh System, Spectrum, Windows System, Web. Each of these presents a different color palette, the image itself using only the colors that are available to it from the chosen palette. The Dither Type i.e. either Color or Gray, refers to how the image format tries to simulate the colors when moving from a more highly defined image format (i.e. greater bits per pixel) to a less highly defined one (i.e. fewer bits per pixel). For instance, a patch of turquoise may be rendered by a combination of blue and green pixels as an approximation. If you select Gray the dithering will use gray-scale values instead. 357 Photopaint Alias/Wavefront (pix) Alias/Wavefront Images (*.pix) There is no dialog associated with this format, the image being saved straightaway. Amiga IFF (iff, ilbm) Amiga IFF Images (*.iff, *.ilbm) There is no dialog associated with this format, the image being saved straightaway. Bitmap (bmp, dib, rle) The Bitmap Images (*.bmp, *.dib, *.rle) format is compatible with the Windows bitmap editing program that comes with Windows. It is useful for when images are to be edited or presented by someone using Windows-based software. The dialog allows you to set the bits per pixel i.e. how many colors are to be used to constitute the image: 1-bit for 2 colors (typically black and white), 4-bits for 16 colors, 8bits for 256 colors, etc. If you click on 8-bits, and make sure Color and User palette are selected, the Define button is activated. Click on this to enter the Color Table box. You can choose from a variety of color ranges from the drop-down list in the Table line at the top of the box: Custom, Black Body, Grayscale, Macintosh System, Spectrum, Windows System, Web. Each of these presents a different color palette, the image itself using only the colors that are available to it from the chosen palette. The Dither Type i.e. either Color or Gray, refers to how the image format tries to simulate the colors when moving from a more highly defined image format (i.e. greater bits per pixel) to a less highly defined one (i.e. fewer bits per pixel). For instance, a patch 358 Photopaint of turquoise may be rendered by a combination of blue and green pixels as an approximation. If you select Gray the dithering will use gray-scale values instead. Compuserve GIF (gif) Compuserve GIF (*.gif) format takes up a small amount of space in comparison to most other formats, thereby becoming the standard for on-screen web graphics. GIF files use a palette of fewer than 256 colors and are compressed. This means they are more suitable for images with areas of “flat” color, for example, as is usually the case in the typical company logo. The dialog allows you to set the bits per pixel i.e. how many colors are to be used to constitute the image: 1-bit for 2 colors (typically black and white), 4-bits for 16 colors, 8bits for 256 colors, etc. If you click on 8-bits, and make sure Color and User palette are selected, the Define button is activated. Click on this to enter the Color Table box. You can choose from a variety of color ranges from the drop-down list in the Table line at the top of the box: Custom, Black Body, Grayscale, Macintosh System, Spectrum, Windows System, Web. Each of these presents a different color palette, the image itself using only the colors that are available to it from the chosen palette. The Dither Type i.e. either Color or Gray, refers to how the image format tries to simulate the colors when moving from a more highly defined image format (i.e. greater bits per pixel) to a less highly defined one (i.e. fewer bits per pixel). For instance, a patch of turquoise may be rendered by a combination of blue and green pixels as an approximation. If you select Gray the dithering will use gray-scale values instead. 359 Photopaint JPEG Images (jpg, jpeg) JPEG Images (*.jpg, *.jpeg) format is ideal for images that are to be used on the web. Since it uses average color values taken from groups of adjacent pixels to compress the image, it is not suitable for high-quality printing. However, on the web the diminution of image quality is more than made up for by the speed of download that compression allows. Typically, a download of several minutes is reduced to just a few seconds. Note that the format works best with images that have some tonal subtlety, such as photographs of people, rather than ones with large areas of block or flat color (use GIF format instead for these). Before saving as a JPEG file you can choose some options in this dialog: 360 Photopaint 1. The Quality slider and boxes at the top of the dialog allow you to determine the size and quality of the image. Basically, the smaller the file the lower the quality, the larger the file the higher the quality. The slider and the boxes are automatically adjusted together. Quality runs from 1-100 and can be set in the Quality box. File size can be set anywhere between Small file and Large file using the slider (or use the Size box to select from Low, Medium, High and Maximum).Typically a quality rating of between 40 and 50 will provide a satisfactory file size together with a decent image. 2. The Baseline options (in the Format Options section) cause the image to appear one line at a time in your web browser, starting from the top. Optimized slightly reduces the file size when compared to Standard (the default). Note that Baseline JPEGS are becoming rarer, since viewers get impatient with the amount of time it takes to see the whole image. 3. The Progressive option causes the image to appear in your web browser in a series of “passes”. These allow you to see the image straightaway, albeit in faded form, before the image is fully refreshed. The number of passes is set in the Scan box: the higher the number the quicker the image begins to refresh, although the longer the refreshing takes to complete. Note that at present only a few browsers support Progressive JPEGS, though the situation should improve in the near future. Macintosh PICT Images (pct, pic, pict) The Macintosh PICT Images (*.pct, *.pic, *.pict) format is used for images that are to be displayed on-screen on the Macintosh platform. 361 Photopaint There is no dialog associated with this format, the image being saved straightaway. Portable Bitmaps (pnm, ppm, pgm, pbm) Portable Bitmaps (*.pnm, *.ppm, *.pgm, *.pbm) There is no dialog associated with this format, the image being saved straightaway. Portable Network Graphics (png) Portable Network Graphics Format (*.png) is an alternative to GIFs for web graphics. Although at present the format is not supported by many of the major browsers, this should change in the future. The format comes somewhere between JPEG (which is smaller because of compression) and GIF (which has a smaller color palette). PNG format is therefore useful for images that have smaller dimensions but are richer in tones and detail. There is no dialog associated with this format, the image being saved straightaway. Raw Images (raw) Raw Images (*.raw) format is typically used for images stored on mainframe computers. Raw images are stored only as strings of code. This dialog appears when you save the image to the Raw format: This dialog appears when you open the image in the Raw format: 362 Photopaint Targa (tga) The Targa (*.tga) format enables images to be combined with digital video sequences driven by video boards from a number of manufacturers. The dialog allows you to set the bits per pixel i.e. how many colors are to be used to constitute the image: 1-bit for 2 colors (typically black and white), 4-bits for 16 colors, 8bits for 256 colors, etc. 363 Photopaint If you click on 8-bits, and make sure Color and User palette are selected, the Define button is activated. Click on this to enter the Color Table box. You can choose from a variety of color ranges from the drop-down list in the Table line at the top of the box: Custom, Black Body, Grayscale, Macintosh System, Spectrum, Windows System, Web. Each of these presents a different color palette, the image itself using only the colors that are available to it from the chosen palette. The Dither Type i.e. either Color or Gray, refers to how the image format tries to simulate the colors when moving from a more highly defined image format (i.e. greater bits per pixel) to a less highly defined one (i.e. fewer bits per pixel). For instance, a patch of turquoise may be rendered by a combination of blue and green pixels as an approximation. If you select Gray the dithering will use gray-scale values instead. ZSoft Paintbrush (pcx) The ZSoft Paintbrush (*.pcx) is one of the original graphics formats. The dialog allows you to set the bits per pixel i.e. how many colors are to be used to constitute the image: 1-bit for 2 colors (typically black and white), 4-bits for 16 colors, 8bits for 256 colors, etc. If you click on 8-bits, and make sure Color and User palette are selected, the Define button is activated. Click on this to enter the Color Table box. You can choose from a variety of color ranges from the drop-down list in the Table line at the top of the box: Custom, Black Body, Grayscale, Macintosh System, Spectrum, Windows System, Web. Each of these presents a different color palette, the image itself using only the colors that are available to it from the chosen palette. The Dither Type i.e. either Color or Gray, refers to how the image format tries to simulate the colors when moving from a more highly defined image format (i.e. greater bits per pixel) to a less highly defined one (i.e. fewer bits per pixel). For instance, a patch of turquoise may be rendered by a combination of blue and green pixels as an approximation. If you select Gray the dithering will use gray-scale values instead. 364 Photopaint See: Image file formats on page 354 Vector tools Please note that Vector tools are not available in the "standard" version of Ability Photopaint. Please see http://www.abiity.com/ for more information. Most Photopaint images, whether scanned or created from scratch, are laid out much like any other image, for example, photographs and paintings. Basically there is a surface with an arrangement of colors, represented in Photopaint by combinations of pixels. Whenever you want to edit the image you have to use various techniques to change selected pixels within the whole image. In effect this is what happens whenever you use the normal paint tools to add or remove color, and the selection tools to concentrate on a limited area of the image which you may want to edit, move, scale, or transform in some other way. All of these techniques are relatively cumbersome and inexact, in that it is sometimes difficult to select precisely the area you want to edit. With vector tools you can create areas of color which are treated as objects in their own right. Although these objects are part of the image, in that they are “superimposed” on it, they can also be regarded as independent of the image, therefore easily editable in a variety of ways. The Photopaint Vector tools use what are called vector paths to create vector objects. Each vector object has a sharply defined shape which encloses a color or range of colors. Vector objects are treated independently of other vector objects and of any image created through normal bitmap technology. Essentially a vector object can be understood as a set of coordinates with various attached attributes. The advantage in using vector objects is that they are easy to manipulate, and therefore easy to scale, move, rotate, etc. as whole objects. None of these operations is easily accomplished with normal bitmap images. Whenever you create a vector object it is not added to an existing layer but placed above all the layers. If the object is 100% opaque you will not be able to see through to the images on the layers below. However, it is easy to edit any object so that it is transparent in some degree. The following sections will show you how to create and edit vector objects. Creating a vector object on page 364 Editing vector objects on page 369 Creating a vector object Once you have read about vector objects (see Vector tools on page 364) it is a simple step to creating your own. 365 Photopaint First, you need to open up the Vector tools box by clicking on the Vector tool on the ). The Vector Tools bar (this is paired with and next to the Vector Preview Mode Tools Box is displayed with all the tools necessary to create and edit vector objects. There are various options for creating objects: Vector Line on page 365 Vector Rectangle on page 366 Vector Round Rectangle on page 366 Vector Oval on page 366 Vector Polygon on page 366 Bezier Curve on page 367 Vector Free Hand Objects on page 368 Vector Text on page 368 Vector Line Click on the Vector Line tool in the Vector tools box. Drag the pointer till the line is the required length and then release the mouse. The line will be given the color of the current background color. 366 Photopaint You can read about how to edit vector objects in Vector objects: Modifying on page 373. Vector Rectangle Click on Vector Rectangle in the Vector tools box. Drag the pointer vertically and horizontally till the rectangle is the required size and then release the mouse. The rectangle will be filled in with the current foreground color. You can read about how to edit vector objects in Vector objects: Modifying on page 373. Vector Round Rectangle Click on Vector Round Rectangle in the Vector tools box. A dialog box will be displayed. Use the Radius slider to change the “roundedness” of the corners. You can set any value between 0 and 50. A radius of 0 produces a normal rectangle. Drag the pointer vertically and horizontally till the round-cornered rectangle is the required size and then release the mouse. The rectangle will be filled in with the current foreground color. You can read about how to edit vector objects in Vector objects: Modifying on page 373. Vector Oval Click on Vector Oval in the Vector tools box. Drag the pointer till the oval is the required size and then release the mouse. The oval will be filled in with the current foreground color. You can read about how to edit vector objects in Vector objects: Modifying on page 373. Vector Polygon Click on Vector Polygon in the Vector tools box. 367 Photopaint The “Polygon” dialog will be opened. You can create either a Polygon or a Star by clicking on the appropriate button. Set the number of sides for the polygon or radiating points for the star, between 3 and 16 inclusive, in the Number of Sides box. In the case of the star you can use the slider to set the Attitude. Drag the pointer till the polygon or star is the required size and then release the mouse. The polygon or star will be drawn using the current background color. Only the outline will be drawn, with the body of the shape hollow. You can read about how to edit vector objects in Vector objects: Modifying on page 373. Bezier Curve Bezier curves enable you create vector objects by using a series of curves, lines and control points to draw vector paths. Each point has an associated axis which can be used to increase the length and degree of curvature of a section of the vector path. The final shape of the vector object is created when you close off the curve. There are various ways of doing this, as you will see. Click on Bezier Curve in the Vector tools box. There are two basic techniques to remember when using the mouse to draw curves and lines: • Curves: Click once and keep the mouse button depressed to create a curve point, marked by a control point. An axis centered on this point is displayed along with two handles, one at either end of the axis. Drag the handles to extend and rotate the axis, thereby changing the length of the curve and the degree of curvature. Release the mouse button to set the curve. After setting a curve, moving the pointer will create another curve until you click again. • Lines: Click once and release to create a control point. Move the pointer to draw a straight line, which becomes fixed as soon as you click again. After setting a line, moving the pointer will draw another line until you click again, at which point you can create a curve if you keep the mouse depressed (as described above) or another line if you click and release. To complete a curve you must right-click to define the finish point and open a submenu with the following options: • Open Curve: draws the curve using the current background color without joining the start and finish points. 368 Photopaint • Smooth Closed Curve: draws and fills in the curve with the current foreground color, the start and finish points being joined together with a smooth curve. • Glue end points: draws and fills in the curve with the current foreground color, the start and finish points being pulled towards one another. • Close with line: draws and fills in the curve with the current foreground color, the start and finish points being joined with a straight line. The best way to learn how to create vector objects using Bezier curves is, as always, to experiment. You can always edit or delete the results later on. You can read about how to edit vector objects in Vector objects: Modifying on page 373. Vector Free Hand Objects This option enables you to draw vector objects freehand using your mouse. Click on Vector Free Hand in the Vector tools box. Drag the mouse pointer to draw the required shape and then release the button. A submenu is displayed, giving you the choice of any of the following for completing the curve: • Open Curve: draws the curve using the current background color without joining the start and finish points. • Smooth Closed Curve: draws and fills in the curve with the current foreground color, the start and finish points being joined together with a smooth curve. • Glue end points: draws and fills in the curve with the current foreground color, the start and finish points being pulled towards one another. • Close with line: draws and fills in the curve with the current foreground color, the start and finish points being joined with a straight line. You can read about how to edit vector objects in Vector objects: Modifying on page 373. Vector Text This option enables you to add vector text to an image, selecting from all the usual fonts, sizes and styles. Click on Vector Text in the Vector tools box. 369 Photopaint The mouse pointer turns to a T-symbol. Move this to the point where you want the text to appear and click once to open up the “Vector Text” dialog. In the main box of the dialog type your text. All the usual font options for the text are available through the Font button. These include font type, style, and size. (Note that changing any of the font characteristics will affect the contents of the whole of the “Vector Text” dialog. If you would like to mix font characteristics in a piece of text, it is necessary to open up the dialog separately for each change.) The text will take the color of the current Background Color box i.e. the lower box in the Tools bar. In the Alignment box you can choose either Horizontal or Vertical for text to run either across or down the image window respectively. There are two ways you may want to edit vector text: • firstly, treating it purely as text, you can select the Vector Text button in the Vector tools box and click on the vector text you want to edit i.e. using the mouse pointer T-symbol. This opens up the “Vector Text” dialog again, with the relevant text selected. Edit the text as you would normally e.g. you can change the style, size and font, and remove or add letters. Click on OK to close the dialog box and apply your changes. • secondly, you may treat the vector text as both text and shape, as with any other vector object. In this case, you can use the normal procedures for editing vector objects, which you can read about in Vector objects: Modifying on page 373. Editing vector objects There are several ways in which you might want to edit the vector objects you have created (see Creating a vector object on page 364). These fall into three categories: • Adjustment of the object’s size, position, shape and alignment. • Changing the color, transparency, border properties, etc. of the object. • Manipulating, adding and deleting control points to change the shape of the object. Before you can proceed with editing you must select one or more of the vector objects. To do this click on the Select Curves tool in the Vector tools box. 370 Photopaint Various dialogs and tool boxes are displayed. (These will be dealt with later.) Select one (or more) of the vector objects by dragging your mouse around the relevant object (or objects) and then releasing the mouse. Alternatively, move the cross pointer till it turns to a hand over the object and then click once. Since you will often have several objects in close proximity, or even overlapping, this latter method is a useful way of pinpointing the object to be selected. A box is placed round the object to indicate that it has been selected. You can now edit proceed to edit the selected object in various ways. For information on how to edit an object’s size, position and shape, see Vector objects: size, position, shape on page 370. For information on how to alter color properties, see Vector objects: Fill options on page 376. For information on how to manipulate control points to alter the shape of the object, see Vector objects: Modifying on page 373. Vector objects: size, position, shape Once you have selected a vector object (see Editing vector objects on page 369), you can make changes to its size, position and shape. This is achieved by making adjustments to the transformation box which has been placed around the object. The Vector tools box contains the following options, which are accessible by clicking on the relevant tool: Free transform . This allows you to move, scale and rotate the object. The pointer becomes an arrow inside the box, a cross while placed over any of the handles, and a curved double-headed arrow outside the box. • To move the object, place the pointer inside the box and drag the arrow to a new position. • To stretch the object, place the pointer over the relevant handle (or handles) and drag the cross to a new position. • To rotate the object, move the pointer anywhere outside the box and drag-rotate the curved double-headed arrow to a new position. Note that the object rotates about the star-like symbol at the center of the box. You can move this symbol by clicking on it and dragging. The object will henceforth rotate about the new position. The above operations are together known as Free Transforms, that is they are applied by you by hand, using the mouse, and are all available simultaneously. You can restrict the range of transforms to any one of these or to one of the other options. In choosing 371 Photopaint one of these options, you automatically make the others unavailable. For instance, while scaling you will be unable to rotate the selection. To access the other options click on the relevant tool or right-click and make a selection from the displayed menu. The options include: Scale Stretch the object either horizontally or vertically by dragging the handles of the transformation box. The object will be scaled to match the new box dimensions. Rotate Rotate the object by dragging the double-headed arrow outside the transformation box. The object will rotate with the box. Note that the star-like symbol acts as the center of rotation and can be dragged to a new position. Skew Skew the object by dragging a center-of-line handle in either direction along the line of the transformation box on which it is situated. The object will adjust to fit the skewed box. Note that dragging a center-of-line handle moves the whole of the line. Move Move the object by dragging the transformation box to a new position. Mirror Mirrors the object when the transformation box is dragged to an adjacent position: left or right, the object is reflected in a vertical “mirror”; up or down, the object is reflected horizontally; diagonally, the object is reflected vertically and horizontally. Note that Mirror moves the object to its mirror-image position. Reset Resets the original position, size and shape of the object i.e. returns it to its state when first selected. Note that Reset is available only through the right-click menu and not the tool box. In addition to the above you also have the option to align vector objects in a variety of ways: see Vector objects: aligning on page 371. Vector objects: aligning The Align tool box gives you the power to arrange objects in a variety of ways. 372 Photopaint Since vector objects can overlap in the image window, it is useful to be able to decide which position each object will occupy in relation to the others in the “hierarchy”, and therefore which objects will be completely visible and which partially hidden. In addition, Align gives you options for adjusting the height, width and position of selected groups of objects. If you have two or more overlapping objects, you may want to change the order of one or more of the objects. Select the object you would like to re-align. It is best to use the handpointer and then click once (see Editing vector objects on page 369). For these tools to become active you must select one and only one object (with the exception of grouped objects - see below). In the Align tool box there are four options highlighted: Bring to Front The selected object will be brought in front of all the objects it overlaps. Send to Back The selected object will be sent to the back of all the objects it overlaps. Bring Forward The selected object will be brought in front of the overlapping object one place ahead. Send Backward The selected object will be sent behind the overlapping object one place behind. The above options work with a single selected object. However, you can select several objects and then turn them into a single Group. The boxes surrounding the individual objects are turned into one big box around all the selected objects. To create a group drag the pointer round the relevant objects and then release. The individually selected . The above four objects can now be turned into a group by clicking on the G tool options are highlighted. You can now proceed to move the group to the front or back, forwards or backwards. To Ungroup and return to the individually selected objects, just click on the U tool . To activate the rest of the align tools you need to select at least two of the objects. Drag the pointer round the objects you want to align and then release the mouse button. Each of the objects is surrounded by its own box. Note that if you attempt to move one of these objects they will all move together. 373 Photopaint After you have made your selection the rest of the options in the Align tool box become available. Each of the following commands applies to the currently selected objects (nonselected objects are ignored): Align Left Objects are lined up with the object furthest to the left. Align Right Objects are lined up with the object furthest to the right. Align Top Objects are lined up with the top of the current highest object. Align Bottom Objects are lined up with the bottom of the current lowest object. Align Vertical Objects are lined up along a vertical axis. Align Horizontal Objects are lined up along a horizontal axis. Space Evenly Vertically Spaces three or more objects evenly in vertical direction. Space Evenly Horizontally Spaces three or more objects evenly in horizontal direction. Make all same width Makes all objects the same width. Make all same height Makes all objects the same height. Make all same size Makes all objects the same height and width. Vector objects: Modifying In normal viewing mode vector objects are displayed as colored shapes, curves or lines. As explained in Editing vector objects on page 369 it is possible to do basic editing when still in this mode. However, for more sophisticated editing of an object’s shape it is best to go into Preview mode. The objects then appear in their basic outline without color, that is as vector paths, and the main control points can be seen. 374 Photopaint The control points mark the key places along the vector path and are used for altering the shape of the vector object. This is done by manipulating the axis that runs through each control point. The following section shows you how to modify various types of vector object, for example, a Vector Rectangle on page 366 and a Bezier Curve on page 367. To modify a vector object two actions must be performed beforehand: Click on the Modify tool on the Vector tools bar. This displays the Modify Tools Bar, which contains these tools: Modify Control Points Sharp Corners Add Control Point Remove Control Point Next, click on the Preview mode tool displayed as vector paths. on the Tools bar. The vector objects are then on the Make the control points visible by clicking on the Modify Control Points tool Modify Tools Bar and then clicking on the vector object you would like to modify. There will be four control points, one at each corner, for a rectangle; two for an oval, one at the top and one at the bottom; one for each “joint” in a Bezier Curve, that is, at each of the points where you clicked when creating the curve; and so on. Notes on control points and axes 1. Each control point (except for those described in 7 below) has an axis running through it in a particular direction (sometimes the axis is not visible i.e. when the control point is at a corner the axis is folded up). The axis is centered on the control point, with the two halves being equal in length. 2. At either end of the axis there is a handle. Handles are used to turn the axis around the control point, which acts as the center of rotation, and to alter the length of the axis. Changing the direction or length of an axis changes the vector path that runs through the relevant control point. Note that the axis through a control point situated on a curve of the vector path is always at a tangent to the vector path at that control point (if the path at that point is a corner the axis is folded up, and if it is a straight line the axis runs along the line). 375 Photopaint 3. As a line is lengthened the vector path around the control point is stretched into a wider curve; as it is shortened the vector path is contracted until it finally becomes a sharp corner when the line is of zero length (as with a square). 4. Whatever you do with one handle is mirrored by the other handle, that is, the handles act in opposing ways - turning one handle downwards will tilt the opposite handle upwards, dragging one handle outwards will cause the other handle to move an equal distance in the opposite direction, and so on. 5. The handles can be moved or rotated by dragging with the mouse. Note that you can also drag the control point itself and the line will move as a whole without altering its length or direction. 6. Alterations in the vector path are restricted to the sections between the adjacent control points on either side of the control point that is being edited. 7. Some vector objects – especially those that are “open curves”, or polygons without a fill color – have start and finish points that “float free”. These do not have the normal control point and axis, but either a point without an axis or a one-length axis i.e. there is no mirror axis acting in an opposed way. Apart from modifying vector objects by dragging control points and handles, you can also add and remove points and turn curves into sharp corners: • Since the vector path is only affected between adjacent control points on either side of the edited control point, you may wish to add or remove control points to restrict or increase the editable range. To add a control point click on the Add Control point tool on the Modify Tools Bar. Next, click on the relevant vector object to active all the current control points. Move the mouse pointer over the point on the vector path where you want the new control point to appear and click once. A control point and axis will be added to the path at this point. The segment of vector path that is affected when editing will thus be reduced. The new control point can be used to alter the vector object, as described in the previous paragraph. • Contrariwise, if you would like to remove a control point, click on Remove Control on the Modify Tools Bar and then click on the relevant vector object. point Next, click once on the control point you would like to remove. The control point will disappear and the segment of vector path that is affected when editing will thus be increased. Note that after adding or removing a control point you must once again click on the Modify Control point tool and then the vector object to be able to modify the vector path, as described above. 376 Photopaint • The Sharp Corners tool enables you to convert a control point on a curved vector path into a sharp corner. The axis running through the control point will be reduced to zero length, although you can stretch it out again by dragging in the usual way (the sharp corner will then become a curve again). Convert a control point into a sharp corner by clicking on the Sharp Corners tool and then clicking on the relevant object to activate the control points. Next, click on the control point you would like to convert to a sharp corner. When you have modified the vector objects to your satisfaction, click on the Preview mode tool on the Tools bar again to switch it off and return to the normal vector object view, with colors restored. Vector objects: Fill options Vector objects can be filled in with color, using either Solid Fill, Gradient Fill or Pattern Fill. in the Vector tools To make these available you must first click on Select Curves box. Next, you need to use your mouse to select one of the objects (see Editing vector objects on page 369). The Fill tools box and Bezier Options boxes are displayed (as well as the Align box - see Vector objects: aligning on page 371). Choose from these options: Vector objects: Solid Fill on page 376 Vector objects: Gradient Fill on page 378 Vector objects: Pattern Fill on page 379 Vector objects: Solid Fill You can fill a vector object with a solid color by clicking on Solid Fill box (see Vector objects: Fill options on page 376). in the Fill tools Before clicking on Solid Fill you need to select a vector object. The “Fill” dialog is then displayed: In the Color box select the Fill color from: • Foreground: the current foreground color • Background: the current background color 377 Photopaint • Black: solid black • 50% Gray: half white, half black • White: solid white • Custom Color: select a color in the Select Color dialog Note that the Fill color is displayed in the Preview box. In the Blending box set the Mode and Opacity. The Mode works in a similar manner to blending between layers, except that blending is restricted to the selected vector object, rather than applied to the whole vector object “layer” (see Vector objects: blend modes on page 379). Once you have set the Color, Opacity and Mode click on OK to apply the Fill. The particular Solid Fill applied will now appear in the Bezier Options box. Here you can edit the Fill in a number of ways: 1. First, click on one of the Solid Fills listed in the top box. (Since you can set many of these for the same object, there may be more than one listed. For each of them the relevant details will be displayed in the rest of the box.) 2. In the Border Size box you can set a border value between 0 and 50. 3. Click on the Border Color box to open up the Select Color dialog to select a new color. 4. In the Mode box select a mode from the drop-down list (see Vector objects: blend modes on page 379). 5. Use the Opacity slider to set a value between 0 and 100%. 6. Finally, click on the Fill Color box to open up the Select Color dialog, where you can select another color. The changes you make will take effect immediately. At the top of the box there are some Move buttons. These allow you to move through the saved Solid Fills: Move operation up Move operation down 378 Photopaint Move operation first Move operation last As you click on these you will see the selected object change to display the properties of each of the chosen Solid Fills. If you would like to delete a particular Solid Fill, make sure it is selected and then click on Delete operation . The Solid Fill will be deleted from the list and the next one down in the list applied to the selected vector object. You can create many Solid Fills for the one vector object, as well as Gradient Fills on page 378 and Pattern Fills on page 379. Vector objects: Gradient Fill You can fill a vector object with a gradient by first selecting a vector object and then tool in the Fill tools box (see Vector objects: Fill options clicking on the Gradient Fill on page 376). The Bezier Options box is then displayed. To activate the Gradient Fill options in the Bezier Options box, you must first drag the gradient pointer – a hand symbol – a short distance across the selected vector object. Release the mouse and the Gradient Fill option is listed in the box at the top of the Bezier Options box. Select Gradient Fill to make the normal gradient options visible. You can now proceed to set the Border Size and Border Color, and the Mode and Opacity (see Vector objects: blend modes on page 379). Next, select from the available gradients in the Gradient box and gradient types in the Gradient type box below. For information on using gradients and some examples, see Gradient Fill on page 301 . However, bear in mind that in this case you are using gradient fill with vector objects and not with normal selections or layers. Any selections you make in the Gradient and Gradient type boxes, as well as in the Border Size and Color and Mode and Opacity boxes, are immediately implemented in the selected vector object. Note that the extent of the gradient is in accordance with the distance you initially dragged the gradient pointer. You can alter this by making all your gradient selections, as described above, and then clicking on the Set Vector button at the foot of the box. This turns the pointer to the gradient hand-pointer again: drag this the required distance across the vector object and then release the mouse. The gradient is applied across this distance. Note that every gradient you use with this particular object is listed in the box at the top of the dialog, along with any Solid Fills and Pattern Fills you may have created. 379 Photopaint Vector objects: Pattern Fill You can fill a vector object with a pattern. 1. First select a vector object and then click on Pattern Fill Vector objects: Fill options on page 376). in the Fill tool box (see 2. The pointer becomes a paint tin. Move this over the selected object and click once. 3. In the first instance the object will be filled with a gray color. However, a Pattern Fill option will now appear in the Bezier Options box. Click on this option to display the rest of the Pattern Fill options. 4. Drag the slider to change the Border Size of the object. 5. Change the color of the border by clicking on the Border Color box to open up Select Color. 6. Set the blend mode of the object in Mode and the degree of transparency in Opacity (see Vector objects: blend modes on page 379). 7. To fill the vector object with a pattern, do the following: a. Click anywhere in the Fill Pattern box. This opens up the Pattern Editor. b. In the Pattern Editor you will find a display of all the patterns you have previously saved. (If the Pattern Editor is empty you need to create a pattern before you can proceed. Do this by making a selection of the part of an image that contains the pattern you want to use, and then select Make Pattern from the Select menu. The selected pattern is then made available to all tools that use patterns.) 8. Click on the pattern you want to use and click OK. The selected vector object will be filled in with the chosen pattern. To change the pattern fill for the object just select another pattern. You can have many pattern fills attached to the same vector object. Vector objects: blend modes The following examples show you how to apply the blending techniques discussed in Vector objects: Fill options on page 376 . Bear in mind that the whole point of blending is to be able to work out what color values will be displayed when an image is composite, that is, made up of various layers and objects, with some colors overlapping one another. Blending with vector objects is similar to blending between layers, but with these differences: 380 Photopaint • • All the vector objects belonging to an image can be regarded as occupying a layer of their own. This layer is positioned above all the normal image layers. The effect of blending with vector objects is worked out by taking the color of the selected vector object, along with its mode and opacity, and calculating a final color from a combination of this, the color of the underlying image layer, and the color of any other vector objects that overlap with the selected object. Photopaint has to calculate, for each pixel, the resultant color from a combination of the base color (the color of the layer below the vector object “layer” or the color of the object that overlaps with the selected object) and the blend color (the color of the selected vector object). The particular blend mode used determines, of course, the way the resultant color is calculated. The default value for the blend mode is Normal, as you can see in the Mode box. Another important concept when selecting a blend mode is that of opacity, which is set in the Opacity box. For some blend modes an effect becomes apparent only if the opacity is set at less than 100% e.g. Dissolve. The main blend options, which you can select in the Mode box, are: • Normal The resultant color is the same as in the currently selected object (subject to the amount of transparency set in the Opacity box, therefore visibility through to the lower layer). In effect, the base color is not used to help calculate the resultant color where the base and blend colors overlap. • Dissolve An object with less than 100% opacity is converted - “dissolved” - to 100% opaque randomly scattered pixels. The effect is of a rough brushstroke, containing a mixture of blend and base pixels, rather than an evenly transparent one. • Multipy The brightness values of the base and blend colors can be combined to create a darker tone. This is done by multiplying the two brightness values when they are expressed as fractions. For example, white has a brightness value of 255 (the maximum) and is represented as 255/255 or 1; black has a brightness value of 0 (the minimum) and is represented as 0/255 or 0. All other brightness values are represented as fractions between 0 and 1 e.g. 150 is represented as 150/255; 100 as 100/255. Therefore, using Multiply we get the result (100 * 150) / (255 * 255), which works out at 59/255. You can immediately see that the resultant brightness will always be lower than (or equal to) the brightness of either one of the multiplied 381 Photopaint fractions. This intuitively fits in with our experience of placing one transparent sheet on top of another, where the result is always darker. Note that the above means that if the blend color is white, the resultant color is the same as the base color. If the base color is white, the resultant color is the same as the blend color. If either the base or the blend color is black, the resultant color is black. If the base color is transparent, the result of blending any color is black (since a transparent layer counts as 0, that is, the same as black). • Screen This mode has the opposite effect to Multiply, combining the base and blend colors to create a lighter tone. These are some of the more important options, but there are many others: Behind, Overlay, Difference, Addition, Subtraction, Darken Only, Lighten Only, Hue, Saturation, Color, Luminosity, Divide, Color Burn, Color Dodge, Hard Light, Soft Light Remember that you can always cancel or change the effect of a blend mode by selecting another one, especially the Normal blend mode. If you would like to make the blending operations using vector objects permanent, then you should select Flatten Image from the Layers menu. See the relevant notes in Merge operations with layers on page 326 for more information. Plug-ins Please note that Plug-ins not available in the "standard" version of Ability Photopaint. Please see http://www.abiity.com/ for more information. A powerful feature of Photopaint is the ability to use "plug-ins". A plug-in is a miniprogram that extends the operation of a parent program. To be used with Photopaint, the plug-in must be Adobe Photoshop™ compatible. A plug-in usually behaves in a similar way to a built-in filter. Many design studios and freelance designers make their plug-ins available on the web. Although you will have to pay a fee to download some of these, there is still a huge number that you can download for free. Since most plug-ins are written to be compatible with Adobe Photoshop, you can begin your web search for suitable plug-ins by searching for something like: Photoshop plug-ins. Plug-ins are also available from time-to-time with computer magazines. Installing and running plug-ins 382 Photopaint 1. Follow the instructions that come with the plug-in. Usually, this will simply be a case of unzipping a compressed file into the correct target folder. Sometimes, the plug-in will come with its own setup program. In all cases, make sure the plug-in is installed in the Photopaint plug-in folder, which is typically: \Program Files\Ability Office 2002\Plug-ins In Photopaint, select Options from the Tools menu and view the General tab of the dialog to check and set the plug-in folder. 2. Exit Photopaint and then restart it to activate the plug-in. 3. To run the plug-in, make a selection on the current image (or select all of the image) and select Plug-ins from the Filter menu. A sub-menu is displayed showing all the available plug-ins. 4. Pick a plug-in. Depending on the plug-in, either it will be applied immediately to the open image in your window or a filter dialog box will open. In the latter case you will be able to edit the settings for the filter. There will usually be a preview box to display the results before you apply the filter. Note that some of the plug-ins act as true filters, that is they alter an image on the basis of those colors that comprise the image. However, there are plug-ins which overwrite the current image. 383 Draw Draw Draw is a graphical applet that is called on by the main Ability applications - Write, Spreadsheet and Database - whenever they need to use vector drawing tools. Draw can be used on its own to create and save graphical designs such as letterheads, logos, and emblems. These can be reused later by Write or Spreadsheet. With Draw you can create lines, shapes and text boxes, and insert pictures from other applications. Starting Draw To start Draw, follow these steps: 1. Click the Start button on the Windows Taskbar 2. Select Programs 3. Select Ability Office 4. Select Ability Draw Draw will open with a new document, ready for adding graphics. Parts of the Draw window The Draw window consists of standard toolbars (for operations such as opening files and cutting shapes), a set of rulers, and the draw document itself. You can have many draw documents open at once. There are three toolbars that are specific to Draw: the draw toolbar, the color toolbar and the align toolbar. These toolbars will also appear in other Ability applications that use Draw (for example, in Database when designing a form, or in Write or Spreadsheet when a drawing is inserted). To help work with draw objects, the Draw window also has rulers and gridlines. The tools bar The tools bar is a set of drawing tools which provide the main method of adding any element to your document. 384 Draw For more details, see Adding a shape on page 386. The color toolbar The color toolbar is a palette of colors. You use the color bar to choose the colors you want to use when drawing with a tool or changing the color settings of an existing draw object. • Click on a color to set the back-color (the color of the insides of a shape). • Right-click on a color to set the fore-color (the color of the lines in a shape). • Click on the Custom color button to define your own mix of colors. For more details, see Setting the color of draw objects on page 391. The align toolbar The Align toolbar allows you to align, size and center multiple draw objects. 385 Draw For more details, see the following sections: Working with groups of objects on page 394 Spacing objects on page 395 Aligning objects on page 394 Resizing objects together on page 394 The rulers and gridlines Across the top and down the left of the document window are the rulers. As you move the mouse pointer across the screen, you will see the gridlines - markers on the rulers - moving as well. These indicate your exact position. You can choose not to display the rulers - select the Ruler command from the View menu. The grid When snap control is turned on, any objects you create, resize or move will jump or ‘snap’ to align themselves with the grid divisions. This is usually the best way of working with Draw, as it is easy to create and align objects manually. To control the grid, select Grid Setup from the Tools menu and then: • In the Horizontal box, type the number of horizontal grid points you want per unit of measurement. • In the Vertical box, type the number of vertical grid lines you want per unit of measurement. • Use the Always Snap To Grid checkbox to turn snap on and off. When grid snap is on, it may be useful to view the grid points. Select the Grid button or select Grid from the View menu. Note that Draw may only display every other grid 386 Draw point (or every third or fourth), if the number of grid points per unit of measurement is too high to display on screen without crowding. In this case, movement will still obey the underlying grid settings. If you've drawn and positioned an object when grid snap is turned off, you can align it to the grid by selecting it, right-clicking and selecting Align to Grid (or use Align to Grid from the Format menu). Creating a drawing When you start Draw, you are automatically given a new document. on the toolbar to create a new drawing. Alternatively, select Click on the New button the New command from the File menu. Now use the draw tools bar to add draw objects (lines, shapes and text) to the drawing. The following sections show you how to add draw objects, and also how to move, size and format them. Adding a shape Shapes can be added to your draw document by using the tools bar. The following sections show you how to add lines, polylines, squares, rectangles, ellipses, circles, arcs and polygons to your drawing. Drawing a line To draw a line: 1. Select the Line button . 2. Press the mouse button (without releasing it) to start the line, drag the mouse, and release the button to complete it. Drawing a polyline A polyline is two or more lines joined together. You could make the letter "W" using the polyline tool. To create a polyline: 1. Select the Polyline button . 387 Draw 2. Click at the start of the line, move the mouse, and click again when you wish to start a new segment of the line. Continue moving the mouse and clicking to draw connected lines. 3. Double-click with the mouse to finish the polyline. You can also use the polyline tool to draw a freehand line, by dragging the mouse but without depressing the mouse button. Note: Unlike the Polygon Tool, double-clicking on the end point does not close the shape, unless you manually join the start and end points. You cannot fill a closed polyline with a color. Drawing a square or rectangle To draw a square or rectangle: 1. Select the Rectangle button . 2. Press the mouse button to start the rectangle, drag the mouse, and release the button to complete it. Use the Rounded Rectangle button rounded corners. instead to draw a square or rectangle with Drawing an ellipse or circle To draw an ellipse or circle: 1. Select the Ellipse button . 2. Press the mouse button to start the ellipse, drag the mouse, and release the button to complete it. Drawing a polygon To draw a polygon (a many-sided shape): 1. Select the Polygon button . 2. Click to start the polygon, move the pointer and click again to finish the first edge. 3. Repeat step 2 to create as many edges as you want. 388 Draw 4. Double-click to complete the shape - Draw automatically joins the first and last points with a straight line. You can also use the polygon tool to draw a freehand shape, by dragging the mouse but without depressing the mouse button. Drawing an arc To draw an arc, that is, a segment of a circle: 1. Select the Arc button . 2. Press the mouse button (without releasing it) to start the arc, drag the mouse, and release the button to complete it. The direction in which you drag determines which quadrant you draw. 3. Use the handles midway along each edge of the arc to adjust the angle: Drawing a text box To put text into a drawing, you need to add a text box. A text box can contain a word, a line or several paragraphs. To add a text box: 1. Click on the Text box button in the toolbar. 2. Press the mouse button (without releasing it) to start the text box, drag the mouse to the end point, and release the button. Alternatively, just click on the page - a defaultsized text box will be added. 3. Type the text you require, and then press enter to finish. The text will wrap to fit the width and depth of the text box you draw – you can fit more text into the box by increasing its size (see Resizing a draw object on page 390). 389 Draw You can put several paragraphs in a single text box – type the first line or paragraph and then press ctrl+enter to start a new line. This works in the same way as the enter key does in Write. If you want the text to appear without any background or border, set these styles to None (see Line and fill styles on page 391). Inserting pictures To insert a picture into a drawing: 1. Select Picture from the Insert menu. The “Open” dialog box is displayed. Select the picture file you wish to use, and click on the OK button. 2. Position the picture by clicking on the page where you would like it to appear. You can also use the clipboard to paste pictures into a drawing. For example, press ALTPrint Screen to get a snapshot of any window, and then select the Paste button insert it into Draw. to Selecting, moving and resizing draw objects The following sections show you how to select single and multiple draw objects, and also how to move and resize them. Selecting a single object To select a single object, click on the Select button and then click on the object. Black “handles” will appear to indicate that the object has been selected: Selecting multiple objects Click on the Select button • and then do one of the following: Click outside the objects in question, and drag a selection box around them all. When the box is surrounding the shapes you require, release the mouse button. All the objects within the selection will now display their handles. 390 Draw • Click on the first object and then click on subsequent objects with the Shift key held down. • Choose the Select All command from the Edit menu to select every object in the drawing. When a group of objects has been selected, "handles" will appear on every selected object: Moving a draw object To move a draw object (or objects) do the following: 1. Select the object (or objects). 2. Drag it (or them) to a new location. Resizing a draw object To resize a draw object: 1. Select the object (see Selecting a single object on page 389). 2. Drag a handle to a new location. To force a rectangle into a square or an ellipse into a circle, select the object, right-click, and select the Set as Square or Set as Circle command. For resizing multiple objects, see Resizing objects together on page 394. Formatting a shape All draw objects have common properties that you can change: 391 Draw Line and fill styles (see Line and fill styles on page 391) Colors (see Setting the color of draw objects on page 391) In addition, text boxes have three other properties: Text alignment (see Text alignment on page 393) Text box border style (see Text box border style on page 392) Fonts in text boxes (see Fonts in text boxes on page 393) Line and fill styles A draw object has a line-pattern and width, and, for solid objects, a fill-pattern. By default these are solid line, 1 point in width, and solid color, respectively. You can change these styles for one or more objects, as well as changing the default setting. 1. Select the object or objects (see Selecting multiple objects on page 389 for more details). 2. Right-click and select Properties. 3. Select the Style tab. As an alternative to steps 2 and 3, select the Style command from the Format menu. Next, choose from the following: • Select Brush Style to see the range of available fill patterns. This sets the pattern of the interior of the object. If you want a simple color (the default) select Solid. If you want the shape to be transparent, select None. • Select Pen Style to see the range of available line styles. This sets the style for the outline of the shape. If you don’t want an outline to appear around a shape, select None. To change the default settings for new objects, make sure no objects are selected (to do this, click in a blank area of the drawing), right-click and select Defaults from the shortcut menu. Follow the instructions for pen and brush style as above. Setting the color of draw objects Shapes - rectangles, ellipses, polygons and text boxes - have two color properties: forecolor and back-color. Fore-color is the color of the lines and back-color is the color of the inside area of the shape. Only lines have a fore-color. 392 Draw To set these colors: 1. Select the object or objects (see Selecting multiple objects on page 389 for more details). 2. Click on a color on the color toolbar to set the back-color (see Color toolbar on page 384). 3. Right-click on a color on the color toolbar to set the fore-color. As an alternative to steps 2 and 3, select the Color command from the Format menu. To change the default settings for new objects, make sure no objects are selected (to do this, click in a blank area of the drawing) and use the color toolbar to set the colors you want. Note that setting the back-color to white is not the same as having a transparent object. To do this, set the fill style to None instead - see Line and fill styles on page 391. Text box border style Text boxes have a border property, in addition to the usual properties of draw objects. To set the border property: 1. Select the object or objects (see Selecting multiple objects on page 389 for more details). 2. Right-click and select Properties. 3. Select the Border tab. As an alternative to steps 2 and 3, select the Border command from the Format menu. Next, choose from the following: • None. Turns off the border altogether. • Standard. Plain border in accordance with the pen style (see Line and fill styles on page 391). • Sunken. Creates a 3D sunken effect. To see this effect properly, you need to set the text box back-color (see Setting the color of draw objects on page 391) to be the same as the page background (and this should not be white). • Raised. Creates a raised effect. To see this effect properly, apply the same conditions for Sunken, as above. 393 Draw • Shadowed. Puts a dropped shadow around the text box. • Double. Same as Standard but a double line box is drawn. Note that you can create the effect of a rectangle having a border property, by adding a text box but without entering any text. Fonts in text boxes A text box can use any font and font style. Fonts cannot be mixed within a text box. To set the text font within a text box: 1. Select the text box or boxes (see Selecting multiple objects on page 389 for more details). 2. Right-click and select Properties. 3. Select the Font tab. As an alternative to steps 2 and 3, select the Font command from the Format menu. In the Font box, choose the font you require. Choose the style in the Font Style box and the size in the Size box. A preview of your choices is shown in the Sample box. Text alignment To set the alignment of text within a text box: 1. Select the text box or boxes (see Selecting multiple objects on page 389 for more details). 2. Right-click and select Properties. 3. Select the Align tab. As an alternative to steps 2 and 3, select the Text Align command from the Format menu. Choose from: • Left • Center • Right 394 Draw Working with groups of objects You can work with groups of objects to resize, align and space the objects together. In addition, you can form objects into groups and manage drawings that have overlapping objects. The following sections show you how to work with groups of objects. Resizing objects together To evenly size two or more objects, first select them (see Selecting multiple objects on page 389) and then use any of the following buttons: Make Same Width. All the selected objects are adjusted to have the same width. Make Same Height. All the selected objects are adjusted to have the same height. Make Same Size. All the selected objects are adjusted to have the same height and width. All these commands are also available under Same Size in the Format menu. Overlapping objects Even the simplest drawing can contain overlapping objects, so you need control over the order in which objects appear in the drawing. • To bring an object (or selection of objects) to the front of a drawing, right-click and select the To Front command (also available from the Format menu). • To send an object (or selection of objects) to the back of a drawing, right-click and select the To Back command (also available from the Format menu). Aligning objects To align two or more objects, first select them (see Selecting multiple objects on page 389) and then use any of the following buttons. Align Left. Aligns the left edges of all selected objects to the left edge of the leftmost selected object. Align Right. Aligns the right edges of all selected objects to the right edge of the right-most selected object. 395 Draw Align Top. Aligns the top edges of all selected objects to the top edge of the topmost selected object. Align Bottom. Aligns the bottom edges of all selected objects to the bottom edge of the bottom-most selected object. Center Vertical. Aligns vertically the center points of all selected objects, around the center point between the outer edges of the highest selected object and the lowest selected object. Center Horizontal. Aligns horizontally the center points of all selected objects, with the center point between the outer edges of the left-most selected object and the right-most selected object. All these commands are also available under Align in the Format menu. Spacing objects To evenly space three or more objects, first select them (see Selecting multiple objects on page 389) and then use any of the following buttons. Space Down. Adjust the space between all the selected objects, so that it is vertically the same. Space Across. Adjust the space between all the selected objects, so that it is horizontally the same. Both of these commands are also available under Space Evenly in the Format menu. Grouping draw objects Once you have determined the relative positions of several draw objects, you can group them together so that Draw treats them as a single object. In this way, you can prevent accidental movement of one of the elements. To group objects together: 1. Select all the objects (see Selecting multiple objects on page 389). 2. Right-click and select Group from the shortcut menu. The Group command is also available from the Tools menu. 396 Draw When objects are grouped they can be moved and formatted as normal, but they cannot be resized. To split a group back into its individual objects, first select the group and then select the Ungroup command from either the shortcut menu or the Tools menu. Draw object A draw object is any drawing, shape or line created from the tools bar (see The Tools bar on page 383) - a line, rectangle, rounded rectangle, polyline, polygon, arc or text box. Creating, editing and manipulating draw objects will be your primary task in working with Draw. 397 Integration in Ability Integration in Ability Integration is a term used to describe how different applications work together and especially how they share data. There are three main ways Ability can share information: 1. Copy and paste (see Copy and paste on page 397) – a simple copy of data from one application to the next. 2. Linking through fields (see Linking through fields on page 400) – sharing data through field links. Data remains live, so that when the source is changed the linked field or fields change also. Mail Merge is the most obvious example of field level integration. 3. Embedding and linking documents (see Object embedding on page 409) – whole documents, or a selected part of a document, can be inserted into another application. For example: • Include spreadsheets and charts in Write • Include drawings in Write and Spreadsheet • Include Write documents in Spreadsheet There is a special link function called Hyperlink that allows documents to refer to other documents (or web pages) and provide a clickable jump to load that document. See the hyperlink function on page 581 for more details. See also: Fields - an introduction on page 413 Mail merge on page 86 Copy and paste In general, you can select any text, data or formulas and make a copy for insertion into another – or the same – document. Ability has commands that enable you to Copy, Paste and Cut data. If you want to copy data to another location without retaining the original source data, then use Cut instead of Copy. Here are the basic steps: 1. Select the data you wish to copy, using either the mouse or cursor keys. This might be the contents of an individual cell or range in a spreadsheet or database, whether text, data or formulas, or an area of a Write document. 398 Integration in Ability 2. Click on the Copy button copies to the Clipboard. or select Copy from the Edit menu. This command 3. Switch to the application that contains the document to which you wish to copy. 4. Click on the Paste button or select the Paste command from the Edit menu. This copies from the Clipboard to the target document. Once the Paste command has been issued, there is no further link between the copied data in the target document and the contents of the clipboard or the source of the data. It is as if you have retyped the data, but much quicker. The contents of the clipboard remain unchanged until you copy some other data to it. Most of the Ability applications –Write, Database, Spreadsheet – support rows and columns. When you copy data from one application to another, the rows and columns are preserved. This is obvious with Database and Spreadsheet, which are defined in term of fields and cells, but less so with Write, in which a row is represented by a paragraph and a column by a tab stop. For example, Jan 12 Feb 13 Mar 9 Apr 7 has four columns (since the months and numbers are each separated by pressing the Tab key) and two rows. See also: Examples of copy and paste on page 398 Copy and paste in dialogs on page 399 Examples of copy and paste Here are some examples of what you can do with Copy and Paste: • Database Î Spreadsheet Select the rows and columns (the range of fields) you want to copy from the database and copy and paste into a spreadsheet. Ability will preserve the order of the rows and columns and every field from the database will appear in a different spreadsheet cell. • Database Î Write Select the rows and columns (the range of fields) you want to copy from the database, and copy and paste into a Write document. Each column is separated by a tab stop and each row begins on a new line. 399 Integration in Ability If the database row is too long to fit on a single line in the Write document and "wraps around" onto the next line, try bringing the tab stops closer together and/or reducing the font size. • Write, Spreadsheet Î Database This is the reverse of the above two operations. Ideally the number of columns in Spreadsheet – or the number of tab separated columns in Write – should match the number of fields (columns) in your database (if not, you may find that fields from different records merge into a single record). • Write Î Spreadsheet Select the text you wish to copy. This can be a word, a line or several paragraphs. When you paste into Spreadsheet, tabs will begin new columns and paragraphs new rows. Use Paste Special from the Edit menu and select Unformatted Text. See also: Copy and paste in dialogs on page 399 Copy and paste in dialogs As well as using copy and paste to transfer data between applications, you can copy and paste into dialog boxes and formula entry lines. You will need to make use of the shortcut keys to do this: Ctrl+C Copy Ctrl+V Paste For example, in the text of a Write document, there appears the name of another document - a spreadsheet called Figures, say. To copy and reuse the word "Figures": 1. Select it by double-clicking on it. 2. Press Ctrl+C to copy it. 3. Switch to Spreadsheet. 4. Click the Open button . 5. Press Ctrl+V to paste it into the File name box. 400 Integration in Ability Linking through fields One of the most powerful features of Ability is the capacity for a field in one document or application to refer to a field in any other Ability document or application. Such a relationship is called linking and can take two forms: one-way linking and two-way linking: 1. A one-way link (see One-way links on page 136) is used to access data that is located in another document, from the current document. The data can be displayed or used in a formula, but cannot be changed unless you open the original document. A one way link can be made between documents in different applications. 2. A two-way link (see Two-way links on page 407) allows you to change data at either end of the link. This means that the original document is updateable from the target document, though two-way links cannot be used in formulas. Linking can be used to connect these documents: • Cells in a spreadsheet to another spreadsheet, write document or database form. • Fields in a database to a spreadsheet or write document. • Fields in a write document to another write document, spreadsheet or database form. For a general discussion on fields, see Fields - an introduction on page 413. Links can also be set up between cells in the same spreadsheet or fields in the same Write or database document (see One-way links in a spreadsheet on page 136 and Twoway links in a spreadsheet on page 136). One-way links To create a one-way link, you need to know the name and the location of the document to which you want to link. With a Write document or spreadsheet you need to know the name of the field or cell address whose value you want to access. If you want to link to a database you also need to know the table or query name, along with the field name and record number. The link is created using one of the Remote functions. The remote functions you will most often need are: WPGET(document_name, reference) Retrieve field from Write SSGET(document_name, reference) Retrieve field from Spreadsheet DBGET(database_name, source_table, field_name, record) Retrieve field from Database 401 Integration in Ability When you enter a remote function in a field in the current document, you need to specify the following: 1. Name and path of the remote document or database (otherwise the current folder will be searched). 2. Name of the field, in the remote document, whose value is sought. 3. When linking to a database, you will additionally need to supply the table name, field name and record number. As well as returning single values, all field links can be used to return ranges, which can then be used to provide range totals, maximums, minimums, and so on. The following examples should be studied. Also, for more on Remote functions, see Remote functions on page 568. Linking two spreadsheets together To create a one-way link from a spreadsheet called accounts to a cell, say B10, in a spreadsheet called sales, follow these steps: 1. Select a cell in accounts where you'd like the value from sales to appear, say A1. 2. Click in the formula entry line. 3. Click on the Insert Function button to bring up the “Insert Function” dialog. 4. Click on the Remote tab and scroll through to select the SSGET function. 5. Select OK to pick the function. 6. Enter the function parameters so that the formula appears as follows: =SSGET ("sales", "B10"). 7. Click to finish the formula. Ability will display the value from the sales spreadsheet inside the accounts spreadsheet. Once the link has been made, the cell can be referenced like any other. For example, the formula =A1 * 2 402 Integration in Ability anywhere in the accounts spreadsheet will simply display the value from A1, originally from sales, doubled. You can also use the SSGET function directly as part of a formula. For example: =(10 + SSGET("sales", "B10"))/2 Note that the function parameters must be placed in quotation marks. Also, the example assumes that the two spreadsheet documents are in the same folder. If they are not, then you must specify the full document path. For example, =SSGET("c:\my documents\sales", "B10") if sales is stored in the default document folder. Any change made to B10 in sales will automatically be reflected in A1 of accounts. However, since this is a one-way link, the attempt to enter a value in A1 of sales will overwrite the link formula and hence destroy the link (see Two-way links on page 407 to find out how to set up two-way links). Linking two Write documents together To create a one-way link between a field, say janprofits, in a Write document called report, and a field, say monthtotal, in a Write document called annuals, where the link is from report to annuals, follow these steps: 1. You first need to create a field in report. Select Field from the Insert menu. Enter janprofits for the field name (which is obviously more descriptive than the default name of Field1), click the Next button, and enter 1276.34 as the field contents in the Formula entry line. Click the Finish button. 2. Switch to annuals and click where you want the field to appear. Select Field from the Insert menu. Enter monthtotal for the field name and click the Next button. Click the Functions button and select WPGET from the Remote function category. Enter the document name and field name into the function, so that the formula appears as follows: =WPGET("report", "janprofits") Click the Finish button. 3. The field will appear in the document. Click outside the field to activate the one-way link. The value from the report document, 1276.34, will appear in the document. Note that the example assumes that the two documents are in the same folder. If they are not, use the full document path of the source document. For example, 403 Integration in Ability =WPGET("c:\my documents\report", "janprofits"). Linking from a Write document to a spreadsheet Suppose you have a sales spreadsheet with monthly sales figures. You want to include the highest monthly figure and the total sales for the year in a Write document. The spreadsheet is called sales97 and the figures you will need run from C1 to C12. The figures need to appear in the middle of a paragraph like this: "The average monthly sales for 1997 was $xxxx.xx with the highest single month topping out at $xxxx.xx." Follow these steps to link from the Write document and extract these figures: 1. In the Write document, type the text of the paragraph. Leave a space where the fields need to be inserted. 2. Position the cursor between the words "was" and "with". 3. Select Field from the Insert menu. 4. Click the Next button (if you want you can enter a more meaningful field name on the first page of the wizard). 5. Enter the following formula: =AVG(SSGET("sales97", "C1..C12")) 6. Click Finish. 7. Position the cursor at the end of the paragraph and repeat steps 3 through 6, using the following formula: =MAX(SSGET("sales97", "C1..C12)) Note that the example assumes that the two documents are in the same folder. If they are not, use the full document path of the source document. For example, =MAX(SSGET("c:\my documents\sales97", "C1..C12")) Linking from a spreadsheet to a database Suppose you have a database called accounts, containing a table called invoices. Among other fields in the database table, there is a field for the total of the invoice, invtotal, one to identify the customer, custid, and two more for the date of the invoice and the date it was paid, invdate and paydate. The particular customer you are 404 Integration in Ability interested in has a custid entry of 1024. In a spreadsheet, you want to analyze his payment history, perhaps plotting a graph to show the payment trend. Follow these steps: 1. Display the first invoice total: Enter the following formula: =DBSQLFILTER("accounts.adb", "invoices", "custid=1024", "invtotal", 1) Let’s explain this in some detail. The first two parameters to this function are simply the database name and the table name – note you need to include the document extension with the database name (adb). The table contains invoices to many customers, so you have to identify which customer you want to return values for. This is done with the third parameter to the function – "custid=1024". Next, we specify which field is to be returned with the third parameter – invtotal. The function actually returns all the fields matching the condition, so we need to say which one is to be displayed. The final parameter says "display record 1". 2. Display the invoice and payment dates. In the cells to the right of the invoice total, enter the following two functions: =DBSQLFILTER("accounts.adb", "invoices", "custid=1024", "invdate", 1) =DBSQLFILTER("accounts.adb", "invoices", "custid=1024", "paydate", 1) 3. Repeat steps 1 and 2 for the rows below, incrementing the record number (the fifth parameter) by one each time, until all the matching invoices are displayed. 4. You can now analyze the data in several ways. Here are two examples: Produce an average payment period by subtracting the invdate column from the paydate column and dividing by the number of invoices. Plot a bar chart of the number of days it takes to pay each invoice (again by first subtracting the invdate column from the paydate column). There are a number of ways this example can be improved and made more general (so it will work easily for other customers). Refining database links The Database is ideal for storing information, but Spreadsheet is the best place to perform calculations. Using the database links, you can combine these tools in an efficient and powerful way. For an example of how to make links to database, see Linking from a spreadsheet to a database on page 403. The notes below show how the example can be refined. 1. The number of matching records can be calculated in advance, using the following formula: =ROWS(DBSQLFILTER("accounts.adb", "invoices", "custid=1024", "invtotal")) 405 Integration in Ability 2. If there are many matching invoices, the ROW function can be used to propagate the formula. For example, supposing record one was entered in row 10, you could use the following: =DBSQLFILTER("accounts.adb", "invoices", "custid=1024", "invtotal", ROW()9) When this cell is copied down the spreadsheet, the appropriate record is displayed. 3. It could be more efficient if some of the parameters are entered separately in spreadsheet cells. For example, cells A1 through A5 could contain the following text/formulae: Once A5 is copied down and across (with the correct field names), you can enter a new customer ID in cell A3 and analyze a different customer. 4. Taking step 3 a bit further, you could insert a mail merge field that will step through each customer and so print out a "payment history". To do this follow these steps: a. Select Field from the Insert menu. b. Enter custfield as the field name. This is actually the name of the new field, not the database field to be linked to, so you can choose any name you like. c. Select the Database radio button and then click Next. d. Make the link: pick the accounts database, the invoice table and the custid field and click Finish. e. Substitute the following formula for cell A4 (in step 3 above): =SSGET("spread1", "custfield") where spread1 is the name of the current spreadsheet and custfield is the new field. f. Select the Mail Merge button menu. or the Mail Merge button from the Tools g. Select Print to finish the mail merge. 406 Integration in Ability Using one-way links in formulas One-way (but not two-way) links can be used as part of a standard formula. In addition, because the link functions can return ranges as well as individual cells, you can apply any function that has a range as a parameter directly to the link. For example, using the following spreadsheet called quarter: When building a formula in another spreadsheet or a field in a Write document, treat the link function like any other. For example: =10+SSGET("Quarter", "B3") / 2 To count the number of records, and to find the total, average and maximum volume, refer to the range and use these built-in functions: =ROWS(SSGET("Quarter", "B2..B5")) =TOTAL(SSGET("Quarter", "B2..B5")) =AVERAGE(SSGET("Quarter", "B2..B5")) =MAX(SSGET("Quarter", "B2..B5")) The same ideas can be applied to a database table. Consider the following invoice table in an accounts database: The table information can be referred to in the following ways: =10+DBGET("accounts.adb", "invoices", "invtotal", 3) / 2 to re-use the invoice total field from row 3 (that is the value 8.50) in a formula; and 407 Integration in Ability =ROWS(DBGET("accounts.adb", "invoices", "invtotal")) =TOTAL(DBGET("accounts.adb", "invoices", "invtotal")) =AVERAGE(DBGET("accounts.adb", "invoices", "invtotal")) =MAX(DBGET("accounts.adb", "invoices", "invtotal")) to find the number of records, and the total, average and maximum of the invoice totals. Two-way links A two-way link is a connection between the current field and a field in another – or the same – document. If you change the value of either field, the value in the other field will also change. A two-way link cannot be used as part of a formula, unlike a one way-link (see Using oneway links in formulas on page 406). Apart from this, you build two-links in the same way as one-way links, as follows: 1. Create a normal one-way link (see One-way links on page 136 for more details). 2. Turn the edit source property on: • In a spreadsheet, use the Edit Source button property in the Format/Attributes dialog. • In a Write document, double-click on the field, select Attributes from the Field menu and select the Edit Source property. or select the Edit Source For example, consider the following database table, called invoices: 1. In a spreadsheet cell, enter the following formula: =DBGET("accounts.adb", "invoices", "invtotal", 3) 2. The result of the formula - 8.5 - is displayed. 3. Click on the Edit Source button. 408 Integration in Ability 4. You can now enter a new value in the cell, and the database will be updated. Linking and embedding documents On some occasions, you may find you need to insert a chart or part of a spreadsheet (or both) into a report you are creating in Write. It could be that you want to create a new spreadsheet that will only exist within the current document, or you may want to insert a spreadsheet that you've already created. Further, you may want the document to automatically update should the original spreadsheet change. These are all examples of a standard Windows technique called Object Linking and Embedding (or OLE for short), which Ability uses to enable such documents to be created. In this case, the Object is the spreadsheet, Embedding refers to the inclusion of an object within the current document (as in the first two examples above), and Linking refers to the "live" display of external data (as in the final example above). All the Ability applications support OLE to some extent, as do many other non-Ability applications (meaning that Ability can share data with other applications). Here’s a list of what can be inserted and where: Application Write Spreadsheet Database OLE field Draw (and Database forms) External programs (non -Ability applications supporting OLE). Include objects from Spreadsheet (including charts), Draw, and any external applications that support OLE Write, Draw, and any external applications that support OLE Spreadsheet (including charts), Write, Draw, and any external applications that support OLE Spreadsheet, Chart, Write, and any external applications that support OLE Write, Spreadsheet, Chart, and Draw. The following sections tell you all about object linking and embedding, as well as giving some examples. Object linking When an object is linked, the source data continues to reside physically wherever it was initially created. Only a reference, or link, to the object is kept with the compound document (along with appropriate presentation data). Linked objects cannot "travel" with documents to another machine; they must remain within the local file system or be copied explicitly. Linking is efficient and keeps the size of the compound document small. 409 Integration in Ability You may choose to link when the source object is owned or maintained by someone else, so that a single instance of the object’s data can serve many documents. Changes made to the source object are automatically reflected in any compound documents that have a link to the object. To link an object: 1. Select Object from the Insert menu. 2. Select the Create from File radio button. 3. Make sure the Link box is checked. 4. Select the Browse button to locate the source object (for example, if you are embedding an Ability spreadsheet, you should be looking for a document with an AWS extension). 5. Select OK to insert and link the object. Object embedding When an object is embedded, a copy of the original object is stored physically in the compound document, along with all the information needed to manage the object. As a result, the object becomes a physical part of the document. A compound document containing embedded objects will be larger than one containing the same objects as links. However, embedding offers several advantages that may outweigh the disadvantages of the extra storage overhead. For example, new objects can be inserted as needed, and compound documents with embedded objects may be transferred to another computer and edited there. To embed an object, select Object from the Insert menu and do one of the following: • Create and embed a new object 1. Select the Create New radio button. 2. Select the object type – this can be Ability Spreadsheet, Write or Draw, or an object from any other listed application. 3. Click OK to embed the new object. • Embed an existing object 1. Select the Create from File radio button. 410 Integration in Ability 2. Make sure the Link checkbox is clear. 3. Select the Browse button to locate the source object (for example, if you are embedding an Ability spreadsheet, you should be looking for a document with an AWS extension). 4. Click OK to embed the object. Inserting a spreadsheet into a Write document To insert a spreadsheet into a Write document, position the cursor in the Write document at the point where you want the spreadsheet to go and do one of the following: • Insert a new spreadsheet Select Spreadsheet/Chart and then New from the Insert menu. A standard spreadsheet will appear, ready for entering data. • Insert an existing spreadsheet 1. Select Spreadsheet/Chart and then From File from the Insert menu. 2. Browse to the spreadsheet you want to insert. Once the spreadsheet, whether new or old, has been inserted, you can display a selected part of the spreadsheet or a certain area of rows and columns. In edit and display mode, you can use the zoom buttons to make the cells − and hence the data within them − display larger or smaller. In scaling mode, you can scale the spreadsheet to fit more neatly into your Write document. • On the standard spreadsheet view, that is in edit mode, use the handles to resize the spreadsheet and the scroll arrows to bring the relevant part of the spreadsheet into view. In this way you can determine the rows and columns that will be displayed and/or a particular cell or group of adjacent cells. Use the zoom buttons on the and Zoom out , to increase or decrease the size of the toolbar, Zoom in spreadsheet cells and their data. Note that the inserted spreadsheet object (or view) will itself remain the same size until you use the handles to resize it, so you may need to resize in conjunction with zooming. • Click once outside the spreadsheet to go to display mode. The spreadsheet will retain the form you set for it in edit mode, that is the same rows and columns or group of cells will be displayed. In this mode you can’t edit the data or resize the spreadsheet, and the row and column bars are not visible. You can however use the zoom buttons to increase or decrease the size of the displayed cells and their data. • 411 Integration in Ability Click once again inside the spreadsheet to go to scaling mode. The spreadsheet is displayed with its handles visible. Use the mouse to drag these handles and hence resize the rows and columns. Dragging horizontally only will increase/decrease the column width for all the columns. Dragging vertically only will increase/decrease the row height for all the rows. Dragging diagonally, using the handle at the bottom right corner, will increase/decrease both the column width and row height for all rows and columns. • Double-click inside the spreadsheet to return to the standard spreadsheet view (edit mode). • Note that when printing a Write document with an inserted spreadsheet, the spreadsheet object is printed without the row and column bars, that is to say, it is printed as if it is in display mode, even if the current screen view happens to show the spreadsheet in edit mode. If you wish to insert a chart, based on a spreadsheet, into a Write document, see Inserting a chart into Write on page 411 for more information. Inserting a chart into Write Since a chart is always attached to a spreadsheet, you insert a chart into a Write document by first inserting the spreadsheet and then selecting or creating the chart to display (see Inserting a spreadsheet into a Write document on page 410 for details on how to insert the spreadsheet). Immediately after insertion the spreadsheet will be in edit mode. This means you can make changes to the spreadsheet rather than the document. If you drop out of edit mode (by clicking in another part of the document, for example), double-click on the spreadsheet again to make it active. The next step depends on whether you're creating a new chart or displaying an existing chart, as follows: • Creating a new chart Select the figures you want to chart (or type them in if it's a new spreadsheet). Select As New View from the Insert / Chart menu. Follow the steps in the chart wizard to create the appearance you want. See Chart on page 151 for more details on how to create charts. • Displaying an existing chart Once a spreadsheet has been inserted, you can choose which view you'd like to show in the document. Select Sheet from the View menu to display the normal spreadsheet grid. Select Chart from the View menu to view the chart. If there is more than one chart, you will be prompted to make a selection. 412 Integration in Ability See also: Linking and embedding documents on page 408 Inserting a Draw document into Write or Spreadsheet To insert a Draw document into a Write document or spreadsheet, position the cursor at the point where you want the Draw document to appear and do one of the following: • Insert a new draw document Select Picture/New Ability Drawing from the Insert menu. A standard draw document will appear, ready for creating a new drawing – see Draw on page 383 for more details on how to create a drawing. • Insert an existing draw document 1. Select Picture/From File from the Insert menu. 2. Click on the Browse button to choose the draw document. See also: Linking and embedding documents on page 408 Inserting an image into Write or Spreadsheet An image (or picture) can be inserted directly into a Write document or spreadsheet. An image is a file in one of the following formats: BMP WMF DIB TIF GIF TGA PCX JPG Windows Bitmap Windows Meta File Device Independent Bitmap Tagged Image File Format CompuServe™ Targa PC Paintbrush™ Jpeg Inserting the picture: 1. Select Picture/From File from the Insert menu. 2. Double-click on the image you want (or first browse to the folder where the image resides, if necessary). 413 Integration in Ability 3. Once inserted, you can scale the image to the size you need by dragging the picture's handles. Note: both Spreadsheet and Write support the pasting of images via the clipboard. See also: Linking and embedding documents on page 408 Fields – an introduction Fields are common throughout Ability. The most obvious example of a field is a cell in a spreadsheet – it can contain plain text, numbers or dates, or it can display the result of a formula. The same is true of formula fields in Write documents and Database forms and reports. Fields share common properties – fonts, borders, colors, numeric formatting, alignment – throughout the Ability applications. There are other properties that depend on the particular type of field. For example, a mail-merge field in Write (also called a database field elsewhere in Ability) allows database information to be browsed and merge printed in Write, Spreadsheet and Database. To do this it accesses a source database, table and field. See Inserting fields on page 414 . Another powerful property of fields is their ability to refer to, or link to, fields in other documents and applications – see Linking through fields on page 400 . Here are some examples of fields: Application Write Description Date and time field Mail merge field Formula field Database field Spreadsheet Cells Floating field i.e. a database or formula field that can be dragged and dropped Created through Insert/Date and Time Insert/Mail Merge Field Insert/Field – this is the standard field, which can be used for formulas and links Insert/Field – this field allows you to browse or change data held in a database table Standard spreadsheet cells – always present Insert/Field – select either the Formula or Database field type in 414 Integration in Ability Database anywhere in spreadsheet. You can mail merge or browse database information, or separately store information in addition to the standard spreadsheet cell, as well as show the results of formulas Formula field in forms and reports – equivalent to a standard field in Write. Lookup Summary field – joins the current table to another table to provide summary information. Database field – browse information from another database table Date and Time Page Number the field wizard. Insert/Formula Field when in design mode in forms or reports. Insert/Lookup Summary Field – available in both forms and report design mode. Insert/Database Field – available in design mode in forms and reports Insert/Date and Time Insert/Page Number – available in design mode in forms and reports Inserting fields Wherever you are working in Ability, whether in Write, Spreadsheet or Database, you will often find it useful to insert fields. Various types of field are available and some of them are common to all the applications. Among the options there are fields for date and time, page number, formulas, mail merges, database lookup, linking, and others. Moreover, when inserting fields you can also control their appearance and content and how they will be editable, using the various format and control type options (see Control types on page 416). Inserting a date and time field You can insert a date and time field in Write, Spreadsheet, and Database. In Write, follow these steps: 1. Place the cursor where you want the field to appear 2. Select the Date and Time command from the Insert menu 415 Integration in Ability 3. In the “Date and Time” dialog select a date and/or a time format 4. If you want to insert both the date and time, click on the Date + Time checkbox 5. If you want the day of the week to appear, click on the Include Day of Week checkbox – click again to get the intermediate state e.g. Tue instead of Tuesday 6. Leave the Update Automatically box checked if you want the date and time to update automatically (a “live” field will be inserted), otherwise uncheck it if you just want to insert the current date and time (this will be inserted as text rather than as a field) 7. Click on OK In Spreadsheet, follow these steps: 1. To insert a date and time into the body of the spreadsheet you can use the standard Ability functions, NOW and TODAY (see Date functions on page 486). 2. To insert the date and time into a header or footer, see Headers and footers on page 144 for more information. In Database, you can insert the date and time into either a form or a report − see Inserting the date and time into a form or report on page 248 . Inserting a page number field You can insert a page number field in Write, Spreadsheet, and Database. • In Write, see Inserting page numbers on page 79 . • In Database, see Inserting a page number into a form or report on page 247 . • In Spreadsheet, see Adding a header and footer on page 144 . Inserting formula and database fields You can insert formula and database fields in Write, Spreadsheet and Database. • In Write, see Inserting a field on page 78 . • In Spreadsheet and Database see Inserting formula fields on page 240 and Inserting database fields on page 81 . 416 Integration in Ability Control types When you create formula and database fields in Write, Spreadsheet and Database, you can also decide how you want the fields to be editable. This is done through the control type that you set for the field. There are six standard control types: • Edit box (see Edit box control type on page 416) • Check box (see Check box control type on page 416) • List box (see List box control type on page 417) • Combo box (see Combo box control type on page 418) • Spin edit (see Spin edit control type on page 418) • Radio group (see Radio group control type on page 418) These can be used with formula and database fields in all the applications. After you have set the control type for your field, and hence how the field will be editable, you can, if you want, set options for how the field will operate. There are four choices: • The Edit Source option allows you to change data from either side of a two-way link. • The Hide Zeros option allows you to hide any zeros, displaying a blank field instead. • The Hide Errors option allows you to hide any error messages, displaying a blank field instead. • The Show as control if inactive option allows you to show the control type itself, even when the field is not currently selected (“inactive”). Edit box control type The Edit box control type allows you to enter any data you like. For instance, if you have created a Formula field that contains a formula, you can edit it so that it applies to new data, or change the formula to another one, or replace the formula with any other data or none at all (this can be done in the formula entry box). Check box control type The Check box control type allows you to insert a box that can be checked on or off so that the field shows True (Yes or 1) or False (No or 0). Typically you use this control type when you insert a blank formula field into your document and you want to use it to indicate that some other field has or has not a certain value. Alternatively you may insert 417 Integration in Ability a database field, say of customer names from a database table, and want to indicate that you will contact them over the next month (e.g. when checked the check box displays Yes) or not (e.g. when unchecked the check box displays No). In addition to the True, Yes, 1 and False, No, 0 values, there are also available @Empty and @Not Empty. Set these in the Checked and Unchecked boxes (selecting the type of check in one of these will automatically select the opposite check in the other) after selecting the Check box control type. You should then type in the display value in the Display choices box. For example, if you want to insert a blank field with check box control type into your document, so that it will display True when checked and False when unchecked, follow these steps: 1. Select Field from the Insert menu to go into the “Insert Field Wizard” 2. Select Formula in the Field Type box 3. Leave the Formula box empty 4. Select Checkbox in the Control Type box 5. Click on the arrow to select True,Yes,1 in the Checked box (the Unchecked box will automatically show False,No,0) 6. Type in the Display choices: • True in the Checked line • False in the Unchecked line 7. Click on Finish to return to your document To activate the inserted field, double-click on it. You are now free to switch the check box on or off by clicking on it. Click once outside the field to show the display value i.e. True if the check box is switched on. List box control type The List box control type allows you to choose from a pre-defined list that you have typed in or from the entries in an already existing database field. When you attempt to enter data in the box in your document, it will only accept data that is in the list you typed or in the field that you selected, otherwise it will display the first entry in the list if you try to enter invalid data. The List box is useful if you want to restrict the data displayed to a pre-set selection. If you sometimes want the option to enter data that is not in a pre-set list, then it is better to use the Combo box i.e. combination box, control type. 418 Integration in Ability Example 1. When inserting a formula field you can set the Control Type at List box. 2. On the next page of the “Insert Field Wizard”, select Use Choices in the Control Source box, and then type your list choices (one per line) in the Choices box. 3. Alternatively, if you click on Lookup Choices you can use a pre-set list contained in a database field. Combo box control type The Combo box control type allows you to choose from a pre-defined list or from a selected database field and to type in entries that are not chosen from either of these. In this respect it is more versatile than the List box control type, which only allows entries from a pre-defined list or database field. Example 1. When inserting a formula field you can set the Control Type at Combo box. 2. On the next page of the “Insert Field Wizard” select Use Choices in the Control Source box, and then type your list choices (one per line) in the Choices box. 3. Alternatively, if you click on Lookup Choices you can use a pre-set list contained in a database field. Once the field is inserted into your document, you can choose from the pre-set choices or entries in a database field, or type in new entries which do not occur in the list. Spin edit control type The Spin edit control type allows you to scroll up and down through a list of numeric values, where these values are usually held in a particular database field. Alternatively you can use your own choices, rather than look up pre-existing choices. Using the arrows on the right side of the inserted field, with spin edit control type, you can select the values you want displayed for each of the records in your database table. You would do this in either forms or reports. Radio group control type The Radio group control type allows you to select an option from several that you have set yourself, by clicking on a particular radio box. The radio boxes are mutually exclusive, so selecting one will turn off any other that is already selected. In this way you are able to determine the contents of a field, from a restricted number of choices, in one easy click of your mouse. 419 Integration in Ability Once you have selected the Radio group option, you should select Use Choices in the Control Source box of the Group page. You can then enter your group choices in the Choices box (one per line). Each of these will be displayed to the right of its own radio group box in your document. Example You want to insert a database field into a form so that you can choose which entry, from a group of entries, will appear for each record in a particular field. 1. When in Design mode, select Database Field from the Insert menu. 2. In the “Insert Field Wizard”, select a field from the database table in the Data field box. This is the field that will contain whatever you choose from the radio group choices. 3. On the next page select Radio group. 4. Finally, select Use Choices and type in the names that are to form the radio group in the Choices box, making sure that each choice occurs on its own line. 5. Select Finish and use the mouse to adjust the size of the field box before returning to Browse mode. As you browse through the records in your form, you can click on one of the radio group choices to insert it into the field you selected from the underlying table. Obviously you can insert different values for different records. If there is already a value in the field for a particular record, it will be replaced by any radio group value you decide to choose. Note that if you intend to insert a radio group database field later on, it is a good idea to design a table with this in mind. More often than not the field should be set as a character field, in order to make sure that your radio group choices are of compatible data type. 420 WriteFX - a text effects tool WriteFX - a text effects tool WriteFX (a sort of shorthand for Write Effects) is a text effects tool that creates highly stylised text for inclusion in Write and Spreadsheet. Amongst the types of effects that can be added to text include: • Gradient fills • Text rotation • Shadows • Borders • Shapes • Background patterns Once inserted, WriteFX behaves like any other object – you can move it around by drag and drop and can insert a frame around to allow more control over positioning and interaction with the text on the page. Using WriteFX WriteFX can be run from within Write and Spreadsheet. Select WriteFX Object from the Insert menu. The WriteFX dialog is displayed. A brief description of each tab of the WriteFX dialog now follows. But, really, the best way to understand it is to actually try the tool out – it's easier seeing how the changes made in the dialog affect the way the text looks in an interactive manner. Template A selection of pre-built designs. Templates are a combinations of all the other attributes – selecting a template replaces any existing choices you've made in the other tabs. Text The actual text you want to display. Also control over the font and text rotation (specified in degrees), if any. Shadow The shadow sits behind the text. You can control the color, position and blurring of the shadow. Border The border around the text can be positioned inside, outside or centered on the text boundary. You'll need to experiment to see how this effects the look. Borders also have a color, width and blur control. 421 WriteFX - a text effects tool Texture A textured pattern can be selected for both the text and the background. Note that this is an alternative to specifying the Colors. Colors Set a color for the text and the background. Both can be set to a gradient fill (one color gradually mixing with another) Shape Shape is the contour of the text. Choose from a set of in-built shapes. Shadows The shadow behaves as though the text was lifted a small distance from the background and a light source was shone onto the text. Set the attributes of the shadow as follow: Offsets (X and Y) – use the slider controls to change the gap, measured vertically (X Offset) and horizontally (Y Offset), between the text and its shadow. A setting of 0, 0 means the shadow falls directly behind the text. Color of the shadow – pick from the color palette or select "More" to mix your own color. Darkness of the shadow – use the slider to set the intensity of the shadow. Slide to the top for no shadow (i.e. turn the shadow off) and slide to the bottom for maximum intensity. Blur – shadows tend to be less well defined around the edges. Slide the blur control to the top for a "perfect" shadow, not normally seen in nature. Slide it to the bottom for maximum blur Borders The text can be drawn plain (no border) or with a border. If you imagine a giant, red, letter M on a piece of paper, you could trace an outline in blank ink on the inside of the letter, on the outside of the letter or actually on the letter edge. This is how the WriteFX border control works. There is also control over the color of the border, the width of the border and the border blur. Width – use the width control to set how heavy a border you want. Set it to zero to turn off the border effect. Color – pick the color for your border. Select "More" to mix your own color. Note: if the border color is set the same as the text color, you will see no effect if the border is positioned inside the text. Position of the border – set to Inside, Center or Outside. 422 WriteFX - a text effects tool Blur – blends the border into the background (slider to the right) or draws a sharp border (slider to the left). Texture A texture can be set for the background, the text or both. Textures are pre-set bitmap patterns that fill the background or text. If a texture is set, the Colors tab will be overridden Use the Background radio button and then pick a texture to set a background pattern. Use the Body radio button and then pick a texture to set a pattern for the text. To turn off a texture, set the pattern to "None". Colors The text color settings work in the same way as the background settings. Start Color – either the solid color or, if using a gradient fill, the first color used for the gradient. Gradient Direction – set to None for a plain, solid, single color fill. Use any other setting for a gradient fill. When a gradient fill is selected, the End Color button becomes active. In addition when Angle is selected, a checkbox to allow the angle to be specified becomes available. End Color – (not available if Gradient Direction is set to None). The second color to be used in the gradient fill. Angle – (only available when Gradient Direction is set to Angle). A gradient fill blends two colors in a particular direction. Set the direction in degrees. Editing an existing WriteFX object To change the properties of an existing WriteFX object, including the actual text message, click on the WriteFX object and use the right-click menu to bring-up the Write FX dialog (see WriteFX dialog on page 420 for more details). To change the size of the WriteFX object, click on it and move the mouse pointer over one of the corners or middle points and then stretch it in any way you want. When using WriteFX in conjunction with Write, it is sometime beneficial to put the WriteFX object into a frame. First select the WriteFX object (i.e. click on it) then select Insert and Frame from the menus. Using frames enables you to position the object any where on the page. 423 WriteFX - a text effects tool To delete a WriteFX object, click on it and press the Del key. 424 Macros Macros The macro capability in Ability is based on VBScript. To be a little more exact, Ability is an ActiveX Scripting Host. Other examples of Scripting Hosts include Microsoft's Internet Explorer, Internet Information Server and the Windows Scripting Host that ships with Windows 98 and Windows 2000. VBScript can be thought of as a lightweight version of Visual Basic for Applications. Ability itself is programmable through an OLE automation interface. What it all means You don't really need to be familiar with all the above terminology. It's what you can do with it that counts. The "macros" in Ability will allow you to control the Ability applications for such tasks as adding standard text to documents and looking up a user's name and address for a letter. In addition, because it is based on industry standards, you can easily communicate with other software packages that use the same standards (which includes nearly all new application software from Microsoft). For example, you can create a macro that takes an email address out of a database and uses Microsoft Outlook to send the email. The same is true in the opposite direction - you can use an external environment to program Ability (for example, Windows Scripting Host, Visual Basic, Delphi and any other application that supports OLE automation). What you need To run the Ability macros, you'll need to have the Microsoft script engine installed. This will already be installed if you have Windows 98 (or later) or if you've installed Microsoft Internet Explorer 4.0 (or later). If you haven't got the script engine, or are not sure if you have it, or you want to get the latest version, you can download it from the Microsoft web site: http://www.microsoft.com/msdownload/vbscript/scripting.asp Note the link is above is liable to change – if it is out of date as you read this, try searching on the Microsoft web site for "vbscript" or try the scripting home page: http://msdn.microsoft.com/scripting/ Getting started To create and edit macros, use the Tools/Macro command from the menu. 425 Macros Use the Macro dialog (Tools/Macro/Macros) to organize your macros and create new ones and the Macro Editor (Tools/Macro/Macro Editor) to edit your existing macro. For an introduction to this process see the Quick tutorial on page 432 for a Write macro. To program Ability, you'll need to know two things: 1. The commands to drive Ability See how to program each module: Write on page 426 , Database on page 439 and Spreadsheet on page 435. Use the Class Browser to examine the object model of Ability – to see this, select Tools/Macro/Macro Editor and use the Class Browser button . See the Example macros on page 445 for real life, fully working macros. 2. The programming language (VBScript) See the VBScript introduction on page 458 . How the macros are created, stored and executed To create a macro in Ability, use the Tools/Macro command. Macros can either be stored in a particular file (i.e. a Write document, spreadsheet or database) or in a globally accessible file. Global macros are available whenever you run that particular application (Write, Spreadsheet, Database) and can be found, for back up purposes, in the following locations: c:\progam files\ability office\abwite.abd c:\progam files\ability office\abspread.abd c:\progam files\ability office\abdata.abd The above assumes you installed Ability into the default location. Some macros will be a series of steps requiring no user interaction - you just run it and it does the job in the same way each time. With others, you will need to get feed back from the operator. Ability allows sophisticated forms to be created that can deal with user input. The forms are activated by macros and can themselves contain scripting instructions to intelligently process the user selections. Once the macro has been created, it can be run in one of five ways: • Directly from the menus using Tools/Macros • From the shortcut menu (set the "Quick Macro" attribute in the Tools/Macros dialog) 426 Macros • From a keyboard shortcut (set this under Tools/Customize) • From a button on the toolbar (also set using Tools/Customize) • Externally (as you start an application or from an external program) Write macros The most common need for macros in Write is to manipulate text - add text, change fonts, copy text and so on. There are two main objects that can be used for dealing with the text of a document: • The Text collection on page 426 - gives access to the entire text of a document • The Selection object on page 428 - gives access to text, fonts, paragraph attributes, tab settings and styles of the current selection For some tasks (inserting text, deleting text) you could use either the text or the selection object. If you want to specify any font or paragraph settings, the Selection object must be used. If you want to check the entire text of a document for a particular word then the Text object is the one to use. There are also objects and collections to allow you to manipulate (create, open, print) documents - see Working with documents on page 430 . Working with the text collection The text collection contains the details of every character in a document. This includes special characters such as the Enter key and the Tab key. The easiest way to picture the text collection is as a single long, continuous stream of characters. You can reference, insert, and delete characters anywhere in this text stream. Counting the characters Consider a new document. The operator types "Hello" on line 1 and then presses the Enter key and types "?" on line 2 so the document looks like this: Hello ? How many characters does the document contain? Easy, just use the Count property of the text box. For example: MsgBox ActiveDocument.Text.Count 427 Macros displays the answer 7 (that is, 5 for hello + 1 for the question mark + 1 for the Enter key). Note that ActiveDocument is needed before the Text object can be referenced. It doesn't need to be the current document - any document object will do. Examining each character in a document Any character in a document can be referenced directly. Consider a document that contains nothing more than the following text on lines 1 and 2: Hello ? This code will access individual letters within the document: MsgBox ActiveDocument.Text.Item(0) MsgBox ActiveDocument.Text.Item(1) MsgBox ActiveDocument.Text.Item(2) ' returns 72 ' returns 101 ' returns 108 What's going on? The Text object is actually returning a number code. So "H" = 72, "e" = 101 and "l" = 108. Anyone familiar with ASCII codes may recognize these numbers. Fortunately, you don't need to remember what the codes translate to - there's a built-in function to VBScript function, Chr(), that does this for you. For example: MsgBox Chr(ActiveDocument.Text(0)) ' returns H Note that the "Item" has been dropped - it's not necessary since Item is the default property of the Text object. So let's examine the entire document: For i = 0 to ActiveDocument.Text.Count - 1 MsgBox "Character number: " & i & ", code: " & ActiveDocument.Text(i) & ", text: " & Chr(ActiveDocument.Text(i)) Next This will produce the output: Character number: 0, code: 72, Text: H Character number: 1, code: 101, Text: e Character number: 2, code: 108, Text: l Character number: 3, code: 108, Text: l Character number: 4, code: 111, Text: o Character number: 5, code: 13, Text: Character number: 6, code: 63, Text: ? Note there is no actual character to represent the Enter key (the output is blank). A better way of coding the above is to make use of the With....End With VBScript statement so you don't have to keep writing ActiveDocument.Text repeatedly. 428 Macros With ActiveDocument.Text For i = 0 to .Count - 1 x = .Item(i) MsgBox "Character number: " & i & ", code: " & x & ", text: " & Chr(x) Next End With Dealing with document chunks If you know the start and end position of the text you want, you can simply get at it using the Mid function, which has the general form: Mid(start, length) For example: MsgBox ActiveDocument.Text.Mid(0, 10) ' returns the first 10 characters of the document i = ActiveDocument.Text.Count MsgBox ActiveDocument.Text.Mid(0, i) ' returns all the characters of the document MsgBox ActiveDocument.Text.Mid(10, 20) ' returns 20 characters starting at position 10 Inserting Text To insert text in a document, just specify a starting position. For example: ActiveDocument.Text.Insert(0, "The start") ' puts the text at the beginning i = ActiveDocument.Text.Count ActiveDocument.Text.Insert(i, "The end") ' puts the text at the end of the document Deleting Text To delete text from a document, specify a starting point and a length. For example: ActiveDocument.Text.Delete(10, 3) ' deletes 3 characters, starting at position 10 i = ActiveDocument.Text.Count ActiveDocument.Text.Delete(0, i) ' deletes the entire document contents Working with the Selection object The selection object refers to the currently selected text, that is the text that is highlighted. If no selection is current, the selection object still functions and works with the current cursor position. The selection object is an application level object so can be used without any qualifiers (like ActiveDocument). Here are some of the more important properties and methods: Properties Document Read only; the document to which the 429 Macros selection object is associated. End Set or read the ending position of selection. Start Set or read the starting position of selection. Font Merged font of the selection, represented by Font object Paragraphs Collection of paragraphs in the selection. Methods Collapse(Direction) Turn selection back into a cursor. Possible directions are abForw & abBack. Copy() Copies it to the Clipboard. Cut() Moves it to the Clipboard. Delete() Delete the selection. InsertBefore(String) Insert text before the selection and adds it to the selection. InsertAfter(String) Insert text after the selection and adds it to the selection. The selection object makes it easy to insert text at the current cursor position. For example: Selection.InsertAfter("Inserted text") After text has been inserted it will itself be selected. This makes it easy to adjust the font properties. For example: Selection.InsertAfter("Inserted text") With Selection.Font .Bold = True .Italic = True .Underline = True .Size = 18 .Name = "Times New Roman" End With Selection.Collapse(abForw) The last line returns back to a normal cursor. If you want to work with a specific part of a document, use the Start and End properties. For example, the following copies the first 10 characters of a document to the clipboard and then tells the user how many characters he has copied: Selection.Start = 0 Selection.End = 9 Selection.Copy() MsgBox "You copied " & _ Selection.End - Selection.Start + 1 & _ " characters" 430 Macros Or if you want to insert text at the end of a document, use the selection object in conjunction with the text object: Selection.End = ActiveDocument.Text.Count Selection.InsertAfter "End of document" Selection.Collapse(abForw) Working with documents Macros can be used open, close, create and print documents. Documents can be manipulated on two levels: Documents collection With the documents collection you can open and create documents and refer to particular documents by name or number. For example: Documents.Add("NORMAL") The above line creates a new document based on the normal template and makes it the current document. This is exactly the same as selecting the New button on the toolbar. Set mydoc = Documents.Add("NORMAL") This has the same effect but also save a reference to the new document in a variable called mydoc. Mydoc is a Document object (see Document object on page 431 for details) and you can use it, for example, to add text and print: To open an existing document, use the Open method. As with the Add method, you can choose to save a reference to the document or not (which would depend on the other requirements of your macro): Documents.Open("c:\my documents\myfile.aww") or Set mydoc = Documents.Open("c:\my documents\myfile.aww") If you are opening several files in the same directory (or just want to change the current directory) you can use the following: ChangeFileOpenDirectory("c:\my special folder") The documents collection contains useful information about open documents as the following macro demonstrates: MsgBox "There are " & Documents.Count & " documents, names to follow." For each doc in Documents MsgBox doc.GetTitle Next Individual documents can be referred to by name or number. Suppose you had opened two documents, Write1.aww and Write2.aww, in that order then: 431 Macros Documents(0).Activate Documents("Write1.aww").Activate are equivalent, as are: Documents(1).Print Documents("Write2.aww").Print Document object Here is a summary of the most important properties and methods of the document: Properties Selection Paragraphs Text Styles Frames Fields The Selection Object on page 428 The Paragraphs collection. The Text collection on page 426 Styles collection. Frames collection. Fields collection. Methods Activate GetTitle Copy Cut Print star, end, copies, collate Paste() Makes the document the current one. Returns title of the document. Copies selection to the Clipboard. Moves selection to the Clipboard. Prints the document. Copies Clipboard to the current position of the Document; Deletes selection if any. The easiest way to "get hold of" a document is to use ActiveDocument to refer to the current document. For example: MsgBox ActiveDocument.GetTitle would show the name of the current document. ActiveDocument can be used with any of the above properties and methods. 432 Macros You can also refer to the active document when creating or opening documents. See Documents collection on page 430 for more details. For example, to create and print a document: Set mydoc = Documents.Add("NORMAL") mydoc.Text.Insert 0, "hello from a macro" mydoc.Print 1, 9999, 1, False A Write macro tutorial This tutorial will show how to build a macro for a standard way of closing a letter (the "yours sincerely" bit). 1. In Write, create a new macro: select Tools/Macro/Macros 2. Type in "LetterClosing" in the "Macro Name:" box. 3. Click on the Create button. You are now presented with the following: Sub LetterClosing() ' Put macro code here End Sub Sub is short for subroutine and the name you entered follows it. This is the standard way of declaring a macro. The very last line of your subroutine is "End Sub". An error is generated if this is missing. The line in-between begins with an apostrophe. You can put as much descriptive text into the macro as you want - just begin the line with an apostrophe. For now, you can delete the "Put macro code here" Let's start with the simple problem of inserting some text, somewhere. The macro command for inserting text is simply "Insert". But this is not enough on its own. You need to know that "Insert" belongs to something called "Text", which is the entire text of your document. How about "which document" - you could have several documents open so you need to specify which one. You could do this by name, but this would make the macro rather too specific. What you really want is to have it work with the currently active document. The way to refer to this is "ActiveDocument". So a command to insert text is as follows: ActiveDocument.Text.Insert What we've been describing is part of the "object model" for Ability. To finish off, you need to specify what to insert and where to insert it, in the format: ActiveDocument.Text.Insert position, text 433 Macros where position is the number of characters from the beginning of the document and text is the actual text to insert. So: ActiveDocument.Text.Insert 0, "Hello from Ability" would insert "Hello from Ability" at the start of your document (the reference to position is zero based) and your complete macro will now look like this: Sub LetterClosing ActiveDocument.Text.Insert 0, "Hello from Ability" End Sub Lets run the macro to see what happens: 1. Select a Write document (use the Windows menu). 2. Select Tools/Macro/Macros. 3. You'll see "LetterClosing " as a named macro - click on it to select it. 4. Click on the "Quick macro" checkbox so a tick appears (we'll see why in a minute). 5. Click the Run button to execute the macro. The text should appear at the start of your document. In step 4. above, we asked Ability to remember the macro as a "Quick macro" - this means it will appear on the shortcut menu as follows: 1. Put the mouse pointer over the document and right-click. 2. Select Macros. 3. You'll see the LetterClosing macro available - select it. The text will be inserted again at the beginning of the document. Refining the macro to make it more useful The text we want to insert should be at the end of the document rather than the beginning. So we need a way of working out where the end of the document is. One way is to ask Ability for the total number of characters in a document as follows: ActiveDocument.Text.Count So the following macro would always insert the text at the end of the document: Sub LetterClosing pos = ActiveDocument.Text.Count ActiveDocument.Text.Insert pos, "Hello from Ability" End Sub 434 Macros Notice that we assigned a variable to count the number of characters in the document. Strictly speaking, it is not really necessary and we could have written it as a single line instead: ActiveDocument.Text.Insert ActiveDocument.Text.Count, "Hello from Ability" But the first way is easier to read (which is a good rule of thumb to apply when creating macros). Supposing you had lots more similar commands you wanted to issue. Do you have to keep writing "ActiveDocument.Text" all the time? The answer is No. You can ask Ability to perform a series of tasks using the same "thing" (or you can call it object if you want). For example, the following macro gives identical results to the previous one: Sub LetterClosing With ActiveDocument.Text pos = .Count .Insert pos, "Hello from Ability" End With End Sub There are some important points here. When using the With statement, the . (dot or period) must precede any items that refer back to the object being referred to. So it reads: "pos equals dot count" and "dot insert equals....". Also note that it is good practice to indent macro commands within "block" statements. This makes it easier to read. Now let’s make the macro put some real text in. Sub LetterClosing With ActiveDocument.Text pos = .Count .Insert pos, vbCr & "Yours sincerely" & vbCr & vbCr & vbCr & vbCr & "Philip Roach" & vbCr & "Technical Manager" End With End Sub What's happening! Imaging you were typing the text in real life - after the "Yours sincerely", you'd press the Enter key. You'd probably press it once (or twice) before you started "Yours sincerely" as well. This is what the vbCR does. It's short for "visual basic carriage return" and is a constant built-in to the VBScript language. Also, the above example shows how to combine text strings using the "&" operator. Having long strings of text combined in a single line as in the above example is not good practice (it's hard to read later). Here is a neater way of laying it out: Sub LetterClosing With ActiveDocument.Text pos = .Count .Insert pos, vbCr & "Yours sincerely" & String(4, vbCr) & _ "Philip Roach" & vbCr & _ "Technical Manager" 435 Macros End With End Sub Instead of repeatedly chaining vbCr's together, we can use a built-in function (built-in to the VBScript language that is) called "String" that takes a character and repeats it any number of times. Also notice that the long line is split into 3 with an underscore used as a "continuation" character at the end of lines 1 and 2. Spreadsheet macros Most of the macros you will be writing for Spreadsheet will involve fetching and setting the values, formulas and formats for cells within a spreadsheet. You'll also need to know how to open and create workbooks and deal with worksheets. Working with cells When working with cells in a worksheet, you'll usually need to work with a known specific cell (e.g. A1) or work with a cell relative to the current cell (e.g. the cell to the right of the current cell). Well begin with the current cell itself (a special case of the second type). Using the active cell The active cell is just the current cell - wherever you move to, or click on, in the worksheet. The way to address the active cell is, not surprisingly: ActiveCell A cell has lots of properties - a font, value, a formula, background color and so on. Here are some of the more important properties: ActiveCell.Value - The simple text or number or date of a cell (as it is displayed in the sheet). If the cell contains a formula, then Values displays the results of the formula. For example: If ActiveCell.Value = "0" Then ActiveCell.Value = "Zero" Else MsgBox "Cell has value: " & ActiveCell.Value End If This converts a current cell containing "0" to "zero" and displays the value of current cell if it does not contain zero. In a similar way, the current cells formula can be determined or set using: ActiveCell.Formula The Formula property returns either the formula (for example "=a1 + a2") or, if the cell does not contain a formula, the value. Here are some more properties: 436 Macros ActiveCell.NumberFormat ActiveCell.Font (for example) ActiveCell.Font.Bold ActiveCell.Font.Italic ActiveCell.Font.Name ActiveCell.Font.Size Cut, copy and paste etc As well as setting the properties of the cell, there are methods to perform cut, copy and paste, just like the Edit menu: ActiveCell.Clear () ActiveCell.ClearContents () ActiveCell.ClearFormats () ActiveCell.Copy () ActiveCell.Cut () ActiveCell.Paste () Note that you need to include the brackets to execute these methods. Working with a specific cell To refer to a specific cell within the spreadsheet, use the Range object as follows: Range("a1") This is equivalent to the ActiveCell in terms of it's properties and methods, so all of the following are valid: Range("a1").Value Range("a1").Formula Range("a1").Cut() Working with cells relative to the active cell Suppose you wanted to take the contents of the current cell, do something with it and then put the result in the cell to the right of the current cell. The target cell's address is neither set in advance nor the active cell. So how do you refer to it? The answer is that you use a Cells property that treats the active cell as 1, 1 and refer to other cells by it's relative co-ordinates. This is best seen by example. Suppose the current cell was C3, then: ActiveCell.Cells(1, 1) ActiveCell.Cells(1, 3) ActiveCell.Cells(3, 1) ActiveCell.Cells(0, 0) ActiveCell.Cells(-1, 0) refers to C3 (i.e. itself) refers to E3 refers to C5 refers to B2 refers to B1 437 Macros Here's an example routine that takes the current cell and adds 1 to it and puts the result in the cell immediately to the right: ActiveCell.Cells(1, 2).Value = ActiveCell.Value + 1 Of course, this code assumes that the active cell contains a number and if contains text instead, a run time error will be generated. Later we'll see a general technique for dealing with such errors. Because the ActiveCell.Cells(row, col) notation returns an equivalent object to ActiveCell, all the same properties and methods can be applied. These are all valid: ActiveCell.Cells(2, ActiveCell.Cells(2, ActiveCell.Cells(2, ActiveCell.Cells(2, 2).Cut() 2).Formula = "=a1 + a2" 2).Font.Bold = True 3).Paste() Ranges Quite simply, a range is one or more cells. In fact there's no such thing as a "cell" object and all the previous examples for dealing with a single cell are really manipulating the properties and methods of a "range" object. The only difference in your treatment of a cell and a range is that you can read and write a cell value and formula but you can only write values and formulas with a range. Specifying a range Here are the most important ways of identifying ranges (there are other ways!) Selection The current selection (highlighted area) Range("a1..a10") A specific range, defined by cell references Range("myrange") A specific range, defined a named range ActiveCell.Range("a1..a10") The first 10 cells below and including the active cell. In this case, the "a1..a10" reference is relative to the current cell. Cells The entire worksheet Since all the above return a range, they all support the same methods and properties. For example: Sub TestRange Selection.Font.Bold = True Range("a1..a10").Font.Underline = True Cells.Font.Size = 10 ' the whole sheet! Range("b1..b10").Value = "test" Range("c1..c10").Formula = "=a1 * 10" End Sub 438 Macros Note the last line of the example specifies a formula. This does not increment cell references down the column (e.g. cell c2 will contain "=a1 * 10" just like cell c1). If you want to increment the references, do the following: Range("c1").Formula = "=a1 * 10" Range("c1").Copy() Range("c2..c10").Paste() This results in cell c2 containing "=a2 * 10". Working with a range to the left and/or above the active cell This has to be done in two stages, first to change the active cell and then second specify the range relative to the new active cell. For example: ActiveCell.Cells(-1, -1).Activate() ActiveCell.Range("a1..a5").Select() This is necessary because there is no way to specify a range like Range("-a1, -a10"). Working with individual cells in a range Once you've got hold of a range, you might want to do something with each cell individually. For example, to check the contents of each cell. There are two notations, a (row, col) coordinate or the nth item in the range. The row, col notation is convenient if you are working with a set range. For example: MsgBox MsgBox Range("a1..b5")(1, 1).Value Range("a1..b5")(2, 2).Value 'displays contents of cell a1 'displays contents of cell b2. The alternative notation takes a range from left to right, top to bottom and numbers it from 1 to n. So the exact equivalent of the above is: MsgBox MsgBox Range("a1..b5")(1).Value Range("a1..b5")(2).Value 'displays contents of cell a1 'displays contents of cell b2. But really this notation is more useful when you don't know in advance the extent of a range (for example, dealing with a selection). You can be sure to see every item in a range using the following: For i = 1 to Selection.Count MsgBox Selection(i).Value Next A brief note on the Item property of a range To give you a fuller picture, the previous methods of working with cells within a range use a shorthand notation. All ranges have an "Item" property that allows you to reference an individual cell. Since "Item" is the default property, it is not necessary to actually write it out. For example, the following are identical: Range("a1..b5")(1, 1).Value 439 Macros Range("a1..b5").Item(1, 1).Value and if you happened to start a selection on a1 then these are identical with each other as well as the above: Selection(i).Value Selection.Item(i).Value Working with worksheets and workbooks The spreadsheet application can have none, one or many workbooks open at one time and each workbook can have one or more worksheets. All of these are part of a straightforward hierarchy: Workbooks ' all the workbooks in an application Workbooks.Count ' how many workbooks do we have open Workbooks(0) ' the first open workbook Workbooks("myspread") ' the workbook called myspread Once you've got hold of a workbook, you can examine it's name, count it's worksheets and refer to individual worksheets: Dim wb, ws Set wb = Workbooks(0) MsgBox "Name is " & wb.Name & ", and has " & wb.Worksheets.Count & "worksheets." Set ws = wb.Worksheets(0) ' or alternatively Set ws = wb.Worksheets("mysheet") Msg "First worksheet is called: " & ws.Name There can be only one active (or current) workbook however. Also, there can be only one active sheet and one active cell. ActiveCell Returns the current cell in the current worksheet in the current workbook. ActiveSheet Current worksheet. ActiveWorkbook Current workbook. Database macros Database macros can be stored in one of two ways in: global or local. The following table explains the differences: Stored in Global macros Database specific macros Global database macro file (abdata.abd). The file is in the program directory ("c:\program files\ability office\" by default) The database it was created in. 440 Macros Create using Tools/Macros menu. File/New/Macro from menu (a database must be open). Run by Tools/Macros menu – can also be run from a button on the toolbar or by keyboard shortcut. Double-click directly from Database Manager. Notes Identical operation to global macros in Spreadsheet and Write. Can contain one or more subroutines or functions – the first one in the file will be the default (i.e. double-click will run the top most macro). Database shares the same database engine as Microsoft Access and some users may already be familiar with automation using DAO. Ability allows access to two of the fundamental DAO objects. See Using DAO automation on page 442 for more details. Working with Databases Naturally enough, there is a collection called Databases that opens and creates databases and a Database object that contains the tables of information you'll want to work with. The following summarizes the most important properties and methods: Databases collection Open(path to file, Exclusive) Open an existing database. Create(path to file) Create a new database. Database object Close Close the database. Admin Access to DAO Database property Tables The collection of tables belonging to the database Forms The collection of forms belonging to the database Reports The collection of reports belonging to the database Queries The collection of queries belonging to the database. Since the database can only use one database at a time, you can use the Databases collection to create and open a database and then use ActiveDatabase, which is itself just a database object, to do the rest. For example to open and use a table from a database: Databases.Open("c:\my documents\mydata.adb", False) ActiveDatabase.Tables.Open("mytable") Note the second parameter of the open command is False, which means open the database in shared mode. True would be exclusive (i.e. lock every other user out for that session). 441 Macros Working with tables To open a table in the current database, use the following command: Set mytb = ActiveDatabase.Open("mytable") The variable mytb now allows access to the table object. Here are the most important methods and properties of the table object: Activate Make the table the current one (bring it to the front). Fields The collection of fields – field information and data. MoveFirst Go to the first record. MoveNext Go to the next record. MovePrev Go to the previous record. MoveLast Go to the last record. Close Close the table. EditRecord Allow changes to be written back to the current record. Puts the table into an "Edit" state. AddNewRecord Allow changes to be saves as a new record. Puts the table into an "Append" state. UpdateRecord Write any pending to changes to the table and turn off Edit or Append state. Here's how to move open and move around the table: Set mytb = ActiveDatabase.Open("mytable") mytb.MoveFirst MsgBox "First Record" mytb.MoveNext MsgBox "Second Record" .....and so on. Instead of supplying a specific name for the table, it's sometimes useful to work with the current table (which could be any table). Here's some code that does the same as above: Set mytb = ActiveDataObject mytb.MoveFirst etc. Working with fields The Fields collection contains the all the fields for a table. An individual field has the following properties: Value Contents of the field. Name Name of the field. 442 Macros For example, for quick look at the contents of record 1 in a table: Set mytb = ActiveDatabase.Open("mytable") mytb.MoveFirst s = "" For Each fld In mytb.Fields s = s & fld.Name & ": " & fld.Value & vbCr Next MsgBox "The first record looks like this: " & vbCr & vbCr & s To update a record, you should really know a little about the type of fields you are using. For example, updating two fields, one called email and the other tel: With mytb .EditRecord .Fields("email").Value = "[email protected]" .Fields("tel").Value = "01234 5678" .UpdateRecord End With Note that you always have to set the table into an "edit" state with the EditRecord command and complete the edit with UpdateRecord. Adding a new record would be very similar: With mytb .AddNewRecord .Fields("email").Value = "[email protected]" .Fields("tel").Value = "01234 5678" .UpdateRecord End With Using DAO automation Database provides direct access to two important DAO objects: • DAO Database object on page 443 • DAO DBEngine object on page 442 These are made available for experienced users. Full documentation on how to use them is beyond the scope of this help guide. DAO.DBEngine DBEngine is the top level object in the DAO object model – all DAO objects and collections are available through DBEngine. For example, from outside Ability Database (e.g. in Spreadsheet or Write): Set dbapp = CreateObject("AbilityDatabase.Application") MsgBox dbapp.DBEngine.Version 443 Macros Inside an Ability Database macro, DBEngine is accessible directly: MsgBox DBEngine.Version The Version property simply shows the version of DAO in use. Another example of using DBEngine is to compact a database. Although this is available from the Tools menu, one of the options in compacting a database is to set a version number. DBEngine.CompactDatabase "c:\my documents\mydata2.adb", _ "c:\my documents\mydata3.adb", _ 32 The code above creates the file mydata3.adb from mydata2.adb and at the same time, compacts the file and converts the version number from 2 to 3. It is the last parameter (32 is equal to the DAO constant dbVersion30) that tells DAO to convert the version number. Note that Ability creates JET databases using version 2. When creating databases in Microsoft Access 97, the JET version is 3. As far as Ability is concerned, there is no difficulty using either version whereas Microsoft Access will always want to "update" the version if opening version 2. DAO Database The DAO Database object is accessible through the Admin property of an Ability Database. For example: Set dbapp = CreateObject("AbilityDatabase.Application") dbapp.Databases.Open("c:\my documents\mydata.adb", False) Set db = ActiveDatabase Set dbdao = db.Admin Note that the first two lines would not be necessary if you were creating a macro inside Ability Database and already had a database open. The above code creates a variable dbdao which is equivalent to the standard Database object in the DAO object model. Automating Ability from other programs Any program that supports OLE automation can run the Ability application "from outside". For example, you may have a custom database application and want to press a button that launches Write with a letter and insert the address block from the details in the current record. The exact syntax to use depends on your development environment. For an application that supports VBScript (for example, all the Ability applications and WSCRIPT.EXE and CSCRIPT.EXE that ship with Windows 98) you can use the following commands to start an Ability application: 444 Macros Set app = CreateObject("AbilityDatabase.Application") Set app = CreateObject("AbilitySpreadsheet.Application") Set app = CreateObject("AbilityWrite.Application") Note: the Set statement is part of the VBScript language and allows you to create a reference to an object. In the above case, CreateObject creates an instance of the named application and the Set statement makes the variable app point to the application object. If you used this syntax instead: app = CreateObject("AbilityDatabase.Application") the implication would be that you are trying to make a copy of an application (i.e. your computer memory would be holding two separate running applications) and this is not allowed. Now the application has been started, you'll need to something useful, like create a new document or open a database. Automating Write As an example, let's assume Write needs to be started from another application (e.g. Spreadsheet – but it could be any application that supports OLE automation) and a you want to create and print some text. Here's the code: Set app = CreateObject("AbilityWrite.Application") app.Activate Set mydoc = app.Documents.Add("NORMAL") myDoc.Text.Insert 0, "This is a simple document" myDoc.Print 0, 99, 1, False The second line "app.Activate" causes the application to become visible to the user (otherwise the application would run in the background and not be visible). Next, a new document is created, based on the normal template, and a reference to the document is saved in a variable mydoc. The rest of the macro adds text to a document and prints it. Note: The Print function takes four parameters: start page, end page, number of copies and "collate" (or not). Automating Spreadsheet As an example, let's assume Spreadsheet needs to be started from another application (e.g. Write – but it could be any application that supports OLE automation) and a you want to create a new worksheet. Here's the code: Set app = CreateObject("AbilitySpreadsheet.Application") app.Visible Set mywb = app.Workbooks.Add Set myws = mywb.Worksheets(0) myws.Cells(1, 1).Value = "A big hello to Spreadsheet" 445 Macros The second line "app.Visible" causes the application to become visible to the user (otherwise the application would run in the background and not be visible). Next a new workbook is created and a reference to the first worksheet in it is saved as myws. Finally, some text is written into the cell A1. Automating Database As an example, consider opening a table within a database. The following code would work in a macro inside Write or Spreadsheet (or any application supporting OLE). Set app = CreateObject("AbilityDatabase.Application") app.Visible = True app.Databases.Open "c:\my documents\mydata.mdb", False Set mydb = app.ActiveDatabase Set mytb = mydb.Tables.Open("PhilData") MsgBox mytb.Fields(0).Value The second line "app.Visible" causes the application to become visible to the user (otherwise the application would run in the background and not be visible). The next three lines open a named database and creates a reference to a specified table in mytb. The last line displays the data from the first field in record 1. Macros – examples Write macros Printing multiple copies on page 445 Printing the selection on page 446 Inserting a database address into Write on page 446 Sending email from Write on page 452 Database macros Making a letter from the current record on page 454 Miscellaneous macros Opening a web page inside Ability on page 457 Getting information on the script engine on page 458 Printing multiple copies Not all printer drivers have the capability to print multiple copies. Here is a very simple Write macro that provides a work around for such printers. 446 Macros Sub MultipleCopies Dim ncopies, startpage, endpage, collate startpage = 1 endpage = 9999 collate = False ncopies = InputBox("Number of copies required?", "Print current document", 2) If ncopies = "" Then Exit Sub End If ActiveDocument.Print startpage, endpage, ncopies, collate End Sub You can specify whatever you want for startpage, endpage and collate (or even prompt the user). Setting endpage = 9999 will print every page for most documents. Printing the selection The following macro prints out the current selection (this is not supported in the Write print dialog – sometimes macros can be used as work-arounds for non-existent product features!) Sub PrintSelection Set currdoc = ActiveDocument Selection.Copy() Set tempdoc = Documents.Add("NORMAL") tempdoc.Paste() tempdoc.Print 1, 9999, 1, False currdoc.Activate End Sub The macro first sets a reference to the current document (so it can re-display it at the end). Next, it copies the current selection to the clipboard. The third line of the macro creates a new document, based on the normal template. This will be used as a temporary store for the selected text, which is pasted and printed. Lastly, the macro returns to the original document using the Activate command. Inserting a database address into Write This example assumes you are writing a letter and you want to insert an address held in a database. Although you could use mail merge to perform this task, it can be convenient at times to do this with a macro. Each section of the macro will be broken down and explained. The full source listing can be found here on page 450. 1. Start the macro, declare and initialize some variables 447 Macros Sub InsertDBAddress Dim app, mydb, mytb, srchtxt, dbpath, tbname, srchfld, qrytxt dbpath = "c:\my documents\mydata.adb" tbname = "mytable" srchfld = "Lastname" All the variables used in the macro are declared locally – this is good practice as it safes any possible confusion over whether a variable is local or global. Insert your own details for database name (including path), the table name and the field you want to search on. In this case, we're allowing records to be found by lastname – not always practical with large tables. 2. Open the database Set app = CreateObject("AbilityDatabase.Application") app.Databases.Open dbpath, False Set mydb = app.ActiveDatabase Creates the database application object, opens a database and sets a reference, mydb, to it. 3. Get the input from the user srchtxt = InputBox("Enter " & srchfld & ":", "Ability Message") If Len(srchtxt) = 0 Then Exit Sub End If This prompts the user to enter some data to search for. As a refinement, if the user enters nothing (or selects the "Cancel" button) then the macro will terminate with the "Exit Sub" statement. 4. Open a query qrytxt = "SELECT * FROM " & tbname & " WHERE " & srchfld & "='" & srchtxt & "'" Set mytb = mydb.Admin.OpenRecordset(qrytxt) The first line creates a query, based on the whatever the user entered. For example if the table was called "contacts" and your were searching on a company name field for "Ability Software" the variable qrytxt would contain: SELECT * FROM contacts WHERE company ='Ability Software' Which is slightly more readable. Note the use of single apostrophes surrounding Ability Software – these are in the code but only just visible since they are next to double quotes. Without these single apostrophes, the macro would fail! The second line uses a property of the database object called Admin – for users familiar with DAO, Admin is exactly equivalent to a DBEngine.Database object. The end result is that we've opened a query that contains only the record(s) matching the search text. 448 Macros 5. See if there are any records found If mytb.BOF Then MsgBox "No matching records" Exit Sub End If BOF stands for beginning of file (EOF being end of file). When the query was opened, if it contains no records, BOF will be true, and if so, a message is displayed and the macro terminates with "Exit Sub" If there are records BOF will be false, and we will be positioned on record 1. 6. One or more records? mytb.MoveNext If mytb.EOF Then mytb.MoveFirst Selection.InsertAfter BuildAddBlock(mytb.Fields) Selection.Collapse(1) End If Assuming we're on record 1, a call to move to the next record will cause EOF to be true only if there is only one record. That is, the user entered some search text and there is only one matching record, and we've found it. No ambiguity, so we can paste the data into the Write. Inside the If Then statement, the first thing to do is head back to record 1. Next, the Selection.InsertAfter command pastes the text into the current Write document, where the text is generated by the BuildAddBlock function (described below). Selection.Collapse(1) turns of selected text. 7. More than one record, so browse Logic tells us that if there is at least one record (part 5 above) and not exactly 1 record (part 6. above) then there must be two or more matching records. This could easily happen searching for the lastname of Smith for example. In this case, we can browse through the records until the user picks one. mytb.MoveFirst Do ret = MsgBox("More than one record - Select this record " & _ "With the Yes button or choose No For Next " & _ "record" & vbCr & vbCr & BuildAddBlock(mytb.Fields), _ vbYesNoCancel, _ "Ability Message") If ret = vbCancel Then Exit Sub ElseIf ret = vbYes Then Exit Do End If 449 Macros mytb.MoveNext If mytb.EOF Then ret = MsgBox("End of records!" & vbCr & vbCr & _ "Review records again?", vbYesNo, _ "Ability Message") If ret = vbNo Then Exit Sub End If mytb.MoveFirst End If Loop Selection.InsertAfter BuildAddBlock(mytb.Fields) Selection.Collapse(1) End Sub The basic idea repeat for ever (Do....Loop) until the user chooses to select a record, browse to the next record or start the browse over again if he reaches the end. The command Exit Do jumps out of the loop at the users bidding. The macro is finished of by inserting the text as described in part 6. above. A quick note on the use of MsgBox. MsgBox is a built in function that takes one or more parameters. In the examples above, MsgBox is called with three parameters: Prompt Buttons Title Prompt is the text displayed inside the dialog. Title is the text displayed on the title bar of the dialog. Buttons controls what buttons to display on the dialog. vbYesNoCancel builds the dialog with three buttons: Yes, No and Cancel. Which button the user selects can be tested for by assigning the return value of MsgBox to a variable (called ret above). So ret = vbYes is true if the user selected the Yes button and so on. 8. BuildAddBlock and AddLine functions There are several calls to this function from the main code above. The idea is to take named fields and construct a single string that is suitable for an address block (i.e. no gaps). Function BuildAddBlock(Flds) Dim s s = Flds("CustTitle") & " " & Flds("FirstName") & " " & Flds("Lastname") & vbCr s = s & AddLine(Flds("Company")) s = s & AddLine(Flds("Add1")) s = s & AddLine(Flds("Add2")) s = s & AddLine(Flds("Add3")) s = s & AddLine(Flds("Add4")) s = s & AddLine(Flds("Postcode")) BuildAddBlock = s 450 Macros End Function The function is declared with a single parameter. In the calling code the following line is used to invoke the function: BuildAddBlock(mytb.Fields) The result of this is that mytb.Fields (i.e. the fields for the current record) is mapped into a variable called Flds in the function definition. A variable s is built-up by calling the function AddLine which checks to make sure the line is not blank. Function AddLine(x) AddLine = "" If Len(x) > 0 Then AddLine = x & vbCr End If End Function Inserting a database address - code listing This is a complete listing of the code referred to in the previous example. If you want to make use of this macro, copy and paste into the macro editor and then replace the dbpath, tbname and srchfld text on lines 4 to 6 with your own data. Also adjust the function BuildAddBlock to match your own field names. Sub InsertDBAddress Dim app, mydb, mytb, srchtxt, dbpath, tbname, srchfld, qrytxt dbpath = "c:\my documents\mydata.adb" tbname = "mytable" srchfld = "Lastname" Set app = CreateObject("AbilityDatabase.Application") app.Databases.Open dbpath, False Set mydb = app.ActiveDatabase srchtxt = InputBox("Enter " & srchfld & ":", "Ability Message") If Len(srchtxt) = 0 Then Exit Sub End If qrytxt = "SELECT * FROM " & tbname & " WHERE " & srchfld & "='" & srchtxt & "'" Set mytb = mydb.Admin.OpenRecordset(qrytxt) If mytb.BOF Then MsgBox "No matching records" Exit Sub End If mytb.MoveNext If mytb.EOF Then mytb.MoveFirst 451 Macros Selection.InsertAfter BuildAddBlock(mytb.Fields) Selection.Collapse(1) End If mytb.MoveFirst Do ret = MsgBox("More than one record - Select this record " & _ "With the Yes button or choose No For Next " & _ "record" & vbCr & vbCr & BuildAddBlock(mytb.Fields), _ vbYesNoCancel, _ "Ability Message") If ret = vbCancel Then Exit Sub ElseIf ret = vbYes Then Exit Do End If mytb.MoveNext If mytb.EOF Then ret = MsgBox("End of records!" & vbCr & vbCr & _ "Review records again?", vbYesNo, _ "Ability Message") If ret = vbNo Then Exit Sub End If mytb.MoveFirst End If Loop Selection.InsertAfter BuildAddBlock(mytb.Fields) Selection.Collapse(1) End Sub Function BuildAddBlock(Flds) Dim s s = Flds("CustTitle") & " " & Flds("FirstName") & " " & Flds("Lastname") & vbCr s = s & AddLine(Flds("Company")) s = s & AddLine(Flds("Add1")) s = s & AddLine(Flds("Add2")) s = s & AddLine(Flds("Add3")) s = s & AddLine(Flds("Add4")) s = s & AddLine(Flds("Postcode")) BuildAddBlock = s End Function Function AddLine(x) AddLine = "" If Len(x) > 0 Then AddLine = x & vbCr End If End Function 452 Macros Sending email from Write The following example relies on Active Messaging - an OLE wrapper for MAPI. You may or may not have this installed on your system! 1. Start the macro and declare the variables Sub SendEmail Dim objSession, objMessage, objRecip, strEmsg, strTo, strSubject 2. Get the entire text of the document strEmsg = ActiveDocument.Text.Mid(0, ActiveDocument.Text.Count) This is the quickest way to get the text of the document – no consideration is given to font changes! 3. Set the fields for Send To and Subject strTo = "[email protected]" strSubject = "Send from Ability Write" These details are in the code at the moment – it would be much better to extract them from the actual document. See the suggestions at the bottom or this page for more on how to do this. 4. Start a MAPI session Set objSession = CreateObject("MAPI.SESSION") objSession.Logon "MS Exchange Settings" Start a session and logon. This is a bit like starting Microsoft Outlook. Note the logon is dependent on the current profiles on the user machine – in other words, you may have to change "MS Exchange Settings" to whatever your logon details are. 5. Create a message Set objMessage = objSession.Outbox.Messages.Add objMessage.Subject = strSubject objMessage.Text = strEmsg Set objRecip = objMessage.Recipients.Add objRecip.Name = strTo objRecip.Type = 1 ' objRecip.Resolve The first block above creates a new message and copies in the text from the document. The second block adds the recipient details. Note the Type is set to 1 – this is the value of mapiTo constant (defined as part of OLE Messaging). 6. Send the message objMessage.Update 453 Macros objMessage.Send objSession.Logoff End Sub Save the message, send it and logoff. Refining the send email macro As a refinement to the send email macro on page 452 we can extract the "To" and "Subject" fields from the text of a document using the following function: Function GetEmailHeader(msg, str) Dim spos, fpos, abText, slen slen = Len(str) ' Find for example, To: somewhere in the document text spos = InStr(1, msg, str, 1) If spos Then ' If found, find the end of the line fpos = InStr(spos, msg, vbCr) - 1 ' Set the function to return the desired text GetEmailHeader = Trim(Mid(msg, spos + slen, fpos - spos - slen + 1)) ' Delete the line from the email and tidy-up excess linefeeds msg = Left(msg, spos - 1) & Mid(msg, fpos+2) While Left(msg, 1) = vbCr msg = Mid(msg, 2) Wend Else ' Not found, so prompt user for the text GetEmailHeader = InputBox("Please enter text for the " & _ str & " part of the email header") End If End Function The function is called by replacing the lines: strTo = "[email protected]" strSubject = "Send from Ability Write" in the SendEmail subroutine with the following strTo = GetEmailHeader(abTxt, "To:") ' Check to see if the user Cancelled the function.. If Len(strTo) = 0 Then Exit Sub strSubject = GetEmailHeader(abTxt, "Subject:") See the complete code listing on page 453 . Sending email from Write - code listing This is complete code listing for the previous example. You can open the Tools/Macros/Macro Editor screen and paste the entire listing below into your macros file. Sub SendEmail 454 Macros Dim objSession, objMessage, objRecip, strEmsg, strTo, strSubject strEmsg = ActiveDocument.Text.Mid(0, ActiveDocument.Text.Count) strTo = GetEmailHeader(abTxt, "To:") If Len(strTo) = 0 Then Exit Sub strSubject = GetEmailHeader(abTxt, "Subject:") Set objSession = CreateObject("MAPI.SESSION") objSession.Logon "MS Exchange Settings" Set objMessage = objSession.Outbox.Messages.Add objMessage.Subject = strSubject objMessage.Text = strEmsg Set objRecip = objMessage.Recipients.Add objRecip.Name = strTo objRecip.Type = 1 objRecip.Resolve objMessage.Update objMessage.Send objSession.Logoff End Sub Function GetEmailHeader(msg, str) Dim spos, fpos, abText, slen slen = Len(str) spos = InStr(1, msg, str, 1) If spos Then fpos = InStr(spos, msg, vbCr) - 1 GetEmailHeader = Trim(Mid(msg, spos + slen, fpos - spos - slen + 1)) msg = Left(msg, spos - 1) & Mid(msg, fpos+2) While Left(msg, 1) = vbCr msg = Mid(msg, 2) Wend Else GetEmailHeader = InputBox("Please enter text for the " & _ str & " part of the email header") End If End Function Making a letter from the current record This macro shows how to take the data from the current record in a Database and generate a letter in Write. The macro is broken into manageable junks in the description below. To see the macro in full, with tips on how to use it with your own data, see Create letter from database - code listing on page 456. 1. Initialize the macro Sub MakeLetterFromDB Dim myflds(9), lfld, s, tb, appWrite, mydoc, i lastfld = 8 myflds(0) = "CustTitle" myflds(1) = "Firstname" myflds(2) = "Lastname" myflds(3) = "Company" 455 Macros myflds(4) myflds(5) myflds(6) myflds(7) myflds(8) = = = = = "Add1" "Add2" "Add3" "Add4" "Pcode" The first line declares in advance all the variables that are going to used (good practice). Note the declaration of an array myflds with 9 elements, that holds the names of the fields to be used for the address block – obviously, this will need adjustment for your own database. The variable lastfld is just a reminder that any loops addressing the myflds array will need to stop at 8 (arrays are zero based). 2. Get "hold off" the current table Set tb = ActiveDataObject ActiveDataObject returns the current table or query or relation and the line above saves a reference to this in the tb variable. This makes the macro as general as possible – no table name or type of object (table/query/relation) need be specified. You could replace this with a specific table if necessary. For example Set tb = ActiveDatabase.Tables("mytable") would also do the job, providing mytable was open at the time (and pointing to the actual record you want to use). 3. Make an address block s = "" For i = 0 To lastfld txt = tb.Fields(myflds(i)).Value If Len(txt) > 0 Then s = s & txt If i < 2 Then s=s&"" Else s = s & vbCr End If End If Next The code above loops through the fields listed in part 1 and adds them to a variable s. It checks to see if the fields is blank (in which case it's skipped) and also takes account of the first line of the address block, the code: If i < 2 then tests for this. All other address lines are added to s along with a new line (vbCr). 4. Ask the user if he wants to continue i = MsgBox("Make a letter with this record?" & _ vbCr & vbCr & s, vbOKCancel, _ 456 Macros "Ability Database Macro Message") If i = vbCancel Then Exit Sub End If This shows a message box with the address block and asks the user to continue or not. If the user selects the cancel button, the macro is terminated. 5. Open a new write document and drop in the text Set appWrite = CreateObject("AbilityWrite.Application") Set mydoc = appWrite.Documents.Add("NORMAL") mydoc.Text.Insert 0, s & vbCr & vbCr mydoc.Selection.End = mydoc.Text.Count mydoc.Selection.Start = Selection.End appWrite.Activate End Sub The first two lines start Write and create a new document. The third line drops in the text. The fourth and fifth line makes sure the cursor is at the end of the document and finally the Write application is made visible by the Activate command so the user can finish off the letter. Create letter from database - code listing This is a complete listing of the code referred to in the previous example. If you want to make use of this macro, copy and paste into the macro editor of Database. It need to be a global macro so use Tools/Macros. Since it works with the current table, you'll need to execute the macro while actually viewing a table. For example, you can add a button to the toolbar that allows you to do this. (Select Tools/Customize and then the Macro Shortcuts tab. Drag the macro "MakeLetterFromDB", by its button, onto one of the toolbars at the top of the screen). To tailor it to your own data, replace the field names starting at line 5 with your own. Sub MakeLetterFromDB Dim myflds(9), lfld, s, tb, appWrite, mydoc, i lastfld = 8 myflds(0) = "CustTitle" myflds(1) = "Firstname" myflds(2) = "Lastname" myflds(3) = "Company" myflds(4) = "Add1" myflds(5) = "Add2" myflds(6) = "Add3" myflds(7) = "Add4" myflds(8) = "Pcode" 457 Macros Set tb = ActiveDataObject s = "" For i = 0 To lastfld txt = tb.Fields(myflds(i)).Value If Len(txt) > 0 Then s = s & txt If i < 2 Then s=s&"" Else s = s & vbCr End If End If Next i = MsgBox("Make a letter with this record?" & _ vbCr & vbCr & s, vbOKCancel, _ "Ability Database Macro Message") If i = vbCancel Then Exit Sub End If Set appWrite = CreateObject("AbilityWrite.Application") Set mydoc = appWrite.Documents.Add("NORMAL") mydoc.Text.Insert 0, s & vbCr & vbCr mydoc.Selection.End = mydoc.Text.Count mydoc.Selection.Start = Selection.End appWrite.Activate End Sub Opening a web page inside Ability Of course, this requires Microsoft's Internet Explorer. The only trick here is knowing how to refer to Explorer (which is why we've included this as an example). Sub OpenWebPage() Dim mIE Set mIE = CreateObject("InternetExplorer.Application") mIE.Visible = True mIE.Navigate "http://www.ability.com" End Sub The first line declares mIE as a variable to be used in this sub-routine. This is not strictly necessary but is good practice (so as not to confuse it with a globally defined variable of the same name were you to have a complex sequence of macros). The second line creates an instance of Explorer, the third line makes it visible to the user (rather than run in the background) and the last line navigates to the Ability web site. Instead of "hard coding" the web site address, we can instead extract the URL from the current text. For example, in Spreadsheet, using the following line: mIE.Navigate ActiveCell.Value 458 Macros causes the macro to take the text from the current cell, so that, if cell A1 had the text "http://www.ability.com" and was also the current cell, the macro would again navigate to the Ability web site. Ability has a built-in function that performs a similar task – see HYPERLINK on page 581 for details. Getting information on the script engine Sometimes it is useful to get information about the script engine being used. For example, certain features of the VBScript language are only available in version 5.0 of the script engine. Here's how to do it: Sub GetScriptVersionInfo Dim s s = ScriptEngine & " Version " s = s & ScriptEngineMajorVersion & "." s = s & ScriptEngineMinorVersion & "." s = s & ScriptEngineBuildVersion MsgBox s End Sub "ScriptEngine" etc are built-in VBScript functions. An introduction to the VBScript language VBScript is a derivative of Microsoft's Visual Basic designed to be used for web server scripting and adding intelligence to web pages in Internet Explorer. Because it is lightweight and very easy to use it makes an ideal language for application Macros. Please note that this guide is designed as a very brief introduction to the language. If you want a more detailed introduction, there are plenty of third party books - just go to http://www.amazon.com/ and search for "VBScript". There is also lots of material at the Microsoft web site. Creating and assigning variables VBScript allows you to create variables on the fly, as simple as this: x = 24 which creates a variable, x, and gives it the value 24. With VBScript you don't need to worry about data types. All of this is managed for you. So all of this is a valid, if pointless, sequence: Sub MyTest x = 24 x = "Hello" y = 12 459 Macros x=x&""&y End Sub The last line shows how to concatenate strings in VBScript - it also demonstrates that the language is smart enough to know that, in this instance, you want a number to be treated as text. The end value of x is "Hello 12". Explicit declaration of variables If you are going to create a complex sequence of macros, it is a good idea to declare your variables using a Dim statement in each subroutine. This prevents any confusion over whether a variable is local to a subroutine or a global one (variables declared outside of subroutines are global). For example: Sub MyTest Dim x, y x = 24 x = "Hello" y = 12 x=x&""&y End Sub Simple interaction with the user There are two functions built into the VBScript language that allow you to get some input value from the user and to display a message: x = InputBox "Please enter your height in meters" x = x * 3.279 MsgBox "Your height is " & x & " feet." will ask the user to type a value in meters and assign it to the variable x, convert it to feet and then display the result. Conditional statements You can conditionally execute commands using if...then...else statements. For example: If 1 = 2 Then MsgBox "It's true" End If More generally, you can evaluate multiple conditions in one go: If [condition1] Then [commands] Elseif [condition2] Then [more commands] Else [if all else fails, some default commands] End If 460 Macros A condition is a statement that logically evaluates as true or false. Here are some examples: a=b True only if a and b have the same value a>b True if a is greater than b a <= b True if a is less than or equal to b a <> b True if a and b do not have the same value (a = b) And (c < d) True if a and b are equal and at the same time, c is less than d ((a = b) And (a < c)) Or (a < b) True if some complex relationship holds Note in the last two examples that brackets must be used to surround individual conditions. Here's another example that uses a function built-in to VBScript, Len(), that gets the number of characters in a text string. str = InputBox "Please enter your name." If Len(str) = 0 Then MsgBox "You didn't enter anything!" Else MsgBox "The name you entered is: " & str End If Repeating commands with a For Next loop If you want to repeat commands a set number of time, use a For...Next loop. For example: For i = 1 to 10 If i < 9 Then MsgBox "Reminder " & i Else MsgBox "Reminder " & i & ", almost there" End If Next VBScript starts by setting a variable i to 1 and then executing the commands sandwiched between the For and Next statements. Because i can be referenced within this block, the first time the block is executed, the message box will display: "Reminder 1" 461 Macros When the Next line is reached, VBScript adds one to i and returns execution to the top of the block. And this process is repeated until i reaches 10. So the last message to be displayed is: "Reminder 10, almost there" Repeating commands with a While Wend loop If you want to repeat a command while a particular condition holds true, use a While...Wend loop. For example: str = InputBox "Please enter your name" While Len(str) = 0 str = InputBox "You must enter at least one character, please try again" Wend This rather unfriendly bit of code forces the user to type something into the InputBox. Using functions and subroutines What is the difference between a function and a subroutine? Actually, very little. There is the notional idea that a function usually returns a value whilst a subroutine never does. Everything else is the same – both subroutines and functions can be passed parameters and both return to the caller on completion. If you intend to write a lot of script, you should plan to make good use of functions and subroutines and make an effort to keep each one short – this will aid in maintaining the code and should also make you a more efficient programmer. For example, if you have a For...Next or Do While loop that contains 30 lines of script – consider putting this script into a separate subroutine. Or if you find yourself re-writing some lines of script – make a general subroutine or function out it of instead. The use of functions and subroutines are best explained by example. Subroutines - an example To call a subroutine just type it’s name in your main script. As an example, consider a replacement for MsgBox that replaces the dialog title with your own fixed message. Here's the entire code: Sub MainScript ShowMsg("Hello") End Sub Sub ShowMsg(msgstr) MsgBox msgstr, 0, "My custom msgbox" End Sub Note: MsgBox, the built-in VBScript function, takes up to 5 parameters, three of which are used in the command above: prompt, buttons (0 makes it display only an "OK" button) and title. (the text in the title bar of the MsgBox dialog). 462 Macros What's the point? This is obviously a trivial example but even so, if you wanted all your message boxes to display with your own message in the dialog title, repeatedly writing out the longer form with "my customer msgbox" every time you wanted to use this function would become tedious. To push the point home, which is quicker to write and easier to maintain: Example A (using a subroutine) Sub MainScript ShowMsg("Hello1") ShowMsg("Hello2") ShowMsg("Hello3") ShowMsg("Hello4") ShowMsg("Hello5") ShowMsg("Hello6") End Sub Sub ShowMsg(msgstr) MsgBox msgstr, 0, "My custom msgbox" End Sub Example B (without using a subroutine) Sub MainScript MsgBox "Hello1", MsgBox "Hello2", MsgBox "Hello3", MsgBox "Hello4", MsgBox "Hello5", MsgBox "Hello6", MsgBox "Hello7", End Sub 0, 0, 0, 0, 0, 0, 0, "My "My "My "My "My "My "My custom custom custom custom custom custom custom msgbox" msgbox" msgbox" msgbox" msgbox" msgbox" msgbox" Functions - an example Let’s take some very simple macro and show how it can be converted into a function that returns a value. Here’s the basic macro: Sub MainMacro() y = InputBox “Enter a value in centigrade” y = 32 + (y * 9) / 5 MsgBox “The answer is “ & y & Fahrenheit” End Sub Splitting this into a main subroutine and a function, we get the following: Sub MainMacro() y = InputBox “Enter a value in centigrade” x = FtoC(y) MsgBox “The answer is “ & x & Fahrenheit” End Sub Function FtoC (y) FtoC = 32 + (y * 9) / 5 End Function 463 Macros The important part is that the function returns a value by assigning a value to the function name (as though the function name was itself a variable). As with the subroutine example, the advantage of splitting the code will only come if you have to perform the centigrade to Fahrenheit conversion many times in your code. For example, suppose your code had ten separate lines, in different places that did a conversion of centigrade to Fahrenheit: x = 32 + (y * 9) / 5 and you now found out that you needed to check that a sensible value was created. In this instance, you’d have to go and modify ten lines of code. If you'd split the code into a function instead, you could adjust the function once. For example: Function FtoC (y) If y < -273.15 Then MsgBox "Colder that absolute zero!" Exit Function End If FtoC = 32 + (y * 9) / 5 End Function Dealing with run-time errors There are many situations that can generate run-time errors: careless programming, system errors and so on. Any run-time error will have stop the script - not usually desirable. Here's a general way of dealing with this problem: On Error Resume Next [Some statement or call to another procedure] If Err.Number Then MsgBox Err.Description Err.Clear End If It works by making use of a global object called Err that is part of VBScript. By stating that "On Error Resume Next" VBScript knows that you want to deal with any errors rather than letting VBScript deal with them in it's own way (i.e. to halt the script). 464 SQL Guide SQL Guide SQL– short for Structured Query Language – is a widely used language in database applications. Its main use is in retrieving information, usually only information that is of particular interest (a query). SQL can be used in two places in Ability: Database using the View SQL button in the query dialog (View/Query) Database functions most of the database linking functions support SQL e.g. DBSQL(). These allow SQL to be used in Write or Spreadsheet to retrieve data. Ultimately, Ability uses SQL for all its database operations – for example, creating and deleting tables and indexes. These types of operation are not covered here. This guide covers five main types of SQL statement: Selecting records (see Selecting records - the basics on page 464) selecting all records from a table, selecting by column and by row Aggregate and group selection (see Groups and aggregate functions on page 470) summary information on tables Crosstabulations (see Crosstabulations on page 472) crosstabs (or contingency tables) Relational joins (see Relational links and joins on page 474) linking two tables together Editing tables (see Editing records on page 235) updating, adding and deleting records If you are new to SQL, the best place to start your reading is with the section Selecting records on page 464 , since this topic covers ground required for later topics. Selecting records - the basics Consider the following example table of employee information: EmployeeID 1001 1002 1003 1004 1005 FirstName Phil Chris Andreas Jim Julia LastName Roach England Smith Smith Allan Department TECH TECH SALES ADMIN SALES 465 SQL Guide Age JoinDate 24 23/1/87 36 1/10/86 25 18/6/90 30 10/3/92 25 26/9/91 To select the entire table, the SQL command is: SELECT EmployeeID, FirstName, LastName, Department, Age, JoinDate FROM Employee; This would return every row and column from the table. The two SQL keywords are SELECT and FROM. Note that every SQL statement ends with a semi-colon ";". A shorter alternative expression is: SELECT * FROM Employee; The asterisk simply stands for all, or every, column. To select only names and departments, use: SELECT FirstName, LastName, Department FROM Employee; Note that you can re-arrange the order of the columns by supplying the field list in a different order. For example: SELECT Department, FirstName, LastName FROM Employee; This would give the following results table (or query): Department TECH TECH SALES ADMIN SALES FirstName Phil Chris Andreas Jim Julia LastName Roach England Smith Smith Allan If your table or field names include spaces, you’ll need to surround them with square brackets as follows: SELECT [field number 1] FROM [My test table]; Calculated fields and renaming column titles You can rename column titles using the AS keyword. For example: 466 SQL Guide SELECT Department AS Dept, FirstName, LastName FROM Employee; This simply shortens the column header for the returned results table. More usefully, you can name computed fields. Using the Employee table on page 478 as an example: SELECT Department, FirstName + " " + LastName AS Name FROM Employee; produces the following: Department TECH TECH SALES ADMIN SALES Name Phil Roach Chris England Andreas Smith Jim Smith Julia Allan Note that the space in between the FirstName and LastName is required to properly format the result. Numeric field types can also be used to create calculated columns. Here are some examples: SELECT Age + 2 AS [Age in two years] FROM Employee; SELECT Age * 2 AS DoubleAge FROM Employee; Applying a sort order To sort the Employee table on page 478 by LastName, add the keywords ORDER BY: SELECT Department, FirstName, LastName FROM Employee ORDER BY LastName; To make sure "Andreas" appears before "Jim", sort on both FirstName and LastName: SELECT Department, FirstName, LastName FROM Employee ORDER BY LastName, FirstName; To reverse the order, add the keyword for descend as follows: SELECT Department, FirstName, LastName FROM Employee ORDER BY LastName DESC, FirstName; Selecting top records only You can select the top n records or the top n percent of the Employee table on page 478 , instead of the whole table. For example: SELECT TOP 3 * FROM Employee; 467 SQL Guide SELECT TOP 20 PERCENT * FROM Employee ORDER BY Age; The first example returns the first 3 records only and the second example the youngest 20% of employees. To return the oldest 20%, order the table in reverse: SELECT TOP 20 PERCENT * FROM Employee ORDER BY Age DESC; Applying a condition Rather than selecting all the records from the Employee table on page 478 , you can select exactly which records you’d like to work with by applying a condition. To do this, you use the WHERE command. For example, to work with only those employees who are in the sales department: SELECT Department, FirstName, LastName FROM Employee WHERE Department = "SALES"; The results table would look like this: Department SALES SALES FirstName Andreas Julia LastName Smith Allan Here’s another example: SELECT FirstName, LastName FROM Employee WHERE Age >= 30 ORDER BY LastName; This returns a sorted list of employees over the age of 29. The part of the SQL statement following the WHERE key word and preceding the ORDER BY keywords is called a condition and the ‘>=’ is called the operator. Here’s a list of all the operators you can use with Ability: Operator = != < > <= >= LIKE IS NULL AND OR NOT Meaning Exactly Equal Not Equal Less Than Greater Than Less Than or Equal To Greater Than or Equal To Partial match Contains no data Must match both conditions Match either condition Reverses logic 468 SQL Guide IN BETWEEN Matches one of a list Lies in-between two values By using the operators together you can always define a condition to return the records you want. Numeric comparisons Using the Employee table on page 478 , here are some examples of queries using numeric comparisons: SELECT FirstName, LastName, Age FROM Employee WHERE Age = 24 OR Age = 25; SELECT FirstName, LastName, Age FROM Employee WHERE Age >= 24 AND Age <= 25; SELECT FirstName, LastName, Age FROM Employee WHERE Age BETWEEN 24 AND 25; SELECT FirstName, LastName, Age FROM Employee WHERE Age IN (24, 25); All these produce the same results: FirstName Phil Andreas Julia LastName Roach Smith Allan Age 24 25 25 You can exclude the above records, that is return everyone else, by reversing the logic with the NOT operator: SELECT FirstName, LastName, Age FROM Employee WHERE Age NOT BETWEEN 24 AND 25; SELECT FirstName, LastName, Age FROM Employee WHERE Age NOT IN (24, 25); If you are chaining a series of conditions together, take care to use the parenthesis to denote the order the conditions are evaluated. Date comparisons These work in the same way as numeric comparisons (a date is just a number, starting at 0 for 1/1/1900 - see Numeric comparisons on page 468), except you should enclose the dates in a pair of #s. For example, using the Employee table on page 478 , you can find out who has joined since 1990: 469 SQL Guide SELECT LastName, JoinDate FROM Employee WHERE JoinDate > #1/1/90#; Text comparisons Text comparisons are similar to numeric comparisons (see Numeric comparisons on page 468). For example, using the Employee table on page 478 : SELECT FirstName, LastName FROM Employee WHERE FirstName > "Jim"; The comparison is made alphabetically on the first letter, then the second letter and so on. The above would return "Julia" and "Phil" but not "Andreas", "Chris" or "Jim". Note that all text comparisons must appear between quotes. Wildcards Wildcards allow one or more characters to be ignored in a text comparison (see Text comparisons on page 469). For example, using the Employee table on page 478 , SELECT FirstName, LastName FROM Employee WHERE FirstName = "Julia"; returns an exact match only - if there was a "Julian" in the table, it would not be returned by the above SELECT. To get around this, we can use the LIKE operator in conjunction with an asterisk "*" (the wildcard): SELECT FirstName, LastName FROM Employee WHERE FirstName LIKE "J*"; This produces a match on any FirstName beginning with the letter "J", in this case "Julia" and "Jim" would be returned. To find any first name containing the letter "h" use the asterisk twice: SELECT FirstName, LastName FROM Employee WHERE FirstName LIKE "*h*"; This returns "Phil" and "Chris". Another wildcard is the question mark, "?". This can be used to replace a single, unknown letter in a condition: SELECT FirstName, LastName FROM Employee WHERE FirstName LIKE "?h*"; This would match "Phil" and "Chris" again, whereas "??i*" would only match "Phil". 470 SQL Guide Selecting blank entries You can use the operator IS NULL to find or exclude fields with no data. For example, using the Employee table on page 478 : SELECT Company, Phone, FROM AddressBook WHERE Company IS NULL; This would return all none-companies from and address book. To reverse this, and select all companies from the address book, use: SELECT Company, Phone, FROM AddressBook WHERE Company IS NOT NULL; Groups and aggregate functions You can produce summary statistics for a table using functions on fields with the SQL statement. For example, using the Employee table on page 478 : SELECT COUNT(Department), SUM(Age), MIN(JoinDate), MAX(JoinDate) FROM Employee; produces a single row of summary information: COUNT(Department) 5 SUM(Age) 147 MIN(JoinDate) 1-Oct-1986 MAX(JoinDate) 10-Mar-1992 You can use these functions in conjunction with the GROUP BY keywords to produce consolidated group statistics. For example: SELECT Department, AVG(Age), COUNT(*) FROM Employee GROUP BY Department; This time we can include Department in the select statement as this is the field we are grouping on. The results table lists, in each department, the average age and the total number of people. Department ADMIN SALES TECH AVG(Age) 30 25 33.5 COUNT(*) 1 2 2 As normal select statements have an optional WHERE clause to specify which rows are included from the table, so GROUP statements have an optional HAVING clause. For example, to show a list of departments with an average age over 30, use the following: 471 SQL Guide SELECT Department, AVG(Age), COUNT(*) FROM Employee GROUP BY Department HAVING AVG(Age) > 30; Here’s a complete list of aggregate functions you can use: Function COUNT SUM MAX MIN AVG VAR VARP STDEV STDEVP Meaning Count the number of records Total Find the maximum value of field Find the minimum value of field Average Sample variance Population variance Sample standard deviation Population standard deviation Finding duplicate records on page 471 Other types of SQL statements on page 464 Grouping on more than one level You can group by more than one field. For example, using the Employee table on page 478 : SELECT Department, Age, COUNT(*) FROM Employee GROUP BY Department, Age; produces the following table: Department ADMIN SALES TECH TECH Age 30 25 24 43 COUNT(*) 1 2 1 1 Finding duplicate records You can use GROUP BY to display a list of duplicate records by counting the consolidated records. For example, using the Employee table on page 478 : SELECT LastName, COUNT(*) FROM Employee GROUP BY LastName HAVING COUNT(*) > 1; 472 SQL Guide As only the name "Smith" is duplicated in LastName, the results table looks like this: LastName Smith COUNT(*) 2 As you can group on several fields, you can construct more complex de-duplication queries. Using the EmployeeSales table on page 479 as an example, the following query picks out the first and last occurrence of duplicated sales region / employee combinations. It also calculates a count of how many duplicates occur. SELECT Employee, Region, COUNT(*) AS Total, FIRST(SalesID) AS [First Match], LAST(SalesID) AS [Last Match] FROM EmployeeSales GROUP BY Employee, Region HAVING COUNT(*) > 1; This produces the following table: Employee John John Richard Susan Region North South North South Total 2 2 3 2 First Match 1 5 4 3 Last Match 2 8 7 9 Crosstabulations Crosstabulations (or contingency tables, or crosstabs for short), allow you to compare the entries in one field with those of another. For example, suppose we have three employees John, Richard and Susan, who make sales in two regions, north and south. The sales are recorded in a table, EmployeeSales. Such a table may look like this: SaleID 1 2 3 4 5 6 7 8 9 Employee John John Susan Richard John Richard Richard John Susan Region North North South North South North North South South Suppose you want a breakdown of sales by region, for each salesman. This can be done using a TRANSFORM statement: TRANSFORM COUNT(Region) SELECT Employee FROM EmployeeSales GROUP BY Employee PIVOT Region; This produces the following results table: 473 SQL Guide Employee John Richard Susan North 2 3 South 2 2 For each employee, at total of sales in each region is calculated. Let’s look at the general form of this SQL statement. Given that you want to compare field_a against field_b, the SQL is really a standard GROUP select, wrapped in a TRANSFORM and PIVOT: TRANSFORM COUNT(field_a) SELECT field_b FROM table GROUP BY field_b PIVOT field_a; Suppose we wanted row totals. All we need to do is add a COUNT within the SELECT statement: TRANSFORM COUNT(Region) SELECT Employee, COUNT(Employee) AS [Employee Total] FROM EmployeeSales GROUP BY Employee PIVOT Region; producing the following table: Emloyee John Richard Susan Employee Total 4 3 2 North 2 3 South 2 2 Note that the employee count is given a new column title on the fly using the AS keyword. As well as counting fields, other statistics can be used. Here’s a complete list: Aggregate Function FIRST LAST COUNT MAX MIN Restricting pivot field values You can choose to select specific values of the pivot field. For example, using the EmployeeSales table on page 479 , we can choose to look at only those records in the north region: TRANSFORM COUNT(Region) SELECT Employee FROM EmployeeSales GROUP BY Employee PIVOT Region IN ("North"); 474 SQL Guide This produces the following table: Employee John Richard Susan North 2 3 Note that the value list after the IN keyword must be in brackets. The general form of this statement is: TRANSFORM COUNT(field_a) SELECT field_b FROM table GROUP BY field_b PIVOT field_a; IN ("value 1", "value 2", "value 3", …., "value n"); Relational links and joins Suppose that for each employee, you wanted to keep a record of holidays taken. Such a table might look like: HolidayID 1 2 3 4 EmployeeID 1002 1003 1002 1004 StartDate 1/2/97 21/2/97 24/2/97 1/3/97 DaysHoliday 5 1 3 4 Note that this table has a reference - EmployeeID - to the Employee table (see Employee table on page 478). This is called a Foreign Key and implies some important rules that should be (but are not always) abided by: 1. Each record in the Holiday table must contain a valid EmployeeID, that is you can’t have an EmployeeID in the Holiday table that doesn’t also have a matching entry in the Employee table. 2. Each EmployeeID listed in the Holiday table can only exist once in the Employee table. EmployeeID forms a unique index for the Employee table called a primary key. The resultant relation between the Employee table and the Holiday table is one-tomany, that each employee can have zero, one or more holidays. These rules provide the basis for referential integrity, a goal of good database design that Ability will try to help you achieve. To join the two tables, use the following statement: SELECT Employee.*, Holiday.* FROM Employee INNER JOIN Holiday ON Employee.EmployeeID = Holiday.EmployeeID; This selects all the fields from both tables. To select some of the fields, care has to be taken not to confuse fields from one table with another – for example, the field 475 SQL Guide EmployeeID exists in both tables. To avoid conflicts, tag on the table name to each field in the following manner: SELECT Employee.EmployeeID, Employee.FirstName, Employee.LastName, Holiday.HolidayID, Holiday.StartDate, Holiday.DaysHoliday FROM Employee INNER JOIN Holiday ON Employee.EmployeeID = Holiday.EmployeeID; This produces the following results table: EmployeeID 1002 1002 1003 1004 FirstName Chris Chris Andreas Jim LastName England England Smith Smith HolidayID 1 3 2 4 StartDate 1/2/97 24/2/97 21/2/97 1/3/97 DaysHoliday 5 3 1 4 Join types There are three types of join: INNER JOIN LEFT JOIN RIGHT JOIN (otherwise known as "left outer join") (otherwise known as "right outer join") Inner joins are the most common types of join and only return records that match in both tables. For example, joining the Holiday table on page 479 and Employee table on page 478 using: SELECT Employee.*, Holiday.* FROM Employee INNER JOIN Holiday ON Employee.EmployeeID = Holiday.EmployeeID; produces the following results table: EmployeeID 1002 1002 1003 1004 FirstName Chris Chris Andreas Jim LastName England England Smith Smith HolidayID 1 3 2 4 StartDate 1/2/97 24/2/97 21/2/97 1/3/97 DaysHoliday 5 3 1 4 Note that there no records here for EmployeeID 1001 or 1005 since there are no matching records in the Holiday table, that is, these employees have not taken any holiday to date. If you wanted to include every employee, you’d use a LEFT JOIN as follows: SELECT Employee.*, Holiday.* FROM Employee LEFT JOIN Holiday ON Employee.EmployeeID = Holiday.EmployeeID; 476 SQL Guide Every record from the table "to the left" of the join statement is included. Similarly, you can issue a RIGHT JOIN statement to include all records from the table to the right of the join statement: SELECT Employee.*, Holiday.* FROM Employee RIGHT JOIN Holiday ON Employee.EmployeeID = Holiday.EmployeeID; Strictly speaking, this should return the same results table as the INNER JOIN, since it makes no sense to assign holidays to non-existent employees. However, this can sometimes happen, especially with "historical" data – data imported from a system not set-up to obey referential integrity. Unmatched queries LEFT and RIGHT JOINS are useful for finding unmatched records. For example, to produce a list of all employees who have not taken holidays, using the Employee table on page 478 and Holiday table on page 479 : SELECT Employee.* FROM Employee LEFT JOIN Holiday ON Employee.EmployeeID = Holiday.EmployeeID WHERE Holiday.EmployeeID IS NULL; To produce a list of holidays that have not been assigned to any employee, if there be any: SELECT Holiday.* FROM Employee RIGHT JOIN Holiday ON Employee.EmployeeID = Holiday.EmployeeID WHERE Employee.EmployeeID IS NULL; Editing records SQL statements can make changes to one, many or all records; therefore all editing type SQL commands need careful application. Ability supports three types of these SQL commands: Update (see Updating records on page 476) Insert (see Adding records on page 197) Delete (see Deleting records on page 200) modify records add records or tables remove records Updating records The SQL statement UPDATE can be used to edit or update fields in one, many or all records in a table. These types of queries don’t produce results tables – you have to 477 SQL Guide issue a further SELECT statement to view the results. Here are some examples, using the Employee table on page 478 : UPDATE Employee SET Department="MARKETING"; Note that this replaces the Department field for every record. To limit the scope of the update, use the WHERE clause: UPDATE Employee SET Department="MARKETING" WHERE EmployeeID = 1005; This performs an update to a single record. In the case where EmployeeID is a primary key, this form of update is guaranteed to modify a single record (at most). To update several fields at once, list them after the SET keyword. For example, if an employee changed department and got married at the same time: UPDATE Employee SET Department="MARKETING", LastName = "Pallister" WHERE EmployeeID = 1005; Adding records To add a record to a table, use the INSERT command and specify at least some field information. For example, to add a new employee to the Employee table (see Employee table on page 478), we’d at least need to assign a new EmployeeID: INSERT INTO Employee (EmployeeID) VALUES (1006); To create a new record and fill in the field details at the same time, list the fields after the table, and each value in order after the VALUES keyword: INSERT INTO Employee (EmployeeID, FirstName, LastName, Department, Age, JoinDate) VALUES (1007, "Joel", "Coleman", "ADMIN", 49, #1/5/97#); Note that you surround each new value with quotes, unless the field is of a numeric type where the quotes are omitted or date where the hash "#" sign is used instead. Also note that both the field list and the values list are enclosed with brackets. Adding multiple records You can use the INSERT command to add many records from one table to another. For example, if there was a table called NewEmployee, with an identical structure (field list) to the Employee table on page 478 , you could add all the records from NewEmployee to Employee using the following statement: INSERT INTO Employee SELECT * FROM NewEmployee; If the two tables are not identical, or you only want to append certain fields, list the fields for both source and destination table. For example, you want to add records to the Employee table from an old Employee table containing different field names: 478 SQL Guide INSERT INTO Employee (EmployeeID, FirstName, LastName) SELECT (EmpID, Fname, Lname) FROM OldEmployee; Note the SELECT part of the INSERT statement follows all the rules for general SELECT statements described above. For example, you can specify which records to append using the WHERE clause: INSERT INTO Employee (EmployeeID, FirstName, LastName) SELECT (EmpID, Fname, Lname) FROM OldEmployee WHERE JoinDate < "1/1/80"; Creating tables from existing data The combination of SELECT and INTO can create new tables based on existing information. For example, to create a table of employees in the sales department from the Employee table on page 478 , use the following statement: SELECT * INTO Sales FROM Employee WHERE Department = "SALES"; To create a table with just names, use: SELECT Employee.FirstName, Employee.LastName INTO Sales FROM Employee WHERE Department = "SALES"; To create a complete copy of a table, just omit the WHERE clause: SELECT * INTO EmpCopy FROM Employee; Deleting records The DELTE command allows you to drop records, permanently, from a table. There’s no "undo" for this operation, so make sure you have adequate back-ups in case something goes wrong. A good safety measure is to use a SELECT statement first to see what records will be deleted. For example, using the Holiday table on page 479 , if we are no longer interested in holidays from the 1980s, we could check which records fell into this category by using: SELECT * FROM Holiday WHERE StartDate < "1/1/90"; Then delete them with: DELETE * FROM Holiday WHERE StartDate < "1/1/90"; To drop all the records from a table: DELETE * FROM Holiday; Please use with care! Employee table 479 SQL Guide The example employee data: EmployeeID 1001 1002 1003 1004 1005 FirstName Phil Chris Andreas Jim Julia LastName Roach England Smith Smith Allan Department TECH TECH SALES ADMIN SALES Age 24 36 25 30 25 EmployeeSales table The example employee sales data: SaleID 1 2 3 4 5 6 7 8 9 Employee John John Susan Richard John Richard Richard John Susan Region North North South North South North North South South Holiday table The example holiday data: HolidayID 1 2 3 4 EmployeeID 1002 1003 1002 1004 StartDate 1/2/97 21/2/97 24/2/97 1/3/97 DaysHoliday 5 1 3 4 JoinDate 23/1/87 1/10/86 18/6/90 10/3/92 26/9/91 480 Function reference Function reference Ability provides a range of over 200 built-in functions that you can use in formulas. A built-in function is a fast way to perform often-used calculations (such as totaling a group of numbers) or complicated calculations (like figuring the net present value or the internal rate of return). The functions in Ability are divided into the following main categories: Date functions on page 486 Financial functions on page 493 Trigonometric functions on page 527 Mathematical functions on page 513 Statistical functions on page 536 Remote functions on page 568 Text functions on page 557 Document functions on page 565 Lookup functions on page 529 Logical functions on page 512 Information functions on page 534 Using built-in functions Built-in functions are actually formulas, and must be preceded by an equals sign (=) on the formula bar. You can use the built-in functions to perform date, financial, logical, mathematical, trigonometric, statistical, and other calculations. You include a built-in function in a formula according to specific rules: First activate the cell in which you wish the formula result to go, and then type the formula as usual. You can use a built-in function as the entire formula, or as part of one. You must precede the function name with = to show Ability that it is a formula. You must type the function name exactly; you can’t abbreviate the name. The only exceptions are that you can enter AVG for the AVERAGE function, and STD for the STDEV function. The function name is always followed by an open parenthesis, then the required arguments, and then a close parenthesis. Arguments are the values Ability needs to perform the calculation. 481 Function reference For example, the TOTAL function requires as its argument a list of the values you want to add. The list can be numbers, cell addresses, cell ranges, or cell names. Here’s what you might type to find the total of some values in column C of a spreadsheet: =TOTAL(C1..C15) If a function doesn’t require an argument, you must still enter the parentheses. For example: =TODAY() You can use more than one function in a single formula. Use parentheses to group the various functions and control the order of calculation. For example, you can calculate the average of a row of numbers and display the absolute value of the result by using the formula: =ABS(AVG(A1..A8)) If Ability is unable to perform the calculation you request, you’ll see an error indicator displayed in the cell instead of the result of the formula. You can find a list of the error indicators, and an explanation of each, later in this section. Using the function dialog box to build formulas The quick way to add built-in functions to your formulas is by using the "Insert Function" dialog box. This saves you from having to remember all the different function names and the parameters each function requires. Suppose you want to display the month number of the current date. Follow these steps: 1. Double-click in an empty field to activate the Formula Editor 2. Click on the Insert Function button, or select the Function command from the Insert menu 3. Click on the Date category and then select the Month function. Click on the OK button 4. The cursor will now lie between the brackets inserted with the Month function. Click the Insert Function button again and select the Date category and then select the Today function. The formula should now read MONTH(TODAY()). 5. Click the Confirm button on the formula bar (or press Enter) to finish the formula. You can call on the "Insert Function" dialog box any time you are editing a formula. Select the Paste Arguments checkbox before clicking OK, to make Ability insert the formula with text entries for each of the function parameters. You can then replace them with the appropriate cell or range references. 482 Function reference Text arguments Some formulas require text as arguments. In such cases, the text can be supplied either directly into the function by surrounding the text by double quotes, or by cell reference, in which case quotes are not required. Some examples of functions that require text as arguments are: WPGET(document, fieldname), LEFT(text, num_chars) and UPPER(text) where the text arguments are highlighted in bold. For example, suppose you wanted to put the sentence "Have a nice day" into uppercase, use one of the following methods: UPPER("Have a nice day") UPPER(A1) where A1 contains the text: Have a nice day without any quotes. Text arguments containing quotes Suppose the text argument itself contains one or more quotes. For example, "Have a "nice" day". The quotes within the text need to be treated as a special case, so that Ability knows where an argument begins and ends. This is done by "escaping" the character, using the caret (^) as follows: UPPER("Have a ^"nice^" day") Note that the quotes surrounding the word nice are each preceded by the caret. The same thing can be achieved using a cell reference without the need for escaping characters: UPPER(A1) where A1 contains the text Have a "nice" day and the function will still work as expected. If your text contains a caret, you need to escape the caret itself, so: UPPER("The caret is denoted by the ^^ symbol") returns the text: THE CARET IS DENOTED BY THE ^ SYMBOL. Arrays Some formulas require one or more arrays. An array is the same as a list, except that an array may be two-dimensional. 483 Function reference When entering numeric constants directly, rather than by cell reference, into a formula that requires an array as an argument, the array must be bounded by a pair of "braces" {}. For example, the INTERCEPT function (see INTERCEPT on page 545) requires two arrays as arguments. These are usually entered as cell ranges: INTERCEPT(A1..A10, B1..B10) but can be entered using numbers directly: INTERCEPT({1, 2, 3, 4}, {1.1, 2.4, 2.9, 4.1}) Note that the arrays themselves are separated by a comma. Other formulas, for example MDETERM (see MDETERM on page 518), where the function performs a calculation on a matrix with an equal number of rows and columns, take as argument a single array. Note that each row in the array is separated by a semicolon: MDETERM({2, 5, -3; -1, 10, 1; 2, -3, 1}) You cannot, however, use a range reference as if it were composed of separate ranges or individual cell references. So, for example, the formulas MDETERM({A1..C1; A2..C2; A3..C3}) and MDETERM({A1, B1, C1; A2, B2, C2; A3, B3, C3}) are invalid and return an error message. Logical operators There are three logical operators you can use when building logical expressions. These are especially useful when you are using the IF function (see IF on page 512). The following table lists the logical operators in their natural order of evaluation. If you combine either AND or OR with relational operators in an expression, Ability evaluates the relational operators before evaluating the AND or OR. Operator & | ~ Meaning AND OR NOT For example: Formula Returns 2*3>7 FALSE (2 * 3 > 7) | (4 * 1 = 4) TRUE (2 * 3 = 6) & ~(4 - (4 * 1)) TRUE 484 Function reference IF (cond1 & cond2 & cond3, truevalue, falsevalue) If all conditions are met, truevalue Using the logical operators is equivalent to using the logical functions as follows: Formula Function Equivalent (2 * 3 > 7) | (4 * 1 = 4) OR((2 * 3 > 7), (4 * 1 = 4)) (2 * 3 = 6) & ~(4 - 4 * 1) AND((2 * 3 = 6), NOT(4 - 4 * 1)) IF (cond1 & cond2 & cond3, truevalue, falsevalue) IF(AND(cond1, cond2, cond3), truevalue, falsevalue) Relational operators You can use the following relational operators when building logical expressions. Operator < > = <= >= <> or ~= Meaning Less than Greater than Equal to Less than or equal to Greater than or equal to Not equal to. These are especially useful in combination with the IF(x, true, false) function (see IF(x, true, false) on page 512). If you combine relational operators with arithmetical operators in an expression, Ability performs the arithmetical operations before evaluating the relational operators. Arithmetical operators The following standard arithmetical operators are available in Ability. If arithmetical operators are used in conjunction with relational operators in an expression, then the arithmetical operations are calculated before the relational operators are evaluated. Operator + * / ^ Meaning add subtract multiply divide power e.g. 2 ^ 3 = 2 * 2 * 2 485 Function reference % (..) percentage e.g. 15% = 0.15 bracketed expressions e.g. (2 * 8 - 17) Note that the arithmetical operators are evaluated in the following order in an expression: (..) % ^ * and / + and For example, the expression: 1+2*3/4^5%-6 is calculated as if it were the bracketed expression: 1 + ((2 * 3) / (4 ^ (5%))) - 6 Ability will automatically strip excess brackets from a formula to display it in its simplest form. Priority of evaluation of operators The functions and operators in Ability are evaluated in an order of priority. For complex expressions you will not have to worry about this too much, since it is likely that you will have used brackets to control and make clear the way you want the expressions to be calculated. The priorities are as follows, starting with the highest: Operator / Function Built-in functions (..) % ^ * and / + and <, <=, >, >=, =, <> ~ & | Meaning Ability’s built-in functions bracketed expressions percentage power multiply and divide add and subtract relational operators NOT AND OR Cell error indicators If Ability cannot perform the calculation you request in a formula, it displays an error indicator in the cell instead of the result of the calculation. There are five different error messages: 486 Function reference Error #VALUE Explanation Formula cannot be evaluated. For example, the type of an argument does not match, as in SQRT(-16), or an argument is out of range, as in RIGHT("New York", -5). Wrong number of function arguments or improper function argument. For example, SIN(A1, A2, A3) or COS(A1..B10). The formula attempts to divide by zero. Bad reference argument in formula. For example, SUM(Sales), when there is no range called Sales. The formula makes a circular link. For example, when the formula =A1 + 5 is entered in A1. #FUNC #DIV0 #REF #CIRC Date functions Ability allows you to perform arithmetic with dates and times. To do this, it has a built-in numbering sequence, called a date/time code, that starts on 1st Jan 1900 and increases by one for each subsequent day. The date time code has a fractional component as well, to correspond to the hour, minute and second since midnight. A date/time code of 1.5 represents one-and-a-half days since the start of the year 1900, that is 12:00 noon on the 2nd Jan 1900. For example: Date/time code Date code 35484.47917 35484 Time code 0.47917 24th Feb 1997 11:30:00 AM 24th Feb 1997 i.e. 35484 days since 1/1/1900 11:30 AM i.e. 0.47917 * 24 hours since midnight A date code, then, is the integer part of a date/time code, and a time code is the fractional remainder. You can use Ability’s built-in date functions to generate a date/time code or to translate a date code into the weekday, day, month or year, and a time code into hours, minutes and seconds. To change how a date/time code is displayed, use the Number command from the Format menu and then select a date format. Here is a complete list of date functions in Ability: DATE on page 488 DATEVALUE on page 488 487 Function reference DAY on page 488 DAYS360 on page 488 EDATE on page 489 EOMONTH on page 489 HOUR on page 489 MINUTE on page 489 MONTH on page 490 NETWORKDAYS on page 490 NOW on page 490 SECOND on page 491 TIME on page 491 TIMEVALUE on page 491 TODAY on page 491 WEEKDAY on page 492 WEEKNUM on page 492 WORKDAY on page 492 YEAR on page 493 YEARFRAC on page 493 Year 2000 The short answer is that the change of millennium won't cause any problems for Ability. There are, however, two issues of which you should be aware: 1. Date format - in a spreadsheet showing both 20th and 21st Century dates, you should format all dates to display four-digit years to avoid confusion (see Formattting a date on page 108 for more details). 2. Date entry - you can enter dates using either two-digit years or four-digit years. Obviously with four-digit years, there's no ambiguity in century. Most people will be used to entering two-digit years, in which case Ability will assume you mean the 20th Century for all years later than and including 1972 and up to 1999, and the 21st Century for all other years entered as two digit. For example: Enter date as… 1/1/99 1/1/00 1/1/71 1/1/72 Ability understands you to mean… 1/1/1999 1/1/2000 1/1/2071 1/1/1972 488 Function reference DATE(year, month, day) The DATE function calculates a date code for the given year, month and day. For example, the formula: DATE(97, 8, 8) produces the date code 35649 or 8th August 1997, depending on your number format. DATEVALUE(date_text) The DATEVALUE function converts a date in the form of text to a date code. For example, the formula: DATEVALUE("8-Aug-1997") returns the date code 35649, as does DATEVALUE("8/8/97") If the year is left out, the date code will refer to the current year. DAY(date-code) The DAY function calculates the day of the month of the date-code you enter. For example, the formula DAY(35649) produces 8 as the day of the month, since the date code refers to 8th August 1997. DAYS360(start_date, end_date, method) The DAYS360 function calculates the number of days between a start_date and an end_date, based on a 12-month year of 30 days each. This is useful when accounts are calculated on the assumption of a 30-day month. The dates can be entered in either text or date code format. method is either European (TRUE or omitted) or American (FALSE). If TRUE or omitted then start-dates or end-dates that refer to the 31st day of a month become 30; if FALSE then a start-date of 31 becomes 30, but an end-date of 31 becomes the 1st of the next month when the start-date is less than 30, otherwise the end-date becomes 30. For example, the formula DAYS360("25/1/97", "31/7/97", TRUE) returns 185, whereas 489 Function reference DAYS360("25/1/97", "31/7/97", FALSE) returns 186. EDATE(start_date, months) The EDATE function calculates the date from a start_date plus or minus the number of months indicated. For example, the formula EDATE("12 December, 1997", -3) returns the date "12 September, 1997". EOMONTH(start_date, months) The EOMONTH function calculates the end of the month from a start_date plus or minus the number of months indicated. For example, the formula EOMONTH("4/4/96", 5) returns the date "30 September, 1996". HOUR(time_code) The HOUR function converts a time_code to an hour. The hour is calculated using the 24-hour clock as a basis, running from 0 at 12 PM (or 0:00 hours) to 23 at 11 PM (or 23:00 hours). 24-hour cycles correspond to a time code increment of 1. The argument for HOUR can be in either text or time code format. Examples: Formula HOUR(0.3) HOUR(1.5) HOUR(455.5) HOUR("9:30 PM") HOUR("21:30:45") Returns 7 12 21 21 21. MINUTE(time_code) The MINUTE function converts a time_code to a minute. The minute is calculated using 1 hour as a basis, running from 0 to 59. A time code increment of 1 corresponds to 1 day (or 1,440 minutes). The argument for MINUTE can be in either text or time code format. The following examples all returns 12, that is the 12th minute after the 13th hour of the day. 490 Function reference Formula MINUTE(0.55) MINUTE(1.55) MINUTE("13:12") Returns 12 12 12 MONTH(date-code) The MONTH function calculates the month from the date_code you enter. For example, MONTH(31062) returns month 1, since the date referred to by the date code is 16th January 1985. NETWORKDAYS(start_date, end_date, list_holidays) The NETWORKDAYS function calculates the number of whole work days between 2 dates, start_date and end_date, taking into account weekends and holidays. For example, the formula NETWORKDAYS ("1 Jan 1997", "31 Dec 1997") returns 261, that is a year’s worth of workdays, taking into account weekends. NETWORKDAYS ("1 Jan 97", "31 Jan 97", "14 Jan 97", "15 Jan 97") returns 21, that is the number of workdays in January with two days holiday. NOW( ) The NOW function calculates the current date and time from the date-time code as set by your computer’s built-in clock. For example: NOW() would return "July/2/1997 12:23 PM" if that was in fact the current time and date. If you choose to display the date-time code as a number, then the numbers before the decimal point represent the date, and the numbers after the decimal point represent the time. The time and date are taken directly from your computer’s operating system (e.g. Windows 95) - if they appear incorrect, you need to adjust the clock on your PC. 491 Function reference SECOND(time_code) The SECOND function calculates the number of seconds from 0 to 59 from a time_code. The function can take as argument either a time code or text. For example, the formula SECOND("22:14:10") returns 10, the number of seconds into the 14th minute of the 22nd hour. SECOND(0.01) returns 24, as a 100th of a day is 14 minutes and 24 seconds exactly. TIME(hour, minute, second) The TIME function calculates the time code from a supplied hour, minute and second. This enables you to display the time in a format of your choice. The arguments for TIME are entered according to the 24-hour clock. For example, the formula TIME(22,20,40) returns a time code of 0.93101852 and is equivalent 10:20:40 PM, which is the displayed default format. Note that the formulas TIME(0, 0, 0) and TIME(24, 0, 0) return time codes of 0 and 1 respectively. TIMEVALUE(time_text) The TIMEVALUE function calculates the time code based on a time represented as text. The time code is a decimal fraction ranging from 0 to 0.99999 (0:00:00 to 23:59:59). For example, the formula TIMEVALUE("20:15:30") returns the time code 0.84409722 when formatted as a plain number. TODAY( ) The TODAY function returns today's date. It actually calculates a date code for the current day and, by default, this is then formatted and displayed as a recognizable date. For example, the formula 492 Function reference TODAY() returns "July/2/1997" on that date. The date is taken directly from the operating system (e.g. Windows 98) - if it appears incorrect, you need to adjust the clock on your PC. WEEKDAY(date_code) The WEEKDAY function calculates the day of the week for the supplied date_code. Days of the week are numbered sequentially from Sunday (1) through to Saturday (7). For example, the formula WEEKDAY(35612) returns 4, as 2nd July 1997 occurs on a Wednesday. The WEEKDAY function can be useful in conjunction with the TODAY function, for example: WEEKDAY(TODAY()) returns the current day of the week. WEEKNUM(date_code, return_type) The WEEKNUM function uses date_code to calculate the week number in the year. return_type is a number that tells the function on what day of the week the week begins: 1 for Sunday; 2 for Monday. If this is omitted WEEKNUM uses 1. For example, if you want to know the week number for 1st November 1997, assuming the week begins on Monday, use the formula WEEKNUM("1 Nov 97", 2) which returns 44 (the 44th week of the year). WORKDAY(start_date, days, list_holidays) The WORKDAY function returns a date that is start_date plus or minus days - a specified number of workdays, taking into account weekends and holidays given by list_holidays. For example, the formula WORKDAY("February/1/97", 100, "March/28/97") returns the date "June/23/1997", a date 100 workdays after 1st Feb 97, given a holiday on 28th March. 493 Function reference YEAR(date-code) The YEAR function returns the year of the date code you enter. For example, the formula YEAR(31062) returns the year 1985. At the time this text was written, the following example returns 1997: YEAR(TODAY()) YEARFRAC(start_date, end_date, basis) The YEARFRAC function calculates the year fraction representing the number of whole days between start_date and end_date. basis is the type of day count basis to be used, as defined by the following table: Basis 0 1 2 3 4 or omitted Day count basis US 30/360 Actual/actual Actual/360 Actual/365 European 30/360 For example, if a period has start date, 5 August 1997, and end date, 1 November 1997, with a day count basis of 30/360, the formula YEARFRAC(35646, 35734, 4) returns a year fraction for the period of 0.2389 or 23.89%. Financial functions Here is a complete list of financial functions in Ability. You can use the built-in financial functions to calculate compound amounts and net present values of investments, and to perform other forecasting and analytical calculations. ACCRINTM on page 494 COMPOUND on page 495 COUPDAYBS on page 495 COUPDAYS on page 496 COUPDAYSNC on page 497 COUPNCD on page 497 494 Function reference COUPNUM on page 498 COUPPCD on page 498 DB on page 499 DISC on page 500 DOLLARDE on page 501 EFFECT on page 501 FV on page 502 INTRATE on page 502 IRR on page 503 MIRR on page 503 NOMINAL on page 504 NPV on page 505 PMT on page 506 PRICE on page 506 PRICEDISC on page 507 PRICEMAT on page 508 PV on page 509 RECEIVED on page 509 TAXBAND on page 510 TBILLPRICE on page 511 TBILLYIELD on page 511 ACCRINTM(issue, settlement, rate, par, basis) The ACCRINTM function calculates the accrued interest for a security that pays interest at maturity. The function arguments are: issue settlement rate par basis is the issue date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the annual coupon (interest) rate of the security is the par or base value of the security (if par is omitted, ACCRINTM uses $1000) is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 The function is calculated using the formula 495 Function reference ACCRINTM = par * rate * (A / D) where A is the number of days accrued, counted according to a monthly basis, and D is the annual year basis. ACCRINTM calculates non-compound (or simple) interest over the security’s period. For example, you have been issued with a coupon worth $10,000 on July 1st 1997 that comes to maturity on September 30th 1997; the coupon’s annual interest rate is 12%; and you want to know what the interest will be on September 30th when the coupon achieves maturity. Use the formula: ACCRINTM(35611, 35702, 0.12, 10000, 3) to get an interest payment of $299.18. COMPOUND (principal, interest, periods) The COMPOUND function calculates the compound amount, based on the principal and interest rate per period over the specified number of periods. The formula used is: principle * (1 + interest )periods For example, to find out the compound amount on a principal of $500, at an annual interest rate of 13.5%, over 12 years, use the formula: COMPOUND(500,13.5%,12) Ability calculates the compound amount and displays the result 2285.1796 or $2,285.18 (depending on the currency formatting of the cell – use the Number command from the Format menu to change it). COUPDAYBS(settlement, maturity, frequency, basis) The COUPDAYBS function calculates the number of days from the beginning of the coupon period to the settlement date. The function arguments are: settlement maturity frequency basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the number of coupon payments per year (1 = annually; 2 = biannually; 4 = quarterly) is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 496 Function reference 1 2 3 4 or omitted Actual/actual Actual/360 Actual/365 European 30/360 For example, you have been issued with a bond that comes to maturity on August 31st 1998, the settlement date is July 15th 1997, the coupon payments are quarterly, and the day count basis is actual/actual. Using the formula COUPDAYBS(35625, 36037, 4, 1) returns 45 as the number of days from the beginning of the coupon period to the settlement date. COUPDAYS(settlement, maturity, frequency, basis) The COUPDAYS function calculates the number of days in the coupon period in which the settlement date occurs. The function arguments are: settlement maturity frequency basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the number of coupon payments per year (1 = annually; 2 = biannually; 4 = quarterly) is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 For example, you have been issued with a bond that comes to maturity on August 31st 1998, the settlement date is July 15th 1997, the coupon payments are quarterly, and the day count basis is actual/actual. Using the formula COUPDAYS(35625, 36037, 4, 1) returns 92 as the number of days in the coupon period in which the settlement date occurs. 497 Function reference COUPDAYSNC(settlement, maturity, frequency, basis) The COUPDAYSNC function calculates the number of days from the settlement date to the next coupon date. The function arguments are: settlement maturity frequency basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the number of coupon payments per year (1 = annually; 2 = biannually; 4 = quarterly) is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 For example, you have been issued with a bond that comes to maturity on August 31st 1998, the settlement date is July 15th 1997, the coupon payments are quarterly, and the day count basis is actual/actual. Using the formula COUPDAYSNC(35625, 36037, 4, 1) returns 47 as the number of days from the settlement date to the next coupon date. COUPNCD(settlement, maturity, frequency, basis) The COUPNCD function calculates the next coupon date after the settlement date. The function arguments are: settlement maturity frequency basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the number of coupon payments per year (1 = annually; 2 = biannually; 4 = quarterly) is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 498 Function reference 3 4 or omitted Actual/365 European 30/360 For example, you have been issued with a bond that comes to maturity on August 31st 1998, the settlement date is July 15th 1997, the coupon payments are quarterly, and the day count basis is actual/actual. Using the formula COUPNCD(35625, 36037, 4, 1) returns August 31st 1997 or 35672 as the next coupon date after the settlement date. COUPNUM(settlement, maturity, frequency, basis) The COUPNUM function calculates the number of coupons payable between the settlement date and the maturity date. The function arguments are: settlement maturity frequency basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the number of coupon payments per year (1 = annually; 2 = biannually; 4 = quarterly) is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 For example, you have been issued with a bond that comes to maturity on August 31st 1998, the settlement date is July 15th 1997, the coupon payments are quarterly, and the day count basis is actual/actual. Using the formula COUPNUM(35625, 36037, 4, 1) returns 5 as the number of coupons payable between the settlement date and the maturity date. COUPPCD(settlement, maturity, frequency, basis) The COUPPCD function calculates the previous coupon date before the settlement date. The function arguments are: settlement is the settlement date of the security, expressed as a date code maturity frequency basis 499 Function reference is the maturity date of the security, expressed as a date code is the number of coupon payments per year (1 = annually; 2 = biannually; 4 = quarterly) is the type of day count basis to use, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 For example, you have been issued with a bond that comes to maturity on August 31st 1998, the settlement date is July 15th 1997, the coupon payments are quarterly, and the day count basis is actual/actual. Using the formula COUPPCD(35625, 36037, 4, 1) returns May 31st 1997 or 35580 as the coupon date before the settlement date. DB(cost, salvage, life, period, month) The DB function calculates the depreciation of an asset for a specified period using the fixed-declining balance method. DB works out a fixed rate which it then uses to calculate depreciation. The function arguments are: cost salvage life period month is the initial value of the asset is the value at the end of the depreciation is the number of years over which the asset depreciates is the specified period for which the depreciation is sought is the number of months between the purchase date and the end of the first period (12 if omitted) For all periods except the first and last, DB calculates the depreciation per period using the equation: (cost - total depreciation from previous periods) * rate where rate is given by: rate = 1 − (salvage cost ) 1 life For depreciation over the first period DB uses the equation: 500 Function reference cost * rate * (month/12) For depreciation over the last period DB uses the equation: [(cost - total depreciation from previous periods) * rate * (12 - month)] / 12 For example, a new yacht is purchased for $1,000,000. Its active life is 20 years and its salvage value at the end of this time is $50,000. The purchase was made at the end of May and the buyer, who attends a boat show at the end of every October, wishes to know its depreciation over the periods between boat shows for the first 4 shows after the initial purchase. The first period is of 5 months (from May to October) and the next three periods are whole years. The depreciation for the first 4 periods is calculated using these formulas: DB(1000000, 50000, 20, 1, 5) returns a depreciation of $57,917 DB(1000000, 50000, 20, 2, 5) returns a depreciation of $130,950 DB(1000000, 50000, 20, 3, 5) returns a depreciation of $112,748 DB(1000000, 50000, 20, 4, 5) returns a depreciation of $97,076 Note: A 20-year span contains at most 21 periods, and therefore setting period to greater than 21 will result in DB returning a #VALUE error message. DISC(settlement, maturity, par, redemption, basis) The DISC function calculates the discount rate for a security. The function arguments are: settlement maturity par redemption basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the price of the security per $100 face value is the amount received at maturity per $100 face value is the type of day count basis to use, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 DISC is calculated using the formula: [(redemption - par)/redemption] * B/DSM 501 Function reference where B is the number of days in a year according to the basis used and DSM is the number of days between settlement and maturity. For example, you have been issued with a bond that comes to maturity on August 31st 1998, the settlement date is July 15th 1997, the price of the security is $95 per $100 face value, the redemption value is $100, and the day count basis is actual/actual. Using the formula DISC(35625, 36037, 95, 100, 1) returns a bond discount rate of 4.429 %. DOLLARDE(fractional_dollar, fraction) The DOLLARDE function converts a dollar price expressed as a fraction, into a dollar price expressed as a decimal number. For example, if a dollar value is expressed in 1/16ths of a dollar, the value 7/16 is entered as 0.07 in fractional_dollar and the integer 16 is entered in fraction, the formula: DOLLARDE(0.07, 16) returns 0.438. If the fraction is greater than 1/10th only one place is needed after the point. For example, 3/8ths of a dollar is entered using the formula: DOLLARDE(0.3, 8) which returns 0.375. EFFECT(nominal_rate, npery) The EFFECT function calculates the effective annual interest rate. This uses the given nominal annual interest rate, nominal_rate, and the number of periods per year where compound interest is applied, npery. EFFECT uses the formula: (1 + (nominal_rate npery ))npery − 1 For example, the formula: EFFECT(7 %, 4) returns an effective annual interest rate of 7.19% or 0.0719, which is the overall interest rate over a year when the interest has been calculated quarterly at 7/4% and compounded. EFFECT is the inverse of NOMINAL (see NOMINAL on page 504). 502 Function reference FV(payment, rate, periods) The FV function calculates the future value of an annuity, based on the payments per period, interest rate per period, and the number of periods for which you want the value calculated. The formula used is: ( ) payment * (1 + rate )periods − 1 rate Example 1: The future value of an annuity with annual $500 payments at an interest rate of 13.5% per annum, compounded over five years, is calculated using the formula: FV(500, 13.5%, 5) Ability calculates the future value and displays 3272.44 or $3,272.44 (depending on the currency formatting of the cell – use the Number command from the Format menu to change it). Example 2: Each month you deposit $50 at a bank. Interest accrues at an annual rate of 13.5% but is applied monthly. To calculate the value of the account after six months, use FV in conjunction with NOMINAL (see NOMINAL on page 504) as follows: FV(50, NOMINAL(13.5%, 12)/12, 6) This returns a value of $308.07. INTRATE(settlement, maturity, investment, redemption, basis) The INTRATE function calculates the interest rate for a fully invested security. The function arguments are: settlement maturity investment redemption basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the amount invested in the security is the amount received at maturity is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 INTRATE is calculated using the formula: 503 Function reference [(redemption - investment)/investment] * B/DIM where B is the number of days in a year according to the basis used and DIM is the number of days from settlement to maturity. For example, you have been issued with a bond that comes to maturity on August 31st 1998, the settlement date is July 15th 1997, the amount invested in the security is $10,000, the redemption value is $10,100, and the day count basis is actual/actual. Using the formula INTRATE(35625, 36037, 10000, 10450, 1) returns an interest rate of 3.98665% for a fully invested security. IRR(guess, initial, list) The IRR function calculates the internal rate of return of a series of cash flows, starting with a guess at the correct answer. The internal rate of return is the effective interest rate such that the net present value of the cash flow is zero. This function is the inverse of the net present value function. You should enter the initial cash flow, initial, as a negative number to indicate that it is money received, rather than money paid out. For example, to find the internal rate of return of a series of cash flows that start with a negative flow of $800, followed by payments of $400, $400, $200, and $100 at even intervals, use the following formula: IRR(0.15, -800, {400, 400, 200, 100}) Ability calculates the interest rate per period and displays 0.18 or 17.9652% (depending on the percent formatting of the cell – use the Number command from the Format menu to change it). In this example, the result shows that if you borrow $800 and make annual payments of $400, $400, $200 and $100, the underlying interest rate charged to you would be 17.9652%. MIRR(finance_rate, reinvest_rate, list) The MIRR function calculates a modified internal rate of return where positive cashflows earn interest at a reinvest_rate and negative cash flows are financed at a finance_rate. The cashflows are contained in list and will usually begin with a negative figure, indicating that you start with a loan. MIRR is calculated as follows: 504 Function reference ⎡ ⎢ ⎢ ⎣ ∑ 1 (+ ve cashflows) + net interest ⎤ n−1 ⎥ −1 ⎥ (-ve cashflows) ⎦ ∑ where net interest is the return on the reinvested positive cash flows, less the interest accrued on the negative cash flows. For example, suppose you were loaned $1000.00 to invest in a business venture and you pay interest on this loan at 15%. You predict that at the end of each of the first four years the business will generate the following cash flow: $500, $700, $700, $900. Further suppose that you reinvest the earnings at a fixed rate of 10% and this will compound over the four years. At the end of the first year, you’ll receive $500, which will be reinvested but you’ll also have to take into account the interest on the loan, which will be $150 at this time. Over the years, net interest will accumulate as follows: Period (n) Cash flow Interest1 Interest2 Interest3 Interest4 1 2 3 4 5 -1000 500 700 700 900 -150.00 -172.50 50.00 -198.36 55.00 70.00 -228.13 60.50 77.00 70.00 ∑ Interest -748.99 165.50 147.00 70.00 0.00 -366.49 After four years, the original $1000 has generated earnings of 500+700+700+900=$2800 less net interest of $366.49 = $2433.51. This can be expressed as a rate of return, over four years, of 143.35% or [(1+ 143.35%)^(1/4) -1] = 24.9% per annum. The same result can be obtained using the MIRR functions as follows: MIRR(15%, 10%, -1000, 500, 700, 700, 900) which Ability calculates as 24.90%. NOMINAL(effect_rate, npery) The NOMINAL function calculates the annual nominal interest rate. This uses the given effective annual interest rate, effect_rate, and the number of periods per year where compound interest is applied, npery. NOMINAL uses the formula: ( ) npery * (effect _ rate + 1)1 npery − 1 For example, the bank quotes an annual interest of 7.19% and calculates interest quarterly, which is then compounded over the year. What is actual interest rate in a given quarter? Use the formula: 505 Function reference NOMINAL(7.19%, 4)/4 which returns a rate of 1.75%. NOMINAL is the inverse of EFFECT (see EFFECT on page 501). NPV(rate, list) The NPV function calculates the net present value of a set of future cash flows. Ability assumes that the first cash flow occurs at the end of the first period, which means the initial payment is usually not included. (Compare this with the IRR function – see IRR on page 503) Ability calculates the net present value according to the following formula: list 3 list 1 list 2 list n + + + ... + 1 + rate (1 + rate )2 (1 + rate )3 (1 + rate )n n is the number of items in the list and listi is the ith element in the list. In the function, enter rate as the effective interest rate per period. Enter list as the value of the payments in the order in which they appear, one payment per period. If you enter list as a range that includes several rows and columns, Ability reads the range from left to right and top to bottom. If blank cells are in the range, Ability skips them when calculating the net present value. For example, to find the net present value of cash flows of $400, $300, $300, and $200 and assuming inflation will run at 13.25%, type the following formula: NPV(13.25%,400,300,300,200) Ability calculates the net present value and displays 915.23 or $915.23 (depending on the currency formatting of the cell – use the Number command from the Format menu to change it). This shows that the real value of these future payments is much less than the sum of the payments after inflation has eroded the cash flow. You can also use NPV with the COMPOUND function (see COMPOUND on page 495) to calculate the end value of a series of payments, reinvested over a period of time. Suppose you know that you’ll receive payments of $400, $300, $300, and $200 over the next four years, and that you’ll reinvest these payments in an account bearing interest of 12% per annum, compounded over the four years. After the four years, how much will be in the account? This is given using the following formula: COMPOUND(NPV(13.25%, 400, 300, 300, 200), 13.25%, 4) Ability calculates the answer as $1505.51. 506 Function reference PMT(principal, rate, periods) The PMT function calculates the amount of payment required per period to pay off a loan or mortgage at the given principal, interest rate per period, and number of periods. Ability calculates the payment based on the following formula: principle * rate 1 − (1 + rate )−periods Often the payment amounts end up as fractional numbers. In such cases, you can include the ROUND function (see ROUND on page 521) to calculate the payments as even amounts. To find the payments required to pay off a $17,000 loan, at 14.25% interest per annum, over a period of 3 years, use the following formula: PMT(17000, 14.25%, 3) Ability calculates the payments and displays 7353.17 or $7,353.17 per year (depending on the currency formatting of the cell – use the Number command from the Format menu to change it). To find the payments required per period when the interest is compounded monthly, use PMT in conjunction with EFFECT (see EFFECT on page 501) as follows: PMT(17000, EFFECT(14.25%, 12) / 12, 36) Ability calculates the monthly payments at $591.13. PRICE(settlement, maturity, rate, yield, redemption, frequency, basis) The PRICE function calculates the price per $100 face value of a security that pays periodic interest. The function arguments are: settlement maturity rate yield redemption frequency basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the annual coupon rate of the security is the annual yield of the security is the redemption value of the security per $100 face value is the number of coupon payments per year (1 = annually; 2 = biannually; 4 = quarterly) is the type of day count basis used, where basis is one of the following: 507 Function reference Basis 0 1 2 3 4 or omitted Day count basis US 30/360 Actual/actual Actual/360 Actual/365 European 30/360 For example, if a bond has settlement date 15/July/1992, maturity date 15/September/1999, annual coupon rate of 6.50%, annual yield of 7.25%, redemption value of $100, two coupon payments per year, and is calculated according to a year basis of US 30/360, then use the formula PRICE(33799, 36417, 6.50%, 7.25%, 100, 2, 0). This returns a bond price of $95.852. PRICEDISC(settlement, maturity, discount, redemption, basis) The PRICEDISC function calculates the price per $100 face value of a discounted security. The function arguments are: settlement maturity discount redemption basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the discount rate of the security is the redemption value of the security per $100 face value is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 The formula used is redemption - (discount * redemption * DSM/B) in which B is the number of days in a year according to the year basis used and DSM is the number of days from settlement to maturity. 508 Function reference For example, if a bond has settlement date 15th July, 1997, maturity date 31st October, 1997, discount rate of 4.9%, and redemption value $100, with a year basis of actual/365, then the formula PRICEDISC(35625, 35733, 0.049, 100, 3) returns a price of $98.55. PRICEMAT(settlement, maturity, issue, rate, yield, basis) The PRICEMAT function calculates the price per $100 face value of a security that pays interest at maturity. The function arguments are: settlement maturity issue rate yield basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the issue date of the security, expressed as a date code is the interest rate of the security at date of issue is the annual yield of the security is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 The formula used is [100 + (DIM/B * rate * 100)] / [1 + (DSM/B * yield)] - (A/B * rate * 100) where B DSM DIM A is the number of days in a year according to year basis used is the number of days from settlement to maturity is the number of days from issue to maturity is the number of days from issue to settlement. For example, if a bond has settlement date 15th July, 1997, maturity date 31st October, 1997, and issue date 1st October, 1996, with an interest rate of 4.9% at date of issue and an annual yield of 5.4%, and is calculated according to a 30/360 year basis, then the formula 509 Function reference PRICEMAT(35625, 35733, 35338, 0.049, 0.054, 0) returns a price of $99.79. PV(payment, rate, periods) The PV function calculates the present value of an annuity, based on the amount of the payment, the interest rate per period, and the number of periods. Ability computes present value using the following formula: ( payment * 1 − (1 + rate )−periods rate ) For example, to find the present value of an annuity with payments of $400, at 12.5% interest per period, after 4 periods, type: PV(400,12.5%,4) Ability calculates the present value and displays 1202.26 or $1,202.26 (depending on the currency formatting of the cell – use the Number command from the Format menu to change it). RECEIVED(settlement, maturity, investment, discount, basis) The RECEIVED function calculates the amount received at maturity for a fully invested security. The function arguments are: settlement maturity investment discount basis is the settlement date of the security, expressed as a date code is the maturity date of the security, expressed as a date code is the amount invested in the security is the discount rate of the security is the type of day count basis used, where basis is one of the following: Basis Day count basis 0 US 30/360 1 Actual/actual 2 Actual/360 3 Actual/365 4 or omitted European 30/360 RECEIVED is calculated using the formula: investment / [1 - (discount * DIM/B)] 510 Function reference Where B is the number of days in a year according to the basis used and DIM is the number of days from issue to maturity. For example, you have been issued with a bond that comes to maturity on August 31st 1998, the settlement (issue) date is July 15th 1997, the amount invested in the security is $10,000, the discount rate is 4.2%, and the day count basis is actual/actual. Using the formula RECEIVED(35625, 36037, 10000, 0.042, 1) returns a total amount received at maturity of $10,497.68. TAXBAND(income, taxrates, taxbands) The TAXBAND function calculates the total tax payable on a given income subject to a series of banded tax rates. taxrates and taxbands are both lists and must be of equal length. The function is calculated summing the tax rate and band product over the number of items in each list: n ∑ [MAX(MIN(income − taxband , taxband i i+1 − taxbandi ),0 ) * taxrate i ] i=1 where n is the number of items in each list and taxband[n+1] is defined as being equal to income. Example 1: suppose you earned £28,800 in the tax year ending 1996 and had a tax-free personal allowance of £3,525. The tax rates for that year were 20% on the first £3,200 of taxable income, 25% up to £24,300 and 40% on the remainder. You would use the TAXBAND function to calculate tax due as follows: TAXBAND(28800, {20%, 25%, 40%}, {3525, 6725, 27825}) = 6305 Note that the personal allowance needs to be added back onto the taxbands in this example because the supplied figures are net of this amount. Example 2: suppose you want to subtract tax-free earnings before calculating tax due. You can use TAXBAND as follows: TAXBAND(28800-3525, {20%, 25%, 40%}, {0, 3200, 24300}) = 6305 Some governments publish tax bands in this format. Example 3: suppose a proportion of your income of £28,800 was taxed at source to contribute towards health care. The tax was at a flat rate of 7.3% on all income over £6,640 up to a ceiling of £22,880. The tax can be calculated as follows: TAXBAND(28800, {7.3%, 0%}, {6640, 22880}) = 1185.52 511 Function reference TBILLPRICE(settlement, maturity, discount) The TBILLPRICE function calculates the price per $100 face value for a Treasury bill. The function arguments are: settlement maturity discount is the settlement date of the Treasury bill, expressed as a date code is the maturity date of the Treasury bill, expressed as a date code is the discount rate of the Treasury bill TBILLPRICE is calculated using the formula: 100 * [1 - (discount * DSM/360)] where DSM is the number of days from the settlement to the maturity date. The maturity date should not be more than 1 calendar year after the settlement date, otherwise an error message is returned. For example, a Treasury bill has settlement date 10th May, 1997 and maturity date 1st November, 1997. The discount rate is 7%. The formula TBILLPRICE(35559, 35734, 0.07) returns a price of $96.60. TBILLYIELD(settlement, maturity, par) The TBILLYIELD function calculates the yield for a Treasury bill. The yield is a measure of the value per dollar spent when the bill reaches maturity, expressed as an annual interest rate. The function arguments are: settlement maturity par is the settlement date of the Treasury bill, expressed as a date code is the maturity date of the Treasury bill, expressed as a date code is the price per $100 face value of the Treasury bill TBILLYIELD is calculated using the formula: [(100 - par)/par] * 360/DSM] where DSM is the number of days from the settlement to the maturity date. The maturity date should not be more than 1 calendar year after the settlement date, otherwise an error message is returned. 512 Function reference For example, a Treasury bill has settlement date 10th May, 1997 and maturity date 1st November, 1997. The price per $100 of the Treasury bill is $95.75. The formula TBILLYIELD(35559, 35734, 95.75) returns a yield of 9.13%. Logical functions You can use the built-in logical functions to test for specific conditions in a calculation. Logical functions generally either return an answer of TRUE or FALSE or are based on a condition that evaluates to TRUE or FALSE. The value FALSE equates to zero and TRUE as 1 (or anything non-zero). Here is a list of logical functions in Ability: AND on page 512 IF on page 512 NOT on page 513 OR on page 513 AND(list of logical conditions) The AND function returns the logical AND of its arguments. The arguments must be logical conditions that can take the value TRUE or FALSE. Examples AND(TRUE, TRUE) AND(TRUE, FALSE) AND(6 < 10, 40 > 20) returns TRUE returns FALSE returns TRUE IF(x, true, false) The IF function calculates x and evaluates it. If x is TRUE (or not zero), the true value is displayed; if x is FALSE (or zero), the false value is displayed. For example: IF(m > n, m, n) returns the larger value of m and n. You can use logical and relational operators in an IF function. For example: 513 Function reference IF (A2 > 5 & A2 < 7, "A2 is OK", "A2 is not OK") If the value in the cell A2 is greater than 5 and less than 7, Ability displays the true value "A2 is OK"; otherwise Ability displays the false value "A2 is not OK". NOT(logical) The NOT function returns the logical NOT of its argument. The argument should have a logical value of TRUE or FALSE, which NOT then negates to give the opposite value. For example: NOT(TRUE) NOT(2+2=5) returns FALSE returns TRUE OR(list of logical conditions) The OR function returns the logical OR of its arguments. The arguments must be logical conditions that can take the value TRUE or FALSE. For example: OR(FALSE, FALSE) OR(TRUE, FALSE) OR(2*3 < 7, 100 = 10) returns FALSE returns TRUE returns TRUE Mathematical functions You use the built-in mathematical functions to perform arithmetic and other calculations. With these functions you can also work with angles, logarithms and factorials. Here is a complete list of mathematical functions in Ability: ABS on page 514 ACOSH on page 515 ACOTANH on page 515 ASINH on page 515 ATANH on page 515 COSH on page 515 COTANH on page 515 DIVIDE on page 515 EVEN on page 515 EXP on page 516 FACT on page 516 FACTDOUBLE on page 517 GCD on page 517 INT on page 517 514 Function reference LCM on page 517 LN on page 518 LOG on page 518 LOG10 on page 518 MDETERM on page 518 MINUS on page 519 MOD on page 519 MULTINOMIAL on page 519 ODD on page 520 PLUS on page 520 POWER on page 520 RAND on page 520 RANDBETWEEN on page 521 ROUND on page 521 ROUNDDOWN on page 521 ROUNDUP on page 522 SERIESSUM on page 522 SIGN on page 523 SINH on page 523 SQR on page 523 SQRT on page 523 SUM on page 524 SUMIF on page 524 SUMSQ on page 524 SUMTIMES on page 524 SUMX2MY2 on page 525 SUMX2PY2 on page 525 SUMXMY2 on page 525 SUMXPY2 on page 526 TANH on page 526 TIMES on page 526 TOTAL on page 526 ABS(x) The ABS function calculates the absolute value (i.e. it removes the negation sign, if present) of a single number, x. You can also enter x as a single cell address or cell name. For example: ABS(31) ABS(-31) ABS(B6) returns 31 returns 31 returns positive value of the cell B6 515 Function reference ACOSH(x) The ACOSH function calculates the inverse hyperbolic cosine of a number. Number must be greater than or equal to 1. ACOTANH(x) The ACOTANH function calculates the inverse hyperbolic cotangent of a number. ASINH(x) The ASINH function calculates the inverse hyperbolic sine of a number. ATANH(x) The ATANH function calculates the inverse hyperbolic tangent of a number. Number must be between -1 and 1 ( excluding -1 and 1). COSH(x) The COSH function calculates the hyperbolic cosine of a number, using the formula: COSH(x) = (EXP(x) + EXP(-x)) / 2 COTANH(x) The COTANH function calculates the hyperbolic cotangent of a number. DIVIDE(list) The DIVIDE function calculates the division of its arguments. For example: DIVIDE(10, 2, 4) returns the value 1.25, having divided 10 by 2, and the result of this by 4. The list can also be a range in a spreadsheet, as folllows: DIVIDE(A1..A10). EVEN(x) The EVEN function rounds a number up to the nearest even integer. The number will be rounded up away from 0, whether it is + or -. For example: 516 Function reference EVEN(3) EVEN(-3) returns 4 returns -4. EXP(x) The EXP function calculates the value of e to the power x, according to the following: ex where e is the base of the natural logarithms and is approximately equal to 2.718282. FACT(n) The FACT function calculates the factorial of a number n where n is traditionally a positive integer. The factorial of n is defined as: n * (n-1) * (n-2) *…….* 4 * 3 * 2 * 1 with the factorial of n = 0 being defined as 1. For example: FACT(4) returns 24 as calculated by 4 * 3 * 2 * 1. FACT can be used to determine the probability of ordered events. For example, the probability of drawing 6 balls, numbered 1 through 6, in the precise sequence 1, 2, 3, 4, 5, 6 is given by the formula: 1/FACT(6) which returns 0.001389. FACT can be used with numbers having a fractional part. The factorial of x where x is not an integer, is calculated using the formula: x * (x - 1) * (x - 2) *…..* (x - n) where 2 > (x - n) > 1. The factorial of any number 0 < x < 1 is defined as 1. For example: FACT(0.5) returns 1 FACT(1.5) returns 1.5 FACT(3.5) returns 3.5 * 2.5 * 1.5 = 13.125 Factorial functions do not work with negative numbers, so if you enter a negative number Ability displays #VALUE in the cell. 517 Function reference Factorial calculations can create very large numbers. The factorial of any number bigger than 170 will cause overflow errors and #VALUE will be returned. FACTDOUBLE(n) The FACTDOUBLE function calculates the double factorial of a number n. It takes into account whether n is even or odd, and then carries out a factorial calculation using either the even or the odd numbers up to n. For example: FACTDOUBLE(5) returns 15, that is 5 * 3 * 1. FACTDOUBLE(6) returns 48, that is 6 * 4 * 2. FACTDOUBLE also works with fractional numbers (see FACT on page 516). For example: FACTDOUBLE(5.5) returns 28.875, that is 5.5 * 3.5 * 1.5. FACTDOUBLE(6.5) returns 73.125, that is 6.5 x 4.5 x 2.5. GCD(list) The GCD function calculates the greatest common divisor of a list of integers. The greatest common divisor is the largest integer that exactly divides all the integers in a list. For example: GCD(24, 36) returns 12 GCD(24, 36, 72) returns 12 GCD(2, 7, 9) returns 1 INT(x) The INT function returns the integer part of the value x. For example: INT(3.12543) returns 3. LCM(list) The LCM function calculates the least common multiple of a list of numbers. For example: 518 Function reference LCM(3,7,21) returns 21, which is the smallest number that is a common multiple of 3, 7 and 21. LN(x) The LN function calculates the natural logarithm of the number x, for any positive number. Natural logarithms are based on the constant e, which is approximately 2.718281828. Note that LN is the inverse of the EXP function (see EXP on page 516). LOG(x, b) The LOG function calculates the logarithm of the positive number x to a specified base b. If b is omitted, LOG uses 10 instead. For example: LOG(8, 2) returns the value 3, since 2 raised to the power 3 is 8. LOG(1e6) returns 6, since 10 raised to the power 6 is 1,000,000 i.e. 1E6. LOG10(x) The LOG10 function calculates the logarithm of the number x to base 10, for any positive number. For example: LOG(80) returns 1.9031 since 10 raised to the power 1.9031 is approximately 80. MDETERM(array) The MDETERM function calculates the matrix determinant of an array. Array must be numeric, have an equal number of rows and columns, and not contain any empty cells. If these conditions are not met MDETERM will return a #VALUE error message. Array can be given as numeric constants, for example MDETERM({3,7,9; 1,7,2; 4,3,2}) or call upon a range of cells containing numeric values: 519 Function reference MDETERM(A1..C3) MDETERM can be used to solve systems of linear equations. For example, the system of linear equations 2x -y + 2z = 2 x + 10y - 3z = 5 -x + y + z = -3 can be arranged so that the coefficients appear in the cell range A1..D3 as follows: row/c ol 1 2 3 A B 2 1 -1 C -1 10 -1 D 2 -3 1 2 5 -3 The system of equations can then be solved using the following formulas: x is given by =MDETERM({2, 5, -3; -1, 10, 1; 2, -3, 1}) / MDETERM(A1..C3) = 2 y is given by =MDETERM({2, 1, -1; 2, 5, -3; 2, -3, 1}) / MDETERM(A1..C3) = 0 z is given by =MDETERM({2, 1, -1; -1, 10, 1; 2, 5, -3}) / MDETERM(A1..C3) = -1 MINUS(list) The MINUS function calculates a successive subtraction from the first item of list, all other items of list. For example: MINUS(10, 3, 4) returns 3, that is 10 - 3 - 4 MINUS(10, 3, -4) returns 11, that is 10 - 3 - (-4) MOD(x, y) The MOD function calculates the remainder of x divided by y according to the following formula: MOD(x, y) = x - (y * INT(x / y)) You can calculate the fractional part of a number x using: MOD(x,1) MULTINOMIAL(list) The MULTINOMIAL function calculates the multinomial of a list of numbers. The function is calculated using according to the following: 520 Function reference MULTINOMIAL (a, b, c) = FACT(a + b +c) / [FACT(a)*FACT(b)*FACT(c)] For example: MULTINOMIAL(1, 2, 3) returns 60. ODD(x) The ODD function rounds a number up to the nearest odd integer. For example: ODD(4) returns 5 ODD(1.5) returns 3 ODD(-2) returns –3 PLUS(list) The PLUS function calculates the sum of its arguments. For example: PLUS(3, 4, 6) returns 13, that is 3+4+6 PLUS(3, 4, -6) returns 1, that is 3+4+(-6) POWER(list) The POWER function calculates the result of a number raised to a power. The first argument place in the list contains the number and any places after this contain the power or powers. For example: POWER(2, 3) returns 8, that is 2^3 POWER(2, 3, 2) returns 64, that is (2^3)^2 RAND(x) The RAND function generates a random number from 0 to x (including 0 but excluding x). Each time you enter a RAND function, Ability displays a new random number. For example: RAND(100) 521 Function reference generates a number from 0 to 100 (excluding 100). Note that in Spreadsheet, you can recalculate RAND using the Calculate Now command from the Tools menu. RANDBETWEEN(bottom, top) The RANDBETWEEN function calculates a random number between the numbers you specify as function arguments. Each time you enter a RANDBETWEEN function, Ability displays a new random number. For example, RANDBETWEEN(100, 200) generates a number from 100 to 200 (excluding 200). Note that in Spreadsheet, you can recalculate RANDBETWEEN using the Calculate Now command from the Tools menu. ROUND(x, y) The ROUND function calculates the value of x rounded to the nearest y. For example: ROUND(2.8234, 1) returns 3 (round to nearest whole number) ROUND(2.8234, 0.01) returns 2.82 (round to nearest hundredth) ROUND(2678, 100) returns 2700 (round to nearest hundred) ROUNDDOWN(number, num_digits) The ROUNDDOWN function rounds a number down, that is towards 0. num_digits is a positive or negative integer which specifies the number of digits to which you want to round down. num_digit set to a positive integer will round down to the right of the decimal point (the fractional part); set to a negative integer will round down to the left of the decimal point (the whole number part). For example: ROUNDDOWN(2.8234, 1) returns 2.8 ROUNDDOWN(2.8234, 0) returns 2 ROUNDDOWN(2678, -2) returns 2600 522 Function reference ROUNDUP(number, num_digits) The ROUNDUP function rounds a number up, away from 0. num_digits is a positive or negative integer which specifies the number of digits to which you want to round up. num_digit set to a positive integer will round up to the right of the decimal point (the fractional part); set to a negative integer will round up to the left of the decimal point (the whole number part). For example: ROUNDUP(2.8234, 1) returns 2.9 ROUNDUP(2.8234, 0) returns 3 ROUNDUP(2678, -2) returns 2700 SERIESSUM(x, n, m, coefficients) The SERIESSUM function calculates the sum of a power series: a 1x n + a 2 x n+m + a 3 x n+ 2m + .... + a j x n+ ( j−1)m where coefficients is the list denoted by a1, a2, a3 …. aj. Power series expansions are useful in approximating many functions. The function arguments are: is a variable that contains the input value to x the power series is the initial power to which x is to be raised n is the step by which n is to be increased for m each term of the series is a set of coefficients by which the coefficients successive powers of x are to be multiplied. The number of coefficients determines the number of terms in the power series. For example, a power series can be used to approximate the function SIN(x). The power series expansion for SIN(x) is: x - (x^3)/3! + (x^5)/5! - (x^7)/7! + …. The sequence of coefficients 1, -1/3!, 1/5!, -1/7! ….. can be written as (-1)^0, ((-1)^1)/(m + n)!, ((-1)^2)/(2m + n)!, ((-1)^3)/(3m + n)! ….. where n = 1 and m =2. Thus to calculate sin(45°) or, in radians, sin(π/4), set n = 1, m = 2, x = π/4, and put the coefficients that are to be used in a range. In a spreadsheet, if B1..B5 contain the first 5 523 Function reference coefficients (i.e. 1, -1/FACT(3), 1/FACT(5), -1/FACT(7), 1/FACT(9)), then the following formula can be used to approximate the sine function: SERIESSUM(PI()/4, 1, 2, B1..B5) which returns 0.707107. The accuracy of the approximation depends, of course, on how many coefficients are used. The greatest accuracy possible is attained when the number of coefficients used is infinite! Note that computational modeling of mathematical functions such as sine and cosine is ultimately achieved by using power series expansions. SIGN(x) The SIGN function returns the sign of a number, according to the following convention: 1 stands for x is positive; 0 stands for x is zero; -1 stands for x is negative. For example: SIGN(20 - 20) returns 0 SIGN(-87) returns -1 SIGN(20) returns 1 SINH(x) The SINH function calculates the hyperbolic sine of a number x, using the formula: SINH(x) = (EXP(x) - EXP(-x)) / 2 SQR(x) The SQR function calculates the square of a number x. For example, SQR(5) returns 25, that is 5 raised to the power 2. SQRT(x) The SQRT function calculates the square root of x. The value x must be equal to or greater than zero. If it is not, #VALUE is displayed. 524 Function reference SUM(list) The SUM function calculates the total of the values in the list. The list can be numbers, cell addresses, ranges, and cell names. The SUM function is the same as the TOTAL function (see TOTAL on page 526). Here are some examples: SUM(12, 255, 10) SUM(A5..C9) SUM(Sales, C2, Expenses, Equip) SUMIF(list, condition) Conditionally sums values in the list. For example: SUMIF(A1..A10, “<100”) adds up all the values less than 100 in the range A1..A10. Note that the condition must be surrounded by quotes if it contains non-numeric characters. More examples: Formula Returns SUMIF({5, 4, 5, 3, 5}, “>=4”) 19 SUMIF({5, 4, 5, 3, 5}, 5) 15 SUMSQ(list) The SUMSQ function calculates the sum of the squares of a list of numbers. For example SUMSQ(3, -2, 2) returns 17, that is 3^2 + (-2)^2 + 2^2. SUMTIMES(range1, range2, range3…) The SUMTIMES function calculates the sum of the products of corresponding values from two or more arrays. The array arguments must have the same dimensions or the error message #VALUE will be returned. Non-numeric values will be counted as 0. The array components can be entered as a range. 525 Function reference For example: SUMTIMES({1,2,3}, {2,3,4}) returns 20, that is 1*2 + 2*3 + 3 * 4 SUMTIMES({1,2},{3,4}, {5,6}) returns 63, that is 1*3*5 + 2*4*6 SUMTIMES({2,3; 4,6}, {7,5; 4,9}) returns 99, that is 2*7 + 3*5 + 4*4 + 6*9 SUMTIMES(A1..B2, D1..E2) returns A1*D1 + B1*E1 + A2*D2 + B2*E2 SUMX2MY2(range_x, range_y) The SUMX2MY2 function calculates the sum of the differences of squares of corresponding values in two arrays, according to the formula: ∑ (x 2 − y2 ) The number of values in both arrays must be the same For example: SUMX2MY2({4,5,6}, {7,4,3}) returns 3, that is (4^2 - 7^2) + (5^2 - 4^2) +(6^2 - 3^2) SUMX2PY2(range_x, range_y) The SUMX2PY2 function calculates the sum of the sum of squares of corresponding values in two arrays, according to the formula: ∑ (x 2 + y2 ) The number of values in both arrays must be the same For example: SUMX2PY2({4,5,6}, {7,4,3}) returns 151, that is (4^2 + 7^2) + (5^2 + 4^2) + (6^2 + 3^2). SUMXMY2(range_x, range_y) The SUMXMY2 function calculates the sum of squares of differences of corresponding values in two arrays, according to the formula: ∑ ( x − y) 2 526 Function reference The number of values in both arrays must be the same For example: SUMXMY2({4,5,6}, {7,4,3}) returns 19, that is (4 - 7)^2 + (5 - 4)^2 + (6 - 3)^2. SUMXPY2(range_x, range_y) The SUMXPY2 function calculates the sum of squares of sum of corresponding values in two arrays, according to the formula: ∑ (x + y) 2 The number of values in both arrays must be the same. For example: SUMXPY2({4,5,6}, {7,4,3}) returns 283, that is (4 + 7)^2 + (5 + 4)^2 + (6 + 3)^2. TANH(x) The TANH function calculates the hyperbolic tangent of a number x, calculated as follows: TANH(x) = SINH(x) / COSH(x) TIMES(list) The TIMES function calculates the product of a list of numbers. For example: TIMES(4, 5, 6) returns 120, that is 4*5*6. TOTAL(list) The TOTAL function calculates the total of the list. The list can be numbers, cell addresses, ranges, and cell names. This function is the same as the SUM function (see SUM on page 524). 527 Function reference Trigonometric functions You use the trigonometric functions to solve standard problems in trigonometry, such as computing the cosine of a given angle. Note that all angles must be supplied in radians, where pi/2 radians = 90 degrees, and all answers will be given in radians. To convert radians to degrees and degrees to radians use the DEGREES and RADIANS functions respectively. Here is a complete list of trigonometric functions in Ability: ACOS on page 527 ACOTAN on page 527 ASIN on page 527 ATAN on page 527 ATAN2 on page 528 COS on page 528 COTAN on page 528 DEGREES on page 528 PI RADIANS on page 528 SIN on page 528 SQRTPI on page 528 TAN on page 528 ACOS(x) The ACOS function calculates the inverse cosine of the number x. The result is given in radians. ACOTAN(x) The COTAN function calculates the two-quadrant inverse cotangent of the number x. The result is given in radians. ASIN(x) The ASIN function calculates the inverse sine of the number x. The result is given in radians. ATAN(x) The ATAN function calculates the two-quadrant inverse tangent of the number x. The result is given in radians. 528 Function reference ATAN2(x, y) The ATAN2 function calculates the four-quadrant determination of the angle formed by the point (x, y) and the x-axis. The result is given in radians. COS(x) The COS function calculates the cosine of the number x, where x is an angle given in radians. COTAN(x) The COTAN function calculates the cotangent of the number x, where x is an angle given in radians. DEGREES(angle) The DEGREES function converts an angle expressed in radians to degrees. PI() The PI function always returns the universal constant π or 3.14159265359 approximately. RADIANS(angle) The RADIANS function converts an angle expressed in degrees to radians. SIN(x) The SIN function calculates the sine of x, where x is an angle given in radians. SQRTPI(x) The SQRTPI function calculates the square root of a number x multiplied by π, according to the formula: x * PI() TAN(x) The TAN function calculates the tangent of x, where x is an angle given in radians. 529 Function reference Lookup functions The built-in functions listed in this section are known as the Lookup Functions. You use these functions to search for the location of specific information. These functions are most useful if you are working with tax tables or other kinds of spreadsheet tables that you want to use for looking up and referring to information. Here is a complete list of lookup functions in Ability: ADDRESS on page 529 AREAS on page 530 CHOOSE on page 530 COLUMN on page 530 COLUMNS on page 531 FIND on page 531 FINDEX on page 531 INDEX on page 532 INDIRECT on page 532 LOOKUP on page 533 LOOKUPEX on page 533 ROW on page 533 ROWS on page 534 ADDRESS(row_number, column_number, abs_mode) The ADDRESS function calculates the location of a reference to a single cell and returns the location as text. The row and column numbers determine the address and the mode number determines the mode. In Spreadsheet, for example, the row number will specify the row number of the spreadsheet, the column number will specify the column letter, and the mode number will specify whether the reference address is absolute or relative, according to the following key: abs_mode 1 2 3 4 or omitted Reference Absolute Absolute row, relative column Relative row, absolute column Relative For example: ADDRESS(1,1,1) returns $A$1 ADDRESS(10,5,3) returns $E10 ADDRESS(100,200) returns GR100 530 Function reference AREAS(list) The AREAS function calculates the number of areas in a reference or list of references. An area is a range of cells that are contiguous, including a single cell. For example: AREAS(A1..D3, E10) returns 2. CHOOSE(index_num, list) The CHOOSE function chooses a value from a list of values. index_num is the position of the value in list. The arguments of list can be numbers, formulas, text, cell references or ranges. For example: CHOOSE(3, "Sales", "Profit", "Cost") returns "Cost". CHOOSE can also return a range which can be use in conjunction with other functions. For example: SUM(CHOOSE(2, A1..A3, B1..B3, C1..C3)) returns the result of SUM(B1..B3). COLUMN(ref) The COLUMN function returns the column number of ref according to the following: ref cell range omitted returns column number number of leftmost column in a range current column number For example: COLUMN(Z100) COLUMN(D5..G10) COLUMN(mycell) returns 26 returns 4 returns the column number of a named cell, mycell, or the leftmost column within mycell if it is a range. 531 Function reference COLUMN( ) returns 5 if the function is entered in any cell in column E COLUMNS(array) The COLUMNS function returns the number of columns in a reference or array. For example: COLUMNS(F1..H10) returns 3 COLUMNS({1, 2; 9, 8}) returns 2 If you have created a named range called myarea that refers to the range A1..D4, then COLUMNS(myarea) returns 4. FIND(value, list) The FIND function searches the list to find where the largest item that is less than or equal to value occurs in the list. The list can contain numbers, text, cell addresses, ranges, and cell names. The list must be sorted in ascending order (as contrasted with the FINDEX function – see FINDEX on page 531). For example, FIND(19, 1, 15, 20, 30, 35, 40) returns 2, the second position in the list, as 15 is the last value in the list that is less than or equal to the test value. If the list you want to search is a range that contains several rows and several columns, Ability searches the range from left to right and top to bottom. The FIND function is similar to the LOOKUP function (see LOOKUP on page 533), except that LOOKUP returns an actual value, rather than the position of the value in a list. The INDEX function (see INDEX on page 532) is also similar to the FIND function, except that with INDEX you enter the position rather than a test value in a list. FINDEX(value, list) The FINDEX function searches the list and returns the position of value in the list. If list does not contain value, #VALUE is returned. 532 Function reference The list can contain numbers, text, cell addresses, ranges, and cell names. The list can be in any order (which contrasts with FIND on page 531). For example, FINDEX(15, 18, 15, 10, 3, 35, 12) returns 2, the second position in the list. If the list you want to search is a range that contains several rows and several columns, Ability searches the range from left to right and top to bottom. The FINDEX function is similar to the LOOKUP function (see LOOKUPEX on page 533), except that LOOKUPEX returns an actual value, rather than the position of the value in a list. The INDEX function (see INDEX on page 532) is also similar to the FINDEX function, except that with INDEX you enter the position rather than a test value in a list. INDEX(number, list) The INDEX function returns the value in a list that is in the position given by number. The list can be numbers, text, cell addresses, ranges, and cell names. Ability searches the list and returns the value that occurs in the specified position. For example, INDEX(2, 1, 15, 20, 30, 35, 40) returns 15, which is in the second position in the list. INDIRECT(ref_as_text, mode) INDIRECT allows a text reference to be turned into a cell reference. For example: INDIRECT("B10") Returns the contents of cell B10 in the same way as a direct reference would (i.e. typing B10 into a formula). The INDIRECT funtion is more useful when used with cell references. For example, consider the formula = INDIRECT(A1) / 100 in a cell, say C1. A1 contains the text A5 and the range A5..A10 contains numbers. The sum displayed in cell D1 can now be controlled by entering a different any of "A5", "A6", "A7"...."A10" in cell A1, as shown below: {bmc spIndirect.bmp} 533 Function reference Mode is optional and can be set to true or false to switch between A1 style notation and R1C1 style notation. For example, the following will all return the contents of cell B10: INDIRECT("B10") INDIRECT("B10", TRUE) INDIRECT("R10C2", FALSE) LOOKUP(value, in_range, out_range) The LOOKUP function searches the list in_range, to find the last item that is less than or equal to value and returns the corresponding item from the list out_range. The in_range must be sorted into ascending order (use LOOKUPEX on page 533 for unsorted lists). If it isn’t, Ability may display an unexpected answer. LOOKUP works with both sorted numbers and text. For example: LOOKUP(3, {1, 2, 3, 4, 5}, {10, 20, 30, 40, 50}) returns 30 LOOKUP("red", {"blue", "red", "yellow"}, {3, 2, 1}) returns 2 The LOOKUP function produces the same result as combining INDEX on page 532 and FIND on page 531 , as follows: INDEX(FIND(x, in_range), out_range) LOOKUPEX(value, in_range, out_range) The LOOKUPEX function searches the list in_range, to find the item that is equal to value and returns the corresponding item from the list out_range. If the value is not found, LOOKUPEX returns #VALUE. The in_range can be in any order (as contrasted with LOOKUP on page 533). LOOKUPEX works with both numbers and text. For example: LOOKUPEX(3, {1, 5, 4, 3, 2}, {10, 20, 30, 40, 50}) returns 40 LOOKUPEX("blue", {"red", "blue", "yellow"}, {3, 2, 1}) returns 2 The LOOKUPEX function produces the same result as combining INDEX on page 532 and FINDEX on page 531 , as follows: INDEX(FINDEX(x, in_range), out_range) ROW(ref) The ROW function returns the row number of ref, according to the following: 534 Function reference ref cell range omitted returns row number number of topmost row in a range current row number For example: ROW(Z100) ROW(D5..G10) ROW(mycell) ROW( ) returns 100 returns 5 returns the row number of a named cell, mycell, or the topmost row within mycell if it is a range returns 5 if the function is entered in any cell in row 5 ROWS(array) The ROW function returns the number of rows in a reference or array. For example: ROWS(F5..H10) returns 6 ROWS({1, 2; 9, 8}) returns 2 If you have created a named range called myarea, that refers to the range A1..D4, then: ROWS(myarea) returns 5 Information functions You can use Ability’s built-in information functions to find out if a value is a number, text or error indicator, and how many blank cells or error indicators there are in a range. Here is a complete list of information functions in Ability: COUNTBLANK on page 535 ISBLANK on page 535 ISERR on page 535 ISERROR on page 535 ISEVEN on page 535 ISNUMBER on page 536 ISODD on page 536 ISREF on page 536 ISTEXT on page 536 535 Function reference COUNTBLANK(list) The COUNTBLANK function counts the number of blank cells within a specified range. For example, if A1 is blank, A2 contains a number, and A3 contains an error message, then the formula COUNTBLANK(A1..A3) returns 1. Note that if a cell contains a formula which returns a blank value (for example, CONCATENATE(" ")), then Ability does not count the cell itself as blank. ISBLANK(value) The ISBLANK function returns TRUE if the value is blank or if the cell referred to is empty. Note that if a cell contains a formula that returns a blank value (for example, CONCATENATE(" ")), then Ability does not count the cell itself as blank. ISERR(list) The ISERR function checks the list and returns a count of the number of cells that contain #CIRC, #FUNC, #DIV0, #VALUE or #REF error indicators (see Cell error indicators on page 485). The list can be cell addresses, ranges, and cell names. You can combine the IF function (see IF(x, true, false) on page 512) and the ISERR function to check for errors and return an error message if something is incorrect. For example, in a spreadsheet that runs from A1 to E20, you might use the following: IF(ISERR(A1..E20), "A problem", "No problem") ISERROR(ref) The ISERROR function returns TRUE if the field or cell referenced by ref contains any error message. ISEVEN(value) The ISEVEN function returns TRUE if the value is an even number, FALSE for all other values. 536 Function reference ISNUMBER(value) The ISNUMBER function returns TRUE if the value is a number, FALSE for all other values. ISODD(value) The ISODD function returns TRUE if the value is an odd number, FALSE for all other values. ISREF(value) The ISREF function returns TRUE if the value is a reference. For example, ISREF(sales) returns TRUE when sales is the name of a range A1..A10. ISTEXT(value) The ISTEXT function returns TRUE if the value is text. Statistical functions You can use the built-in statistical functions to perform statistical and other calculations. With these functions you can automatically find the average, minimum and maximum of a set of values, calculate the number of permutations, and perform other complex computations. Here is a complete list of statistical functions in Ability: AVEDEV on page 537 AVERAGE on page 538 BINOMDIST on page 538 COMB on page 539 CORREL on page 539 COUNT on page 539 COUNTIF on page 540 COUNTN on page 540 COVAR on page 540 DEVSQ on page 541 EXPONDIST on page 541 FISHER on page 541 FISHERINV on page 542 FORECAST on page 542 537 Function reference GAMMADIST on page 543 GAMMALN on page 543 GEOMEAN on page 544 HARMEAN on page 544 HYPGEOMDIST on page 544 INTERCEPT on page 545 KURT on page 546 LARGE on page 546 MAX on page 546 MEDIAN on page 547 MIN on page 547 MODE on page 547 NEGBINOMDIST on page 548 NORMDIST on page 548 PEARSON on page 548 PERCENTILE on page 549 PERCENTRANK on page 549 PERM on page 550 POISSON on page 550 PROB on page 551 QUARTILE on page 551 RANK on page 552 RSQ on page 552 SKEW on page 552 SLOPE on page 553 SMALL on page 554 STANDARDIZE on page 554 STD on page 554 STDEVP on page 554 STEYX on page 555 VAR on page 556 VARP on page 556 WAVG on page 556 WEIBULL on page 557 AVEDEV(list) The AVEDEV function calculates the average deviations of numbers in a list from the mean value of the list. The formula for average deviation is: 1 n ∑ (ABS(x − AVG(x))) For example: AVEDEV(2, 6, 9, 4, 5) returns 1.84, which is the average deviation from the mean of 5.2. 538 Function reference AVERAGE(list) or AVG(list) The AVERAGE function calculates the unweighted average value of one or more values in a list. The formula used is: SUM(list)/ n where n is the number of values in the list. The list can include cell addresses, ranges, and cell names. This function can be abbreviated to AVG. For example: AVERAGE(10, 20, 30) returns 20. BINOMDIST(number, trials, probability, cumulative) The BINOMDIST function is used to calculate the binomial distribution. This is useful in situations where there is a fixed number of trials, the trials are independent of each other, the outcome of each trial is either success or failure, and the probability of success or failure is constant throughout the test. The arguments of the function represent the following: number trials probability cumulative the number of occurrences of success in the trials the number of trials to be performed the probability of success for a single trial a logical value, which determines the form of the function: TRUE calculates the cumulative distribution function, which gives the probability that there are at most number successes FALSE calculates the probability mass function, which gives the probability that there are exactly number successes For example, we want to know the probability of getting 12 heads from 20 flips of a coin. Each flip of the coin can only give either heads or tails ("success" or "failure"), and the probability of heads on each flip is constant at 0.5. Therefore, setting cumulative to FALSE, the formula: BINOMDIST(12, 20, 0.5, FALSE) returns the probability 0.12 that we will get exactly 12 successes from 20 trials. If cumulative is set to TRUE, then the formula: 539 Function reference BINOMDIST(12, 20, 0.5, TRUE) returns 0.87, that is the probability that we will get at most 12 heads (12 or less). COMB(n, m) The COMB function calculates the number of combinations of n distinct things taken m at a time using the following formula: COMB(n, m) = FACT(n) / (FACT(m) * FACT(n - m)) A combination is a selection of one or more things or events without regard to order. This can be contrasted with a permutation (see PERM on page 550), where order does matter. For example, the chances of correctly selecting six numbers drawn from 49 in a lottery is given by: COMB(49, 6) which returns 13,983,816, that is, 1 chance in 13,983,816. CORREL(array1, array2) The CORREL function calculates the correlation coefficient between two sets of data. The function arguments should contain numbers or refer to ranges containing numbers, and should have matching numbers of data points. The correlation coefficient is a number between -1 and 1. The formula used is: (n∑ xy − ∑ x ∑ y) (n∑ x 2 − (∑ x ) 2 )(n∑ y 2 − (∑ y) 2 ) For example, the correlation coefficient between the height (array1) and weight (array2) of six people, can be calculated using the formula: CORREL({1.52, 1.75, 1.96, 1.85, 1.55, 1.30}, {170, 167, 210, 182, 154, 100}) This returns a correlation coefficient of 0.918156, which indicates high correlation. Low correlation tends towards 0, as can be seen when array1 and array2 contain many data points filled with random numbers. COUNT(list) The COUNT function counts the number of items of non-blank entries in list. The list can contain numbers, cell addresses, ranges, and cell names. For example: 540 Function reference COUNT(A1..A10) returns a count of the number of cells A1 through to A10 that are non-blank. Note that if a cell contains a formula that returns a blank value (for example CONCATENATE(" ")), then Ability does not regard the cell itself as blank. COUNTIF(list, condition) Counts the the number of cells in a list matching a condition. For example: COUNTIF(A1..A10, “>5”) returns a count of the number of cells having a value greater than 5. Note that the condition should be surrounded by quotes if it contains any non-numeric characters. More examples: Formula Returns COUNTIF({“Mon”, “Tue”, “Mon”, “Thu”}, “Mon”) 2 COUNTIF({5, 4, 5, 3, 5}, “>=4”) 4 COUNTIF({5, 4, 5, 3, 5}, 5) 3 COUNTN(list) The COUNTN function counts how many numbers there are in a list of arguments. The arguments can also be ranges. For example: COUNTN(A1..A10) returns a count of the number of cells A1 through to A10 containing a number, a formula with a numeric result or a date. COVAR(array1, array2) The COVAR function calculates the covariance between two sets of data. This is a measure of the average of the products of deviation for matching pairs from two arrays. The function arguments should contain numbers or refer to ranges containing numbers, and should have a matching number of data points. 541 Function reference DEVSQ(list) The DEVSQ function calculates the sum of squares of deviations from the mean of a list of numbers. The formula used is: ∑ (x − AVG(x)) 2 For example: DEVSQ(9, 4, 8, 1, 14) returns 98.8. EXPONDIST(x, lambda, cumulative) The EXPONDIST function calculates the exponential distribution. x is the input value to the function; lambda is a distribution parameter; and cumulative is a logical value with the following effect: FALSE the probability density function is calculated, using the equation: f (x, λ ) = λ e − λx TRUE the cumulative distribution function is calculated, using the equation: F(x, λ ) = 1 − e − λx For example EXPONDIST(0.3, 9, TRUE) returns 0.932794 EXPONDIST(0.3, 9, FALSE) returns 0.604850 FISHER(x) The FISHER function calculates the Fisher transformation at x. The formula used is: f(x) = ½ LN((1 + x)/(1 - x)) for -1 < x < 1. The transformation can be used to convert a skewed distribution into a more normal one, provided there is some theoretical support. For example: FISHER(0.85) 542 Function reference returns 1.256153. FISHERINV(y) The FISHERINV function calculates the inverse of the Fisher transformation (see FISHER on page 541), using the formula: x= e 2y − 1 e 2y + 1 where y = FISHER(x). For example, FISHER(1.256153) returns 0.85. FORECAST(x, array_y, array_x) The FORECAST function returns a prediction of y for a given x after first performing a linear regression on the data points described by array_y and array_x. A linear regression produces a "best fit" line through the data points by minimizing the sum of the (squared horizontal) distances from each data point to the line. FORECAST then uses this line to predict a y value for the supplied x as follows: y= ∑ y + ⎛⎜ n∑ xy − ∑ x ∑ y ⎞⎟⎛⎜ x − ∑ x ⎞⎟ ⎜ n x 2 − ( x )2 ⎟⎜ n n ⎟⎠ ∑ ⎠⎝ ⎝ ∑ which is the same as: y = INTERCEPT(array_y, array_x) + SLOPE(array_y, array_x)*x For example, suppose the following y-values were observed for the supplied x-values: Y X 4.7 1 6.0 11.2 10.6 2 3 4 8.2 5 7.3 15.8 11.7 6 7 8 A linear regression through these points would look like this: 543 Function reference You could use FORECAST to predict the y value at x = 10 using the following formula: FORECAST(10, {4.7, 6, 11.2, 10.6, 8.2, 7.3, 15.8, 11.7}, {1, 2, 3, 4, 5, 6, 7, 8}) which returns the value 14.9. GAMMADIST(x, alpha, beta) The GAMMADIST function calculates the gamma distribution. It is used when working with variables that may have a skewed distribution. x is the value at which the function is to be evaluated; alpha and beta are parameters to the function. The formula for the gamma distribution is: f (x; α, β ) = x α −1e −N β β Γ(α ) α and for the standard gamma distribution, that is when β = 1, is: f (x; α ) = x α −1e −N Γ (α ) For example: GAMMADIST(15, 7, 4) returns 0.022709. GAMMALN(x) The GAMMALN function calculates the natural logarithm of the gamma function, Γ(x) (see GAMMADIST on page 543). The formula used is: GAMMALN = LN(Γ(x)) 544 Function reference GEOMEAN(list) The GEOMEAN function calculates the geometric mean of a list of numbers. Each number y of the list should be > 0. The formula for the geometric mean is: n y 1 * y 2 * y 3 * .... * y n For example: GEOMEAN(3, 8, 7) returns 5.5178, that is the 3rd or cubed root of 3*8*7. HARMEAN(list) The HARMEAN function calculates the harmonic mean of a list of numbers. This is the reciprocal of the arithmetic mean of reciprocals. Each number x of the list should be > 0. The harmonic mean is always less than the geometric mean, which is always less than the arithmetic mean, for the list of numbers. The formula for the harmonic mean is: n 1 + 1 + 1 + .... + 1 x1 x2 x3 xn where n is the size of the list and x1 ,x2 …. xn are the numbers in the list. For example, HARMEAN(10, 5, 4, 7, 8) returns 6.113537, given by 5/(1/10 + 1/5 + 1/4 + 1/7 + 1/8). HYPGEOMDIST(sample, n_sample, population, n_population) The HYPGEOMDIST function calculates the hypergeometric distribution. This is the measure of the probability of a given number of sample "successes" from a finite population, without replacement of samples and given the sample size and the number of population "successes". Each sample is defined as either a "success" or a "failure"; for example, when flipping a coin, heads might be a success and a tails a failure. The arguments of the function represent the following: sample n_sample population n_population 545 Function reference the number of successes in the sample, for which we seek the probability the size of the sample the number of successes in the population the size of the population For example, a lucky dip has been organized, with 40 items in total. 35 of these are worthless trinkets; 5 are diamonds. We wish to know the probability of getting exactly 2 diamonds from a selection of 4 items. Each diamond counts as a success. There are 40 items in total: this is the n_population. The size of the sample is 4: this is the n_sample. The number of successes, that is to say, diamonds, in the total population is 5: this is population. The number of successes in the sample, for which we seek the probability, is 2: this is the sample. Applying the formula: HYPGEOMDIST(2, 4, 5, 40) returns 0.065106 as the probability. INTERCEPT(array_y, array_x) The INTERCEPT function returns the point where a "best fit" line meets the y-axis. This is calculated by applying a linear regression on the data points in array_x (the independent or controlled variable) and array_y (the dependent variable). The formula used for intercept is: ∑ y − ⎛⎜ n∑ xy − ∑ x ∑ y ⎞⎟ ∑ x ⎜ n x 2 − ( x )2 ⎟ n n ∑ ⎠ ⎝ ∑ which is the same as: AVG(array_y) - SLOPE(array_x, array_y) * AVG(array_x) For example, suppose the following y-values were observed for the supplied x-values: 4.7 6.0 11.2 10.6 8.2 7.3 15.8 11.7 Y 1 2 3 4 5 6 7 8 X A linear regression through these points would look like this: 546 Function reference You calculate where the line crosses the y-axis using: INTERCEPT({4.7, 6, 11.2, 10.6, 8.2, 7.3, 15.8, 11.7}, {1, 2, 3, 4, 5, 6, 7, 8}) which returns 4.942857. KURT(list) The KURT function calculates the kurtosis of a list of numbers. Kurtosis is used to measure how much data is massed in the center of a distribution compared to the normal distribution - a relatively flat distribution will have negative kurtosis and a pointed one a positive kurtosis. KURT needs at least 4 numbers in the list. LARGE(k, list) The LARGE function calculates the k-th largest number in a list of numbers. k should be greater than 0 and not greater than the number of numbers in the list. For example, LARGE(3, 9, 234, 4, 56, 888) returns 56, the third largest number. MAX(list) The MAX function returns the maximum (largest) value in the list. The list can include numbers, cell addresses, ranges, and cell names. For example: MAX(1, 2, -16, 8) returns largest number in the list, which is 8. 547 Function reference MEDIAN(list) The MEDIAN function calculates the median of a list of numbers. The median is the middle value in a list of numbers, after the list has been arranged in ascending order. MEDIAN both orders the list and finds the middle value, so you can enter the list values in any order you like. If the list contains an even number of numbers, the median is calculated as the average of the two middle numbers. For example: MEDIAN(3, 5 ,17, 34, 98) returns 17. MEDIAN(3, 5, 17, 26, 34, 98) returns 21.5, which is the average of the two middle numbers 17 and 26. MEDIAN will return an error message if any of the list values are non-numeric, though it will ignore non-numeric values if calling on a range. MIN(list) The MIN function returns the minimum (smallest) value in the list. The list can include numbers, cell addresses, ranges, and cell names. For example, MIN(1, 2, -16, 8). Ability displays the smallest number, which is -16. MODE(list) The MODE function calculates the mode of a list of numbers. The mode is the most frequently occurring number in the list. If all the numbers occur with equal frequency then an error message is returned. However, if a subset of the numbers occur with greater frequency than the others, then the first number in the subset is returned. For example: MODE(4, 5, 9, 2, 9) returns 9 MODE(4, 5, 2, 9, 2, 9) returns 2 MODE(1, 2, 3, 4, 5) returns an error message 548 Function reference MODE will return an error message if any of the list values or values held in a range are non-numeric. NEGBINOMDIST(number_f, number_s, probability_s) The NEGBINOMDIST function calculates the negative binomial distribution. This is a measure of the probability that a certain number of failures will occur before the nth success, given that the probability of success is constant. It is used in situations where the number of trials is variable and each trial is independent of the others, but the number of successes is fixed. The function arguments are: the number of failures the number of successes the probability of a success number_f number_s probability_s For example, we want to know the probability of getting exactly 10 tails ("failures") before we get 12 heads ("successes") in a coin-tossing experiment. The probability of a success is constant at 0.5. The formula: NEGBINOMDIST(10, 12, 0.5) returns 0.084094 as the probability. NORMDIST(x, mean, stdev) The NORMDIST function calculates the normal distribution for a given mean and standard deviation (stdev), where x is the value for which you want to know the distribution. The formula used is: 1 σ 2π e ( ) − 12 x−µ 2 σ NORMDIST calculates the probability mass function. For example: NORMDIST(3, 2, 1) returns 0.242, which is the probability of the event x = 3, given a normal distribution with a mean of 2 and standard deviation 1. PEARSON(array_x, array_y) The PEARSON function calculates the Pearson product moment correlation coefficient. This is a measure, between -1 and 1 inclusive, of the extent of the relationship between two sets of data. 549 Function reference array_x is the set of independent and array_y is the set of dependent numbers. The arrays must have a matching number of values. PEARSON is calculated using the formula: r = (n∑ xy − ∑ x ∑ y) (n∑ x 2 − (∑ x ) 2 )(n∑ y 2 − (∑ y) 2 ) where r is the correlation coefficient of the linear regression line running through the data points described by array_x and array_y. For example: PEARSON({10, 7, 5, 3, 2}, {12, 8, 13, 4, 1}) returns 0.756437. PERCENTILE(k, array) The PERCENTILE function calculates the k-th percentile of the numbers in an array or range. k is a number from 0 to 1 inclusive (or 0% to 100%). The k-th percentile P of a range of numbers is a number such that at least a proportion k of the range of numbers is smaller than or equal to P, and also at least a proportion (1 k) of those numbers is larger than or equal to P. For example PERCENTILE(25%, {0, 1, 2, 3, 4}) returns 1. PERCENTILE(25%, {1, 2, 3, 4}) returns 1.75. PERCENTRANK(x, array) The PERCENTRANK function calculates the percentage rank of a number in a set of numbers. The percent rank of a value is a measure of its standing in relation to a set of values. It is always a number from 0 to 1 inclusive. x is the value for which the percentage rank is sought in comparison to the set of numbers in an array or range. For example, PERCENTRANK(2, {0, 1, 2, 3, 4}) returns 0.5 PERCENTRANK(2, {1, 2, 3, 4}) 550 Function reference returns 0.333333. PERM(n, m) The PERM function calculates the number of permutations of n distinct things taken m at a time, using the following formula: PERM = FACT(n) / FACT(n - m) For example, to get the number of permutations of the three letters a, b and c, taking 2 at a time, use the formula: PERM(3, 2) which returns 6. The six permutations are ab, ac, bc, ba, ca, cb. A more complex example is a coded telegram where each word is 5 letters in length. The number of possible different words, where each word contains a letter no more than once, is given by the formula: PERM(26, 5) which returns 7893600. POISSON(x, mean, cumulative) The POISSON function calculates the Poisson distribution. This is useful for predicting the probability of a number of events over a specific measure, for example time, length or area. The arguments of the function represent the following: x mean cumulative the number of events, for which we seek the probability the known average rate of events a logical value, which determines the form of the function: TRUE calculates the cumulative Poisson probability, which gives the probability that the number of events will be between 0 and x inclusive. FALSE calculates the Poisson probability mass function, which gives the probability that the number of events will be exactly x. For example, if 7 cars per minute is the average traffic rate on a particular road, and their arrival is entirely random, we can calculate the probability of there being exactly 4 cars in a minute by using the formula: 551 Function reference POISSON(4, 7, FALSE) which returns a probability of 0.091226. The probability that there will be between 0 and 4 cars per minute inclusive is given by: POISSON(4, 7, TRUE) that is 0.172992. PROB(x_range, prob_range, lower_limit, upper_limit) The PROB function calculates the probability that numbers in a range are between two limits. x_range is a range of numbers with which there is associated a range of corresponding probabilities in prob_range. lower_limit and upper_limit are the limits of the range of numbers for which we want to know the probability. If upper_limit is omitted then it becomes equal to lower_limit, and PROB calculates the probability of just the one number. Note that the values in prob_range must total 1, and that this range and x_range must contain the same number of values. For example, if {2, 4, 6, 8, 10} is a list of all possible outcomes of an experiment, with corresponding probabilities {0.3, 0.1, 0.1, 0.2, 0.3}, then the probability of an event being between 4 and 8 inclusive is given by the formula: PROB({2,4,6,8,10}, {0.3, 0.1, 0.1, 0.2, 0.3}, 4, 8) which returns 0.4. QUARTILE(quart, array) The QUARTILE function calculates the quartile of an array or range of numbers. quart is either 0, 1, 2, 3 or 4, and represents either the zero (minimum), 25th, 50th (median), 75th or 100th (maximum) percentile respectively. For example, the 3rd quartile of a data set {12, 9, 11, 7, 4, 15} is given using the formula: QUARTILE(3, {12, 9, 11, 7, 4, 15}) which returns 11.75. This is equivalent to using the Percentile function (see PERCENTILE on page 549): PERCENTILE(75%, {12, 9, 11, 7, 4, 15}) 552 Function reference Note that using quart = 0, 2, or 4 has the same effect as using the functions MIN, MEDIAN or MAX respectively. RANK(number, ref, order) The RANK function calculates the rank of a number in a list of numbers. The rank of a number is its size relative to the other numbers in the list. The arguments for the function are: number the number in the list that we want to rank. ref the reference for the list of numbers, usually an array, range or range name. order determines whether the rank is to be calculated against a list sorted in descending or ascending order: setting order at 0 (or omitting it) sorts in descending order, at 1 or >1 sorts in ascending order. For example: RANK(12, {6, 8, 2, 4, 14, 12, 10}, 0) returns 2; whereas: RANK(12, {6, 8, 2, 4, 14, 12, 10}, 1) returns 6. RSQ(array_x, array_y) The RSQ function calculates the square of the Pearson product moment correlation coefficient (see PEARSON on page 548). The formula is equivalent to: SQR(PEARSON(array_x, array_y) SKEW(list) The SKEW function calculates the skewness of a distribution given by list. Skewness is a measure of the asymmetery of a distribution round its mean. A distribution with positive skewness has an asymmetric tail that stretches towards more positive values. A distribution with negative skewness has an asymmetric tail that stretches towards more negative values. 553 Function reference SKEW works with a list of numbers, a range or an array. An error message is returned if there are less than 3 values. For example: SKEW(16, 17, 19, 12, 11, 10, 9) returns 0.367654. SLOPE(array_y, array_x) The SLOPE function calculates the slope of the linear regression line through the data points described by array_x (the independent or controlled variable) and array_y (the dependent variable). The slope is the vertical distance between any two data points divided by the horizontal distance between the same two data points. It is a measure of the rate of change of the regression line, and is given by the formula: b= n∑ xy − ∑ x ∑ y n∑ x 2 − (∑ x ) 2 where b is the slope of the regression line. The x- and y-arrays or ranges must have the same number of data points. For example, suppose the following y-values were observed for the supplied x-values: 4.7 6.0 11.2 10.6 8.2 7.3 15.8 11.7 Y 1 2 3 4 5 6 7 8 X A linear regression through these points would look like this: You calculate the slope of the line using: SLOPE({4.7, 6, 11.2, 10.6, 8.2, 7.3, 15.8, 11.7}, {1, 2, 3, 4, 5, 6, 7, 8}) which returns 0.9988. 554 Function reference SMALL(k, list) The SMALL function calculates the k-th smallest value in a set of numbers in list. For example: SMALL(2, {19, 7, 1, 18, 10}) returns 7. STANDARDIZE(x, mean, stdev) The STANDARDIZE function calculates a nomalized value for x, by subtracting the mean and dividing the result by the standard deviation (stdev) of a distribution. This allows direct comparison to the standard normal distribution. For example: STANDARDIZE(30, 20, 1.8) returns 5.56, that is (30-20)/1.8. STD(list) or STDEV(list) The STD or STDEV function estimates the standard deviation of a population based on a random sample of that population as supplied by list. The standard deviation is a measure of the dispersal of data from the mean value and is defined as the square root of the variance (see VAR on page 556). The formula used by STD is: SQRT(VAR(list)) STD assumes that list is a sample of the population, so use STDEVP (see STDEVP on page 554) if you wish to work with a whole population. For example, if 5 people are chosen at random and measured for height, from a company with 40 employees, the formula: STD(1.85, 1.9, 1.8, 1.75, 1.7) returns 0.079 as the estimated standard deviation for the population. To get the standard deviation based on all 40 employees use STDEVP. STDEVP(list) The STDEVP function calculates the standard deviation of a population based on the whole of the population as supplied by list. 555 Function reference The standard deviation is a measure of the dispersal of data from the mean value. The formula used by STDEVP is: SQRT(VARP(list)) STDEVP assumes that its arguments are the whole of a population, so use STD on page 554 if you wish to estimate the standard deviation based on a sample. For example, if you wish to calculate the standard deviation of the times, in seconds, for the members of a 4 x 400m running team, use the formula STDEVP(55, 57, 56, 59) which returns 1.479 seconds. STEYX(array_y, array_x) The STEYX function calculates the standard error associated with a linear regression on the data points described by array_y (the dependent variable) and array_x (the independent or controlled variable) according to the formula: (n∑ xy − ∑ x∑ y )2 1 ⎛⎜ 2 n∑ y 2 − (∑ y ) − 2 n(n − 2 ) ⎜ n∑ x 2 − (∑ x ) ⎝ ⎞ ⎟ ⎟ ⎠ Standard error is a measure of the amount of error associated with a prediction of y given x. For example, suppose the following y-values were observed for the supplied x-values: 4.7 6.0 11.2 10.6 8.2 7.3 15.8 11.7 Y 1 2 3 4 5 6 7 8 X A linear regression through these points would look like this: Suppose you want to forecast y for x = 10 and supply a standard error with this forecast. The standard error would be calculated using: STEYX({4.7, 6, 11.2, 10.6, 8.2, 7.3, 15.8, 11.7}, {1, 2, 3, 4, 5, 6, 7, 8}) 556 Function reference which returns 2.84. VAR(list) The VAR function calculates the sample variance of the list. The list can contain numbers, cell addresses, ranges, and cell names. VAR is calculated according to the formula: 1 2 ∑ (x − AVG(x)) n−1 VARP(list) The VARP function calculates the variance of a list on the assumption that list contains the whole population. The variance is a measure of the spread of data from the mean, and is calculated using the formula: 1 2 ∑ (x − AVG(x)) n VARP assumes that list is the whole of a population, so use VAR (see VAR on page 556) if you wish to estimate the variance based on a sample. For example: VARP(9, 6, 5, 1, 10, 9, 3) returns 9.836735. WAVG(array_x, array_y) The WAVG function calculates the weighted average of the values in array_x, with corresponding weights taken from array_y. The arguments are either ranges or arrays. WAVG is calculated using the formula: x 1y 1 + x 2 y 2 + x 3 y 3 + ... + x n y n y 1 + y 2 + y 3 + ... + y n For example: WAVG({1, 2, 3, 4, 5}, {0.3, 0.3, 0.1, 0.7, 0.8}) returns 3.64. 557 Function reference WEIBULL(x, alpha, beta, cumulative) The WEIBULL function calculates the Weibull distribution. This is often used in reliability analysis. The arguments of the function represent the following: x alpha beta cumulative the value at which to evaluate the function a parameter to the distribution a parameter to the distribution a logical value, which determines the form of the function: TRUE calculates the Weibull cumulative distribution function, which uses the formula: F(x; α, β) = 1 - EXP(-(x/β)^α) FALSE calculates the Weibull probability density function, which uses the formula: f(x; α, β) = ( α / β^α ) x^(α - 1) EXP(-(x/β)^α) Text functions You can use Ability’s built-in text functions to manipulate, transform and compare text. Here is a complete list of text functions in Ability: CHAR on page 558 CLEAN on page 558 CODE on page 558 CONCATENATE on page 559 DOLLAR on page 559 EXACT on page 559 FINDTEXT on page 559 FIXED on page 560 LEFT on page 560 LEN on page 561 LOWER on page 561 MID on page 561 PROPER on page 561 REPLACE on page 562 REPT on page 562 RIGHT on page 562 SEARCHTEXT on page 563 SUBSTITUTE on page 563 T on page 564 TRIM on page 564 558 Function reference UPPER on page 564 VALUE on page 564 CHAR(number) The CHAR function returns the character specified by the code number. This is used to convert codes from other types of computers to characters. number is from 1 to 255, each number representing an ASCII character. For example: CHAR(37) returns "%" CHAR(57) returns "9" CLEAN(text) The CLEAN function removes all non-printable characters from text. These are characters that are not normally displayed by your operating system. For example: CLEAN (CONCATENATE (CHAR (7), "Hello")) returns "Hello". CODE(text) The CODE function returns the numeric code for the first character in a text string. The code corresponds to a character in ASCII. For example: CODE("W") and CODE("Wittgenstein") both return 87. CONCAT(text_list) The CONCAT function joins several text items into one text item. text_list can be composed of text, numbers or single-cell references. CONCAT is an abbreviation for the CONCATENATE function. 559 Function reference CONCATENATE(text_list) The CONCATENATE function joins several text items into one text item. text_list can be composed of text, numbers or single-cell references. For example, if the cell A1 contains the number 5, the formula: CONCATENATE("Petrol is $", A1, " today") returns "Petrol is $5 today". An abbreviated version of this function is CONCAT. DOLLAR(number, precision) The DOLLAR function converts a number to text, using a currency format. number is the number to be converted and formatted. precision specifies how the number is to be rounded. For example, 2 will round the number to 2 decimal places, while -2 will round the number to 2 places to the left of the point. If precision is omitted the default currency precision is taken from Windows settings. For example: DOLLAR(234.19999, 2) returns "$234.20" DOLLAR(234.19999, -2) returns "$200" EXACT(text1, text2) The EXACT function checks to see if two text values are identical. TRUE is returned if they are, FALSE if not. EXACT is case sensitive. For example, suppose a field called myfield contains the text "Happy today", the following results are obtained: EXACT("Happy today", myfield) TRUE EXACT("happy today", myfield) FALSE EXACT("Happy", myfield) FALSE FINDTEXT(find_text, within_text, start_num) The FINDTEXT function finds one text string within another and returns the position of the character at which the two text strings first match. 560 Function reference FINDTEXT is case sensitive and does not allow wildcard characters (in this it differs from SEARCHTEXT – see SEARCHTEXT on page 563). find_text is the text you wish to find. within_text is the object text. start_num is the position of the character in within_text from which you want to begin the search. If find_text is "" (empty) the character at start_num is returned. If start_num is omitted it is assumed to be 1. The #VALUE error message is returned if FINDTEXT fails to find a match. For example: FINDTEXT("br", "abracadabra",5) returns 9 FINDTEXT("r", "Robertson", 1) returns 5 FINDTEXT("R", "Robertson", 1) returns 1 FINDTEXT(" ", "Mr Smith") returns 3 FIXED(number, precision, commas) The FIXED function formats a number as text with a fixed number of decimals. number is the number to be rounded and formatted. precision specifies how the number is to be rounded. For instance, 2 will round the number to 2 decimal places, while -2 will round the number to 2 places to the left of the point. commas is a logical value which determines whether the number is to have commas (TRUE) or not (FALSE or omitted). For example: FIXED(1234.19999, 2, TRUE) returns "1,234.20" FIXED(1234.19999, -2, FALSE) returns "1200" LEFT(text, num_chars) The LEFT function returns the left-most characters from a text string. num_chars is the number of characters from the left of the text string. If this is omitted, it is assumed to be 1; if it is greater than the number of characters in text, then LEFT will return the whole text string. 561 Function reference For example: LEFT("WC1 5NH", 3) returns "WC1". LEN(text) The LEN function returns the number of characters in a text string. Spaces are counted as characters. For example, LEN("The Queen of England") returns 20. LOWER(text) The LOWER function converts text to lower case. For example, LOWER("SALES REPORT") returns "sales report". MID(text, start_num, num_chars) The MID function returns a specific number of characters from a text string, starting at a specified position. If start_num is greater than the length of text, MID returns "" (empty string). If num_chars is greater than the number of characters remaining after start_num, or if it is omitted, MID returns the remaining characters. For example, MID("The discount is 10% in March", 24, 10) returns "March". PROPER(text) The PROPER function capitalizes the first letter in each word of a text value. A word is any continuous string of letters that follows a character other than a letter. Letters that are not capitalized by PROPER are reduced to lower case. 562 Function reference For example: PROPER("no smoking") returns "No Smoking" PROPER("NO SMOKING") returns "No Smoking" PROPER("Leonardo’s masterPiece") returns "Leonardo’S Masterpiece" REPLACE(old_text, start_num, num_chars, new_text) The REPLACE function replaces characters within text. This enables you to replace a specified text string with another text string. old_text contains the string which is to be replaced. start_num gives the number of the character at which the replacement is to begin. num_chars is the number of characters to be replaced. new_text is the text that will replace the relevant string in old_text. For example: REPLACE("November", 1, 3, "Dec") returns "December" REPLACE("Mr Bill Clinton", 1, 7, "President") returns "President Clinton" REPT(text, number_times) The REPT function repeats text a given number of times. For example, REPT("x", 5) returns "xxxxx". RIGHT(text, num_chars) The RIGHT function returns the right-most characters from a text string. num_chars is the number of characters from the right of the text string. If this is omitted it is assumed to be 1. If it is greater than the number of characters in text then RIGHT will return the whole text string. For example, RIGHT("New York", 4) returns "York" RIGHT("Washington", 20) returns "Washington" 563 Function reference SEARCHTEXT(find_text, within_text, start_num) The SEARCHTEXT function finds one text string within another and returns the position of the character at which the two text strings first match. SEARCHTEXT is case-insensitive and allows wildcard characters (* or ?) (This differs from FINDTEXT – see FINDTEXT on page 559). If you wish to search for the characters * or ? themselves, use ~* or ~?. find_text is the text you wish to find. If find_text is "" (empty) the position of the character at start_num is returned. within_text is the object text. start_num is the position of the character in within_text from which you want to begin the search. If start_num is omitted it is assumed to be 1. The #VALUE error message is returned if SEARCHTEXT fails to find a match. For example, =SEARCHTEXT("br", "AbraCADaBRa", 5) returns 9 =SEARCHTEXT("r", "Robertson", 1) returns 1 =SEARCHTEXT("R*t", "Robertson", 1) returns 1 =SEARCHTEXT("", "Mr Smith", 4) returns 4 =SEARCHTEXT("~*", "XXXX*XX") returns 5 SUBSTITUTE(text, old_text, new_text, instance_num) The SUBSTITUTE function substitutes new text for old text in a text string. This enables you to replace a specified text string with another text string (see REPLACE on page 562 if you wish to replace text at a specific location in a text string). text contains the text string that is to be replaced. old_text is the text that is to be replaced. new_text is the text that is to be substituted for old_text. instance_num specifies which instance of old_text is to be replaced (if this is omitted all instances of old_text are replaced). For example: SUBSTITUTE("Happy New Year", "New Year", "Birthday") 564 Function reference returns "Happy Birthday" SUBSTITUTE("Apri1/1/1997", "9", "8", 2) returns "April/1/1987" SUBSTITUTE(SUBSTITUTE("(x + y)/(x - y)", "(", "["), ")", "]") returns "[x + y]/[x - y]" T(value) The T function returns its argument if it is text, otherwise it converts a value to text. This is not a function that will often be needed, since Ability automatically converts most values as necessary in formulas. For example: T("FALSE") returns "FALSE" T(FALSE) returns "FALSE" T(1000) returns "1000" This function is the reverse of VALUE (see VALUE on page 564). TRIM(text) The TRIM function removes spaces from text, except single spaces between words. For example TRIM("Dear Mr Clinton") returns "Dear Mr Clinton". UPPER(text) The UPPER function converts text to uppercase. For example: UPPER("hello") returns "HELLO". VALUE(text) The VALUE function converts a text argument to a number. 565 Function reference For example, VALUE("222") returns 222. This function is the reverse of T(value) (see T(value) on page 564). Document functions You can use Ability’s built-in document functions to display information about the document in which you are currently working. This is useful if you want a print-out to contain document information within the document itself. The document functions directly access the information in Summary and Statistics contained in Properties under the File menu. Here is a complete list of document functions in Ability: Function AUTHOR on page 566 COMMENTS on page 127 CREATEDATE on page 566 EDITTIME on page 566 FILENAME on page 566 FILESIZE on page 566 KEYWORDS on page 566 MERGECOUNT on page 567 MERGEREC on page 567 NUMCHARS on page 567 NUMPAGES on page 567 NUMWORDS on page 567 PAGE on page 567 PRINTDATE on page Operation returns author from Summary Information returns comments from Summary Information returns the date document was created from Statistics returns the total document editing time from Statistics returns the document name and location returns the size on the disk of the document returns keywords from Summary Information returns the total number of merge records in the document returns the number of the current merge record returns the number of characters in the document from Statistics (only applies to Write) returns the number of pages in the document from Statistics returns the number of words in the document from Statistics (only applies to Write) returns the number of the current page in the document returns the date the document was last printed from 566 Function reference 567 REVNUM on page 567 SAVEDATE on page Error! Bookmark not defined. SUBJECT on page 568 TITLE on page 129 Statistics returns the number of times the document has been saved from Statistics returns the date the document was last saved from Statistics returns the subject of the document from Summary Information returns the title of the document from Summary Information AUTHOR() Returns the author’s name. This is taken directly from the Summary page under the File/Properties menu. COMMENTS() Returns document comments. This is taken directly from the Summary page under the File/Properties menu. CREATEDATE() Returns the date the document was created. This is taken directly from the Statistics page under the File/Properties menu. EDITTIME() Returns the total document editing time. This is taken directly from the Statistics page under the File/Properties menu. FILENAME() Returns the document name and location. FILESIZE() Returns the number of bytes the document occupies on disk. KEYWORDS() Returns the document keywords. This is taken directly from the Summary page under the File/Properties menu. 567 Function reference MERGECOUNT() Returns the total number of merge records in the document. If mail merge is enabled, this is the total number of records in the current mail merge. (A tick will show next to Mail merge on the Tools menu). If mail merge is not enabled, returns #VALUE. MERGEREC() Returns the number of the current merge record, providing mail merge is enabled. (A tick will show next to Mail merge on the Tools menu). If mail merge is not enabled, returns #VALUE. NUMCHARS() Returns the total number of characters in current document. This is taken directly from the Statistics page under the File/Properties menu. NUMPAGES() Returns the number of pages in the current document. This is taken directly from the Statistics page under the File/Properties menu. NUMWORDS() Returns the number of words in the current document. This is taken directly from the Statistics page under the File/Properties menu. PAGE() Returns the number of the current page in the document. PRINTDATE() Returns the date the document was last printed. This is taken directly from the Statistics page under the File/Properties menu. REVNUM() Returns the number of times the document has been saved. This is taken directly from the Statistics page under the File/Properties menu. 568 Function reference SAVEDATE() Returns the date the document was last saved. This is taken directly from the Statistics page under the File/Properties menu. SUBJECT() Returns the subject of the document. This is taken directly from the Summary page under the File/Properties menu. TITLE() Returns the title of the current document. This is taken directly from the Summary page under the File/Properties menu. Remote functions You can use Ability’s built-in remote functions to work with information from other documents. These allow you to display, manipulate and edit external information in the current document. The remote functions are useful when you need to access external database, spreadsheet or write information from a current spreadsheet or write document. Most of the remote functions call on a database object. This is a table, query, relation or SQL statement. Here is a complete list of remote functions in Ability: DBFIELDCOUNT on page 569 DBFIELDNAME on page 569 DBFILTER on page 569 DBFILTERSORT on page 571 DBGET on page 572 DBQUERYCOUNT on page 573 DBQUERYNAME on page 573 DBRELATIONCOUNT on page 573 DBRELATIONNAME on page 574 DBSORT on page 574 DBSQL on page 575 DBSQLFILTER on page 576 DBSQLSORT on page 578 DBSQLFILTERSORT on page 579 DBTABLECOUNT on page 581 DBTABLENAME on page 581 HYPERLINK on page 581 REMOTE on page 582 SSGET on page 586 WPGET on page 587 569 Function reference DBFIELDCOUNT(database, source) The DBFIELDCOUNT function returns the number of fields in a database object. database is the name of a database and must include the full path if not in the same directory as the open document. source is the name of the database object, which can be a table, query, relation or SQL statement. For example, if there is a database called wineshop.adb in a folder c:\ability\samples, which contains a table called Contacts, then: DBFIELDCOUNT("c:\ability\samples\wineshop.adb", "Contacts") returns the number of fields. DBFIELDNAME(database, source, index) The DBFIELDNAME function returns the name of a field in a database object. database is the name of a database and must include the full path if not in the same directory as the open document. source is the name of the database object, which can be a table, query, relation or SQL statement. index is a field number. The function arguments are case insensitive. For example, if there is a database called wineshop.adb in a folder c:\ability\samples, which contains a table called Contacts, then: DBFIELDNAME("c:\ability\samples\wineshop.adb", "Contacts", 1) returns the name of the first field in the table. DBFILTER(database, table, filter, field_name, rec_num) The DBFILTER function returns the contents of a field from a database table, after a specified named filter has been applied. This requires that the filter has already been defined in Database. This contrasts with DBSQLFILTER (see DBSQLFILTER on page 576), which is similar in functionality but allows you to define simple filters "on-the-fly". 570 Function reference database is the name of a database and must include the full path if not in the same directory as the open document. table is the name of the table within the database. table could also be the name of a relation. filter is the named filter that has been applied to the table or relation. field_name is optional and can be either the name of the field within a table or relation or the column number. If omitted, every row and column of the filtered table is returned. rec_num is optional (and cannot be specified if field_name is omitted) and determines the record or row number of the returned value. If omitted, the entire column is returned (or table if field_name is also omitted). The function arguments are case insensitive. For example, a database called wineshop, located in a folder c:\ability\samples, contains a Product table of wines. A filter called Red has been defined that filters out all wines other than red. The table contains the name of each wine in a Title field and the price in a field called Price as follows: Title Château Haut du Puy Volnay-Santenots Le Chambertin Chambolle-Musigny Price 17.00 27.00 53.00 28.50 Classification red red red red DBFILTER can be used to obtain the following results: DBFILTER("c:\ability\samples\wineshop.adb", "products", "red") returns "Château Haut du Puy" as this is the first column and row off the filtered table. DBFILTER("c:\ability\samples\wineshop.adb", "products", "red", 1, 3) returns "Le Chambertin", as this is the value from 3rd row and 1st column. DBFILTER("c:\ability\samples\wineshop.adb", "products", "red", "price", 2) returns 27, the 2nd record of the Price column. AVG(DBFILTER("c:\ability\samples\wineshop.adb", "products", "red", "price")) returns 31.375 - the average price of red wine. ROWS(DBFILTER("c:\ability\samples\wineshop.adb", "products", "red")) returns 12, the total number of records in the filtered table. 571 Function reference DBFILTERSORT(database, table, filter, sort, field_name, rec_num) The DBFILTERSORT function returns the contents of a field from a database table after a specified named filter and sort order have been applied. This requires that the filter and sort order have already been defined in Database. This contrasts with DBSQLFILTERSORT (see DBSQLFILTERSORT on page 579), which is similar in functionality but allows you to define simple filters and sort orders "on-the-fly". database is the name of a database and must include the full path if not in the same directory as the open document. table is the name of the table within the database. table could also be the name of a relation. filter is the named filter that has been applied to the table or relation. sort is the named sort order that has been applied to the table or relation. field_name is optional and can be either the name of the field within a table or relation or the column number. If omitted, every row and column of the filtered table is returned. rec_num is optional (and cannot be specified if field_name is omitted) and determines the record or row number of the returned value. If omitted, the entire column is returned (or table if field_name is also omitted). The function arguments are case insensitive. For example, a database called wineshop, located in a folder c:\ability\samples, contains a Product table of wines. A filter called Red has been defined that filters out all wines other than red. The table contains the name of each wine in a Title field and the price in a field called Price as follows: Title Château Haut du Puy Volnay-Santenots Le Chambertin Chambolle-Musigny Price 17.00 27.00 53.00 28.50 Classification red red red red A sort order called ByPrice has been created that sorts in ascending order the price field. DBFILTERSORT can be used to obtain the following results: DBFILTERSORT("c:\ability\samples\wineshop.adb", "products", "red", "byprice") 572 Function reference returns "Château Haut du Puy" as this is the first column and row off the filtered table when sorted by price. DBFILTERSORT("c:\ability\samples\wineshop.adb", "products", "red", "byprice", 1, 3) returns " Chambolle-Musigny", as this is the 3rd cheapest wine. DBFILTERSORT("c:\ability\samples\wineshop.adb", "products", "red", "byprice", "price", 2) returns the price of the second cheapest wine, 27. DBGET(database, source, field_name, rec_num) The DBGET function returns the contents of a field in a database. database is the name of a database and must include the full path if not in the same directory as the open document. source is the name of the database object, which can be a table, query, relation or SQL statement. field_name is optional and can be either the name of the field within a table or relation or the column number. If omitted, every row and column of the filtered table is returned. rec_num is optional (and cannot be specified if field_name is omitted) and determines the record or row number of the returned value. If omitted, the entire column is returned (or table if field_name is also omitted). The function arguments are case insensitive. For example, a database called wineshop, located in a folder c:\ability\samples, contains a table called Products, which details a list of wines. The table contains three fields as follows: Title Château Haut du Puy Volnay-Santenots Le Chambertin Chambolle-Musigny Price 17.00 27.00 53.00 28.50 Classification red red red red DBGET can be used in the following ways: DBGET("c:\ability\samples\wineshop.adb", "products", 1, 1) returns "Château Haut du Puy", the first field from the first record. DBGET("c:\ability\samples\wineshop.adb", "products", "price", 3) 573 Function reference returns 53.00, the Price field from record three. SUM(DBGET("c:\ability\samples\wineshop.adb", "products", "price")) returns 125.50, the sum of the Price field. DBQUERYCOUNT(database) The DBQUERYCOUNT function returns the number of queries in a database. database is the name of a database and must include the full path if not in the same directory as the open document. For example, a database called wineshop, located in a folder c:\ability\samples, contains a three queries: DBQUERYCOUNT("c:\ability\samples\wineshop.adb") will return 3. DBQUERYNAME(database, index) The DBQUERYNAME function returns the name of a specified query in a database. database is the name of a database and must include the full path if not in the same directory as the open document. index is the query number, starting at 1. For example, you know a database called wineshop, located in a folder c:\ability\samples, contains at least one query: DBQUERYNAME("c:\ability\samples\wineshop.adb", 1) returns the name of the first query in the database. Suppose you enter "c:\ability\samples\wineshop.adb" into a cell in a spreadsheet, say A1. Then the following: DBQUERYNAME(A1, DBQUERYCOUNT(A1)) returns the name of the last query. DBRELATIONCOUNT(database) The DBRELATIONCOUNT function returns the number of relations in a database. database is the name of a database and must include the full path if not in the same directory as the open document. 574 Function reference For example, a database called wineshop, located in a folder c:\ability\samples, contains a four relations: DBRELATIONCOUNT("c:\ability\samples\wineshop.adb") will return 4. DBRELATIONNAME(database, index) The DBRELATIONNAME function returns the name of a specified relation in a database. database is the name of a database and must include the full path if not in the same directory as the open document. index is the relation number, starting at 1. For example, you know a database called wineshop, located in a folder c:\ability\samples, contains at least one relation: DBRELATIONNAME("c:\ability\samples\wineshop.adb", 1) returns the name of the first relation in the database. Suppose you enter "c:\ability\samples\wineshop.adb" into a cell in a spreadsheet, say A1. Then the following: DBRELATIONNAME(A1, DBRELATIONCOUNT(A1)) returns the name of the last relation. DBSORT(database, table, sort, field_name, rec_num) The DBSORT function returns the contents of a field from a database table, after a specified named sort order has been applied. This requires that the sort order has already been defined in Database. This contrasts with DBSQLSORT (see DBSQLSORT on page 578), which is similar in functionality but allows you to define simple sort orders "on-the-fly". database is the name of a database and must include the full path if not in the same directory as the open document. table is the name of the table within the database. table could also be the name of a relation. sort is the named sort order that has been applied to the table or relation. 575 Function reference field_name is optional and can be either the name of the field within a table or relation or the column number. If omitted, every row and column of the filtered table is returned. rec_num is optional (and cannot be specified if field_name is omitted) and determines the record or row number of the returned value. If omitted, the entire column is returned (or table if field_name is also omitted). The function arguments are case insensitive. For example, a database called wineshop, located in a folder c:\ability\samples, contains a Product table of wines. A sort order called ByPrice has been defined acting in ascending order on the Price field. The unsorted table looks like: Title Château Haut du Puy Volnay-Santenots Meursault-Charmes Le Chambertin Chambolle-Musigny Price 17.00 27.00 54.00 53.00 28.50 Classification red red white red red DBSORT can be used to obtain the following results: DBSORT("c:\ability\samples\wineshop.adb", "products", "byprice") returns "Château Haut du Puy" as this is the first column and row of the table when sorted by price. DBSORT("c:\ability\samples\wineshop.adb", "products", "byprice", 1, 3) returns " Chambolle-Musigny", as this is the 3rd cheapest wine. DBSORT("c:\ability\samples\wineshop.adb", "products", "byprice", "price", 2) returns the price of the second cheapest wine, 27. DBSQL(database, SQL_statement, field_name, rec_num) The DBSQL function returns the value of an SQL query. database is the name of a database and must include the full path if not in the same directory as the open document. SQL_statement is a text string containing the full syntax of a SQL statement. field_name is optional and can be either the name of the field within a table or relation or the column number. If omitted, every row and column of the filtered table is returned. 576 Function reference rec_num is optional (and cannot be specified if field_name is omitted) and determines the record or row number of the returned value. If omitted, the entire column is returned (or table if field_name is also omitted). The function arguments are case insensitive with the exception that SQL commands within SQL_statement should all be upper case. For example, a database called wineshop, located in a folder c:\ability\samples, contains a Product table of wines. Products contains three fields as follows: Title Château Haut du Puy Volnay-Santenots Meursault-Charmes Le Chambertin Chambolle-Musigny Price 17.00 27.00 54.00 53.00 28.50 Classification red red white red red DBSQL can be used to obtain the following results: DBSQL("c:\ability\samples\wineshop.adb", "SELECT * FROM products") returns the entire table. "Château Haut du Puy", is displayed as it is contents of the first column from the first record. DBSQL("c:\ability\samples\wineshop.adb", "SELECT * FROM products", 3, 3) returns "white", the third column from the third record. ROWS(DBSQL("c:\ability\samples\wineshop.adb", "SELECT Price FROM products WHERE Price > 50")) returns 2, since there are two wines over 50. The examples given here only touch on the possibilities with SQL. For a general introduction to SQL, with the full range of supported SQL commands in Ability, see the SQL Reference Guide on page 464. DBSQLFILTER(database, table, filter, field_name, rec_num) The DBSQLFILTER function returns the value of a database SQL query that applies a filter. database is the name of a database and must include the full path if not in the same directory as the open document. table is the name of the table within the database. table could also be the name of a relation. 577 Function reference filter is a text string containing an SQL filter statement and takes the general form of fieldname <operator> comparison. The following could all be used in the examples below: filter meaning Price = 50 Price exactly equal to 50 Price >= 50 Price greater than or equal to 50 Price > 25 AND Price < 50 Price less than 50 but greater than 25 Classification = 'red' Classification exactly equal to 'red' Title LIKE 'Château*' Title begins with ' Château' where * is a wildcard field_name is optional and can be either the name of the field within a table or relation or the column number. If omitted, every row and column of the filtered table is returned. rec_num is optional (and cannot be specified if field_name is omitted) and determines the record or row number of the returned value. If omitted, the entire column is returned (or table if field_name is also omitted). The function arguments are case insensitive with the exception of SQL operators within the filter statement, which must be upper case. For example, a database called wineshop, located in a folder c:\ability\samples, contains a Product table of wines. Products contains three fields as follows: Title Château Haut du Puy Volnay-Santenots Meursault-Charmes Le Chambertin Chambolle-Musigny Price 17.00 27.00 54.00 53.00 28.50 Classification red red white red red DBSQLFILTER can be used to obtain the following results: DBSQLFILTER("c:\ability\samples\wineshop.adb", "products", "Classification = 'white' ") returns "Meursault-Charmes", as this is the contents of the first column from the first (and only in this case) record that matches the filter condition. Note that the filter parameter is surrounded by double quotes and the text that Classification is compared to - 'white' - is in single quotes. This is necessary to distinguish the end of each text string respectively. 578 Function reference DBSQLFILTER("c:\ability\samples\wineshop.adb", "products", "Classification = 'red' ", 2, 3) returns 53.00, the second column from the third record that matches the filter. ROWS(DBSQLFILTER("c:\ability\samples\wineshop.adb", "products", "Price > 50", "Price")) returns 2, since there are two wines over 50. Note that DBSQLFILTER(database, table, filter, column, record) is equivalent to DBSQL (see DBSQL on page 575) as follows: DBSQL(database, "SELECT * FROM <table> WHERE <filter>", column, record). For more details on how to build valid filter conditions, see the SQL primer. DBSQLSORT(database, table, sort, field_name, rec_num) The DBSQLSORT function returns the value of a database SQL query that applies a sort order. database is the name of a database and must include the full path if not in the same directory as the open document. table is the name of the table within the database. table could also be the name of a relation. sort is a text string containing an SQL sort statement. This is a field name or names with an optional "DESC" to reverse the default ascending order. field_name is optional and can be either the name of the field within a table or relation or the column number. If omitted, every row and column of the filtered table is returned. rec_num is optional (and cannot be specified if field_name is omitted) and determines the record or row number of the returned value. If omitted, the entire column is returned (or table if field_name is also omitted). The function arguments are case insensitive. For example, a database called wineshop, located in a folder c:\ability\samples, contains a Product table of wines. Products contains three fields as follows: Title Château Haut du Puy Price 17.00 Classification red 579 Function reference Volnay-Santenots Meursault-Charmes Le Chambertin Chambolle-Musigny 27.00 54.00 53.00 28.50 red white red red DBSQLSORT can be used to obtain the following results: DBSQLSORT("c:\ability\samples\wineshop.adb", "price DESC") returns "Meursault-Charmes", the first column of the first record of the table when sorted by Price in descending order. DBSQLSORT("c:\ability\samples\wineshop.adb", "price", 2, 3) returns 27.00, the second cheapest wine price. Note that: DBSQLSORT(database, table, sort, column, record) is equivalent to using DBSQL (see DBSQL on page 575) as follows: DBSQL(database, "SELECT * FROM <table> ORDER BY <sort>", column, record) DBSQLFILTERSORT(database, table, filter, sort, field_name, rec_num) The DBSQLFILTERSORT function returns the value of a database SQL query that applies a filter and a sort order. database is the name of a database and must include the full path if not in the same directory as the open document. table is the name of the table within the database. table could also be the name of a relation. filter is a text string containing an SQL filter statement and takes the general form of fieldname <operator> comparison. The following could all be used in the examples below: filter meaning Price = 50 Price exactly equal to 50 Price >= 50 Price greater than or equal to 50 Price > 25 AND Price < 50 Price less than 50 but greater than 25 580 Function reference Classification = 'red' Classification exactly equal to 'red' Title LIKE 'Château*' Title begins with 'Château' where * is a wildcard sort is a text string containing an SQL sort statement. This is a field name or names with an optional "DESC" to reverse the default ascending order. field_name is optional and can be either the name of the field within a table or relation or the column number. If omitted, every row and column of the filtered table is returned. rec_num is optional (and cannot be specified if field_name is omitted) and determines the record or row number of the returned value. If omitted, the entire column is returned (or table if field_name is also omitted). The function arguments are case insensitive with the exception of SQL operators within the filter statement, which must be upper case. For example, a database called wineshop, located in a folder c:\ability\samples, contains a Product table of wines. Products contains three fields as follows: Title Château Haut du Puy Volnay-Santenots Meursault-Charmes Le Chambertin Chambolle-Musigny Price 17.00 27.00 54.00 53.00 28.50 Classification red red white red red DBSQLFILTER can be used to obtain the following results: DBSQLFILTERSORT("c:\ability\samples\wineshop.adb", "products", "classification = 'red' ","price DESC") Returns "Le Chambertin", the most expensive red wine. DBSQLFILTER("c:\ability\samples\wineshop.adb", "products", "classification = 'red' ", "price", 2, 3) returns 28.50, the second column from the third cheapest, red wine. Note that: DBSQLFILTERSORT(database, table, filter, sort, column, record) is equivalent to using DBSQL (see DBSQL on page 575) as follows: DBSQL(database, "SELECT * FROM <table> WHERE <filter> ORDER BY <sort>", column, record) 581 Function reference DBTABLECOUNT(database) The DBTABLECOUNT function returns the number of tables in a database. database is the name of a database and must include the full path if not in the same directory as the open document. For example, if a database called wineshop. located in a folder c:\ability\samples, contains seven tables, then DBTABLECOUNT("c:\ability\samples\wineshop.adb") will return 7. DBTABLENAME(database, index) The DBTABLENAME function returns the name of a specified table in a database. database is the name of a database and must include the full path if not in the same directory as the open document. index is the table number, starting at 1. For example, you know a database called wineshop, located in a folder c:\ability\samples, contains at least one table: DBTABLENAME("c:\ability\samples\wineshop.adb", 1) returns the name of the first table in the database. Suppose you enter "c:\ability\samples\wineshop.adb" into a cell in a spreadsheet, say A1. Then the following: DBTABLENAME(A1, DBTABLECOUNT(A1)) returns the name of the last table. HYPERLINK(link location, friendly name) Creates a hyperlink jump to a remote document specified by link location. The remote document could be any local file (a Write document or spreadsheet) or a URL to an Internet location. Friendly name is an optional parameter that masks the actual link details with more meaningful text. If friendly name is omitted, the function displays the link location. HYPERLINK is different to all other functions in that it creates an interface componant for the user – as the mouse pointer is moved over the text it will change into a pointer and by 582 Function reference default, the text is displayed in a blue underlined font. HYPERLINK is very similar to links used in web pages. Examples: =HYPERLINK(“http://www.ability.com/”) Displays http://www.ability.com/ and opens the web site using the default browser. =HYPERLINK("http://www.ability.com/", "Ability's web site") Displays Ability's web site but otherwise behaves exactly as above. =HYPERLINK(A1, A2) Displays whatever is in A2 and opens the file/URL defined in A1. =HYPERLINK("c:\my documents\myfile.aww", "My text file") Runs Write and opens the file myfile.aww Note: if the link location points to a local document, the associated program will be launched to open the file. For example if you have Microsoft's Paint as the default editor for all bmp (bitmap) files, then Paint would be launched if HYPERLINK specified a file with a .bmp extension. REMOTE(document_name, reference_name) The REMOTE function returns the value of a remote object. Usually this means the value of a cell in a spreadsheet or a field in a document. REMOTE is the "grandfather" of all linking functions - every other remote function can be expressed using just REMOTE. document_name is the name of a remote document and must include the full path if not in the same directory as the open document. The document can be a spreadsheet, database or word processing document. reference_name is the name of the object whose value is sought. An object can be a named field in a write or spreadsheet document, a cell or range reference in a spreadsheet, or a table, query, relation or SQL statement in a database. Note that there are easier-to-use functions that will achieve the same result, as follows: WPGET on page 587 for linking to Write SSGET on page 586 for linking to Spreadsheet 583 Function reference DBGET on page 572 for linking to Database Here are some simple examples, using REMOTE to link to spreadsheets and write documents. REMOTE("c:\ability\samples\letter.aww", "myfield") returns the value of the field myfield from the Write document letter.aww. REMOTE("c:\ability\samples\income.aws", "A1") returns the value of the cell A1 from the spreadsheet income.aws. REMOTE("spread1", "C1..E17")) returns the range C1..E17 from an untitled spreadsheet, Spread1. Note that since Spread1 has not yet been saved it does not have an extension. Using REMOTE for database linking is usually unnecessary, as there is a full range of specific database linking functions. The full syntax for REMOTE, including database links, is as follows: Application reference_name Write reference_name is a field, usually inserted into a write document in order to perform calculations, or to establish a link to a spreadsheet cell or database field. For example, to get the value of a field called "daysales" in a write document called "report.aww", in the current directory, use the formula: REMOTE("report.aww", "daysales") 584 Function reference Spreadsheet reference_name is either: cell reference ("A1") range reference ("A1..C3") range name ("myrange") Spreadsheet documents are made up of cells. Groups of these are called ranges and can be named. It is possible to refer to a cell, a range of cells or a named range. Spreadsheet also allows fields, which enable links to be established with other Ability applications, for example, when using mail merge, or with other fields in the same spreadsheet. All these are spreadsheet objects that can be referred to by REMOTE. For example, to get the value of the cell reference B21 in a spreadsheet called "manager", in the current directory, use the formula: REMOTE("manager.aws", "B21") 585 Function reference Database reference_name is either: table query relation SQL statement In addition, a filter and/or sort order can be applied to the object and it is possible to extract a specific field or record. The syntax for tables is: "table !sort_order !filter !field_name !record_number" The syntax for queries is: "query !!!field_name !record_number" The syntax for relations is: "relation !sort_order !filter !field_name !record_number" The syntax for SQL statements is: "SQL_statement !!!field_name !record_number" Note that reference_name must consist of exactly one database object, namely a table, query, relation or SQL statement. This is optionally followed by a combination of database query components (sort order, filter) and specific locations (field name, record number). Each query component and location following the database object must be prefixed by an exclamation mark - !. Tables and relations can have a sort_order and filter applied to them, and refer to a field_name and record_number; queries and SQL statements can refer to a field_name and record_number, but are always empty for sort_order and filter. The arguments of reference_name are always entered in the same order, namely sort_order, filter, field_name and record_number. If any of these are empty, the ! must still be entered in the reference, but only up to the last argument used in the reference. For instance, if the reference is to a field_name in a table, but no sort_order, filter or record_number is specified, then reference_name contains table and field_name, which is prefixed by !, and !! to stand for the two empty query components between these. No ! is needed, however, for the missing record_number, since this comes after 586 Function reference Examples: REMOTE("c:\ability\samples\mydata.adb", "Employee") returns the table Employee from the database mydata.adb. REMOTE("c:\ability\samples\mydata.adb", "Customer!ByCity") returns the table Customer from the database mydata.adb with saved sort order ByCity applied. REMOTE("c:\ability\samples\mydata.adb", "Customer!ByCity!UpperHalf") returns the table Customer from the database mydata.adb with saved filter UpperHalf and sort order ByCity applied. REMOTE("c:\ability\samples\mydata.adb", "Customer!ByCity!UpperHalf!Company") returns the field Company from table Customer from the database mydata.adb with saved filter UpperHalf and sort order ByCity applied. REMOTE("c:\ability\samples\mydata.adb", "Customer!ByCity!UpperHalf!Company!12") returns the 12th record from field Company from table Customer from the database mydata.adb, with saved filter UpperHalf and sort order ByCity applied. REMOTE("c:\ability\samples\mydata.adb", "Employee!!!LAST_NAME!3") returns the third last name from table Employee from the database mydata.adb. REMOTE("c:\ability\samples\mydata.adb", "QCalc!!!!2") returns the second record from the query QCalc from the database mydata.adb. REMOTE("c:\ability\samples\mydata.adb", "JoinOnCustID!!HANOP") returns the relation JoinOnCustID from the database mydata.adb with applied filter HANOP. REMOTE("c:\ability\samples\mydata.adb", "SELECT Quantity FROM Orders WHERE CustID = BERGS") returns the range of quantities from Orders table from the database mydata.adb where CustID = BERGS. SSGET(spreadsheet, reference) The SSGET function returns the contents of a cell (or cells) from a spreadsheet. SSGET can be used from within Write documents, Spreadsheet files and Database forms. 587 Function reference spreadsheet is the name of a spreadsheet and must include the full path if not in the same directory as the open document. The spreadsheet extension (.aws) is not required. reference can be a cell, range or named cell or range. Both parameters need to be surrounded by quotes if supplied as direct references into the function. For example: =SSGET("sales", "A1") returns the contents of cell A1 in a spreadsheet called sales, which must reside in the current directory. =SSGET(B1, B2) would return the same if cells B1 and B2 simply contain the text sales and A1 respectively. =SUM(SSGET("sales", "C1..C10")) returns the sum of cells C1 through C10. If C1 through C10 were named as a range called totalsales, then the following function would be identical to the above: =SUM(SSGET("sales", "totalsales")) To return a cell from a spreadsheet in a specific directory, use the full path as follows: =SSGET("C:\My Documents\sales", "A1") WPGET(document, fieldname) The WPGET function returns the contents of a field from a Write document. WPGET can be used from within Write documents, Spreadsheet files and Database forms. document is the name of a document and must include the full path if not in the same directory as the open document. The document extension (.aww) is not required. fieldname is the name of the required field. Both parameters need to be surrounded by quotes if supplied as direct references into the function. For example: =WPGET("myreport", "myfield") returns the contents of the field named myfield in the Write document called myreport, which must reside in the current directory. 588 Function reference =WPGET(targetdoc, targetfld) would return the same if the local fields targetdoc and targetfld simply contain the text myreport and myfield respectively. To return a field from a document in a specific directory, use the full path as follows: =WPGET("C:\My Documents\myreport", "myfield") 589 Index Index - symbol in formulas, 484 #FUNC indicator;#DIV0 indicator;#REF indicator, 485 #VALUE indicator;#FUNC indicator, 485 $ sign in absolute addresses, 132 % symbol in formulas, 484 & logical operator, 483 ( ) symbol in formulas, 484 * symbol in formulas, 484 / symbol in formulas, 484 ^ symbol in formulas, 484 | logical operator, 483 ~ logical operator, 483 ~= relational operator, 484 + symbol in formulas, 484 < relational operator, 484 <= relational operator, 484 <> relational operator, 484 = relational operator, 484 > relational operator, 484 >= relational operator, 484 3D effect for text boxes, 392 A brief note on the Item property of a range, 438 A Write macro tutorial, 432 Ability exiting, 8 removing, 7 starting, 8 Ability Launcher, 29 Ability Photopaint (apx), 356 Ability:, 6 ABS(x), 514 Absolute addresses, 132 Absolute values, 514 ACCRINTM(issue, settlement, rate, par, basis), 494 ACOS(x), 527 ACOSH(x), 515 ACOTAN(x), 527 ACOTANH(x), 515 Adding a shape, 386 Adding an application using Launcher, 31 Adding enumerated field types, 180 Adding Launcher to the startup group, 32 Adding multiple records using SQL, 477 Adding records using SQL, 477 ADDRESS(row_number, column_number, abs_mode), 529 Addresses of cells, 96 Adjust Image, 330 Adobe tagged (tif), 356 Aggregate functions using SQL;GROUP BY, 470 Airbrush, 286 Alias/Wavefront (pix), 357 Align command in Draw, 394 Align toolbar, 384 Aligning objects, 394 Aligning paragraphs, 43 Alignment text boxes in Draw, 393 Alignment in database fields, 206 Allow zero length, 188 Allow zerolength property, 188 Allow zero-length property, 188 Amiga IFF (iff ilbm), 357 An introduction to the VBScript language, 458 AND operator, 483 AND(list of logical conditions), 512 Appending imported tables, 267 Applications launching, 30 apx, 356 Arcs in Draw, 388 Area chart, 152 AREAS(list), 530 Arithmetical operators, 484 Arithmetical operators in Spreadsheet, 130 Arrays, 482 Arrow tool, 389 AS, 465 ASIN(x), 527 ASINH(x), 515 ATAN(x), 527 ATAN2(x, y), 528 ATANH(x), 515 Attached charts, 157 AUTHOR(), 566 Auto captions, 65 Auto form, 232 Auto Levels, 331 Auto report, 250 detail of, 251 opening, 250 Autocalc, 134 Auto-Calculate, 135 Automatic totals, 133 Automating Ability from other programs, 443 automation Write, 444 Automation OLE in Database, 445 590 Index Spreadsheet, 444 Autospell, 148 Autosum, 133 AVEDATE(), 568 AVEDEV(list), 537 AVERAGE(list) or AVG(list), 538 Backcolor, 391 Background layer, 318 Backgrounds, 46 Backing up your data, 17 Backup files, 89 Best Fit button in Spreadsheet, 115 Bezier Curve, 367 BINOMDIST(number, trials, probability, cumulative), 538 Bitmap, 412 Bitmap (bmp dib rle), 357 Blank entries selecting using SQL, 470 Blending between layers, 324 examples, 325 Blending brush strokes, 295 Blur, 289 BMP, 412 Bold button, 40 Boolean calculated field example, 179 Boolean field, 179 Boolean formats, 110 Borders, 112 around cells in Spreadsheet, 112 formatting in a table, 205 style for text boxes, 392 Borders offset, 47 toolbar, 35 Borders :, 46 Borders and background dialog, 47 Brightness/Contrast, 337 Bring To Front command, 394 Browse mode, 197 in forms, 233 in tables, 197 Browsing through the database table, 235 Brush Editor Edit brush, 349 Brush modes, 295 Brush style, 391 Brushes, 294 B-spline selection, 277 Bulleted and numbered paragraphs, 68 Bulleted paragraphs and lists, 69 Bullets, 68 modifying, 69 removing, 70 Burn, 291 Buttons changing on toolbars, 19 creating new on toolbar, 20 Calculated data type, 182 in a relation, 184 in a table, 183 Calculated fields naming using SQL, 465 Calculating current selection, 134 Calculations in a filtered table, 210 Calculations in tables, 208 Callouts, 57 creating, 58 deleting, 62 modifying, 62 Cancel button, 94 Canvas size, 342 Captions, 64, 186 Caret in text arguments, 482 Case changing, 42 Cell addresses, 96 Cell error indicators, 485 Cell ranges, 96 Cells, 96 absolute addresses, 132 addresses, 96 alignment, 105 color of background, 111 definition of, 96 deleting, 124 entering currency, 101 entering dates, 102 entering text, 100 entering time, 102 entering values, 101 erasing, 125 filling automatically, 122 font and style, 104 height of, 116 hiding, 114 inserting, 124 locking, 114 merging and splitting, 128 moving to, 95 naming, 137 numeric formats, 106 ranges, 96 #CIRC indicator;Error indicators in cells, 485 #REF indicator;#CIRC indicator;Error indicators in cells, 485 Error indicators in cells, 485 Cells, error indicators, 485 Center button, 43 Changing case, 42 Changing or removing names of cells, 138 Changing the column width, 208 Changing the grid style, 207 Changing the screen view, 23 Changing the size of a window, 27 CHAR(number), 558 Character data type, 169 Character field, 169 591 Index Character field size, 170 Chart, 151 Chart wizard, 151 Charts attached, 157 creating, 151 editing, 157 gallery of styles, 152 horizontal series, 156 inserting into Write, 411 moving embedded charts, 158 printing, 158 resizing embedded charts, 158 stacked, 152 type of (style), 152 vertical series, 156 Check box control type, 416 CHOOSE(index_num, list), 530 Circles in Draw, 387 CLEAN(text), 558 Clear command, 125 Clearing a format, 110 Clearing formulas, 133 Clicking, 24 Closing a database, 163 Closing applications using the Launcher, 31 Closing windows, 26 CODE(text), 558 Background color foregroun, 271 Color formatting in a table, 204 Color foreground and background, 271 Color Balance, 335 Color fill tools, 296 Color of background of cells in a spreadsheet, 111 Color picker, 300 Color properties of draw objects, 391 Color selection, 271 Color toolbar, 384 Colors setting in Write, 90 Column titles renaming using SQL, 465 Column width changing in Database, 208 COLUMN(ref), 530 Columns, 55, 213 chart, 152 column breaks, 57 creating, 56 formatting, 56 hiding and showing, 213 hiding and showing using a columns selection, 214 rearranging using a columns selection, 212 rearranging using mouse, 212 working with, 57 Columns changing width, 115 Columns inserting, 125 Columns deleting, 126 Columns freezing, 145 Columns :, 125 COLUMNS(array), 531 COMB(n, m), 539 Combo box control type, 418 Commands from the menu, 25 Comments, 127 deleting, 128 editing, 127 COMMENTS(), 566 Compacting a database, 265 COMPOUND (principal, interest, periods), 495 Compuserve GIF (gif), 358 Computed field, 182 CONCAT(text_list), 558 CONCATENATE(text_list), 559 Conditional statements, 459 Conditions applying using SQL, 467 Confirm button, 94 Context sensitive help, 27 Contingency tables using SQL;TRANSFORM, 472 Contrast, 337 Control types, 416 Coolbars, 94 Coolbars mode, 20 Copies printing multiple, 147 Copy Cut and Paste, 327 Copy and paste examples, 398 in dialogs, 399 Copy and Paste, 397 Copy command, 48 Copying a formula, 132 Copying and moving data, 117 definition, 117 from many cells to many other cells, 120 from many cells to one cell, 119 from one cell to another cell, 118 from one cell to many cells, 118 from one range to another range, 118 using drag and copy, 121 using drag and move, 121 Copying documents or folders, 14 Copying records, 201 Copying text, 48 CORREL(array1, array2), 539 COS(x), 528 COSH(x), 515 592 Index COTAN(x), 528 COTANH(x), 515 COUNT(list), 539 COUNTBLANK(list), 535 COUNTIF(list, condition), 540 Counting the characters, 426 COUNTN(list), 540 COUPDAYBS(settlement, maturity, frequency, basis), 495 COUPDAYS(settlement, maturity, frequency, basis), 496 COUPDAYSNC(settlement, maturity, frequency, basis), 497 COUPNCD(settlement, maturity, frequency, basis), 497 COUPNUM(settlement, maturity, frequency, basis), 498 COUPPCD(settlement, maturity, frequency, basis), 498 COVAR(array1, array2), 540 CREATEDATE(), 566 Creating a document, 38 Creating a drawing, 386 Creating a new document, 9 Creating a new image, 269 Creating a query while working in a table, 226 Creating a spreadsheet, 97 Creating a vector object, 364 Creating and assigning variables, 458 Creating and working with layers, 319 Creating backups, 17 Crop, 277 Crosstabulations using SQL, 472 Cubes chart, 152 Currency formatting in Spreadsheet, 107 Currency format in database field, 174 Currency values, 101 Cursor movement, 165 forms, 234 in Spreadsheet, 94 Cursor movement in Write, 37 Curves, 333 Custom lists, 150 Customizing toolbars and menus, 18 Cut copy and paste etc, 436 Cut and Paste, 397 Cut command, 48 DAO automation within Ability, 442 Database object, 443 DAO.DBEngine, 442 Data entering, 100 Data range included in a chart, 155 Data types, 169 Database automation, 440 number formats, 173 OLE automation, 445 Database closing, 163 creating, 166 definition, 159 opening, 161 starting, 161 Database deleting, 264 Database repairing when damaged, 265 Database compacting, 265 Database :, 159 Database and formula fields inserting, 415 Database field inserting, 81 inserting into a form, 238 Database fields inserting, 238 database macros, 439 Database Manager, 162 Database.Admin object, 443 Date and time field inserting, 414 Date and time in a form or report, 248 Date command, 79 Date comparisons using SQL, 468 Date data type, 176 Date field, 176 Date functions, 486 DATE(year, month, day), 488 Date/Time format, 177 Dates, 102 entering, 102 formatting, 108 inserting, 79 Dates, Year 2000, 487 DATEVALUE(date_text), 488 DAY(date-code), 488 DAYS360(start_date, end_date, method), 488 DB(cost, salvage, life, period, month), 499 DBEngine, 442 DBFIELDCOUNT(database, source), 569 DBFIELDNAME(database, source, index), 569 DBFILTER(database, table, filter, field_name, rec_num), 569 DBFILTERSORT(database, table, filter, sort, field_name, rec_num), 571 DBGET(database, source, field_name, rec_num), 572 DBQUERYCOUNT(database), 573 DBQUERYNAME(database, index), 573 DBRELATIONCOUNT(database), 573 593 Index DBRELATIONNAME(database, index), 574 DBSORT(database, table, sort, field_name, rec_num), 574 DBSQL(database, SQL_statement, field_name, rec_num), 575 DBSQLFILTER(database, table, filter, field_name, rec_num), 576 DBSQLFILTERSORT(database, table, filter, sort, field_name, rec_num), 579 DBSQLSORT(database, table, sort, field_name, rec_num), 578 DBTABLECOUNT(database), 581 DBTABLENAME(database, index), 581 Dealing with document chunks, 428 Dealing with run-time errors, 463 Decimal tabs, 44 Default settings in Spreadsheet, 149 Defaults general, 89, 149 DEGREES(angle), 528 Delete fields in a table, 202 Deleting, 124 a chart from a spreadsheet, 158 and clearing the contents of a cell, 125 cells rows and columns, 126 using drag and drop, 124 Deleting a database, 264 Deleting a database object, 265 Deleting comments, 128 Deleting documents or folders, 14 Deleting records, 200 using SQL, 478 Deleting styles, 68 Deleting text, 48 Deleting Text, 428 Deleting the contents of fields in a database table, 201 Desaturate, 339 DESC, 466 TOP, 466 Design mode, 232 Designing a new table, 166 Detail of an auto report, 251 Device Independent Bitmap, 412 DEVSQ(list), 541 DIB, 412 Dictionary user-defined, 54 Directories, 9 DISC(settlement, maturity, par, redemption, basis), 500 Display options for Launcher, 30 DIVIDE(list), 515 Document new, 9 Document extensions, 15 Document Functions, 565 Document object, 431 documents opening, 10 Documents, 9, 38 based on a template, 84 copying, 14 creating, 38 deleting, 14 finding, 16 finding in the open dialog, 16 finding with Explorer, 17 including fields in, 78 linking and embedding, 408 moving, 14 moving around in, 37 renaming, 15 save as, 12 saving, 11 summary information and statistics, 9 working with, 12 Documents collection, 430 Dodge, 291 DOLLAR(number, precision), 559 DOLLARDE(fractional_dollar, fraction), 501 Double-clicking, 24 Doughnut chart, 152 Drag, 120 and copy, 121 and delete, 124 and drop, 120 and fill, 121 and move, 121 Drag and drop, 25 Draw parts of the Draw window, 383 starting, 383 Draw :, 383 Draw command, 412 Draw document inserting into Write or Spreadsheet, 412 Draw objects, 383 color, 391 grouping, 395 moving, 390 resizing, 390 resizing multiple objects, 394 working with groups of, 394 Drawings, 386 arcs, 388 creating, 386 ellipses or circles, 387 lines, 386 polygons, 387 polylines, 386 squares or rectangles, 387 text boxes, 388 Duplicate, 288 Duplicate image, 341 Duplicate records finding using SQL, 471 594 Index Duplicating records, 198 EDATE(start_date, months), 489 Edit box control type, 416 Edit menu, 327 Editing a chart, 157 Editing a field, 82 Editing comments, 127 Editing records using SQL, 476 Editing selections, 277 Editing templates, 85 Editing text, 39 Editing vector objects, 369 EDITTIME(), 566 EFFECT(nominal_rate, npery), 501 Ellipses in Draw, 387 Elliptic selection, 275 Embedded charts resizing and moving, 158 Embedding and linking documents, 408 Embedding objects, 409 Emboss, 290 Entering data, 198 Entering dates, 102 Entering information, 100 Entering text, 100 Entering values, 101 Enumerated data type, 180 Enumerated fields creating, 180 EOMONTH(start_date, months), 489 Equalize, 339 Eraser, 287 Erasing the contents of a cell, 125 #DIV0 indicator;#REF indicator;#CIRC indicator, 485 EVEN(x), 515 EXACT(text1, text2), 559 Examining each character in a document, 427 Example macros, 445 Exiting Ability, 8 EXP(x), 516 Explicit declaration of variables, 459 EXPONDIST(x, lambda, cumulative), 541 Exporting tables, 266 FACT(n), 516 FACTDOUBLE(n), 517 Field labels, 259 Field names, 168 Field types, 169 Fields, 413 absolute addresses, 132 automation, 441 changing width, 115 editing, 82 including in a document, 78 inserting, 414 inserting in Write, 78 introduction, 413 linking - introduction, 400 linking from Write to Spreadsheet, 403 linking in Spreadsheet, 135 linking Spreadsheet to Database, 403 linking two spreadsheets, 401 linking two Write documents, 402 Fields planning, 167 Fields naming in Database, 168 Fields data types, 169 Fields creating enumerated, 180 Fields creating in Database, 189 Fields creating in a database using Table Wizard, 190 Fields deleting from table, 202 Fields formatting in database, 206 Fields hiding in Forms, 235 Fields inserting into forms, 237 Fields editing in forms and reports, 249 Fields inserting into reports, 257 Fields labels, 259 Fields :, 189 FILENAME(), 566 Files, 9 creating, 38 recent list, 10 FILESIZE(), 566 Fill cells using drag and drop, 121 Fill command, 122 Fill patterns, 391 Fill tool, 299 Filling cells automatically, 122 Filter, 304 Filter example, 221 Filter examples, 307 Add Noise, 308 Blur, 310 Discotheque, 316 Gaussian Blur, 311 Lens Flare, 315 Light Effects, 315 Mosaic, 313 Motion Blur, 310 Smart Blur, 312 Star, 316 Waves, 309 Filtering a table, 217 Filtering on a single field, 218 595 Index Filtering using a named filter, 219 Financial functions, 493 Find command in Database, 199 FIND(value, list), 531 FINDEX(value, list), 531 Finding, 139 Finding a formula, 140 Finding documents, 16 Finding documents in the Open dialog, 16 Finding documents with Explorer, 17 Finding duplicate records using SQL, 471 Finding next occurrence, 140 Finding records, 199 Finding text, 49 FINDTEXT(find_text, within_text, start_num), 559 FISHER(x), 541 FISHERINV(y), 542 Fit to Curve chart, 152 FIXED(number, precision, commas), 560 Folders, 9 copying, 14 creating, 13 deleting, 14 moving, 14 navigating through, 13 recent list, 10 renaming, 15 working with, 12 Font command, 41 Font name box, 40 Font size box, 40 Font styles, 104 Fonts, 104 formatting in a table, 204 setting using the menus, 104 setting using the toolbar, 104 Fonts in text boxes, 393 Footers, 73 editing, 75 in Spreadsheet, 143 removing, 76 setting up, 75 toolbar, 74 Footnotes, 63 FORECAST(x, array_y, array_x), 542 Forecolor, 391 Foreground color, 271 Form Browse command, 233 Form Design command, 232 Form view, 232 Format sections in reports, 259 Format toolbar, 35 Formats clearing, 110 Formatting numbers in a database, 173 Formatting boolean values, 110 clearing formats, 110 currency, 107 dates, 108 fractions, 109 introduction, 103 numbers, 106 numbers using the toolbar, 106 percentages, 109 scientific numbers, 110 times, 108 Formatting :, 103 Formatting a shape, 390 Formatting a table for color, 204 Formatting bar, 93 Formatting borders in a table, 205 Formatting columns, 56 Formatting columns in a database table, 203 Formatting database fields, 206 Formatting fonts in a table, 204 Formatting paragraphs, 43 Formatting paragraphs using the menus, 45 Formatting text, 40 Formatting text using the menus, 41 Formatting the spreadsheet, 103 Forms browse mode, 232 creating, 236 creating from scratch, 236 design mode, 232 editing fields, 249 inserting a date and time field, 248 inserting a table grid, 244 example, 245 inserting an object, 248 inserting database fields, 238 inserting fields, 237 inserting pictures, 248 lookup summary fields, 241 moving around, 234 opening, 233 page numbers, 247 Forms :, 232 Forms and reports lookup summary fields example, 242 Formula and database fields inserting, 415 Formula bar, 94 Formula field command, 78 Formula fields inserting, 81 inserting into a form or report, 240 formulas referring to other sheets, 99 Formulas, 130 clearing, 133 copying, 132 definition, 130 entering, 131 finding, 140 using, 129 596 Index using one-way links in, 406 Fraction format in database field, 174 Fractions formatting, 109 Frames, 57 creating, 58 deleting, 62 modifying, 58 positioning, 60 sizing, 59 text flow around, 61 text offset, 61 Freeze Formulas command, 133 Freezing sections of a spreadsheet, 145 Functions building formulas with, 481 example in VBScript, 462 reference, 480 using, 480 Functions button, 94 FV(payment, rate, periods), 502 Gallery of chart styles, 152 GAMMADIST(x, alpha, beta), 543 GAMMALN(x), 543 GCD(list), 517 General options, 89, 149 GEOMEAN(list), 544 Getting information on the script engine, 458 gif, 358 GIF, 412 Go To command, 51 in Spreadsheet, 95 Gradient, 301 Editor, 345 examples, 302 Fill, 301 Graphics files, 412 Graphs type of chart (style), 152 Grid command, 207 Grid snap, 385 Grid view, 197 Gridlines, 385 in chart, 152 Group summary fields, 261 Grouped report layout, 262 Grouping and sorting in a report, 260 Grouping objects, 395 Grouping on more than one level using SQL, 471 Groups and aggregate functions using SQL, 470 Groups of objects, 394 Hand, 293 Handles, 389 Hardware requirements, 6 HARMEAN(list), 544 GROUP BY, 470 HAVING, 470 Headers editing, 73 first page, 75 inserting, 73 odd and even pages, 75 removing, 76 setting up, 75 toolbar, 74 Headers :, 73 Headers and footers, 143 adding, 144 Headers and footers in a report, 258 Headers and footers toolbar, 74 Height of rows in spreadsheet, 116 Help, 27 how to use the topics dialog, 28 navigating through, 28 Hiding cells, 114 Hiding columns in a table, 213 Hiding columns using a columns selection, 214 Hiding fields from the form, 235 Highlighting text, 39 Hi-Low charts, 152 example, 154 Histogram, 344 Historic brush, 298 History palette, 298 Horizontal bars chart, 152 Horizontal ruler, 35 Horizontal series in charts, 156 HOUR(time_code), 489 How the macros are created stored and executed, 425 Hue/Saturation, 337 HYPERLINK(link location, friendly name), 581 HYPGEOMDIST(sample, n_sample, population, n_population), 544 IF(x, true, false), 512 iff, 357 ilbm, 357 Image adjust, 330 creating, 269 duplicate, 341 menu, 330 opening, 273 size, 341 transform, 283 transform options, 281 Image file formats, 354 Images, 412 Importing tables, 266 Including fields in a document, 78 Incremental data type, 178 Incremental field, 178 Indenting paragraphs, 43 INDEX(x, list), 532 597 Index Indexes, 191 checking, 194 creating, 192 editing, 194 Indexing tables, 215 INDIRECT(ref_as_text, mode), 532 Information entering, 100 Information dialog, 274 Information functions, 534 Initial value, 189 INNER, 474 INSERT INTO, 477 Insert mode, 36 Inserting a field, 78 Inserting cells rows and columns, 124 Inserting comments, 127 Inserting fields introduction, 414 Inserting pictures in a drawing, 389 Inserting Text, 428 Installation, 6 INT(x), 517 Integration in Ability, 397 INTERCEPT(array_y, array_x), 545 INTRATE(settlement, maturity, investment, redemption, basis), 502 Introduction, 268 Invert, 339 IRR(guess, initial, list), 503 IS NULL, 470 ISBLANK(value), 535 ISERR(list), 535 ISERROR(value), 535 ISEVEN(value), 535 ISNUMBER(value), 536 ISODD(value), 536 ISREF(value), 536 ISTEXT(value), 536 Italic button, 40 Join types using SQL, 475 Joining tables, 228 jpeg, 359 jpg, 359 Jpeg, 412 JPEG Images (jpg jpeg), 359 JPG, 412 Justification of data in database, 206 Justify button, 43 Justifying text in Spreadsheet, 105 Keyboard shortcuts modifying, 21 Keystrokes, 22 KEYWORDS(), 566 KURT(list), 546 Labels mailing, 255 Labels in reports, 255 Landscape, 72, 77 Large toolbar buttons, 94 LARGE(k, list), 546 Lasso, 276 Launcher, 29 adding an application, 31 adding to the startup group, 32 closing applications, 31 display options, 30 how to use, 11 launching an application, 30 modifying, 31 modifying an application, 32 opening documents, 31 removing an application, 32 starting, 30 Launching an application, 30 Layers, 317 background, 318 blending, 324 examples, 325 copy cut and paste, 327 creating, 319 merging, 326 options, 321 Layout of a grouped report, 262 LCM(list), 517 Left Align button, 43 LEFT(text, num_chars), 560 LEN(text), 561 Letters mail merge, 88 Levels, 331 auto, 331 Line patterns, 391 Line spacing, 44 Lines chart, 152 in Draw, 386 Linking between spreadsheets, 401 between Write documents, 402 one-way links, 400 refining database links, 404 Spreadsheet to Database, 403 two-way links, 407 within the same spreadsheet, 135 Write to Spreadsheet, 403 Linking :, 400 Linking and embedding documents, 408 Linking in Spreadsheet, 135 one-way links, 136 two-way links, 136 Linking objects, 408 Linking through fields, 400 Links to Spreadsheet, 586 Links to Write, 587 598 Index List box control type, 417 Lists automatic (custom), 150 numbered, 70 LN(x), 518 Locating documents, 17 Locking cells, 114 LOG(x, b), 518 LOG10(x), 518 Logical data type, 179 Logical functions, 512 Logical operators, 483 Lookup fields in forms and reports, 239 Lookup functions, 529 Lookup summary fields in forms and reports :, 241 Lookup summary fields in forms or reports example, 242 LOOKUP(x, in-range, outrange), 533 LOOKUPEX(value, in_range, out_range), 533 LOWER(text), 561 Macintosh PICT Images (pct pic pict), 360 Macros adding a macro button to a toolbar, 20 database, 439 database example, 454 examples, 445 getting started, 424 introduction, 424 keyboard shortcuts, 21 Magic wand, 276 Mail merge, 86 blank lines, 89 browsing the data, 88 controlling, 87 creating, 86 filters and sort orders, 87 introduction, 86 printing, 88 viewing, 88 Mailing labels in reports, 255 Mailmerge, 86 Mail-merge, 86 Managing your tables, 202 Manual on-line, 27 Marks chart, 152 Masks in database fields, 171 Mathematical functions, 513 Mathematical operators in Spreadsheet, 130 MAX(list), 546 Maximizing windows, 26 MDETERM(array), 518 MEDIAN(list), 547 Memo data type, 177 Memo field, 177 Menu shortcuts, 21 Menus, 25 changing shortcuts, 18 shortcut, 26 using, 25 Merge letters viewing and printing, 88 MERGECOUNT(), 567 MERGEREC(), 567 Merging and splitting cells, 128 Merging layers, 326 MID(text, start_num, num_chars), 561 MIN(list), 547 Minimizing windows, 26 MINUS(list), 519 MINUTE(time_code), 489 MIRR(finance_rate, reinvest_rate, list), 503 MOD(x, y), 519 MODE(list), 547 Modifying an application using Launcher, 32 Modifying Launcher, 31 Modifying records, 197 MONTH(date-code), 490 Mouse buttons which one to use, 24 Move cells in a spreadsheet, 117 Moving around a document, 37 Moving around a form, 234 Moving around a spreadsheet, 94 Moving around a table, 165 Moving columns, 212 using a columns selection, 212 using the mouse, 212 Moving data using drag and drop, 121 Moving documents or folders, 14 Moving draw objects, 390 Moving from one cell to another cell, 118 Moving from one range to another range, 118 Moving text, 48 Moving to a cell, 95 MULTINOMIAL(list), 519 Multi-page forms, 250 Multiple copy macro, 445 Multiple objects selecting, 389 Multiple records adding using SQL, 477 Multiple-field indexes, 195 Naming cells and ranges, 137 assigning names, 137 changing or removing names, 138 Navigating folders, 13 Navigating inside the help pages, 28 NEGBINOMDIST(number_f, number_s, probability_s), 548 NETWORKDAYS(start_date, end_date, list_holidays), 490 New command, 38 New document, 9 599 Index New record, 197 New row, 197 NOMINAL(effect_rate, npery), 504 Non-unique indexes, 192 Normal template, 85 NORMDIST(x, mean, stdev), 548 NOT operator, 483 NOT(logical), 513 NOW( ), 490 NPV(rate, list), 505 Number field, 172 Number format in database field, 173 Number formatting in database, 173 Numbered lists creating, 70 Numbered paragraphs modifying, 71 Numbers removing from lists, 72 Numbers entering, 101 Numbers formatting using the toolbar, 106 Numbers formatting in Spreadsheet, 106 Numbers :, 101 Numbers as text entries, 103 NUMCHARS(), 567 Numeric comparisons using SQL, 468 Numeric data type, 172 NUMPAGES(), 567 NUMWORDS(), 567 Object embedding, 409 Object linking, 408 Objects groups of, 394 ODD(x), 520 Offset text to frames, 61 OLE automation spreadsheet, 444 OLE data type, 181 OLE field types, 181 One Page button, 76 One way links, 400 One-way links, 400 One-way links in formulas, 406 One-way links in Spreadsheet, 136 On-line help, 27 Open using the dialog, 13 Open and save options, 10 Open command, 83 Opening a document within an application, 10 Opening a web page inside Ability, 457 Opening an existing image, 273 Opening an existing spreadsheet, 97 Opening documents using the Launcher, 31 Opening existing documents, 10 Operators arithmetica, 484 logical, 483 relational, 484 Options general, 149 Options command in Spreadsheet, 149 Options command in Write, 89 OR operator, 483 OR(list of logical conditions), 513 ORDER BY, 466 Ordering records, 215 Ordering tables, 215 Orientation, 72 Overlapping objects, 394 Overwrite mode, 36 Page Back button, 76 Page Break command, 38 Page Forward button, 76 Page Number command, 79 Page number fields inserting, 415 Page numbers inserting, 79 Page numbers in forms and reports, 247 Page set-up in Spreadsheet, 142 Page set-up in Write, 72 PAGE(), 567 Paint tools, 284 airbrush, 286 blur, 289 burn, 291 dodge, 291 emboss, 290 eraser, 287 paintbrush, 286 pattern brush, 288 pencil, 285 sharpen, 289 smudge, 292 Paintbrush, 286 Paper Size, 72 Paragraphs, 43 alignment, 43 backgrounds, 46 borders, 46 bulleted, 68 formatting, 43 formatting using the menus, 45 indents, 43 numbered, 68 spacing, 44 Pareto chart, 152 Parts of the Draw window, 383 Parts of the Write window, 34 Password for spreadsheet protection, 114 Paste, 397 Paste command, 48 600 Index Pattern brush, 288 Patterns line and fill styles, 391 Patterns Editor, 353 pbm, 361 pgm, 361 pnm;ppm;pgm, 361 ppm;pgm, 361 PC Paintbrush, 412 pcx, 363 PCX, 412 PDF, 78 PEARSON(array_x, array_y), 548 Pen style, 391 Pencil, 285 Percent formatting in Spreadsheet, 109 Percentage format in database field, 174 PERCENTILE(k, array), 549 PERCENTRANK(x, array), 549 PERM(n, m), 550 Phone numbers, 103 Photopaint starting, 269 PI(), 528 pct;pic, 360 pic, 360 pict, 360 Picture command in Draw, 389 Pictures inserting into forms and reports, 248 Pie chart, 152 PIVOT, 472 TRANSFORM, 472 pix, 357 Plug-ins, 381 PLUS(list), 520 PMT(principal, rate, periods), 506 png, 361 POISSON(x, mean, cumulative), 550 Polar chart, 152 Polygons in Draw, 387 Polyline lasso, 276 Polylines in Draw, 386 Portable Bitmaps (pnm ppm pgm pbm), 361 Portable Network Graphics (png), 361 Portrait, 72, 77 Positioning draw objects, 390 Posterize, 339 POWER(list), 520 PRICE(settlement, maturity, rate, yield, redemption, frequency, basis), 506 PRICEDISC(settlement, maturity, discount, redemption, basis), 507 PRICEMAT(settlement, maturity, issue, rate, yield, basis), 508 Primary keys, 191 checking, 194 creating, 192 definition, 192 editing, 194 Print current selection using Write macro, 446 Print preview, 146 Print Preview in Write, 76 Print set-up, 77, 147 Print Setup command in Write, 77 Print to fit, 147 PRINTDATE(), 567 Printing multiple copies using a macro, 445 Printing, 146 print preview, 146 print set-up, 147 printing a chart, 158 printing the spreadsheet, 147 Printing a report, 264 Printing in Write, 76 Printing the document, 77 Printing to a PDF file, 78 Priority of evaluation of operators, 485 PROB(x_range, prob_range, lower_limit, upper_limit), 551 PROPER(text), 561 Protecting a spreadsheet, 114 PV(payment, rate, periods), 509 QUARTILE(quart, array), 551 Queries, 224 creating and applying, 225 definition, 160 editing, 227 Query components, 164 definition, 160 editing, 227 Query toolbar in mail merge, 87 RADIANS(angle), 528 Radio group control type, 418 RAND(x), 520 RANDBETWEEN(bottom, top), 521 Range Name command, 137 Ranges, 96, 437 naming, 137 transforming, 142 transposing, 141 RANK(number, ref, order), 552 raw, 361 Raw Images (raw), 361 Rearranging columns using a columns selection, 212 Rearranging columns using the mouse, 212 Recalculation, 135 RECEIVED(settlement, maturity, investment, discount, basis), 509 Recent document list, 11 Recent files, 10 601 Index Record indicators in a table, 197 Records modifying with macros, 441 Records, 197 adding, 197 copying, 201 deleting, 200 duplicating, 198 editing, 198, 235 entering data, 198 finding, 199 modifying, 197 ordering, 215 selecting, 217 sorting, 215 SELECT;FROM selecting usin, 464 FROM selecting using SQL, 464 Records selecting using SQL, 464 Records editing using SQL, 476 Records updating using SQL, 476 Records, 477 Records adding using SQL, 477 Records deleting using SQL, 478 Rectangles in Draw, 387 Rectangular selection, 275 Red Eye Reduction, 287 Redesigning a table, 202 Redo command, 39 Referential integrity using SQL, 474 Refining the macro to make it more useful, 433 Relating tables using forms, 230 Relational links and joins uing SQL, 474 Relational operators,