home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / vppevl.zip / readme.inf (.txt) < prev    next >
OS/2 Help File  |  1994-10-13  |  86KB  |  1,199 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. VisPro/C++ ΓòÉΓòÉΓòÉ
  3.  
  4. Get Serious OS/2 Development Power With VisPro/C++! 
  5.  
  6. VisPro/C++ is a full-featured visual programming tool for the C Set++ compiler. 
  7. It gives you the power to build 32-bit OS/2 2.x applications in record time. 
  8.  
  9. VisPro/C++ gives you the robust features you have come to expect from solutions 
  10. costing much more. These tools leverage all of the important features of OS/2 
  11. including full integration with the Workplace Shell. And they come from 
  12. HockWare, the pioneer in value-priced visual programming products dedicated to 
  13. OS/2, including VisPro/REXX, and VisPro/C. 
  14.  
  15. An abundance of CUA '91 objects, multiple development views, 
  16. entity-relationship database designer and an integrated environment are just 
  17. some of the productive features you can count on for powerful development. 
  18.  
  19. With all of this, no other tool matches the functionality and productivity of 
  20. VisPro's environment--or its price. 
  21.  
  22. Easy-to-use drag and drop programming 
  23.    Quickly develop robust OS/2 2.x GUI and DB2/2 client/server applications 
  24.    with ease using drag and drop programming. The C++ code automatically 
  25.    appears for each event. 
  26.  
  27. Objects, objects, objects 
  28.    From simple buttons and boxes to 3-D business graphics and everything 
  29.    in-between, VisPro/C++ provides the most CUA '91 objects. Not only does it 
  30.    support all of the objects in OS/2, they have extra add-on objects. 
  31.  
  32.    Also available is VisPro/Objects, a SOM based object builder that allows you 
  33.    to quickly develop your own custom objects. 
  34.  
  35. The best of OS/2 
  36.    VisPro/C++ gives you the best of OS/2 with complete Workplace Shell 
  37.    enablement. Drag and drop programming, multiple development views including 
  38.    Layout, List, Event Tree and Settings views, and the ability to get pop-up 
  39.    menus on the objects are some Workplace Shell features that give you maximum 
  40.    leverage of OS/2. 
  41.  
  42. C++ code just like you'd expect and more 
  43.    VisPro/C++ generates well-structured code. The result is non-proprietary, 
  44.    royalty-free code that is easy to read and maintain. And it also supports 
  45.    code regeneration. 
  46.  
  47. Lightning fast DB2/2 database design 
  48.     For DB2/2 programming, VisPro/C++ has a visual database designer. It 
  49.    provides an entity/relationship diagramming tool and SQL builder that lets 
  50.    you quickly create DB2/2 applications or reverse-engineer existing DB2/2 
  51.    databases. 
  52.  
  53. VisPro/C++ Features 
  54.  
  55. Drag and drop programming 
  56.    Workplace-Shell enabled drag and drop programming that automatically 
  57.    generates the code for you. It also allows you to drag items to the printer 
  58.    shredder and Workplace Shell folders. 
  59.  
  60. CUA '91 objects 
  61.    Comprehensive set of CUA '91 programming objects including:  push button, 
  62.    radio button, check box, list box, combo box, group box, entry field, MLE, 
  63.    text, bitmap object, icon object, spin button, frame, slider, notebook, and 
  64.    container. 
  65.  
  66. Extra objects 
  67.  
  68.    o 3-D business graphics - displays data in bar, stacked bar, pie, line and 
  69.      area charts. 
  70.  
  71.    o Formatted entry field - allows users to display and edit specific formats 
  72.      of data. 
  73.  
  74.    o Spreadsheet - allows users to enter and display data in typical 
  75.      spreadsheet format. 
  76.  
  77.    o Clock - allows users to veiw time in analog, digital and military format. 
  78.  
  79.    o Calendar - allows users to view and interact with a traditional monthly 
  80.      calendar. 
  81.  
  82. Code generation 
  83.    Well-structured code generation gives you high quality code that is easy to 
  84.    read and maintain. The non-proprietary, royalty-free code can be used 
  85.    outside of the VisPro development environment. VisPro supports code 
  86.    regeneration which allows you to incorporate changes you have made to events 
  87.    and code sections outside of the VisPro environment. 
  88.  
  89.    VisPro/C++ automatically generates object and object event-handler code so 
  90.    you don't have to worry about the details 
  91.  
  92. Integrated development environment 
  93.  
  94.    o Manage bitmap, icon and string resources 
  95.  
  96.    o Visually set comiler and linker options. 
  97.  
  98.    o Monitor compiler progress. 
  99.  
  100.    o Click on compiler errors to find corresponding location in VisPro editor 
  101.      or any external editor. 
  102.  
  103. Multiple views 
  104.    Four development views allow you to efficiently create, change or customize 
  105.    your program. Views include Settings, Layout, Event Tree and List. The 
  106.    layout view provides a WYSIWYG design canvas and a floating tool palette. 
  107.  
  108. Visual DB2/2 database designer 
  109.    Visual method for developing DB2/2 database applications or 
  110.    reverse-engineering existing DB2/2 databases into diagrams. Using the 
  111.    entity-relationship diagramming tool, you drag and drop tables and 
  112.    relationship links in to a layout area. The point-and-click SQL builder 
  113.    allows you to easily build syntax error-free SQL statements. 
  114.  
  115. VisPro/Objects 
  116.    SOM-based interface that allows you to create and add custom controls to the 
  117.    VisPro tool bar. It allows you to specify behavior, styles and methods and 
  118.    generates most of the source code needed to bring the object into all VisPro 
  119.    environments - C, C++ an REXX. 
  120.  
  121. Graphical class browser 
  122.    VisPro/C++ includes a Graphical browser, which allows you to view the IBM 
  123.    User Interface Class Library. You can also drag and drop methods from the 
  124.    library into a VisPro/C++ application. 
  125.  
  126. Other features 
  127.  
  128.    o User interface resource compatibility - allows you to build an application 
  129.      with VisPro/REXX and import user interface resources to VisPro/C++ and 
  130.      vice versa.  User interface resources include: bitmaps, icons, panel 
  131.      definitions, menus and accelerator key definitions. 
  132.  
  133.    o Accelerator key - allows you to type a couple of characters in the event 
  134.      editor to automatically generate a construct of the code for commonly used 
  135.      logic structure. 
  136.  
  137.    o Form styles - provides full support of all forms including plain, sizable, 
  138.      scrollable, window list, dialog and title bar. 
  139.  
  140.    o Drag/drop support - enables you to add drag and drop functionality to your 
  141.      VisPro program. 
  142.  
  143.    o OS/2-style help - allows you to provide OS/2-style (IPF) help to your 
  144.      program which users can access your program's help file just like help for 
  145.      other OS/2 applications. 
  146.  
  147. System Requirements: OS/2 2.x, 5Mb memory and 2.5 Mb hard disk space; IBM 
  148. CSet++. 
  149.  
  150. Suggested Retail Price:  $399 
  151.  
  152.  
  153. ΓòÉΓòÉΓòÉ 2. Getting Started ΓòÉΓòÉΓòÉ
  154.  
  155. Once you install your Evaluation version of VisPro/C++, you can use the online 
  156. help to get information about how to use the product. Instructions for 
  157. installing the Evaluation version, opening a project, and using the online help 
  158. are provided in the following sections. 
  159.  
  160. o Installing the Evaluation Version 
  161.  
  162. o Creating a VisPro/C++ Project 
  163.  
  164. o Opening the Main form 
  165.  
  166. o Using the VisPro/C++ Online Help 
  167.  
  168. o Using the C++ Information Online Reference 
  169.  
  170.  
  171. ΓòÉΓòÉΓòÉ 2.1. Installing the Evaluation Version ΓòÉΓòÉΓòÉ
  172.  
  173. Before you use VisPro/C++, ensure the following: 
  174.  
  175.  1. OS/2 2.0 or any later version must be installed on your system. 
  176.  
  177.  2. DB2/2 must be installed to use the VisPro/C++ Database Designer. 
  178.  
  179.  3. Your hard disk should have approximately 2.5 megabytes of free disk space. 
  180.  
  181.  4. The IBM CSET++ compiler must be installed on your system for you to compile 
  182.     source code created by VisPro/C++. 
  183.  
  184.  5. The OS/2 2.1 Toolkit is also required for you to create OS/2 applications. 
  185.  
  186. NOTE: No version of VisPro/C++ should be running when you install the 
  187. Evaluation version. If this occurs, close all VisPro/C++ windows, reboot and 
  188. then start the installation over. 
  189.  
  190. To install the VisPro/C++ Evaluation version, complete the following steps: 
  191.  
  192.  1. Place the Evaluation diskette in the drive you wish to install from. 
  193.  
  194.  2. Press the right mouse button to get a pop-up menu on the diskette drive you 
  195.     are using. 
  196.  
  197.  3. Select the arrow on the Open menu item. 
  198.  
  199.  4. Select Icon View. 
  200.  
  201.  5. Double-click on the SETUP.EXE program, which has the VisPro/C++ icon. 
  202.  
  203.  6. Select the drive where you want to install the Evaluation version beside 
  204.     'Install on drive'. 
  205.  
  206.  7. If you want to change the path you are installing on, type the path name in 
  207.     the Install path field. 
  208.  
  209.  8. Select Install. 
  210.  
  211.  9. When the installation is complete, the Installation Complete window 
  212.     appears. It will prompt you for additional input if modifications to your 
  213.     CONFIG.SYS file are necessary. 
  214.  
  215.     By default, the installation program will modify your CONFIG.SYS and 
  216.     display this README information book. If you do not wish the installation 
  217.     program to modify your CONFIG.SYS, deselect the 'Update the CONFIG.SYS' 
  218.     check box and you will be given instructions on the changes needed. If you 
  219.     do not wish to view the README book, deselect the appropriate check box. 
  220.  
  221. 10. Select Continue. 
  222.  
  223.     The changes are made to your CONFIG.SYS. 
  224.  
  225. 11. Since VisPro/C++ requires a path be specified to its required files, you 
  226.     must shutdown and reboot before using the product. 
  227.  
  228.     After Rebooting, the VisPro/C++ folder appears on the OS/2 desktop. 
  229.  
  230. 12. Double Click on the VisPro/C++ icon in the Workplace Shell. 
  231.  
  232.     You will see the VisPro/C++ Icon View window appear. This window contains 
  233.     the following: 
  234.  
  235.    o VisPro/C++ Class Browser: Allows you to add methods from the User 
  236.      Interface Class Library to your application. 
  237.    o Projects folder: Where you will create new projects. 
  238.    o Samples folder: Contains the Data entry sample. 
  239.    o Color palette: Allows you to change colors on your form. 
  240.    o Font palette: Allows you to change the font on your form. 
  241.    o Read Me: This Read Me File. 
  242.  
  243.  
  244. ΓòÉΓòÉΓòÉ 2.2. Creating a VisPro/C++ Project ΓòÉΓòÉΓòÉ
  245.  
  246. When you open the VisPro/C++ folder you created during installation, you see a 
  247. template called Project. You can drag a new folder off the Project template and 
  248. use it as your new project, which will become your application. 
  249.  
  250. To open your new project, complete the following steps: 
  251.  
  252.  1. Open the VisPro/C++ icon on your desktop. To do so, double-click the 
  253.     folder. 
  254.  
  255.  2. Open the Projects folder in the VisPro/C++ folders Icon View window. To do 
  256.     so, double-click the Projects folder. 
  257.  
  258.  3. Create a new Project folder. To do so, press the right mouse button and 
  259.     drag a folder off the Project template in the Projects - Icon View window. 
  260.  
  261.     A Project folder appears. 
  262.  
  263.  4. Rename your Project folder. To do so, select the Project folder and press 
  264.     Alt while you click the left mouse button. Type the name you want to assign 
  265.     to your new application. 
  266.  
  267.     Click outside of the folder. This 'sets' the name for the Project folder. 
  268.  
  269.  5. Open your Project folder. To do so, double-click the folder icon. 
  270.  
  271.     The icon view for your new application appears. You will see a Main icon. 
  272.     The Main icon is the form you use to begin designing your application. 
  273.     After your application is complete, do not delete, move, or rename the Main 
  274.     form. 
  275.  
  276.     The next section details the ways in which a form may be accessed. 
  277.  
  278.  
  279. ΓòÉΓòÉΓòÉ 2.3. Opening the Main Form ΓòÉΓòÉΓòÉ
  280.  
  281. To begin creating your application, you can open the Main form in one of two 
  282. ways: 
  283.  
  284. o METHOD A: 
  285.  
  286.   Double-click on the Main icon. The form appears in the Layout view, 
  287.   presenting the tool bar and the canvas. This view allows you to easily design 
  288.   your form. 
  289.  
  290. o METHOD B: 
  291.  
  292.   Select the Main icon, and then click the right mouse button to get the pop-up 
  293.   menu for the Main icon. Select Open. A cascading menu appears, allowing you 
  294.   to select the view you want to begin working with. The Layout view is 
  295.   recommended for designing the layout of your form. 
  296.  
  297.   You may also generate source code and start a compilation from the pop-up 
  298.   menu, without having to open your project. 
  299.  
  300.  
  301. ΓòÉΓòÉΓòÉ 2.4. Using VisPro/C++'s Online Help ΓòÉΓòÉΓòÉ
  302.  
  303. VisPro/C++ includes an extensive online help system that you can use if you 
  304. have questions while you are working. To get information about how the online 
  305. help works, select the Help menu. A cascading menu appears, presenting the 
  306. following menu items 
  307.  
  308. o Help Index.... 
  309. o General Help.... 
  310. o Using Help.... 
  311. o Product information.... 
  312.  
  313. You can select any of these items. To find out what information each of these 
  314. items provides, highlight the item (use the arrow keys), and then press F1. 
  315.  
  316. Note: You can browse the help using the online help Contents. To use the 
  317. Contents, select the OPTIONS menu from within any help window, and then select 
  318. CONTENTS. 
  319.  
  320.  
  321. ΓòÉΓòÉΓòÉ 2.5. Using the C/C++ Online Language Reference ΓòÉΓòÉΓòÉ
  322.  
  323. If you require information about C++, you can use the excellent C++ Online 
  324. Language Reference that comes with the CSET++ compiler. To use the reference, 
  325. double click on the IBM C/C++ Tools folder in your Workplace Shell. Then double 
  326. click the C/C++ Online Language Reference icon in the Icon View window. 
  327.  
  328. You may also wish to use the QwikInf facility which comes with the IBM Toolkit 
  329. to speed access to your most used programming references. To find out more 
  330. about KwikInf, start it by selecting the KwikInf Icon from the Toolkit 
  331. Information folder of the Toolkit 2.1 Icon folder. 
  332.  
  333.  
  334. ΓòÉΓòÉΓòÉ 3. Limitations of the Evaluation Version ΓòÉΓòÉΓòÉ
  335.  
  336. The Evaluation Version of VisPro/C++ differs from the full product in several 
  337. key aspects: 
  338.  
  339. o No user's guide or reference is provided. However, you can get enough 
  340.   information to get started by viewing this README file and by referring to 
  341.   the online help. The full product comes with a complete user's guide which 
  342.   includes detailed information on how to use VisPro, a description of the 
  343.   structure of the generated code, full descriptions on all the add on objects, 
  344.   and much more. 
  345.  
  346. o The evaluation version is limited to generating the source for projects with 
  347.   two windows (forms). Also each form is limited to at most 10 objects. 
  348.   Obviously, these limitations are not part of the full product. 
  349.  
  350. o The Database Designer is not included in the Evaluation version. This feature 
  351.   allows you to design DB2/2 applications or reverse engineer existing DB2/2 
  352.   databases to create entity/relationship (E/R) diagrams. These can then be 
  353.   used to create visual SQL statements or to automatically generate the code 
  354.   used to access Database Manager-DB2/2 calls. Using the Database Designer you 
  355.   can construct a form accessing a database table with a single drag and drop 
  356.   operation. 
  357.  
  358.     _________________________________________
  359.     The VisPro/C++ Database Designer.
  360.  
  361. o The VisPro add-on objects are not included in the Evaluation Version. These 
  362.   objects are business graphics, formatted entry field, spreadsheet, clock, and 
  363.   calendar. All of these are C++ objects integrated with the User Interface 
  364.   Class library. 
  365.  
  366.     _________________________________________
  367.     A sample application displaying some of the add-on objects.
  368.  
  369.   You can use these classes in any or your C++ applications, even those not 
  370.   generated by VisPro. 
  371.  
  372.    Business graphics 
  373.       Add pizzaz to your business related applications by using this control. 
  374.       Displays your data in bar, stacked bar, pie, line and area charts 
  375.       formats. You can control many style options including 3D effects and 
  376.       colors. 
  377.  
  378.    Formatted entry field 
  379.       Displays a text entry area that has specific formats of data, including 
  380.       date, time, uppercase, or a customizable picture mask. 
  381.  
  382.    Spreadsheet 
  383.       Allows users to enter and display data in spreadsheet format. You can 
  384.       control the number of rows and columns, as well as other spreadsheet 
  385.       attributes. This is ideal for providing you applications with a way of 
  386.       entering information in column fashion. 
  387.  
  388.    Calendar 
  389.       This monthly calendar provides you applications with a quick and easy way 
  390.       of specifing date information. 
  391.  
  392.    Clock 
  393.       The clock control displays the time in analog, digital and military 
  394.       format. 
  395.  
  396.             _________________________________________
  397.             A sample application displaying the clock object in analog, digital and military format.
  398.  
  399. o The evaluation version is shipped with only one sample program. The full 
  400.   product currently has several, including samples showing how to use the 
  401.   container and the VisPro add-on objects, 
  402.  
  403. o The resource information for each window is generated in binary form in the 
  404.   Evaluation Version. As a result, it is not possible to modify these outside 
  405.   the VisPro environment. In the full product, this information is generated in 
  406.   textual form, allowing for easy inspection and modification. 
  407.  
  408. o The product information window is forced to the foreground every time you 
  409.   enter the Evaluation Version of the VisPro editor. In the full product, you 
  410.   can choose not to view this window. 
  411.  
  412. o After opening the layout view 40 times, the evaluation version will bring a 
  413.   window telling you that you have used it 40 times.  After this, you will no 
  414.   longer be able to bring up the layout editor. 
  415.  
  416.  
  417. ΓòÉΓòÉΓòÉ 4. Sample Project ΓòÉΓòÉΓòÉ
  418.  
  419. This section describes the steps you follow to create a simple data entry 
  420. application using a variety of standard objects. Your final application should 
  421. look something like this: 
  422.  
  423. To use the application, a user types text into the entry field at the top of 
  424. the project. Selecting the Add push button or pressing the Enter key adds the 
  425. item in the entry field to the end of the list box in ascending or descending 
  426. order, depending on the state of the Sort order radio buttons. 
  427.  
  428. If the user selects Clear, the contents of the list box and entry field are 
  429. deleted, and the text insertion cursor is placed in the entry field for further 
  430. processing. 
  431.  
  432. To create the data entry application, complete the steps in each of the 
  433. following sections. 
  434.  
  435.  1. Start the Application 
  436.  
  437.  2. Add the Objects 
  438.  
  439.  3. Size and Align Objects 
  440.  
  441.  4. Provide Behavior 
  442.  
  443.  5. Changing the Order of the Objects 
  444.  
  445.  6. Compile and Execute the Application 
  446.  
  447.  
  448. ΓòÉΓòÉΓòÉ 4.1. Start the Application ΓòÉΓòÉΓòÉ
  449.  
  450. To start the application and name it, complete the following steps: 
  451.  
  452.  1. Double-click on the VisPro/C++ icon in the Workplace Shell. 
  453.  
  454.  2. Double-click on the PROJECTS folder in the VisPro/C++ Icon View window. 
  455.  
  456.     The Projects - Icon View window appears. 
  457.  
  458.  3. Drag a new project off the Project template (hold down the right mouse 
  459.     button and drag to an empty space in the Projects folder, then release). 
  460.  
  461.  4. Use direct editing to name the new project Data (press the Alt key and 
  462.     click the left mouse button at the same time). Type Data over the existing 
  463.     name. 
  464.  
  465.  5. Double-click on the Data project. 
  466.  
  467.     The Data - Icon View window appears. You will see the following icons: 
  468.  
  469.    o Main form, which is the form you use to begin designing your application. 
  470.      After your application is complete, do not delete, move, or rename the 
  471.      Main form. 
  472.  
  473.    o Form template, which allows you to drag off additional forms if you want 
  474.      your application to have more than one window. 
  475.  
  476.    o SubProcs folder, which allows you to incorporate existing C++ code into 
  477.      your application or to group commonly used code segments so they can be 
  478.      called anywhere in your program. 
  479.  
  480.    o Source folder, which contains all of the source code for your project. The 
  481.      source code is created by selecting either Generate source or Generate and 
  482.      compile from the project's Form menu. 
  483.  
  484.    o OPTIONS.MKP, is a file which contains the build options for your 
  485.      application. It is invoked by double-clicking the OPTIONS.MKP icon. 
  486.  
  487.    o RESOURCE.VPP, is a file which contains external resources for your 
  488.      application, such as bitmaps or pointers. You can start the VisPro 
  489.      Resource editor by double-clicking on the RESOURCE.VPP file. 
  490.  
  491.  6. Double-click on the Main icon. 
  492.  
  493.     The Layout view for the application appears. 
  494.  
  495.     The Form Layout view is the environment in which you design the window that 
  496.     your user will perform tasks with. For each window your user works with, 
  497.     you create a form. This application will consist of a single form. 
  498.  
  499.     The form consists of two main parts: the Tool Bar/Palette and Canvas. 
  500.  
  501.  
  502. ΓòÉΓòÉΓòÉ 4.1.1. The Tool Bar/Palette ΓòÉΓòÉΓòÉ
  503.  
  504. _________________________________________
  505. The VisPro/C++ Tool palette. An * denotes objects that are not
  506. included in the Evaluation version.
  507.  
  508. About the Tool Bar 
  509.  
  510. The tool bar and tool palette consist of a series of icons. Each icon 
  511. represents a tool. Each tool is used to place a certain kind of object on the 
  512. canvas. For example, the push button tool places a push button object on the 
  513. canvas. 
  514.  
  515. An object is a graphical item that can be used to perform tasks. Radio buttons 
  516. and list boxes are examples of objects. 
  517.  
  518. The difference between a tool and an object is that a tool is a graphical 
  519. representation of something that can be added to the canvas. Once added, it 
  520. becomes an object that can be used to perform tasks. 
  521.  
  522. You can turn off the tool bar by selecting Open and then Settings from the Form 
  523. menu. Select the Options page and deselect Show tool bar. You can also use the 
  524. Options page to select the tool palette. If you select Save defaults, all the 
  525. defaults you have set for the form are saved, including fonts, grid spacing, 
  526. etc. 
  527.  
  528. Saving defaults affects the defaults for every other project you create. If you 
  529. do not select Save defaults, your changes will affect only the project the 
  530. change was made in. 
  531.  
  532.  
  533. ΓòÉΓòÉΓòÉ 4.1.2. The Canvas ΓòÉΓòÉΓòÉ
  534.  
  535. _________________________________________
  536. The VisPro/C++ Layout view, showing the tool bar and tool palette.
  537.  
  538. About the Canvas 
  539.  
  540. The canvas is the open, gridded area below the tool bar. This is the area in 
  541. which you will design (or lay out) your form. You select the tools you need 
  542. from the tool bar or tool palette and add them to the canvas. Once objects are 
  543. added to the canvas, you can customize their appearance and provide behavior 
  544. for them. 
  545.  
  546. You can turn off the grid in the canvas by selecting Open and then Settings 
  547. from the Form menu. Select the Options page and deselect Show grid. If you 
  548. select Save defaults, all the defaults you have set for the form are saved, 
  549. including fonts, grid spacing, etc. Saving defaults affects the defaults for 
  550. every other project you create. If you do not select Save defaults, your 
  551. changes will affect only  the project the change was made in. 
  552.  
  553. Note: Snap to grid forces the object to align with the nearest grid line. If 
  554. you do not want to use this feature, deselect it. 
  555.  
  556.  
  557. ΓòÉΓòÉΓòÉ 4.2. Add the Objects ΓòÉΓòÉΓòÉ
  558.  
  559. In this section, you add the objects from the toolbar to the Layout view of 
  560. your application. You will then specify characteristics, such as a unique name, 
  561. for those objects. You specify these characteristics using the Settings view 
  562. for the objects. 
  563.  
  564. The application consists of a text object, two push buttons, two radio buttons, 
  565. a list box, and an entry field. 
  566.  
  567. Complete the steps in the following sections to add the objects and define 
  568. settings for them. 
  569.  
  570.  
  571. ΓòÉΓòÉΓòÉ 4.2.1. Add Push Button ΓòÉΓòÉΓòÉ
  572.  
  573. In this section, you add a push button to the canvas. You then use the Settings 
  574. view of the push button to specify that it will be named Add. In addition, you 
  575. use the Settings view to provide a descriptive name (known as a symbol) for the 
  576. push button. This descriptive name makes it easy to identify the object when 
  577. you begin programming. 
  578.  
  579.  1. Select the Push button tool from the tool bar. 
  580.  
  581.  2. Click inside the canvas to place a push button approximately where you see 
  582.     it in the figure of the application (the bottom left corner of your form). 
  583.  
  584.  3. Double-click the push button. 
  585.  
  586.     The Settings view notebook for the push button appears, displaying the 
  587.     Style page. 
  588.  
  589.  4. Select the Default check box. This causes the ADD push button to be 
  590.     selected whenever the Enter key is pressed. 
  591.  
  592.  5. Select the General tab on the Settings notebook. 
  593.  
  594.  6. Select the Text field, and type ~Add. This causes the push button to appear 
  595.     with the label Add on the Layout view, and when the application is run. The 
  596.     tilde (~) character in front of the A places an underscore beneath the A 
  597.     character, allowing the user to select the ADD push button by pressing the 
  598.     Alt-A combination. 
  599.  
  600.     Note: An alternative method for specifying the name of the object is to use 
  601.     direct editing. The General page is recommended here for convenience 
  602.     because you will be specifying other settings for the object. 
  603.  
  604.  7. Select the Symbol field, and type ADD. Do not change the default ID. 
  605.  
  606.     Note: Symbol is a unique name you supply that identifies an object. The ID 
  607.     is a unique integer used to identify an object. The Symbol is optional, but 
  608.     you include it because a symbol with a de scriptive name is easier to refer 
  609.     to. 
  610.  
  611.  8. Select Close from the title bar icon menu (the symbol at the top left-hand 
  612.     corner of the Settings view window). 
  613.  
  614.  
  615. ΓòÉΓòÉΓòÉ 4.2.2. CLEAR Push Button ΓòÉΓòÉΓòÉ
  616.  
  617. In this section, you add another push button to the canvas. You then use the 
  618. Settings view of the push button to specify that it will be named CLEAR. In 
  619. addition, you use the Settings view to provide a descriptive name (known as a 
  620. symbol) for the push button. This descriptive name makes it easy to identify 
  621. the object when you begin programming. 
  622.  
  623.  1. Select the Push button tool from the tool bar. 
  624.  
  625.  2. Click inside the canvas to place a push button approximately where you see 
  626.     it in the figure of the application (to the right of the ADD button). 
  627.  
  628.  3. Double-click the push button. 
  629.  
  630.     The Settings view notebook for the push button appears, displaying the 
  631.     Style page. The defaults are used for the Style page. 
  632.  
  633.  4. Select the General tab on the notebook. Select the Text field, and type 
  634.     ~Clear. This causes the push button to appear with the label Clear when the 
  635.     application it run. The tilde (~) character in front of the C places an 
  636.     underscore beneath the C character, allowing the user to select the CLEAR 
  637.     push button by pressing the Alt-C combination. 
  638.  
  639.     Note: An alternative method for specifying the name of the object is to use 
  640.     direct editing. The General page is recommended here for convenience 
  641.     because you will be specifying other settings for the object. 
  642.  
  643.  5. Select the Symbol field, and type CLEAR. Do not change the default ID. 
  644.  
  645.     Note: Symbol is a unique name you supply that identifies an object. The ID 
  646.     is a unique integer used to identify an object. The Symbol is optional, but 
  647.     you include it because a symbol with a descriptive name is easier to refer 
  648.     to. 
  649.  
  650.  6. Select Close from the title bar icon menu (the symbol at the top left-hand 
  651.     corner of the Settings view window). 
  652.  
  653.  
  654. ΓòÉΓòÉΓòÉ 4.2.3. Items List Box ΓòÉΓòÉΓòÉ
  655.  
  656. To add and define settings for the Items list box, complete the following 
  657. steps: 
  658.  
  659.  1. Select the List box tool from the tool bar. 
  660.  
  661.  2. Click inside the canvas to place the list box above the CLEAR and ADD push 
  662.     buttons. 
  663.  
  664.  3. Double-click the list box. 
  665.  
  666.     The Settings view notebook for the list box appears. 
  667.  
  668.  4. Select the General tab on the notebook. 
  669.  
  670.  5. Select the Symbol field, and type ITEMS. Do not change the default ID. 
  671.  
  672.  6. Select Close from the title bar icon menu. 
  673.  
  674.  
  675. ΓòÉΓòÉΓòÉ 4.2.4. Sort Order Radio Buttons ΓòÉΓòÉΓòÉ
  676.  
  677. Two radio buttons, Ascending and Descending, will now be added to your project. 
  678. Radio buttons represent a mutually exclusive choice that the user of your 
  679. project must make. That is, only one of these buttons can be highlighted at a 
  680. time. Radio buttons (and check boxes) are generally used only to show a 
  681. selection state in your applications. 
  682.  
  683. To add the Ascending and Descending radio buttons to your project, complete the 
  684. following steps: 
  685.  
  686.  1. To accomodate the next several objects, increase the size of your form by 
  687.     positioning the mouse pointer over the top border of your form window. 
  688.  
  689.  2. Right click and drag the form window up about an inch, then release the 
  690.     mouse to set the new form position. 
  691.  
  692.  3. Select the Radio button tool from the tool bar. 
  693.  
  694.  4. Click inside the canvas to place two radio buttons, one over the other, 
  695.     above the Items list box. 
  696.  
  697.  5. Double-click the top radio button. 
  698.  
  699.     The Settings view notebook for the radio button appears. 
  700.  
  701.  6. Select the Group check box on the Style page. This provides a mutually 
  702.     exclusive behavior for the two radio buttons (you should only select the 
  703.     Group check box for the first radio button in a group). 
  704.  
  705.  7. Select the General tab on the notebook. 
  706.  
  707.  8. Select the Text field, and type Ascending. 
  708.  
  709.  9. Select the Symbol field, and type ASCENDING. Do not change the default ID. 
  710.  
  711. 10. Select Close from the title bar icon menu. 
  712.  
  713. 11. Double-click the lower radio button. 
  714.  
  715.     The Settings view notebook for the radio button appears. 
  716.  
  717. 12. Select the General tab on the notebook. 
  718.  
  719. 13. Select the Text field, and type Descending. 
  720.  
  721. 14. Select the Symbol field, and type DESCENDING. Do not change the default ID. 
  722.  
  723. 15. Select Close from the title bar icon menu. 
  724.  
  725.  
  726. ΓòÉΓòÉΓòÉ 4.2.5. Sort Order Text Object ΓòÉΓòÉΓòÉ
  727.  
  728. To add and define settings for the Sort order text object, complete the 
  729. following steps: 
  730.  
  731.  1. Select the Text object from the tool bar. 
  732.  
  733.  2. Click inside the canvas to place the text object above the Ascending radio 
  734.     button. 
  735.  
  736.  3. Double-click the text object. 
  737.  
  738.     The Settings view notebook for the text object appears. 
  739.  
  740.  4. Select the General tab on the notebook. 
  741.  
  742.  5. Select the Text field, and type Sort order. 
  743.  
  744.  6. Select Close from the title bar icon menu. 
  745.  
  746.  
  747. ΓòÉΓòÉΓòÉ 4.2.6. Data Entry Field ΓòÉΓòÉΓòÉ
  748.  
  749. To add and define settings for the Data entry field, complete the following 
  750. steps: 
  751.  
  752.  1. Select the Entry field tool from the tool bar. 
  753.  
  754.  2. Click inside the canvas to place an entry field tool on the canvas, above 
  755.     the Sort order text object. 
  756.  
  757.  3. Double-click the entry field. 
  758.  
  759.     The Settings view notebook for the entry field appears. 
  760.  
  761.  4. Select the General tab on the notebook. 
  762.  
  763.  5. Select the Symbol field and type DATA. Do not change the default ID. 
  764.  
  765.  6. Select Close from the title bar icon menu. 
  766.  
  767.  
  768. ΓòÉΓòÉΓòÉ 4.3. Size and Align Objects ΓòÉΓòÉΓòÉ
  769.  
  770. To adjust the objects so that text fits inside each object, complete the 
  771. following steps: 
  772.  
  773.  1. Select the objects that contain text (the text object and radio buttons). 
  774.  
  775.     An easy way to select multiple objects is to use drag selection. Place the 
  776.     mouse pointer over the first object and press the left mouse button. Hold 
  777.     it down as you move the mouse to select the other objects. Then release the 
  778.     mouse button. 
  779.  
  780.     The selected objects are highlighted. 
  781.  
  782.  2. From the Selected menu, select Arrange, and then select Fit to Text. 
  783.  
  784.     The objects you selected change size to accommodate the text inside. 
  785.  
  786.     Note: You did not fit the text for the entry field because the text in the 
  787.     entry field changes when the field is used, depending upon the total. You 
  788.     did not change the push buttons because they need to be equal sizes. 
  789.  
  790.  
  791. ΓòÉΓòÉΓòÉ 4.4. Provide Behavior for the Application ΓòÉΓòÉΓòÉ
  792.  
  793. You will now program the application so that it works as described at the 
  794. beginning of this section. You can provide behavior for the application from 
  795. the Layout view. However, we will use the Event tree view because it allows you 
  796. to easily see both the objects and the C++ statements for the behavior you 
  797. specify. 
  798.  
  799. To switch to the Event tree view, select Event tree view from the View menu. 
  800.  
  801. The objects you added to your application appear on the left. The Event window 
  802. appears on the right. 
  803.  
  804. In the following sections, you will provide behavior for the When opened event, 
  805. the ADD push button, and the CLEAR push button. 
  806.  
  807.  
  808. ΓòÉΓòÉΓòÉ 4.4.1. Form Constructor Event (When Opened) ΓòÉΓòÉΓòÉ
  809.  
  810. When the user starts this project, one of the two radio buttons should be 
  811. highlighted (since they are mutually exclusive, and one or the other must 
  812. always be highlighted). 
  813.  
  814. The Form constucter event is where all form initialization takes place: such as 
  815. loading list boxes with data and setting display styles for objects. 
  816.  
  817. To select the Ascending radio button from the Form constructor event, complete 
  818. the following steps: 
  819.  
  820.  1. From the Form menu, select Code sections, and then Form constructor (when 
  821.     opened). 
  822.  
  823.     The Code Section Form constructor window appears. The top of the Event 
  824.     window displays the following statement for Form constructor: 
  825.  
  826.         /* Code Section Form constructor (when opened) - Form DATA\Main */
  827.  
  828.  2. We will be dragging objects to the Form constructor window from the Event 
  829.     tree view. Position the Form constructor window so that the left side of 
  830.     the window is visible beneath the Event tree view of your project. 
  831.  
  832.     Select the title bar of the Event tree view window to make it active. 
  833.  
  834.  3. Move the mouse pointer over the Ascending radio button icon (on the left 
  835.     side of the Event tree view), and hold down the right mouse button as you 
  836.     drag from the Ascending radio button icon on the Event tree view to the 
  837.     Form constructor window. Release the mouse when you reach a point below the 
  838.     existing code on the Form Constructor window. 
  839.  
  840.     The Create Link window appears. 
  841.  
  842.  4. Select Check the item from the Create Link window, then select OK. 
  843.  
  844.     SHORTCUT METHOD: Double-click Check the item. 
  845.  
  846.     The following C++ statement appears: 
  847.  
  848.         /* Check the item ASCENDING Radio Button */
  849.         ASCENDING->select();
  850.  
  851.  5. Select Save from the Event menu. 
  852.  
  853.     NOTE: The Save option on the menu may be disabled. This is because 
  854.     VisPro/C++ by default automatically saves your form every 15 seconds. To 
  855.     change this interval, or disable autosave, select the appropriate check box 
  856.     from the Options page of your form's Settings view. 
  857.  
  858. The code in the Form constructor window should look like this when your are 
  859. finished: 
  860.  
  861. /* Code Section Form constructor (when opened) - Form DATA\Main */
  862. /* Check the item ASCENDING Radio Button */
  863. ASCENDING->select();
  864.  
  865.  
  866. ΓòÉΓòÉΓòÉ 4.4.2. ADD Push Button ΓòÉΓòÉΓòÉ
  867.  
  868. The ADD push button takes the value found in the entry field and adds it to the 
  869. list box. To provide this behavior, complete the following steps: 
  870.  
  871.  1. From the Event tree view, select the ADD push button. 
  872.  
  873.  2. From the Selected menu, select When, and then Clicked/Selected. 
  874.  
  875.     The following C++ statements appear in the top of the Event window. 
  876.  
  877.         /* Event ~Add ADD, Clicked/selected */
  878.         IString aTextValue="text";
  879.         unsigned long anUnsignedValue=0;
  880.  
  881.  3. Make sure the ADD push button Clicked/selected event is highlighted. Then 
  882.     drag the DATA entry field into the Event window, below the existing C++ 
  883.     statements, and release the mouse button. 
  884.  
  885.     The Create Link window appears. 
  886.  
  887.  4. Select Get item value, and then select OK. 
  888.  
  889.     The following C++ statement appears: 
  890.  
  891.         /* Get item text DATA Entry Field */
  892.         aTextValue=DATA->text();
  893.  
  894.  5. Move the mouse pointer over the Ascending radio button icon. Then drag the 
  895.     Ascending radio button into the Event window, below the existing C++ 
  896.     statements, and release the mouse button. 
  897.  
  898.     The Create Link window appears. 
  899.  
  900.  6. Select Is button selected?, then select OK. 
  901.  
  902.     The following C++ statement appears: 
  903.  
  904.         /* Is button selected? ASCENDING Radio Button */
  905.         IBoolean aBoolean = ASCENDING->isSelected();
  906.  
  907.  7. On a new line below this statement, type the word if (followed by a space). 
  908.     The following code template will be added: 
  909.  
  910.         if ()
  911.          {
  912.             } else {
  913.             } /* end if */
  914.  
  915.  8. In the parenthesis, type 
  916.  
  917.         aBoolean == 1
  918.  
  919.     Move the cursor down one line and to the right of the bracket ({), and 
  920.     press Enter to insert a blank line in your code template. This provides 
  921.     space to insert the code for the next step. 
  922.  
  923.  9. Make sure the ADD push button Clicked/selected event is highlighted. Then 
  924.     drag the Items list box into the Event window, into the blank line created 
  925.     by the previous step. 
  926.  
  927.     The Create Link window appears. 
  928.  
  929. 10. Select Add item sorted ascending, and then select OK. 
  930.  
  931.     The following C++ statement appears: 
  932.  
  933.         /* Add item sorted ascending ITEMS List Box */
  934.         ITEMS->addAscending(aTextValue);
  935.  
  936. 11. Insert a blank line between the lines containing the words else and end if. 
  937.  
  938. 12. Make sure the ADD push button Clicked/selected event is highlighted. Then 
  939.     drag the Items list box into the Event window, and into the blank line 
  940.     created by the previous step. 
  941.  
  942.     The Create Link window appears. 
  943.  
  944. 13. Select Add item sorted descending, and then select OK. 
  945.  
  946.     The following C++ statement appears: 
  947.  
  948.         /* Add item sorted descending ITEMS List Box */
  949.         ITEMS->addDescending(aTextValue);
  950.  
  951.     Now that the text has been added to the list box, we will delete the 
  952.     contents of the entry field, and give it focus. This allows the user to 
  953.     begin typing a new value without having to delete the previous value. 
  954.  
  955. 14. Make sure the ADD push button Clicked/selected event is highlighted. Then 
  956.     drag the DATA entry field into the Event window, below the existing 
  957.     statements. 
  958.  
  959.     The Create Link window appears. 
  960.  
  961. 15. Select Clear all, and then select OK. This deletes the contents of the DATA 
  962.     entry field. 
  963.  
  964.     The following C++ statement appears: 
  965.  
  966.         /* Clear all DATA Entry Field */
  967.         DATA->setText("");
  968.  
  969. 16. Drag the DATA entry field into the event window once more, releasing the 
  970.     mouse below the existing statements in the event window: 
  971.  
  972.     The Create Link window appears. 
  973.  
  974. 17. Select Give focus to window, and then select OK. 
  975.  
  976.     The following C++ statement appears: 
  977.  
  978.         /* Give focus to window DATA Entry Field */
  979.         DATA->setFocus();
  980.  
  981. 18. Select Save from the Event menu. 
  982.  
  983. When you are finished with the ADD push button, your code will look like this: 
  984.  
  985. /* Event ~Add ADD, Clicked/selected */
  986. IString aTextValue="text";
  987. unsigned long anUnsignedValue=0;
  988. /* Get item text DATA Entry Field */
  989. aTextValue=DATA->text();
  990. /* Is button selected? ASCENDING Radio Button */
  991. IBoolean aBoolean = ASCENDING->isSelected();
  992. if (aBoolean == 1)
  993. {
  994. /* Add item sorted ascending ITEMS List Box */
  995. ITEMS->addAscending(aTextValue);
  996. } else {
  997. /* Add item sorted descending ITEMS List Box */
  998. ITEMS->addDescending(aTextValue);
  999. } /* end if */
  1000. /* Clear all DATA Entry Field */
  1001. DATA->setText("");
  1002. /* Give focus to window DATA Entry Field */
  1003. DATA->setFocus();
  1004.  
  1005.  
  1006. ΓòÉΓòÉΓòÉ 4.4.3. CLEAR Push Button ΓòÉΓòÉΓòÉ
  1007.  
  1008. The CLEAR push button deletes everything in the Items list box and the DATA 
  1009. entry field, then places the cursor in the DATA entry field to allow further 
  1010. input. To provide this behavior, complete the following steps: 
  1011.  
  1012.  1. From the Event tree view, select the CLEAR push button. 
  1013.  
  1014.  2. From the Selected menu, select When, and then Clicked/Selected. 
  1015.  
  1016.     The following C++ statements appear in the Event window. 
  1017.  
  1018.         /* Event ~Clear CLEAR, Clicked/selected */
  1019.         IString aTextValue="text";
  1020.         unsigned long anUnsignedValue=0;
  1021.  
  1022.  3. Make sure the CLEAR push button Clicked/selected event is highlighted. Then 
  1023.     drag the Items list box into the Event window, below the existing C++ 
  1024.     statement, and then release the mouse button. 
  1025.  
  1026.     The Create Link window appears. 
  1027.  
  1028.  4. Select Delete all items, and then select OK. 
  1029.  
  1030.     The following C++ statement appears: 
  1031.  
  1032.         /* Delete all items ITEMS List Box */
  1033.         ITEMS->removeAll();
  1034.  
  1035.  5. Next, drag the DATA entry field into the event window, below the existing 
  1036.     C++ statements, and then release the mouse button. 
  1037.  
  1038.     The Create Link window appears. 
  1039.  
  1040.  6. Select Clear all and then select OK. 
  1041.  
  1042.     The following C++ statement appears. 
  1043.  
  1044.         /* Clear all DATA Entry Field */
  1045.         DATA->setText("");
  1046.  
  1047.  7. Drag the DATA entry field into the event window, below the existing C++ 
  1048.     statements, and then release the mouse button. 
  1049.  
  1050.     The Create Link window appears. 
  1051.  
  1052.  8. Select Give focus to window, and then select OK. 
  1053.  
  1054.     The following C++ statement appears: 
  1055.  
  1056.         /* Give focus to window DATA Entry Field */
  1057.         DATA->setFocus();
  1058.  
  1059.  9. Select Save from the Event menu. 
  1060.  
  1061. When you are finished editing the CLEAR push button, your code will look like 
  1062. this: 
  1063.  
  1064. /* Event ~Clear CLEAR, Clicked/selected */
  1065. IString aTextValue="text";
  1066. unsigned long anUnsignedValue=0;
  1067. /* Delete all items ITEMS List Box */
  1068. ITEMS->removeAll();
  1069. /* Clear all DATA Entry Field */
  1070. DATA->setText("");
  1071. /* Give focus to window DATA Entry Field */
  1072. DATA->setFocus();
  1073.  
  1074.  
  1075. ΓòÉΓòÉΓòÉ 4.5. Changing the Order of the Objects ΓòÉΓòÉΓòÉ
  1076.  
  1077. When the application starts, the ADD push button is given focus. This means 
  1078. that it is the currently selected object in your form. To give the DATA entry 
  1079. field focus, click on it with the left mouse button, or press Shift+Tab from 
  1080. the keyboard. 
  1081.  
  1082. In this section, we will use the List view to give focus to the DATA entry 
  1083. field when the application is started. This prevents the user from having to 
  1084. select the DATA entry field before typing data. To move to the List view, 
  1085. select List view from the View menu. 
  1086.  
  1087. Each row in the List view represents an object in the Layout view. The object 
  1088. type and icon appear on the left of the split bar, with other attributes on the 
  1089. right. In this view, you can use direct editing to change the Text identifier 
  1090. for an object, as well as the Symbol name (descriptive name) for an object. 
  1091.  
  1092. To give focus to the DATA entry field  when your application is started, 
  1093. complete the following steps: 
  1094.  
  1095.  1. Select the DATA entry field row by left-clicking on it with the mouse. 
  1096.  
  1097.     The DATA entry field row is highlighted. 
  1098.  
  1099.  2. With the mouse cursor on the DATA entry field row, right-click and drag the 
  1100.     mouse pointer until it is just above the ADD push button row. 
  1101.  
  1102.     A solid horizontal line appears above the ADD push button row. 
  1103.  
  1104.  3. Release the mouse button, and the DATA entry field appears above the ADD 
  1105.     push button in the object order. 
  1106.  
  1107.     You could also programmatically give the focus to the entry field in the 
  1108.     'When opened' event for the main form. The technique you just used, 
  1109.     however, is much faster to implement and visualize if your are working with 
  1110.     many objects. 
  1111.  
  1112.  4. Select Generate and compile from the Form menu, then double-click on the 
  1113.     RUN.EXE program object in your project folder to see your changes. 
  1114.  
  1115.  
  1116. ΓòÉΓòÉΓòÉ 4.6. Compile and Execute the Application ΓòÉΓòÉΓòÉ
  1117.  
  1118. To compile the application, select Generate and compile from the Form menu. 
  1119.  
  1120. The VisPro Viewer appears, displaying the compilation progress and notifying 
  1121. you when the compilation is complete. 
  1122.  
  1123. If there is an error in your code, it will be displayed in the VisPro/Viewer 
  1124. output window. Double-click on that error line in the VisPro Viewer, and the 
  1125. event window containing the error will appear for you to correct. 
  1126.  
  1127. To run the application, double-click the left mouse button on the file RUN.EXE, 
  1128. which is located in the source folder of your project. 
  1129.  
  1130.  
  1131. ΓòÉΓòÉΓòÉ 5. How To Order VisPro/C++ ΓòÉΓòÉΓòÉ
  1132.  
  1133. VisPro/C++ is available directly from HockWare or from your favorite software 
  1134. reseller. 
  1135.  
  1136. Telephone  FAX: 
  1137.  
  1138. (919) 380-0616, Fax: (919) 380-0757 
  1139.  
  1140. CompuServe: 
  1141.  
  1142. CompuServe ID#: 71333,3226 
  1143.  
  1144. You can reach our forum in the OS/2 Vendors forum by typing GO HOCKWARE 
  1145.  
  1146. Internet: 
  1147.  
  1148. Internet ID: hockware@vnet.net 
  1149.  
  1150. ADDRESS: 
  1151.  
  1152. HockWare Incorporated, P.O. Box 336, Cary, NC 27512-0336 (USA) 
  1153.  
  1154. The next section contains an online order form, which you may print out to use 
  1155. when mailing or faxing your order to us. 
  1156.  
  1157.  
  1158. ΓòÉΓòÉΓòÉ 5.1. Order Form for VisPro/C++ ΓòÉΓòÉΓòÉ
  1159.  
  1160. SHIPPING ADDRESS:                    BILLING ADDRESS:
  1161.  
  1162. Name: ____________________________   Name: ____________________________
  1163. Company: _________________________   Company: _________________________
  1164. Address: _________________________   Address: _________________________
  1165. __________________________________   __________________________________
  1166. City: ____________________________   City: ____________________________
  1167. State: ___________________________   State: ___________________________
  1168. Country: _________________________   Country: _________________________
  1169. Zip: _____________________________   Zip: _____________________________
  1170. Phone: ___________________________   Phone: ___________________________
  1171. FAX: _____________________________   FAX: _____________________________
  1172. PAYMENT METHOD: (Circle)
  1173. Check  Purchase Order(Include copy of PO)  Credit Card:  Visa   Amex   MC
  1174. Wire Transfer                              Account Number:
  1175.                                            ______________________________
  1176.                                            Expiration Date: _____________
  1177.  
  1178. UPS SHIPPING and HANDLING FEES: (Alaska, Hawaii, Puerto Rico and Intnl.
  1179.                                  shipping fees vary.  Please call.)
  1180. Ground: 1-3 Copies    $7.00      each additional copy:        $2.00
  1181. 2nd day air: 1 copy   15.00      each additional copy:         4.00
  1182. Next day air: 1 copy  25.00      each additional copy:         6.00
  1183.  
  1184. ITEM                    QUANTITY    UNIT PRICE          TOTAL
  1185. VisPro/C++             __________   $399.00             _____________
  1186. VisPro/C               __________   $399.00             _____________
  1187.                                     SUBTOTAL            _____________
  1188.                                     Sales Tax
  1189.                          (residents of NC, 6% subtotal) _____________
  1190.                                     Shipping            _____________
  1191.                                     TOTAL               _____________
  1192. Where did you hear about VisPro/C++?  Please list the name of the
  1193. magazine or other source.  Thanks!
  1194. Article __________________________    Catalog _____________________________
  1195. Advertisement ____________________    Direct Mail _________________________
  1196. Electronic Bulletin ______________    Other _______________________________
  1197.  
  1198.     HockWare, Inc. Telephone (919) 380-0616   FAX (919) 380-0757
  1199.