home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 November / VPR9611B.ISO / vabasic / ntclnt.exe / DISK7 / data.7 / datab / HELP / PROGUIDE.INF (.txt)
OS/2 Help File  |  1996-07-26  |  1MB  |  13,564 lines

  1.  
  2. 笊絶武笊 1. Version Notice 笊絶武笊
  3.  
  4. First Edition (June 1996) 
  5.  
  6. This edition applies to Version 1 Release 1 of IBM VisualAge for Basic and to 
  7. any subsequent releases until otherwise indicated in new editions or technical 
  8. newsletters. Make sure you are using the correct edition for the level of the 
  9. product. 
  10.  
  11. Order publications through your IBM representative or the IBM branch office 
  12. serving your locality. Publications are not stocked at the address below. 
  13.  
  14. A form for readers' comments is provided at the back of this publication. If 
  15. the form has been removed, address your comments to: 
  16.  
  17.       IBM Corporation, W92/H3 
  18.       P.O. Box 49023 
  19.       San Jose, CA, 95161-9023 
  20.       U.S.A. 
  21.  
  22.  When you send information to IBM, you grant IBM a nonexclusive right to use or 
  23.  distribute the information in any way it believes appropriate without 
  24.  incurring any obligation to you. 
  25.  
  26.       (c) Copyright International Business Machines Corporation, 1996. All 
  27.       rights reserved. 
  28.       (C) Copyright Visual Edge Software Ltd., 1993, 1996. All rights reserved. 
  29.  
  30.  
  31. 笊絶武笊 2. Notices 笊絶武笊
  32.  
  33. References in this publication to IBM products, programs, or services do not 
  34. imply that IBM intends to make these available in all countries in which IBM 
  35. operates. Any reference to an IBM product, program, or service is not intended 
  36. to state or imply that only that IBM product, program, or service may be used. 
  37. Any functionally equivalent product, program, or service that does not infringe 
  38. any of the intellectual property rights of IBM may be used instead of the IBM 
  39. product, program, or service. The evaluation and verification of operation in 
  40. conjunction with other products, except those expressly designated by IBM, are 
  41. the responsibility of the user. 
  42.  
  43. IBM may have patents or pending patent applications covering subject matter in 
  44. this document. The furnishing of this document does not give you any license to 
  45. these patents. You can send license inquiries, in writing, to the IBM Director 
  46. of Licensing, IBM Corporation, 500 Columbus Avenue, Thornwood, NY 10594, U.S.A. 
  47.  
  48. Licensees of this program who wish to have information about it for the purpose 
  49. of enabling: (1) the exchange of information between independently created 
  50. programs and other programs (including this one) and (2) the mutual use of the 
  51. information which has been exchanged, should contact IBM Corporation, 
  52. Department J01, 555 Bailey Avenue, San Jose, CA 95161-9023. Such information 
  53. may be available, subject to appropriate terms and conditions, including in 
  54. some cases, payment of a fee. 
  55.  
  56.  
  57. 笊絶武笊 2.1. Programming Interface Information 笊絶武笊
  58.  
  59. This publication is intended to help the customer write programs in VisualAge 
  60. for Basic. This publication documents General-use Programming Interface and 
  61. Associated Guidance Information provided by VisualAge for Basic. 
  62.  
  63. General-use programming interfaces allow the customer to write programs that 
  64. obtain the services of VisualAge for Basic. 
  65.  
  66.  
  67. 笊絶武笊 2.2. Trademarks 笊絶武笊
  68.  
  69. The following terms are trademarks of the IBM Corporation in the United States 
  70. or other countries or both: 
  71.  
  72. AIX                      IBM
  73. AIX/6000                   OS/2
  74. Common User Access              SOMobjects
  75. CUA                      WIN-OS/2
  76. DB2                      VisualAge
  77.  
  78. Visual Edge is a trademark of Visual Edge Software, Ltd. 
  79.  
  80. Microsoft, Windows, and the Windows 95 logo are trademarks or registered 
  81. trademarks of Microsoft Corporation. 
  82.  
  83. Other company, product, and service names, which may be denoted by a double 
  84. asterisk (**), may be trademarks or service marks of others. 
  85.  
  86.  
  87. 笊絶武笊 3. About This Book 笊絶武笊
  88.  
  89. This guide describes how to use the VisualAge for Basic visual development 
  90. environment to create graphical user interface (GUI) applications. To install, 
  91. develop, test, and run a VisualAge for Basic client/server application program, 
  92. you work with the following environments: 
  93.  
  94. Client environment: In the client environment, you can build and run client 
  95. applications on OS/2, Windows 95, or Windows NT. If you have installed DB2 
  96. support, you can also write server procedures in these environments. You can 
  97. build and distribute DB2 server procedures for DB2 on OS/2, Windows 95, Windows 
  98. NT, and AIX. 
  99.  
  100. Server environment: In the server environment, you can run applications on 
  101. OS/2, Windows 95, Windows NT, and AIX. If you have installed DB2 support, you 
  102. can also run server procedures in these environments.
  103.  
  104.  
  105. 笊絶武笊 3.1. Who Should Use This Guide 笊絶武笊
  106.  
  107. This guide is intended for: 
  108.  
  109.      Casual programmers who build simple GUI applications. 
  110.  
  111.      Application developers who build prototypes and reusable application 
  112.       units. 
  113.  
  114.      Advanced programmers who build classes, customize VisualAge for Basic, 
  115.       and distribute applications. 
  116.  
  117.      Application programmers who access DB2 for OS/2, Windows 95, Windows NT, 
  118.       and AIX from GUI applications. 
  119.  
  120.  
  121. 笊絶武笊 3.2. Before You Read This Guide 笊絶武笊
  122.  
  123. This guide assumes: 
  124.  
  125.      You are familiar with your operating system. 
  126.  
  127.      You understand the functions of the mouse buttons. 
  128.  
  129.  
  130. 笊絶武笊 3.3. How this Book Is Organized 笊絶武笊
  131.  
  132. This book contains the following parts: 
  133.  
  134.  Part 1  Working with VisualAge for Basic Tools, explains how to use VisualAge 
  135. for Basic tools to build your application's user interface, by creating the 
  136. objects on your interface, setting their properties, and creating menus. It 
  137. also explains how to use the Code Editor to test and debug your application 
  138. code. 
  139.  
  140.  Part 2  Writing Code, teaches you how to add behavior to your VisualAge for 
  141. Basic objects. It also explains how to apply object-oriented programming 
  142. techniques, such as defining classes. Finally, it explains how to code your 
  143. program to handle errors. 
  144.  
  145.  Part 3  Integrating with External Systems, explains how to integrate your 
  146. program with other programs, via dynamic link libraries (DLLs), System Object 
  147. Manager (SOM), Object Linking and Embedding (OLE), and OpenDoc. It also 
  148. describes how to communicate with hosts, servers, and other applications. It 
  149. explains VisualAge for Basic's database support, which includes embedded SQL 
  150. calls, and direct calls to CLI and ODBC databases. Finally, it explains how to 
  151. invoke DB2 stored procedures from a Windows NT or Windows 95 client. 
  152.  
  153.  Part 4  Advanced Techniques, tells you how to generate cross-platform 
  154. applications, and improve your application. It also describes how to prepare 
  155. your completed program for delivery to other users. 
  156.  
  157.  Part 5  Appendixes, tells how to customize your VisualAge for Basic 
  158. environment, migrate your Microsoft Visual Basic** applications to VisualAge 
  159. for Basic, and internationalize your application. It also provides a complete 
  160. glossary of VisualAge for Basic terms. 
  161.  
  162.  
  163. 笊絶武笊 3.4. Related Information 笊絶武笊
  164.  
  165. The following table describes the VisualAge for Basic library: 
  166.  
  167. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  168. 笏5itle               笏ocation       笏escription                                  笏
  169. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  170. 笏uilding and        笏0nline book:   笏xplains how to create and adapt objects from笏
  171. 笏onverting Parts:   笏Bvbb0000.inf   笏Pther object systems so that they can be     笏
  172. 笏C26-8830-00        笏               笏Bdded to the visual developmet environment as笏
  173. 笏                    笏               笏Pbjects.                                     笏
  174. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  175. 笏ata Access Guide:  笏0nline book:   笏xplains how to create, test, distribute, and笏
  176. 笏4C26-8692-00        笏Bvbd0000.inf   笏Dall stored procedures and user-defined      笏
  177. 笏                    笏               笏Gunctions. The examples in this book require 笏
  178. 笏                    笏               笏Uhe DB2 SDK version of VisualAge for Basic.  笏
  179. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  180. 笏nstallation        笏5ext file:     笏escribes how to install and configure .     笏
  181. 笏nstructions        笏Jnstall.txt    笏                                             笏
  182. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  183. 笏nterface help      笏0nline help    笏1rovides help for all interface items        笏
  184. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  185. 笏anguage Reference  笏0nline help    笏1rovides detailed information on the         笏
  186. 笏4C26-8693-00        笏               笏Domponents, events, functions, methods,      笏
  187. 笏                    笏               笏Qroperties, and statements.                  笏
  188. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  189. 笏1rogramming Guide   笏0nline book:   笏xplains how to create GUI application in the笏
  190. 笏4C26-8833-00        笏Bvbp0000.inf   笏Wisual development environment.              笏
  191. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  192. 笏5ask help           笏0nline help    笏1rovides step-by-step instructions for  tasks笏
  193. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  194. 笏4OMobjects User's   笏0nline book:   笏5ells how to create SOM object-oriented class笏
  195. 笏uide: SC23-2680-01 笏Dppwsomg.inf   笏Mibraries in C or C++.                       笏
  196. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  197. 笏4OMobjects Program  笏0nline book:   笏escribes each class, method, function, and  笏
  198. 笏3eference:          笏Dppwsomr.inf   笏Nacro defined in the SOMobjects Base Toolkit.笏
  199. 笏4C23-2681-01        笏               笏                                             笏
  200. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  201. For more information about designing user interfaces, see:
  202.  
  203.      OSF/Motif Style Guide, release 1.2 
  204.       (Prentice Hall, 1993, ISBN 0-13-643123-2) 
  205.  
  206.      Visual Design with OSF/Motif 
  207.       (by Shiz Kobara, Addison-Wesley, 1991, ISBN 0-201-56320-7) 
  208.  
  209.      Common User Access: Guide to User Interface Design 
  210.       (IBM Corporation, 1991, SC34-4289) 
  211.  
  212.      The Windows Interface: An Application Design Guide 
  213.       (Microsoft Corporation, 1992, document no. PC28921-0692) 
  214.  
  215.      Apple Human Interface Guidelines: The Apple Desktop Interface 
  216.       (Addison-Wesley, 1987, ISBN 0-201-17753-6) 
  217.  
  218.  
  219. 笊絶武笊 4. Part 1  Working with VisualAge for Basic Tools 笊絶武笊
  220.  
  221.  
  222. 笊絶武笊 5. Chapter 1     Quick Tour of VisualAge for Basic 笊絶武笊
  223.  
  224. The VisualAge for Basic visual development environment lets you develop 
  225. applications and server procedures using a set of reusable objects. In addition 
  226. to visual programming, VisualAge for Basic supports event-driven, 
  227. object-oriented programming. 
  228.  
  229. You can integrate your VisualAge for Basic programs with other object systems 
  230. using: Object Linking and Embedding (OLE), System Object Model (SOM), OpenDoc, 
  231. and OLE custom controls (OCXs). You can communicate with other hosts and 
  232. programs using the communication components. Finally, you can write complete 
  233. client/server applications, call external databases, and extend VisualAge for 
  234. Basic by integrating your own or third-party objects. 
  235.  
  236. This chapter provides an overview of VisualAge for Basic's features and 
  237. documentation. It also provides a quick tour of how to develop an application 
  238. in VisualAge for Basic. 
  239.  
  240.  
  241. 笊絶武笊 5.1. Some Terminology 笊絶武笊
  242.  
  243. In VisualAge for Basic, forms are windows you use to design the graphical 
  244. interface of the major windows presented by your application. You can use other 
  245. kinds of windows with your application, such as pop-up windows for selecting 
  246. files or presenting messages. Each form has many associated attributes, or 
  247. properties. Some of these properties you set at design time, while others are 
  248. set by user actions at run time. 
  249.  
  250. The forms contain other objects called components. Text boxes, command buttons, 
  251. and option buttons are just a few of the components that you place on forms. 
  252. Each component also has specific properties associated with it, which are set 
  253. in the same way as form properties. 
  254.  
  255. Forms and components wait for the user to take an action, such as typing text, 
  256. moving a mouse, or clicking a mouse button. When these actions, or events 
  257. occur, they generate various system messages that interact with your code. 
  258.  
  259. You write the code to respond to these events. This code is event-driven; 
  260. unlike traditional programs that force users to follow a predefined path, 
  261. event-driven programs respond to users, and allow them to control the flow of 
  262. execution. 
  263.  
  264.  
  265. 笊絶武笊 5.2. How Do I Develop an Application? 笊絶武笊
  266.  
  267. To develop an application, follow these steps: 
  268.  
  269.    1. Start VisualAge for Basic 
  270.  
  271.    2. Create the user interface 
  272.  
  273.    3. Set properties 
  274.  
  275.    4. Program the behavior of objects 
  276.  
  277.    5. Run the application 
  278.  
  279.    6. Save the application 
  280.  
  281.  Each of these tasks is covered in greater detail later in this book and in the 
  282.  online help. This section gives you a quick tour of these tasks, so that you 
  283.  can start programming immediately. 
  284.  
  285.  This section shows you how to build a very simple application, called Touchy 
  286.  Buttons. You will create a form with a text box and two buttons. The text 
  287.  displayed in the text box depends on which button you press. 
  288.  
  289.  
  290. 笊絶武笊 5.2.1. Starting VisualAge for Basic 笊絶武笊
  291.  
  292. To start VisualAge for Basic, double-click on the VisualAge for Basic icon . 
  293. The following windows appear on your screen: 
  294.  
  295.  
  296. 笊絶武笊 5.2.1.1. Project window 笊絶武笊
  297.  
  298. The Project window is the main window of VisualAge for Basic. To help you 
  299. organize your work, it lists, in outline form, the objects contained in a 
  300. VisualAge for Basic project. The Project window contains a menu bar, tool bars, 
  301. an information line, and an outline area. 
  302.  
  303. The information line displays information on each button or menu selection you 
  304. choose. 
  305.  
  306. Tip:  To access interface online help, click in the outline area and press F1. 
  307.  
  308. See also: Chapter 2, Using the Project Window. 
  309.  
  310.  
  311. 笊絶武笊 5.2.2. Creating the User Interface 笊絶武笊
  312.  
  313. The first step in creating an application is to develop your user interface. 
  314. The following sample interface contains two command buttons and a text box on a 
  315. form. After you complete Step 1 through Step 4, your sample interface should 
  316. look like this:.
  317.  
  318. Tip:  VisualAge for Basic has a multiple undo feature. If at any time you make 
  319. a mistake selecting Edit=>Undo in the Project window undoes your mistake. The 
  320. order of the Undo and Redo operations are done in the same sequence as they 
  321. were performed.
  322.  
  323.  
  324. 笊絶武笊 5.2.2.1. Step 1. Create a Form 笊絶武笊
  325.  
  326. When you begin, a blank form titled Form1 automatically appears. If you would 
  327. like to create additional forms, follow the steps listed below. The rest of 
  328. this section assumes that you don't create a second form, so the figures show 
  329. Form1. 
  330.  
  331. To create a form, choose File=> New form from the Project window, or click on 
  332. the tool bar icon . 
  333.  
  334. VisualAge for Basic creates a new form titled Form2. 
  335.  
  336.  
  337. 笊絶武笊 5.2.2.2. Step 2. Draw Components on the Form 笊絶武笊
  338.  
  339. Next you need to add visual objects for your form-a text box and two command 
  340. buttons. To draw the components: 
  341.  
  342.    1. Click on the Text Box component in the Toolbox using: 
  343.  
  344.       On Windows NT and Windows 95: the left mouse button. 
  345.  
  346.       On OS/2: the right mouse button. 
  347.  
  348.    2. Move the mouse over the form and click on the form. 
  349.  
  350.       A single Text Box appears using its default size setting. 
  351.  
  352.  When you release the mouse button, the text box appears on the form with 
  353.  selection handles surrounding it. The component is drawn with a default height 
  354.  and width. You can resize and move components to refine the appearance of the 
  355.  interface. 
  356.  
  357.  Repeat steps 1 through 3 twice, selecting the Command Button component each 
  358.  time, to create two command buttons on your form. 
  359.  
  360.  
  361. 笊絶武笊 5.2.2.3. Step 3. Resize Your Components 笊絶武笊
  362.  
  363. To change the size of your components, follow these steps: 
  364.  
  365.    1. Click on a component with the left mouse button. 
  366.  
  367.       Selection handles appear around it, indicating that the component is 
  368.       selected. (You must select a component before you can resize it.)
  369.  
  370.    2. Move the pointer onto one of the selection handles. 
  371.  
  372.       The cursor changes to a double sided arrow ( , , , or  ). 
  373.  
  374.    3. To drag the component: 
  375.  
  376.       Windows NT and Windows 95: Press and hold the left mouse button. 
  377.  
  378.       OS/2: Press and hold the right mouse button. 
  379.  
  380.    4. Drag the bottom right corner handle to change the size of the component. 
  381.       An outline of the component's new size appears as you drag the handle.
  382.  
  383.       Tip:  When you move or resize your component on the form, a grid appears 
  384.       facilitating your component alignment. 
  385.  
  386.    5. Release the mouse button. 
  387.  
  388.       The component resizes to the position of your release mouse button.
  389.  
  390.  
  391. 笊絶武笊 5.2.2.4. Step 4. Moving a component: 笊絶武笊
  392.  
  393. To move a component, follow these steps: 
  394.  
  395.    1. Position pointer over component, and click the appropriate mouse button. 
  396.  
  397.    2. Drag the component to its new location. An outline of the component 
  398.       appears as you move it.
  399.  
  400.    3. Release the mouse button. The component moves to its new position.
  401.  
  402.  
  403. 笊絶武笊 5.2.2.5. Step 5. Deleting a component: 笊絶武笊
  404.  
  405. To delete a component follow these steps: 
  406.  
  407.    1. Select the component. 
  408.  
  409.    2. Choose Edit=>Delete, Edit=>Cut, or press the Delete or Ctrl+X keys. The 
  410.       component is deleted from the form. 
  411.  
  412.  See also: Chapter 3, Using the Toolbox and Visual Objects. 
  413.  
  414.  
  415. 笊絶武笊 5.2.3. Setting Properties 笊絶武笊
  416.  
  417. Next you need to set properties for the three new components. You use the 
  418. Property Editor to set these properties. When you select a component on your 
  419. form, its properties appear in the Property Editor. For your program, Touchy 
  420. Buttons, you need to set the following properties-the caption for your form, 
  421. the initial text for the text box, and the names of the buttons. 
  422.  
  423. Tip:  To access language online help for any property in the List of 
  424. Properties, highlight the property and press F1. To access interface online 
  425. help, select the area of the interface and press F1. 
  426.  
  427.    1. To access the Property Editor for your form, click on your form and do 
  428.       one of the following: 
  429.  
  430.           Select the Project window Window=>Property Editor menu item. 
  431.  
  432.           Click the Project window Property Editor button 
  433.  
  434.       The Property Editor appears displaying your form's name in the object 
  435.       list area and a list of all its properties in the list of properties. 
  436.  
  437.       By default, the Property Editor displays the properties for all selected 
  438.       objects in the current form. 
  439.  
  440.       To customize components you set the component's properties using the 
  441.       Property Editor. 
  442.  
  443.       Tip:  If you mistype or insert an incorrect value, the Property Editor 
  444.       does not accept the error. A warning message appears, and the invalid 
  445.       value is highlighted with an X. To remove the error, acknowledge the 
  446.       error dialog box and re-insert the correct property value. 
  447.  
  448.       See also:  Chapter 4, Using the Property Editor.. 
  449.  
  450.    2. To change the text that appears in your form, locate the Caption property 
  451.       and select the word Caption. 
  452.  
  453.    3. In the Caption edit area, where the word Form1 appears, remove the word 
  454.       Form1 and type in Touchy Buttons.
  455.  
  456.    4. Press Enter or click on the Apply  button. The Form1 Caption accepts the 
  457.       change and the name on Form1 changes. 
  458.  
  459.  Tip:  If you change a property value and forget to click on another property, 
  460.  or press the accept button, a warning dialog appears when you change the focus 
  461.  to another component. To accept the change select OK. 
  462.  
  463.  Repeat these steps for the other components. Remember that you must click on 
  464.  the component to load it into the Property Editor. 
  465.  
  466.  To have a blank text box initially, leave the value for the Text field empty. 
  467.  The following table shows the values to use for these properties: 
  468.  
  469.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  470.   笏0bject              笏1roperty            笏7alue               笏
  471.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  472.   笏5ext Box            笏5ext                笏                    笏
  473.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  474.   笏ommand Button 1    笏aption             笏lick Me            笏
  475.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  476.   笏ommand Button 2    笏aption             笏o Not Click Me     笏
  477.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  478.  
  479.  See also:  Chapter 4, Using the Property Editor for a detailed description of 
  480.  how to use the Property Editor. 
  481.  
  482.  
  483. 笊絶武笊 5.2.4. Programming the Behavior of Objects 笊絶武笊
  484.  
  485. You add behavior to objects by writing VisualAge for Basic code in the Code 
  486. Editor. You can open the Code Editor in several different ways: 
  487.  
  488.      Choose Window=> Code Editor from the Project window. 
  489.  
  490.      Click on the Code Editor icon in the Project window tool bar 
  491.  
  492.      Select a form from the Project window, and choose Selected=> Open code 
  493.  
  494.      Double-click on the object. 
  495.  
  496.  The Code Editor contains a menu bar, tool bars, a status line help area, a 
  497.  navigation area, and a code area. 
  498.  
  499.  VisualAge for Basic code consists of event procedures. An event procedure 
  500.  defines what happens when a user performs a certain action. For your Touchy 
  501.  Buttons program, you need to define what happens when the user clicks a 
  502.  button. Therefore you need two event procedures, one for each of your command 
  503.  buttons. 
  504.  
  505.  See also:  Chapter 6, Using the Code Editor. 
  506.  
  507.  
  508. 笊絶武笊 5.2.4.1. Write Your Event Procedures 笊絶武笊
  509.  
  510.    1. Move the pointer onto the Code Editor. 
  511.  
  512.    2. From the Object/Class drop-down selection box, select the down arrow to 
  513.       view the list of objects. Select Command1. 
  514.  
  515.    3. Ensure that the Click event is selected in the Event/Method box. When you 
  516.       select the name of an event or method, a template for the event or method 
  517.       procedure appears in the text editor. VisualAge for Basic gives the 
  518.       procedure a default name, based on the name of the component. For 
  519.       example, the template for a Click event procedure for a command button 
  520.       looks like this: 
  521.  
  522.             Sub Command1_Click()
  523.             End Sub
  524.  
  525.    4. Click in the code area and type the following code for the Click Me 
  526.       button between the Sub and End Sub statements. Use dot notation to 
  527.       identify the object and the attribute, in the format: object.attribute. 
  528.  
  529.             Sub Command1_Click ()
  530.                      Text1.Text = "Ahhh..."
  531.             End Sub
  532.  
  533.    5. From the Object/Class box, select Command2, your second command button. 
  534.  
  535.    6. Click in the text window, and type the following VisualAge for Basic code 
  536.       for the Don't Click Me button: 
  537.  
  538.             Sub Command2_Click ()
  539.                      Text1.Text = "Ouch!"
  540.             End Sub
  541.  
  542.  See also:  Scripting Objects for more information on writing VisualAge for 
  543.  Basic code. 
  544.  
  545.  
  546. 笊絶武笊 5.2.4.2. Checking the Syntax 笊絶武笊
  547.  
  548. When VisualAge for Basic is in design mode, you can perform a manual syntax 
  549. check whenever you want.  You can begin a syntax check in one of the following 
  550. ways: 
  551.  
  552.      Choose the Debug=> Check Syntax command from the menu bar. 
  553.  
  554.      Click on the Check Syntax button on the tool bar. 
  555.  
  556.  If you do not check your syntax before entering run mode, VisualAge for Basic 
  557.  checks for syntax errors before running your application. If an error occurs, 
  558.  the run-mode selection stops and an error drop-down box appears under the Code 
  559.  Editor. 
  560.  
  561.  If you have typed in this entire example, there might be typographical errors. 
  562.  Don't be discouraged, finding and correcting them is easy. 
  563.  
  564.    1. To go to the place in your code where the error occurs, either 
  565.       double-click on the drop-down box error, or highlight the error line and 
  566.       select the Go To button. 
  567.  
  568.  
  569.       The code area displays the first syntax error from the bookmark area 
  570.       list. The line of code containing the error is identified by the syntax 
  571.       error icon 
  572.  
  573.    2. Correct your error. 
  574.  
  575.    3. To double-check that the error has been corrected, either repeat the 
  576.       run-mode selection, or select the Check Syntax button 
  577.  
  578.  The Code Editor's status area has an icon that toggles between two states to 
  579.  act as visual confirmation of whether or not the syntax has been checked-the 
  580.  Verified Syntax icon and the Unverified/Error icon 
  581.  
  582.  
  583. 笊絶武笊 5.2.5. Running Your Application 笊絶武笊
  584.  
  585. You start your application, switching from design mode to run mode, in one of 
  586. the following ways: 
  587.  
  588.      Choose Run=>Start/Continue from the menu bar. 
  589.  
  590.      Click the Start/Continue  button on the tool bar. 
  591.  
  592.      On OS/2: Press F7. 
  593.  
  594.      On Windows NT and Windows 95: Press F5. 
  595.  
  596.  VisualAge for Basic checks for syntax errors, then begins execution of your 
  597.  application if there are no errors. You work with your application as would an 
  598.  end-user, making sure that your VisualAge for Basic application responds to 
  599.  input as expected. 
  600.  
  601.  Platform-specific information: Shortcut keys (such as F5 and F7) vary from 
  602.  platform to platform. To see the shortcut for a menu item, simply look to the 
  603.  right of the item in the menu. 
  604.  
  605.  
  606. 笊絶武笊 5.2.6. Return to Design Mode 笊絶武笊
  607.  
  608.      Click on the Stop icon  in the tool bar of the Code Editor or the Project 
  609.       window, or 
  610.  
  611.      Choose Run=> End from the Project window. 
  612.  
  613.  See also: Chapter 7, Testing and Debugging Code for more information on 
  614.  testing VisualAge for Basic code. 
  615.  
  616.  
  617. 笊絶武笊 5.2.7. Saving Your Work 笊絶武笊
  618.  
  619. You have completed coding the project. By default, VisualAge for Basic saves 
  620. the forms contained in your applications with .i file extensions. 
  621.  
  622. The first time you save a file or project, VisualAge for Basic prompts you for 
  623. a file name for each form in your project and for a project name. 
  624.  
  625.    1. Select File=>Save As in the Project window. A file dialog box appears. 
  626.       Type in your new file name. 
  627.  
  628.    2. Type in the file name for form1.i 
  629.  
  630.    3. Select the directory where you will store your completed project and save 
  631.       the .i file. The new .i file name is updated in the Project window list 
  632.       of files. 
  633.  
  634.    4. You are prompted to save the form. Type in the filename.i and select OK. 
  635.  
  636.    5. The next prompt is the name of the project. Type in the name of your 
  637.       project with the .prj extension and select OK. 
  638.  
  639.       The file, form1.i, appear in the Project window. The project name, 
  640.       testname.prj, appears in the title bar of the Project window. 
  641.  
  642.  
  643. 笊絶武笊 5.2.8. Exiting VisualAge for Basic 笊絶武笊
  644.  
  645. To exit VisualAge for Basic, choose File=> Exit from the Project window. 
  646.  
  647.  
  648. 笊絶武笊 5.3. How Do I Get Help in VisualAge for Basic? 笊絶武笊
  649.  
  650. VisualAge for Basic provides a wide array of information, both printed and 
  651. online. It also provides sample applications and coding examples online. This 
  652. section explains where to look when you need help using VisualAge for Basic.
  653.  
  654.  
  655. 笊絶武笊 5.3.1. Where do I look first? 笊絶武笊
  656.  
  657. All VisualAge for Basic information is available online, in either integrated 
  658. online help, or in online books (.inf files). For help navigating the VisualAge 
  659. for Basic user interface and for help with specific tasks, consult the online 
  660. help. Use this book, VisualAge for Basic Programming Guide, to learn about the 
  661. VisualAge for Basic development process, and for help on more complex tasks, 
  662. such as managing data and integrating with other programs. 
  663.  
  664. The following table provides a list of tasks, and where to look for help on 
  665. these tasks. 
  666.  
  667. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  668. 笏or help on...                          笏4ee...                                  笏
  669. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  670. 笏nstalling                              笏nstallation information                笏
  671. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  672. 笏ustomizing                             笏ustomizing VisualAge for Basic         笏
  673. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  674. 笏earning VisualAge for Basic            笏1art 1, Working with VisualAge for Basic笏
  675. 笏                                        笏5ools, Online Help                      笏
  676. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  677. 笏oding                                  笏1art 2, Writing Code                    笏
  678. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  679. 笏avigating the user interface           笏0nline Help                             笏
  680. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  681. 笏4pecific language elements              笏0nline Language Reference Help          笏
  682. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  683. 笏omponents and objects                  笏0nline Language Reference Help          笏
  684. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  685. 笏reating, calling and browsing server   笏ata Access Guide                       笏
  686. 笏Qrocedures                              笏                                        笏
  687. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  688.  
  689.  
  690. 笊絶武笊 5.3.2. Online Help 笊絶武笊
  691.  
  692. You can access online help in several ways: 
  693.  
  694.      By selecting the Help menu on any VisualAge for Basic window. See Using 
  695.       the Project Window for additional information about the Help menu. 
  696.  
  697.      By searching for a topic. This feature is platform specific; for 
  698.       information on how to search for a topic, select Help=>How to use help. 
  699.  
  700.      By the context-sensitive help  button and clicking on a Toolbar button, 
  701.       you can get context-sensitive help for that button. 
  702.  
  703.      By clicking in any VisualAge for Basic window and pressing F1. Help for 
  704.       that window is displayed. You can then get detailed help on any area in 
  705.       the window. 
  706.  
  707.  
  708. 笊絶武笊 5.3.3. Copying Code Examples 笊絶武笊
  709.  
  710. Many of the help panels provide code examples that you can copy and paste 
  711. directly into the Code Editor window. To copy code examples into the Code 
  712. Editor: 
  713.  
  714.    1. Select the appropriate language element in the Language Reference section 
  715.       of the Online help system. 
  716.  
  717.    2. Click on the Example, located at the bottom of the window. The Examples 
  718.       window appears containing sample code for that language element. 
  719.  
  720.    3. On Windows NT and Windows 95: Click on Copy. An editing window is 
  721.       displayed. Use your mouse to highlight the code to copy and click on the 
  722.       Copy button. Your selection is copied to the clipboard. 
  723.       On OS/2: Click the right mouse button, and click Copy in the pop-up menu. 
  724.       The example is copied to the clipboard. 
  725.  
  726.    4. Within the Code Editor, click to select the location where the text will 
  727.       be inserted. Select Edit=>Paste. The stored text from the clipboard is 
  728.       transferred to the Code Editor at your insertion point. 
  729.  
  730.  These examples are located in the samples\langref directory. You can view them 
  731.  using a text editor or the VisualAge for Basic online help. You can copy and 
  732.  paste them into your code modules in the VisualAge for Basic Code Editor and 
  733.  then run them or modify them to suit your needs. 
  734.  
  735.  To see one of the examples: 
  736.  
  737.    1. From the VisualAge for Basic Project window or Code Editor, select 
  738.       Help=>Language reference. 
  739.  
  740.    2. Click on Beep statement. 
  741.  
  742.    3. Click on More or Example. 
  743.  
  744.    4. Click on Example. (On OS/2, double-click to select hyperlinks.) 
  745.  
  746.  Tip:  If you are running VisualAge for Basic client on OS/2 and you do not see 
  747.  the examples in the online help, change the VisualAge for Basic working 
  748.  directory to samples\langref by taking the following steps: 
  749.  
  750.    1. In the VisualAge for Basic folder, click with the right mouse button on 
  751.       the VisualAge for Basic icon. 
  752.  
  753.    2. In the Settings notebook, select the Program page. 
  754.  
  755.    3. In the Working directory text box, specify the directory where you have 
  756.       installed VisualAge for Basic and add samples\langref. 
  757.  
  758.    4. Double-click on the VisualAge for Basic icon. 
  759.  
  760.  Now try the procedure above to see the Beep statement example. 
  761.  
  762.  
  763. 笊絶武笊 5.3.4. Sample Programs 笊絶武笊
  764.  
  765. All VisualAge for Basic sample programs are in the directory 
  766. \VisualAge_dir\samples. VisualAge for Basic provides a number of samples that 
  767. you can copy from. Please see the readme.txt file for information on the 
  768. samples provided. 
  769.  
  770.  
  771. 笊絶武笊 5.4. What Else Can I Do With VisualAge for Basic 笊絶武笊
  772.  
  773. You can use VisualAge for Basic to build comprehensive, complete applications 
  774. with graphical user interfaces (GUIs). To create the user interface, you select 
  775. from a set of reusable objects, set the properties of these objects, and then 
  776. define how these objects behave by writing code. Then you test your code by 
  777. running it, and debug it if necessary. Finally, if you plan to distribute your 
  778. application to other users, you need to save it as an executable file. The 
  779. VisualAge for Basic programming environment supports each of these basic tasks. 
  780.  
  781. VisualAge for Basic also provides a wide range of features to help you extend 
  782. your application. These features are described in the following sections. 
  783.  
  784.  
  785. 笊絶武笊 5.4.1. Object-Oriented Programming 笊絶武笊
  786.  
  787. Although you don't need to understand object-oriented programming to use 
  788. VisualAge for Basic, it does support this programming technique. With 
  789. object-oriented programming, you define classes of objects, which are like 
  790. templates that define a set of objects. In object-oriented programming, an 
  791. object is an instance of a class. You define subclasses of existing VisualAge 
  792. for Basic objects, in order to create your own custom objects. You can call SOM 
  793. communication classes, as you would to any other integrated part. 
  794.  
  795. See also:  Chapter 12, Object-Oriented Programming. 
  796.  
  797.  
  798. 笊絶武笊 5.4.2. Integrating Components 笊絶武笊
  799.  
  800. Using VisualAge for Basic's drag-and-drop visual development environment, you 
  801. can integrate classes and components created in non-Basic languages and using 
  802. external object systems into your VisualAge for Basic applications. Components 
  803. can be created in Microsoft Visual Basic, C++, and other languages using: 
  804.  
  805.      On OS/2: SOM and OpenDoc 
  806.  
  807.      On Windows NT and Windows 95: SOM, OLE 2, and OCX 
  808.  
  809.  See also: Chapter 14, Integration Overview. 
  810.  
  811.  
  812. 笊絶武笊 5.4.3. Linking to OpenDoc Documents 笊絶武笊
  813.  
  814. VisualAge for Basic enables you to link an OpenDoc document part to a form 
  815. within your application. Drag the OpenDoc Container component to a form. You 
  816. can then link it to an existing OpenDoc document. You must install the OpenDoc 
  817. Runtime to make the link active. 
  818.  
  819. See also:  Chapter 18, Using OpenDoc Documents. 
  820.  
  821.  
  822. 笊絶武笊 5.4.4. Accessing Data 笊絶武笊
  823.  
  824. On the Windows NT and Windows 95 client platforms, you can access data using a 
  825. visual GUI data control and coding to the data access classes. 
  826.  
  827. On OS/2,  Windows 95, and Windows NT, you can access data by embedding SQL 
  828. calls in your VisualAge for Basic with DB2 support applications.  You can also 
  829. make function calls to DB2 CLI or ODBC. 
  830.  
  831.  
  832. 笊絶武笊 5.4.5. Programming in DB2 SQL 笊絶武笊
  833.  
  834. VisualAge for Basic supports DB2 SQL programming for both client and server 
  835. environments.  To use the DB2 SQL programming option, make sure the IBM DB2 
  836. Software Developers Kit is on your system, and when installing VisualAge for 
  837. Basic, select the SDK version. 
  838.  
  839. If you just want to access non-IBM databases, or build GUI client applications 
  840. without database access, VisualAge for Basic provides a smaller, non-SDK 
  841. version that you can select during installation. 
  842.  
  843. See also:  For information on writing server procedures, see the Visual Age for 
  844. Basic Data Access Guide. 
  845.  
  846.  
  847. 笊絶武笊 5.4.6. Controlling Communications 笊絶武笊
  848.  
  849. VisualAge for Basic provides communication components to support access to 
  850. hosts, servers, and other applications via the following communication 
  851. protocols: 
  852.  
  853.      Advanced program-to-program communication (APPC) 
  854.  
  855.      Asynchronous communication (ASYNC) 
  856.  
  857.      High Level Language Application Programming Interface (HLLAPI) 
  858.  
  859.      Network Basic Input/Output System (NetBIOS) 
  860.  
  861.      Transmission Control Protocol/Internet Protocol (TCP/IP) 
  862.  
  863.  
  864. 笊絶武笊 5.4.7. Migrating from Microsoft Visual Basic** 笊絶武笊
  865.  
  866. If you are familiar with Visual Basic, you will find the transition to 
  867. VisualAge for Basic an easy one. VisualAge for Basic supports the Visual 
  868. Basic** language, while extending it in several ways. In VisualAge for Basic, 
  869. you can load and run your Visual Basic** programs that have been saved in text 
  870. format. 
  871.  
  872. See also:  Appendix B, Migrating Microsoft Visual Basic** Programs. 
  873.  
  874.  
  875. 笊絶武笊 6. Chapter 2     Using the Project Window 笊絶武笊
  876.  
  877. When you first open VisualAge for Basic, the Project window displays with a 
  878. default project, called untitled.prj, the Toolbox, and a blank form called 
  879. Form1. You use the Project window to manage your projects and all the objects 
  880. that make up your project.  You also have access to all the other VisualAge for 
  881. Basic tools, editors, and browsers you use to develop your applications, stored 
  882. procedures, and user-defined functions. 
  883.  
  884. This chapter describes: 
  885.  
  886.      What is a project? 
  887.  
  888.      What is provided by the Project window. 
  889.  
  890.      What you can do using the Project window. 
  891.  
  892.  See also:  Chapter 3, Using the Toolbox and Visual Objects for information on 
  893.  using the Toolbox and forms to create user interfaces. 
  894.  
  895.  
  896. 笊絶武笊 6.1. What is a Project? 笊絶武笊
  897.  
  898. A project is the collection of all of the objects that make up: 
  899.  
  900.      An application. 
  901.  
  902.      A stored procedure. 
  903.  
  904.      A user-defined function. 
  905.  
  906.  Project objects can be any of the object types in the Project window outline 
  907.  area.  For example, a project for a client application might contain: 
  908.  
  909.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  910.   笏0bject                        笏escription                             笏
  911.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  912.   笏orms                         笏ake up the user interface              笏
  913.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  914.   笏odules                       笏1rovide the application behavior        笏
  915.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  916.   笏Donstant.bas                  笏7isualAge for Basic declaration file    笏
  917.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  918.   笏4OM objects and OLE objects   笏xternal objects that provide additional笏
  919.   笏                              笏Gunctionality                           笏
  920.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  921.  
  922.  Whereas, a project for a stored procedure typically includes: 
  923.  
  924.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  925.   笏0bject                        笏escription                             笏
  926.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  927.   笏odules                       笏5he procedure source files              笏
  928.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  929.   笏Donstant.bas, sqlca.bas       笏7isualAge for Basic declaration files   笏
  930.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  931.   笏uild files                   笏4tored procedure definition file, or .sp笏
  932.   笏                              笏Gile                                    笏
  933.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  934.  
  935.  VisualAge for Basic records information about your project in a project file. 
  936.  When you first start VisualAge for Basic, a project file called untitled.prj 
  937.  is opened so you can start developing your project right away.  Of course, you 
  938.  can rename the project using File=> Save Project As. 
  939.  
  940.  Important:  Projects must have a .prj extension. 
  941.  
  942.  
  943. 笊絶武笊 6.2. What the Project Window Provides 笊絶武笊
  944.  
  945. The Project window provides: 
  946.  
  947.      An outline area with information about your current project. 
  948.  
  949.      Menus of commands for manipulating your projects and project objects. 
  950.  
  951.      Toolbar buttons for quick access to the most frequently used menu 
  952.       commands. 
  953.  
  954.      An information line that describes the item currently pointed to by the 
  955.       mouse. 
  956.  
  957.  Tip:  VisualAge for Basic provides context-sensitive help for all the major 
  958.  interfaces, such as the Project window.  Click in the outline area of the 
  959.  Project window and press F1.  The Project Window help topic displays. 
  960.  
  961.  
  962. 笊絶武笊 6.3. Outline Area 笊絶武笊
  963.  
  964. The Project window presents project information in the outline area to help you 
  965. keep track of all the objects that make up a project.  The objects are grouped 
  966. by category.  The outline categories are expandable and collapsable.  Click on 
  967. a plus (+) sign to expand the category.  Click on a (-) sign to collapse it. 
  968.  
  969. Your project may be composed of any combination of the following objects: 
  970.  
  971. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  972. 笏ategory    笏escription                        笏4ee also:                        笏
  973. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  974. 笏orms       笏6ser-interfaces.  A form is a      笏hapter 3, Using the Toolbox and 笏
  975. 笏            笏Dontainer for graphical objects.  A笏7isual Objects                   笏
  976. 笏            笏Eefault form, calledForm1.i, opens 笏                                 笏
  977. 笏            笏Xhen you first start VisualAge for 笏                                 笏
  978. 笏            笏asic.  You can rename this form   笏                                 笏
  979. 笏            笏Bnd and you can add additional     笏                                 笏
  980. 笏            笏Gorms.                             笏                                 笏
  981. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  982. 笏odules     笏4ource code Basic modules.  Modules笏hapter 6, Using the Code Editor 笏
  983. 笏            笏Dan contain declarations,          笏                                 笏
  984. 笏            笏Gunctions, sub procedures, and     笏                                 笏
  985. 笏            笏Dlass definitions.  VisualAge for  笏                                 笏
  986. 笏            笏asic adds constant.bas to all new 笏                                 笏
  987. 笏            笏Qrojects.  This module contains    笏                                 笏
  988. 笏            笏Qredefined constants frequently    笏                                 笏
  989. 笏            笏Vsed when developing applications. 笏                                 笏
  990. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  991. 笏omponents  笏omponents integrated from external笏1art 3  Integrating with External笏
  992. 笏            笏Tystems, such as OLE  and SOM.     笏4ystems  and Chapter 12,         笏
  993. 笏            笏                                   笏0bject-Oriented Programming      笏
  994. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  995. 笏xtensions  笏4upported Object System Adapters   笏1art 3  Integrating with External笏
  996. 笏            笏(OSAs).  Classes can be imported   笏4ystems  and Chapter 12,         笏
  997. 笏            笏Grom another object system, using a笏0bject-Oriented Programming      笏
  998. 笏            笏Tupport OSA (SOM, OLE).  This      笏                                 笏
  999. 笏            笏Dategory lists those object systems笏                                 笏
  1000. 笏            笏Gor which you have support.        笏                                 笏
  1001. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1002. 笏xecutable  笏5he project .exe file.  You can    笏hapter 22, Preparing Your       笏
  1003. 笏            笏Iave only one .exe for each        笏pplication for Release          笏
  1004. 笏            笏Qroject.  The .exe is the file you 笏                                 笏
  1005. 笏            笏Eistribute to the users or your    笏                                 笏
  1006. 笏            笏Bpplication.                       笏                                 笏
  1007. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1008. 笏uildFiles  笏4erver procedure definition files: 笏7isualAge for Basic Data Access  笏
  1009. 笏            笏Ttored procedure (.sp) and         笏uide                            笏
  1010. 笏            笏Vser-defined functions (.udf).  You笏                                 笏
  1011. 笏            笏Vse build files to specify how you 笏                                 笏
  1012. 笏            笏Xant server procedures built and   笏                                 笏
  1013. 笏            笏Segistered to the database.        笏                                 笏
  1014. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1015.  
  1016. VisualAge for Basic with DB2 Support: If you have installed the DB2 SDK and 
  1017. VisualAge Basic with DB2 Support, then sqlca.bas is added to your project and 
  1018. the BuildFile category is added to the outline.  You can use this file to 
  1019. create an instance of the DB2 SQL Communication Area in your stored procedures. 
  1020.  
  1021.  
  1022. 笊絶武笊 6.4. Project Window Menus 笊絶武笊
  1023.  
  1024. The Project window menus provide commands for working with your project and 
  1025. project objects. 
  1026.  
  1027. To select a command, click on the menu name, then click on the specific menu 
  1028. command.  Throughout this book, you are instructed to select menu commands this 
  1029. way: 
  1030.  
  1031. Menu name=> Menu Command 
  1032.  
  1033. Platform Style:  Windows NT and Windows 95 have slightly different interface 
  1034. styles from OS/2 Warp. In this book, we have included some screen shots from 
  1035. OS/2 and some from Windows so you can start to see some of the differences.  In 
  1036. Windows, menu commands are always captilized, such as New Form.  (This is 
  1037. called initial capitals style.)  In OS/2 Warp, only the first word of a menu 
  1038. command is capitalized, such as New form.  (This is called sentence style.) 
  1039. The screen shot above was taken on OS/2.  We have chosen to provide 
  1040. instructions in this book using the Windows style. 
  1041.  
  1042. The commands are grouped as follows: 
  1043.  
  1044. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1045. 笏enu        笏escription                                       笏
  1046. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1047. 笏ile        笏4elect File to choose commands that help you      笏
  1048. 笏            笏Dreate and manage projects and files within your  笏
  1049. 笏            笏Qrojects.                                         笏
  1050. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1051. 笏4elected    笏6se the Selected menu commands to work with the   笏
  1052. 笏            笏Durrently selected object.  The object may be any 笏
  1053. 笏            笏Pf the items in the outline area of the Project   笏
  1054. 笏            笏Xindow or an object on a form. The Selected Menu  笏
  1055. 笏            笏Dontains different commands depending on what is  笏
  1056. 笏            笏Durrently selected in the Project window.         笏
  1057. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1058. 笏dit        笏4elect Edit to choose editing commands that allow 笏
  1059. 笏            笏Zou to modify your forms. Select an object on a   笏
  1060. 笏            笏Gorm and then select an edit command.             笏
  1061. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1062. 笏7iew        笏4elect View to choose optional ways to view the   笏
  1063. 笏            笏7isualAge for Basic environment.                  笏
  1064. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1065. 笏3un         笏4elect Run to choose commands to control the      笏
  1066. 笏            笏Fxecution (running) of your project.              笏
  1067. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1068. 笏0ptions     笏4elect Options to choose configuration options for笏
  1069. 笏            笏Zour VisualAge for Basic session.                 笏
  1070. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1071. 笏8indow      笏4elect Window to open another one of the VisualAge笏
  1072. 笏            笏Gor Basic tools.                                  笏
  1073. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1074. 笏elp        笏4elect Help to choose a section of the VisualAge  笏
  1075. 笏            笏Gor Basic online help system.                     笏
  1076. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1077.  
  1078. VisualAge for Basic with DB2 Support:  You must be running VisualAge for Basic 
  1079. with DB2 Support to see some of the menu commands.  Specifically, the following 
  1080. menu commands are available only with this support: 
  1081.  
  1082.      File=> New Stored Procedure 
  1083.  
  1084.      File=> New User-Defined Function 
  1085.  
  1086.      Selected=> Open Definition 
  1087.  
  1088.      Options=> Database 
  1089.  
  1090.      Window=> Stored Procedure Catalog 
  1091.  
  1092.      Window=> User-Defined Function Catalog 
  1093.  
  1094.  See the VisualAge for Basic Data Access Guide for more information on using 
  1095.  these commands to develop, build, register, and call stored procedures and 
  1096.  user-defined functions. 
  1097.  
  1098.  
  1099. 笊絶武笊 6.5. Learning More About Menu Commands 笊絶武笊
  1100.  
  1101. For more information on individual Project window menu items, see the online 
  1102. help.  Help for the VisualAge for Basic interfaces is context-sensitive. 
  1103.  
  1104.  
  1105. 笊絶武笊 6.5.1. Information on Menu Commands 笊絶武笊
  1106.  
  1107. To get detailed information on a menu command 
  1108.  
  1109.    1. Click and hold the left mouse button on the menu name; for example, File. 
  1110.  
  1111.    2. Still holding the mouse button down, slide the mouse down to the desired 
  1112.       menu command, say Open Project, for example. 
  1113.  
  1114.    3. Still holding the mouse button down, press F1. 
  1115.  
  1116.  The help topic for the selected menu command (Open Project) displays. 
  1117.  
  1118.  
  1119. 笊絶武笊 6.6. Project Window Toolbars 笊絶武笊
  1120.  
  1121. The Project window provides horizontal and vertial toolbars for quick access to 
  1122. the most frequently used menu commands 
  1123.  
  1124. Each of the actions is available through the menus as well. 
  1125.  
  1126.  
  1127. 笊絶武笊 6.6.1. Help on Toolbar buttons 笊絶武笊
  1128.  
  1129. To get help on a Toolbar button: 
  1130.  
  1131.    1. Click on  . 
  1132.  
  1133.    2. Click on the button for which you want help. 
  1134.  
  1135.  Tip:  Press Esc if you want to get out of context-sensitive help mode. 
  1136.  
  1137.  Important:  Context-sensitive help is not available for inactive toolbar 
  1138.  buttons.  To get help on inactive toolbar buttons, click anywhere in the 
  1139.  outline area of the Project window and press F1.  The Project window help 
  1140.  topic displays.  Click on the desired button in the Project window image. The 
  1141.  help topic for that button displays. 
  1142.  
  1143.  
  1144. 笊絶武笊 6.7. Information Line 笊絶武笊
  1145.  
  1146. The Project window provides an information line that summarizes the purpose of 
  1147. the item you currently have selected with the mouse. 
  1148.  
  1149.  
  1150. 笊絶武笊 6.7.1. Information Line for Toolbar Buttons 笊絶武笊
  1151.  
  1152. To see the information line for one of the toolbar buttons: 
  1153.  
  1154.    1. Position the mouse pointer over one of the active Toolbar buttons. 
  1155.  
  1156.    2. Press and hold the left mouse button. 
  1157.  
  1158.       The information line displays the summary statement for that button. 
  1159.  
  1160.    3. Slide the mouse pointer away from the button and release the mouse 
  1161.       button. 
  1162.  
  1163.  Important:  The information line is not available for inactive toolbar 
  1164.  buttons.  To get help on inactive toolbar buttons, click anywhere in the 
  1165.  outline area of the Project window and press F1. The Project window help topic 
  1166.  displays.  Click on the desired button in the Project window image.  The help 
  1167.  topic for that button displays. 
  1168.  
  1169.  
  1170. 笊絶武笊 6.8. What You Can Do in the Project Window 笊絶武笊
  1171.  
  1172. With the Project window you can: 
  1173.  
  1174.      Develop client applications 
  1175.  
  1176.      Develop stored procedures 
  1177.  
  1178.      Develop user-defined functions 
  1179.  
  1180.      Customize the VisualAge for Basic environment 
  1181.  
  1182.      Launch the other VisualAge for Basic tools 
  1183.  
  1184.      Get help 
  1185.  
  1186.  Important:  You must have the DB2 SDK and VisualAge for Basic with DB2 Support 
  1187.  to access DB2 databases using embedded SQL or to develop stored procedures or 
  1188.  user-defined functions.  See the VisualAge for Basic Installation Information 
  1189.  and the Visual Age for Basic Data Access Guide for more information about 
  1190.  developing a stored procedure or user-defined function. 
  1191.  
  1192.  
  1193. 笊絶武笊 6.9. Planning Your Work 笊絶武笊
  1194.  
  1195. This section describes a typical way you might plan to organize your work in 
  1196. projects if you are developing a client application that calls a stored 
  1197. procedure or uses a user-defined function: 
  1198.  
  1199.    1. Develop the client application in one project. See Creating Client 
  1200.       Applications in Help=> How Do I. 
  1201.  
  1202.    2. Insert "dummy" code in place of the part of the application to be 
  1203.       performed by a stored procedure or user-defined function. 
  1204.  
  1205.    3. Develop the stored procedure or user-defined function in a second 
  1206.       project. 
  1207.  
  1208.       See the Visual Age for Basic Data Access Guide. 
  1209.  
  1210.    4. Build the stored procedure or user-defined function for the target server 
  1211.       and register it to the database. 
  1212.  
  1213.       See the Visual Age for Basic Data Access Guide. 
  1214.  
  1215.    5. Add a call to the stored procedure or use the user-defined function in 
  1216.       your client application project. 
  1217.  
  1218.       See the Visual Age for Basic Data Access Guide. 
  1219.  
  1220.    6. Package the application for distribution to your users. 
  1221.  
  1222.       See Chapter 22, Preparing Your Application for Release. 
  1223.  
  1224.  
  1225. 笊絶武笊 6.10. Developing Client Applications 笊絶武笊
  1226.  
  1227. The fundamental steps for developing applications are the same for all 
  1228. applications, no matter how simple or complex the application is.  The table 
  1229. below summarizes the tasks involved in developing applications and associated 
  1230. Project window menu commands which assist you in performing the task.  See the 
  1231. online help for details on a specific command. 
  1232.  
  1233. See also:  Chapter 1, Quick Tour of VisualAge for Basic, for a typical scenario 
  1234. for developing an application. 
  1235.  
  1236. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1237. 笏5o perform this task:         笏6se this Project window menu command:   笏
  1238. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1239. 笏reate the user interface     笏ile=> New Form, or                     笏
  1240. 笏                              笏ile=> New MDI Form                     笏
  1241. 笏                              笏ll Edit menu commands                  笏
  1242. 笏                              笏ll Selected menu commands with a form  笏
  1243. 笏                              笏Telected                                笏
  1244. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1245. 笏4et design-time properties    笏8indow=> Property Editor                笏
  1246. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1247. 笏8rite Basic code to program   笏ile=> New Module, or                   笏
  1248. 笏Cehavior                      笏8indow=> Code Editor, or                笏
  1249. 笏                              笏4elected=> Open Code                    笏
  1250. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1251. 笏dd external objects or files 笏ile=> Add File, or                     笏
  1252. 笏Uo the project                笏8indow=> Component Catalog, or          笏
  1253. 笏                              笏4elected=> Open Component Catalog       笏
  1254. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1255. 笏elete objects or files from  笏4elected=> Remove                       笏
  1256. 笏Uhe project                   笏                                        笏
  1257. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1258. 笏3un the application           笏ll Run menu commands                   笏
  1259. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1260. 笏5est and debug                笏ll Run menu commands                   笏
  1261. 笏                              笏4ee Chapter 7, Testing and Debugging    笏
  1262. 笏                              笏ode.                                   笏
  1263. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1264. 笏4ave individual modules and   笏ile=> Save, or                         笏
  1265. 笏Gorms                         笏ile=> Save As, or                      笏
  1266. 笏                              笏4elected=> Save, or                     笏
  1267. 笏                              笏4elected=> Save As                      笏
  1268. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1269. 笏4ave the application          笏ile=> Save Project, or                 笏
  1270. 笏                              笏ile=> Save Project As                  笏
  1271. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1272. 笏dd calls to stored procedures笏ile=> New Module, or                   笏
  1273. 笏Pr user-defined functions     笏8indow=> Code Editor                    笏
  1274. 笏                              笏4ee the Visual Age for Basic Data Access笏
  1275. 笏                              笏uide.                                  笏
  1276. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1277. 笏1ackage your application      笏ile=> Build Executable, or             笏
  1278. 笏                              笏ile=> Build Executable As              笏
  1279. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1280.  
  1281.  
  1282. 笊絶武笊 6.11. Developing Stored Procedures 笊絶武笊
  1283.  
  1284. To develop a stored procedure you follow the tasks in the table below, using 
  1285. the Project window menu commands to assist you.  For more information on 
  1286. developing stored procedures see Creating server procedures=> Creating stored 
  1287. procedures in the online help. 
  1288.  
  1289. See also:  The Visual Age for Basic Data Access Guide. 
  1290.  
  1291. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1292. 笏5o perform this task:         笏6se this Project window menu command:   笏
  1293. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1294. 笏evelop the procedure locally 笏ile=> New Module, or                   笏
  1295. 笏                              笏8indow=> Code Editor, or                笏
  1296. 笏                              笏4elected=> Open Code                    笏
  1297. 笏                              笏ode the Sub statement to develop a     笏
  1298. 笏                              笏Ttored procedure.                       笏
  1299. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1300. 笏dd previously created Basic  笏ile=> Add File                         笏
  1301. 笏Giles to the project          笏                                        笏
  1302. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1303. 笏elete files from the project 笏4elected=> Remove                       笏
  1304. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1305. 笏3un the procedure             笏ll Run menu commands                   笏
  1306. 笏                              笏ou must code a main procedure to call  笏
  1307. 笏                              笏Zour procedure.                         笏
  1308. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1309. 笏5est and debug                笏ll Run menu commands.                  笏
  1310. 笏                              笏4ee also Chapter 7, Testing and         笏
  1311. 笏                              笏ebugging Code.                         笏
  1312. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1313. 笏4ave individual modules and   笏ile=> Save, or                         笏
  1314. 笏Gorms                         笏ile=> Save As, or                      笏
  1315. 笏                              笏4elected=> Save, or                     笏
  1316. 笏                              笏4elected=> Save As                      笏
  1317. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1318. 笏4ave the application          笏ile=> Save Project, or                 笏
  1319. 笏                              笏ile=> Save Project As                  笏
  1320. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1321. 笏reate a stored procedure     笏ile=> New Stored Procedure             笏
  1322. 笏Eefinition file               笏                                        笏
  1323. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1324. 笏odify a stored procedure     笏4elected=> Open Definition              笏
  1325. 笏Eefinition file               笏                                        笏
  1326. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1327. 笏uild and register the stored 笏ile=> New Stored Procedure, or         笏
  1328. 笏Qrocedure on target servers   笏4elected=> Open Definition              笏
  1329. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1330. 笏rowse stored procedure       笏8indow=> Stored Procedure Catalog       笏
  1331. 笏Jnformation                   笏                                        笏
  1332. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1333. 笏4pecify userids and passwords 笏0ptions=> Database=> Set DataBase Logon 笏
  1334. 笏Gor connecting to target      笏nformation                             笏
  1335. 笏Tervers to build and register 笏                                        笏
  1336. 笏Ttored procedures             笏                                        笏
  1337. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1338.  
  1339.  
  1340. 笊絶武笊 6.12. Developing User-Defined Functions 笊絶武笊
  1341.  
  1342. To develop a user-defined function you follow the tasks in the table below, 
  1343. using the Project window menu commands to assist you.  For more information on 
  1344. developing user-defined functions see Creating server procedures=> Creating 
  1345. user-defined functions in the online help. 
  1346.  
  1347. See also:  The Visual Age for Basic Data Access Guide. 
  1348.  
  1349. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1350. 笏5o perform this task:         笏6se this Project window menu command:   笏
  1351. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1352. 笏evelop the function locally  笏ile=> New Module, or                   笏
  1353. 笏                              笏8indow=> Code Editor, or                笏
  1354. 笏                              笏4elected=> Open Code                    笏
  1355. 笏                              笏ode the Sub statement to develop a     笏
  1356. 笏                              笏Vser-defined function.                  笏
  1357. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1358. 笏dd previously created Basic  笏ile=> Add File                         笏
  1359. 笏Giles to the project          笏                                        笏
  1360. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1361. 笏elete files from the project 笏4elected=> Remove                       笏
  1362. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1363. 笏3un the function              笏ll Run menu commands                   笏
  1364. 笏                              笏ou must code a main procedure to call  笏
  1365. 笏                              笏Zour function.                          笏
  1366. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1367. 笏5est and debug                笏ll Run menu commands                   笏
  1368. 笏                              笏4ee also Chapter 7, Testing and         笏
  1369. 笏                              笏ebugging Code.                         笏
  1370. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1371. 笏4ave individual modules and   笏ile=> Save, or                         笏
  1372. 笏Gorms                         笏ile=> Save As, or                      笏
  1373. 笏                              笏4elected=> Save, or                     笏
  1374. 笏                              笏4elected=> Save As                      笏
  1375. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1376. 笏4ave the function             笏ile=> Save Project, or                 笏
  1377. 笏                              笏ile=> Save Project As                  笏
  1378. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1379. 笏reate a user-defined function笏ile=> New User-Defined Function        笏
  1380. 笏Eefinition file               笏                                        笏
  1381. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1382. 笏odify a user-defined function笏4elected=> Open Definition              笏
  1383. 笏Eefinition file               笏                                        笏
  1384. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1385. 笏uild the user-defined        笏ile=> New User-Defined Function, or    笏
  1386. 笏Gunction on target servers    笏4elected=> Open Definition              笏
  1387. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1388. 笏3egister user-defined function笏8indow=> User-Defined Function Catalog  笏
  1389. 笏Jnformation to the datebase   笏uild the User-Defined Function before  笏
  1390. 笏                              笏Segistering it.                         笏
  1391. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1392. 笏rowse user-defined function  笏8indow=> User-Defined Function Catalog  笏
  1393. 笏Jnformation                   笏                                        笏
  1394. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1395. 笏4pecify user IDs and passwords笏0ptions=> Database=> Set DataBase Logon 笏
  1396. 笏Gor connecting to target      笏nformation                             笏
  1397. 笏Tervers to build and register 笏                                        笏
  1398. 笏Vser-defined functions        笏                                        笏
  1399. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1400.  
  1401.  
  1402. 笊絶武笊 6.13. Customizing the VisualAge for Basic Environment 笊絶武笊
  1403.  
  1404. You can customize your VisualAge for Basic working environment by setting 
  1405. options on the Options menu and by selecting viewing options using the Selected 
  1406. and View menus. 
  1407.  
  1408. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1409. 笏5o perform this task:                   笏6se this Project window menu       笏
  1410. 笏                                        笏Dommand:                           笏
  1411. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1412. 笏isplay or choose not to display a form 笏4elected=> Show                    笏
  1413. 笏                                        笏4elected=> Hide                    笏
  1414. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1415. 笏isplay or choose not to display the    笏4elected=> Collapse                笏
  1416. 笏Mist of files within a category on the  笏4elected=> Expand                  笏
  1417. 笏Putline                                 笏                                   笏
  1418. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1419. 笏isplay the full path to objects in the 笏7iew=> File Path                   笏
  1420. 笏Putline area.                           笏                                   笏
  1421. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1422. 笏isplay icons and/or labels for Toolbox 笏7iew=> Toolbox                     笏
  1423. 笏Domponents                              笏                                   笏
  1424. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1425. 笏4et whether formal declarations for     笏0ptions=> Interpreter=> Variable   笏
  1426. 笏Manguage variables are required         笏eclaration                        笏
  1427. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1428. 笏4et the default array base subscript for笏0ptions=> Interpreter=> Array Base 笏
  1429. 笏Brray variables.                        笏6se the Option Base statement to   笏
  1430. 笏                                        笏Pverride the setting, if desired.  笏
  1431. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1432. 笏4et the default string comparison mode. 笏0ptions=> Interpreter=> String     笏
  1433. 笏                                        笏omparison                         笏
  1434. 笏                                        笏6se the Option Compare statement to笏
  1435. 笏                                        笏Pverride the setting, if desired.  笏
  1436. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1437. 笏4et options to apply to the current     笏0ptions=> Project                  笏
  1438. 笏Qroject                                 笏5hese options are saved when you   笏
  1439. 笏                                        笏Tave the project.                  笏
  1440. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1441. 笏4et options to tailor the display of the笏0ptions=> Environment=> Grid       笏
  1442. 笏Hrid dots on the forms                  笏7isible                            笏
  1443. 笏                                        笏0ptions=> Environment=> Align to   笏
  1444. 笏                                        笏rid                               笏
  1445. 笏                                        笏0ptions=> Environment=> Grid Size  笏
  1446. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1447. 笏4et the number of Undo/Redo levels to   笏0ptions=> Environment=> Undo/Redo  笏
  1448. 笏Tave                                    笏4tack Size                         笏
  1449. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1450. 笏4et the font size used in the Code      笏0ptions=> Environment=> Code Editor笏
  1451. 笏ditor                                  笏ont Size                          笏
  1452. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1453. 笏4elect a database alias to use as       笏0ptions=> Database=> Set DataBase  笏
  1454. 笏Eefault for all data acess operations   笏ame                               笏
  1455. 笏                                        笏ou must have VisualAge for Basic  笏
  1456. 笏                                        笏Xith DB2 Support.                  笏
  1457. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1458. 笏4pecify user IDs and passwords for      笏0ptions=> Database=> Set DataBase  笏
  1459. 笏Donnecting to target servers to build   笏ogon Information                  笏
  1460. 笏Bnd register stored procedures and      笏ou must have VisualAge for Basic  笏
  1461. 笏Vser-defined functions                  笏Xith DB2 Support.                  笏
  1462. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1463.  
  1464.  
  1465. 笊絶武笊 6.14. Launching the other VisualAge for Basic tools 笊絶武笊
  1466.  
  1467. Use the Window menu commands or the toolbar buttons to launch other VisualAge 
  1468. for Basic tools to assist you in developing your projects. 
  1469.  
  1470. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1471. 笏5ool                          笏or more information, see...            笏
  1472. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1473. 笏1roperty Editor               笏hapter 4, Using the Property Editor    笏
  1474. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1475. 笏5oolbox                       笏hapter 3, Using the Toolbox and Visual 笏
  1476. 笏                              笏0bjects                                 笏
  1477. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1478. 笏enu Editor                   笏hapter 5, Using the Menu Editor        笏
  1479. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1480. 笏ode Editor                   笏hapter 6, Using the Code Editor        笏
  1481. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1482. 笏olor Selector                笏hapter 4, Using the Property Editor,   笏
  1483. 笏                              笏6sing the Specialized Editor.           笏
  1484. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1485. 笏omponent Catalog             笏hapter 14, Integration Overview.       笏
  1486. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1487. 笏4tored Procedure Catalog      笏7isual Age for Basic Data Access Guide  笏
  1488. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1489. 笏6ser-Defined Function Catalog 笏7isual Age for Basic Data Access Guide  笏
  1490. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1491.  
  1492. See also: The Project Window Toolbars. 
  1493.  
  1494.  
  1495. 笊絶武笊 6.15. Getting help 笊絶武笊
  1496.  
  1497. You can access online help at any time in VisualAge for Basic.  There are 
  1498. several kinds of help available. We have already mentioned that you can get 
  1499. context-sensitive help on the toolbar buttons, by clicking on  and then 
  1500. clicking on a button. You get interface help on the Project window by pressing 
  1501. F1.  For other kinds of help click on the Help menu and select one of the help 
  1502. cateogries. 
  1503.  
  1504. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1505. 笏ontents            笏5able of Contents to primary help       笏
  1506. 笏                    笏Tections                                笏
  1507. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1508. 笏ndex               笏lphabetical list of terms in help      笏
  1509. 笏                    笏Uopics                                  笏
  1510. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1511. 笏ow to Use Help     笏nstructions for using help more        笏
  1512. 笏                    笏Fffectively (varies by platform)        笏
  1513. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1514. 笏ow Do I...?        笏ist of tasks you can do with VisualAge 笏
  1515. 笏                    笏Gor Basic                               笏
  1516. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1517. 笏anguage Reference  笏anguage elements in alphabetical order 笏
  1518. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1519. 笏5erms and           笏ey VisualAge for Basic terms and       笏
  1520. 笏efinitions         笏Fxplanations                            笏
  1521. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1522. 笏5echnical Support   笏ow to get in touch with IBM technical  笏
  1523. 笏                    笏Tupport for VisualAge for Basic         笏
  1524. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  1525. 笏bout IBM VisualAge 笏3elease and copyright information       笏
  1526. 笏Gor Basic           笏                                        笏
  1527. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  1528.  
  1529. See also: How Do I Get Help in VisualAge for Basic? in Chapter 1, Quick Tour of 
  1530. VisualAge for Basic. 
  1531.  
  1532.  
  1533. 笊絶武笊 6.16. Learning More About Project Window Tasks 笊絶武笊
  1534.  
  1535. VisualAge for Basic includes extensive online Task help. 
  1536.  
  1537. To get help on Project window related tasks, you can either: 
  1538.  
  1539.      Select Help=> How Do I...?. 
  1540.       The VisualAge for Basic Task Help appears.  Click on Manage Projects 
  1541.       under General Development Tasks. 
  1542.  
  1543.       or 
  1544.  
  1545.      Click anywhere in the outline area of the Project window and press F1. 
  1546.  
  1547.  The Project window interface help topic appears.  Click on Tasks. 
  1548.  
  1549.  The Task help tells you how to create, modify, and save projects.  You can 
  1550.  also see the higher level tasks, such as Creating client applications and 
  1551.  Creating server procedures,  under Help=> How Do I. 
  1552.  
  1553.  
  1554. 笊絶武笊 7. Chapter 3     Using the Toolbox and Visual Objects 笊絶武笊
  1555.  
  1556. VisualAge for Basic provides a visual development environment where you build 
  1557. applications by manipulating graphical objects on your screen. You create and 
  1558. edit these graphical objects by pointing, clicking, and dragging and dropping. 
  1559.  
  1560. For example, you create objects by dragging them from the Toolbox onto a form. 
  1561. The Toolbox contains the objects that are the building blocks for the 
  1562. appearance of your applications. 
  1563.  
  1564. This chapter describes the types of VisualAge for Basic objects and instructs 
  1565. you how to: 
  1566.  
  1567.      Create objects. 
  1568.  
  1569.      Select objects. 
  1570.  
  1571.      Resize, move, cut, copy, paste, and delete objects. 
  1572.  
  1573.      Undo and redo changes to objects. 
  1574.  
  1575.      Add objects to the Toolbox. 
  1576.  
  1577.      Assign an object to a new container. 
  1578.  
  1579.  
  1580. 笊絶武笊 7.1. Understanding the Toolbox 笊絶武笊
  1581.  
  1582. One of the first thing you see is the tool palette. The Toolbox contains 
  1583. representations of all the components that can be used in the current project. 
  1584. The Toolbox displays both the icons and the names of the components by default. 
  1585. As you become familiar with the components, you can modify the Toolbox view to 
  1586. show only the name of the component or only the icon. 
  1587.  
  1588. The Toolbox contains a set of user interface objects, or primitives, such as 
  1589. labels, text boxes, and command buttons. These objects represent standard user 
  1590. interface objects. 
  1591.  
  1592.  
  1593. 笊絶武笊 7.2. Using the ToolBox 笊絶武笊
  1594.  
  1595. The objects, or primitives, are typically drawn on forms. You draw objects on 
  1596. the form by selecting the type of object from the Toolbox and dragging the 
  1597. mouse on the form. When you create an object on another object, for example a 
  1598. button on a frame, the button is actually a "child" of the frame, not of the 
  1599. form. 
  1600.  
  1601. See also: Creating Objectsto learn different techniques for adding objects to 
  1602. your form. 
  1603.  
  1604.  
  1605. 笊絶武笊 7.3. Understanding Objects 笊絶武笊
  1606.  
  1607. VisualAge for Basic provides a set of reusable objects that make up an 
  1608. application's Graphical User Interface (GUI). These different types of objects 
  1609. include forms, standard user interface objects, operating system objects, and 
  1610. objects you create using VisualAge for Basic classes. You can refer to 
  1611. operating system objects, such as the Printer, Screen, Clipboard, and App in 
  1612. code modules. 
  1613.  
  1614. See also:  VisualAge for Basic Language Reference for a detailed description of 
  1615. how to use the operating system objects. 
  1616.  
  1617.  
  1618. 笊絶武笊 7.4. Containers and Primitives 笊絶武笊
  1619.  
  1620. Containers are objects that can hold other objects and act as parents of the 
  1621. objects they contain. Forms are containers for all user interface objects. A 
  1622. form's only parent can be an MDI form (multiple document interface). An MDI 
  1623. form is the only VisualAge for Basic component that never has a parent and can 
  1624. only contain forms, menus, and picture boxes. 
  1625.  
  1626. Other components such as the Frame, Grid, and Picture Box can act as both 
  1627. parents and children. Objects that have a parent are called children. 
  1628.  
  1629. Primitives are objects placed in containers, which cannot be parents of other 
  1630. objects. Objects you create on container objects become children of that 
  1631. container. For example, a frame containing three check boxes is the parent of 
  1632. the check boxes. The frame is, at the same time, a child of the form. 
  1633.  
  1634.  
  1635. 笊絶武笊 7.5. Forms 笊絶武笊
  1636.  
  1637. Forms and MDI forms are containers. A form can contain other components but it 
  1638. cannot contain another form. An MDI form is a multiple-document interface 
  1639. providing an envelope in which to place other forms that have their MDIChild 
  1640. property set to True. You can have many forms but only one MDI form per 
  1641. application. 
  1642.  
  1643. A form is a window containing objects that make up an interface. Most 
  1644. applications have several different forms that make up their GUI environment. 
  1645. For example, a database application has forms for data entry, record queries, 
  1646. and report generation. All of these forms contain primitive objects like 
  1647. labels, text boxes, and push buttons. 
  1648.  
  1649.  
  1650. 笊絶武笊 7.5.1. To Create a Form 笊絶武笊
  1651.  
  1652. You can create two types of forms, a regular form or an MDI form. 
  1653.  
  1654. Form1 automatically loads when you start the VisualAge for Basic application. 
  1655. To create a second form, you can either: 
  1656.  
  1657.      Select File=> New Form from the Project window, or 
  1658.  
  1659.      Click on the New Form button in the tool bar. 
  1660.  
  1661.  A new form appears on the desktop. 
  1662.  
  1663.  To create an MDI form: 
  1664.  
  1665.      Select File=> New MDI Form from the Project window. 
  1666.  
  1667.  An MDI form appears on the desktop. 
  1668.  
  1669.  You can create only one MDI form per project. After you create an MDI form, 
  1670.  the New MDI Form menu item is not selectable. 
  1671.  
  1672.  
  1673. 笊絶武笊 7.6. Dragging and Dropping 笊絶武笊
  1674.  
  1675. The drag visuals indicate how and where you drag and drop an object. A 
  1676. rectangle outline representing the object displays when you are over a valid 
  1677. drop site.The drag has different views specific to the drag operation you are 
  1678. performing on the object. 
  1679.  
  1680. The outline disappears and displays a non-valid symbol,  , when you drag the 
  1681. object over an invalid drop site, such as the desktop or an object that cannot 
  1682. be a parent. 
  1683.  
  1684.  
  1685. 笊絶武笊 7.7. Creating Objects 笊絶武笊
  1686.  
  1687. VisualAge for Basic lets you create objects using a variety of techniques. You 
  1688. can create objects using one of the following techniques: 
  1689.  
  1690.      Select-click - Selecting an object in the Toolbox and then clicking on a 
  1691.       form. 
  1692.  
  1693.      Select-drag - Dragging and dropping an object from the Toolbox onto a 
  1694.       form. 
  1695.  
  1696.      Select-click-drag - Selecting an object in the Toolbox and then drawing 
  1697.       it on a form. 
  1698.  
  1699.      Double-click - Selecting an object in the Toolbox and placing it in the 
  1700.       upper-left corner of the form. 
  1701.  
  1702.  Tip: To cancel any create operation, press the Esc key or click on the pointer 
  1703.  icon in the Toolbox. 
  1704.  
  1705.  
  1706. 笊絶武笊 7.7.1. Create a Default-Size Component - Select-Click 笊絶武笊
  1707.  
  1708. This technique is useful for creating individual components. 
  1709.  
  1710.    1. Select the List Box from the ToolBar. 
  1711.  
  1712.    2. Move the mouse over the form and click on the form. 
  1713.  
  1714.  A single List Box appears using its default size setting. 
  1715.  
  1716.  
  1717. 笊絶武笊 7.7.2. Create a Default-Size Component - Select-Drag 笊絶武笊
  1718.  
  1719. This technique is useful for creating individual components. 
  1720.  
  1721.    1. Select an object in the Toolbox using the mouse and hold down: 
  1722.  
  1723.            On OS2: the right mouse button. 
  1724.            On Windows NT and Windows 95: the left mouse button. 
  1725.  
  1726.    2. Drag the mouse cursor to the form. 
  1727.       A rectangular outline appears over the form. 
  1728.  
  1729.    3. Release the mouse button over where you want to create the object. 
  1730.       The object appears with default height and width. The cross-hair pointer 
  1731.       changes back to the normal pointer. 
  1732.  
  1733.  
  1734. 笊絶武笊 7.7.3. Create a Custom-Size Component - Select-Click-Drag 笊絶武笊
  1735.  
  1736. This technique is useful for creating individual components of a certain size. 
  1737.  
  1738.    1. Select the List Box from the ToolBar. 
  1739.  
  1740.    2. Move the mouse over the form. 
  1741.       The pointer changes to cross-hairs () when it is over an area where you 
  1742.       can create an object. 
  1743.  
  1744.    3. Press the appropriate mouse button, hold, and drag the cursor across the 
  1745.       form. 
  1746.       A rectangular outline of the object is drawn, enlarging as you drag the 
  1747.       cursor. 
  1748.  
  1749.    4. Release the mouse button. 
  1750.       A list box appears drawn with the dimensions of the outline. The 
  1751.       cross-hair pointer changes back to the normal pointer. 
  1752.  
  1753.  
  1754. 笊絶武笊 7.7.4. Creating Multiple Objects 笊絶武笊
  1755.  
  1756. You can create several copies of an object without having to repeat the same 
  1757. operations between the Toolbox and the form. 
  1758.  
  1759. You use the Ctrl key to create several copies of an object that can vary in 
  1760. size as well as be drawn on different forms. Alternatively, you use the Shift 
  1761. key to create several copies of an object in one operation, resulting in a 
  1762. component array. 
  1763.  
  1764.  
  1765. 笊絶武笊 7.7.4.1. Create Multiple Components using Ctrl-Click 笊絶武笊
  1766.  
  1767. This technique is useful for creating multiple copies of a component anywhere 
  1768. on your form. 
  1769.  
  1770.    1. Press and hold the Ctrl key. 
  1771.  
  1772.    2. Select a Label from the Toolbox. 
  1773.  
  1774.    3. Release the Ctrl key. 
  1775.  
  1776.    4. Move the mouse over Form1. 
  1777.       The cursor changes its shape to crosshairs () . 
  1778.  
  1779.    5. Click several times on the form in different areas. 
  1780.       A label appears for each place that you clicked on. 
  1781.  
  1782.    6. To get out of the continuous add component mode, press the Esc key or 
  1783.       click on the pointer icon in the Toolbox. 
  1784.  
  1785.  
  1786. 笊絶武笊 7.7.4.2. Create Multiple Components using Shift-Drag 笊絶武笊
  1787.  
  1788. This technique is useful for creating an array of components. 
  1789.  
  1790.    1. Using the mouse, select the Option Button from the Toolbox. 
  1791.  
  1792.    2. Press and hold the Shift key. 
  1793.  
  1794.    3. Move the mouse over Form1. 
  1795.  
  1796.    4. Click the mouse on the form, hold, and then drag the mouse over the form 
  1797.       to create multiple option buttons at the bottom of your form. Drag both 
  1798.       vertically and horizontally to see the objects as they are created. You 
  1799.       can extend the drag area outside of your form 
  1800.  
  1801.       The outlines of the option buttons appear inside your drag area. 
  1802.  
  1803.       Tip:  If the form is too small to display all the buttons, select the 
  1804.       form and resize it using the side handles. 
  1805.  
  1806.    5. When the option buttons appear, release the mouse and the Shift key. 
  1807.  
  1808.    6. A dialog box appears asking if you want to create an array. 
  1809.  
  1810.       Select NO to create individual components. Selecting YES creates a group 
  1811.       of components that share similar properties, methods, and events. You 
  1812.       reference an array as a single unit using code. 
  1813.  
  1814.       The option buttons are loaded onto your form. 
  1815.  
  1816.  
  1817. 笊絶武笊 7.8. Naming Objects 笊絶武笊
  1818.  
  1819. Each object has a unique name that you use to refer to it in code. For each 
  1820. object you create, the system gives it a name and appends an integer to each 
  1821. instance of the object, by default. For example, each time you create a Label 
  1822. object, VisualAge for Basic names them Label1, Label2, Label3, in ascending 
  1823. order. 
  1824.  
  1825. Using the Property Editor, change the object names to names that indicate their 
  1826. purpose, making it easier for you to read code and find errors. Use consistent 
  1827. abbreviations that indicate the type of object. For example, the names lblName, 
  1828. lblAge, and lblSex indicate the type and purpose of the objects. 
  1829.  
  1830. The system objects App, Clipboard, Debug, Printer, and Screen cannot be 
  1831. renamed. Also, the data objects, Database and Recordset, cannot be renamed.
  1832.  
  1833.  
  1834. 笊絶武笊 7.9. Adding New Objects 笊絶武笊
  1835.  
  1836. You can add new objects to the Toolbox. Objects added to the Toolbox are 
  1837. represented by a their own icon and can be used in VisualAge for Basic 
  1838. applications in the same way as the built-in components shown in the Toolbox. 
  1839.  
  1840.  
  1841. 笊絶武笊 7.9.1. Adding Objects from Other Object Systems 笊絶武笊
  1842.  
  1843. VisualAge for Basic can use objects conforming to many object systems, using 
  1844. special translation tools called Object System Adapters (OSAs). You can use 
  1845. objects from any object system for which an OSA has been installed in VisualAge 
  1846. for Basic. VisualAge for Basic currently supports OSAs for the following object 
  1847. systems: 
  1848.  
  1849.      SOM 
  1850.  
  1851.      OLE 
  1852.  
  1853.  Important:  If you want to use SOM objects, ensure that the VWADDSOM 
  1854.  environment variable is set to YES. You can either set the variable in your 
  1855.  config.sys (for OS/2) or autoexec.bat (for Windows NT and Windows 95) file, or 
  1856.  you can set the variable when you need it. If you added SOM after installing 
  1857.  VisualAge for Basic, you might need to update this environment. You use the 
  1858.  Component Catalog to select the specific part or class of parts to add to the 
  1859.  Toolbox. You call the Component Catalog by highlighting a file, class, or 
  1860.  extension in the Project window and selecting: 
  1861.  
  1862.      Selected=>Component Catalog 
  1863.  
  1864.  The Component Catalog menu item is only available if the selected file in the 
  1865.  Project window contains information on an object system adapter. 
  1866.  
  1867.      Window=>Component Catalog 
  1868.  
  1869.  
  1870. 笊絶武笊 7.9.1.1. To add a new object from a supported OSA: 笊絶武笊
  1871.  
  1872.    1. Select Window=>Component Catalog menu item to access the Component 
  1873.       Catalog. VisualAge for Basic determines what OSAs are in the Component 
  1874.       Catalog. 
  1875.  
  1876.       The Component Catalog appears. 
  1877.  
  1878.    2. Select the Object System you want to add using the drop-down selection 
  1879.       box. 
  1880.  
  1881.       The drop-down selection box shows all OSAs currently available.
  1882.  
  1883.    3. Select the Classes selection to display the list of SOM classes. 
  1884.  
  1885.    4. Select the class by clicking on the box in front of the class. 
  1886.  
  1887.        A mark appears in the box and the class loads into the Toolbox. 
  1888.  
  1889.       The selected OSA's classes display in the outline of classes.
  1890.  
  1891.  
  1892. 笊絶武笊 7.9.1.2. To remove an OSA object: 笊絶武笊
  1893.  
  1894. You remove the class in the same manner as you load the class. 
  1895.  
  1896.      Click on the marked box in the Component Catalog. 
  1897.  
  1898.       The box clears and the class is removed from the Toolbox. 
  1899.  
  1900.  Important:  If your VisualAge for Basic application is currently using an 
  1901.  instance of the class you want to remove, you cannot remove the class. 
  1902.  
  1903.  
  1904. 笊絶武笊 7.9.1.3. Customizing an Integrated Class 笊絶武笊
  1905.  
  1906. You can customize the visual behavior of objects added to VisualAge for Basic 
  1907. that rely on an OSA. For example, there may be no icon assigned to represent a 
  1908. SOM object in the Toolbox. You can specify an icon by adding integration 
  1909. information for the class in an integration file. 
  1910.  
  1911.  
  1912. 笊絶武笊 7.9.1.4. Structure of the Integration File 笊絶武笊
  1913.  
  1914. Integration files are plain text files that have a specific format. Integration 
  1915. data files have the same name as the class with the .i extension. For example, 
  1916. the Hello class has an integration file, Hello.i, to which you add an icon, a 
  1917. help context number, and a help file:
  1918.  
  1919. *Hello.IconLabel: Hello
  1920.  
  1921. *Hello.IconFileName: /path/file
  1922.  
  1923. *Hello.ContextID: 55555
  1924.  
  1925. *Hello.HelpFileName: helpfile
  1926.  
  1927. See also:  Customizing Integration with an Integration Data File in Chapter 14, 
  1928. Integration Overview. 
  1929.  
  1930.  
  1931. 笊絶武笊 7.10. Selecting Objects 笊絶武笊
  1932.  
  1933. To select an object: 
  1934.  
  1935.      Click on the object. Selection handles appear around the object 
  1936.       indicating it is selected. 
  1937.  
  1938.  Selecting an object deselects any previously selected objects. 
  1939.  
  1940.  To select a group of objects: 
  1941.  
  1942.    1. Move the pointer onto an empty area of the form. 
  1943.  
  1944.    2. Press the appropriate mouse button. 
  1945.  
  1946.    3. Drag the pointer to outline an area surrounding the objects you want to 
  1947.       select. 
  1948.  
  1949.       This procedure is called marquee selection An outline appears around the 
  1950.       area of objects as you drag the pointer around the objects. 
  1951.  
  1952.    4. Release the mouse button. Handles appear around the selected objects. 
  1953.  
  1954.  To select an additional object: 
  1955.  
  1956.      Hold down the Ctrl key and select more objects by clicking on them or by 
  1957.       dragging the pointer around them. Previously selected objects remain 
  1958.       selected. 
  1959.  
  1960.  
  1961. 笊絶武笊 7.10.1. Deselecting Objects 笊絶武笊
  1962.  
  1963. You can deselect an object in two ways: 
  1964.  
  1965.      Click on an unselected object. 
  1966.  
  1967.       All other objects are deselected. 
  1968.  
  1969.      Hold down the Ctrl key and click on the object you want to deselect. 
  1970.  
  1971.       Only the object you click is deselected. 
  1972.  
  1973.  To deselect a group of objects 
  1974.  
  1975.      Hold down the Ctrl key and drag the appropriate mouse button around the 
  1976.       selected objects you want to deselect.  Release the mouse button.  The 
  1977.       objects are deselected. 
  1978.  
  1979.  
  1980. 笊絶武笊 7.11. Editing Objects 笊絶武笊
  1981.  
  1982. As you create objects you will want to make changes to them. VisualAge for 
  1983. Basic's editing features let you move, resize, cut, copy, paste, and delete 
  1984. objects in the same way you would edit text in a word processor. 
  1985.  
  1986.  
  1987. 笊絶武笊 7.11.1. Moving Objects 笊絶武笊
  1988.  
  1989. You can move objects in several ways. You can: 
  1990.  
  1991.      Use the mouse to drag objects to a new location. 
  1992.  
  1993.      Set the Left and Top properties in the Property Editor to move objects to 
  1994.       a precise location. 
  1995.  
  1996.      Use code at run time to move objects, by writing VisualAge for Basic 
  1997.       statements. 
  1998.  
  1999.  When you move an object, its children are included. For example, option 
  2000.  buttons contained within a frame are moved with the frame, even if only the 
  2001.  frame is selected. 
  2002.  
  2003.  You can move objects from one form to another. The drag over and drag under 
  2004.  visuals change as you move the object across the desktop. Groups of objects 
  2005.  retain the same relative distance they had in their original location. 
  2006.  
  2007.  You can also move objects by cutting and pasting them to a new location. This 
  2008.  method is described in this chapter; see Cutting, Copying, and Pasting Objects 
  2009.  
  2010.  
  2011. 笊絶武笊 7.11.1.1. To move an object: 笊絶武笊
  2012.  
  2013.    1. Select the object you want to move. 
  2014.  
  2015.    2. Press the appropriate mouse button. 
  2016.  
  2017.    3. Drag the object to its new position. An outline of the object appears 
  2018.       under the pointer as you move. The object remains where it is. 
  2019.  
  2020.    4. Release the mouse button. The object moves to its new location. 
  2021.  
  2022.  
  2023. 笊絶武笊 7.11.1.2. To move a group of objects: 笊絶武笊
  2024.  
  2025.    1. Select the objects you want to move. 
  2026.  
  2027.    2. With the cursor over one of the selected objects press the appropriate 
  2028.       mouse button. 
  2029.  
  2030.    3. Drag the objects to their new position. Outlines of the objects appear, 
  2031.       showing the displacement of the group of objects. The original objects 
  2032.       remain where they are. 
  2033.  
  2034.    4. Release the mouse button. The objects move to the last known location of 
  2035.       the mouse-the release location. 
  2036.  
  2037.  
  2038. 笊絶武笊 7.11.1.3. Moving Objects Using Code 笊絶武笊
  2039.  
  2040. The Left property controls the distance of an object's upper left corner from 
  2041. the left side of its parent. The Top property controls the distance of an 
  2042. object's upper left corner from the top of its parent. 
  2043.  
  2044. You can load the objects you want to move in the Property Editor and change 
  2045. their Left and Top properties. The objects show the change as soon as you 
  2046. apply, , the change. 
  2047.  
  2048. You can also change the Left and Top properties in code modules, showing the 
  2049. changes at run time. When you change the Left and Top properties for an object, 
  2050. the object moves first horizontally then vertically, yielding a jump effect. 
  2051. Use the Move method for a smooth diagonal motion. 
  2052.  
  2053. See also:  VisualAge for Basic Language Reference Online Help for more 
  2054. information about Left and Top properties and the Move method. 
  2055.  
  2056.  
  2057. 笊絶武笊 7.11.2. Resizing Objects 笊絶武笊
  2058.  
  2059. After you create some objects for an application interface, you might want to 
  2060. change their height and width. You can resize the objects individually or in a 
  2061. group by manipulating the handles that appear when objects are selected.
  2062.  
  2063. The cursor changes (, , , or ) at the selection handles signifying the 
  2064. direction of the resize operation. 
  2065.  
  2066.  
  2067. 笊絶武笊 7.11.2.1. To resize objects: 笊絶武笊
  2068.  
  2069.    1. Select the object you want to resize. Selection handles appear around the 
  2070.       object. 
  2071.  
  2072.    2. Move the pointer onto one of the handles. 
  2073.  
  2074.    3. Press the appropriate mouse button and drag one of the handles. 
  2075.  
  2076.  
  2077. 笊絶武笊 7.11.2.2. To resize a group of objects: 笊絶武笊
  2078.  
  2079.    1. Select the objects you want to resize. Selection handles appear around 
  2080.       all of the selected objects. 
  2081.  
  2082.    2. Press the appropriate mouse button on one of the selection handles. 
  2083.  
  2084.    3. Drag the handle to resize the objects to the new desired size. 
  2085.  
  2086.  Outlines appear around all the objects, projecting their new size as you drag 
  2087.  the handle. The distance between the objects remains proportional to the new 
  2088.  sizes of the objects. The objects are resized equally and proportionally. 
  2089.  
  2090.  Another way to resize objects is to change the Left, Top, Height, and Width 
  2091.  properties settings in the Property Editor or in code modules. When you apply 
  2092.  the property settings you have changed in the Property Editor, the selected 
  2093.  objects reflect the changes immediately. Property settings in code modules 
  2094.  change the object size at run time. 
  2095.  
  2096.  
  2097. 笊絶武笊 7.11.3. Cutting, Copying, and Pasting Objects 笊絶武笊
  2098.  
  2099. Objects can be cut or copied to the clipboard and later pasted from the 
  2100. clipboard to another location. If the object has children, its children are 
  2101. also copied or cut to and pasted from the clipboard. 
  2102.  
  2103. Cutting objects deletes them from their current location and copies them to the 
  2104. clipboard. You can cut, copy, and paste objects individually or in a group. 
  2105.  
  2106.  
  2107. 笊絶武笊 7.11.3.1. To cut objects to the clipboard: 笊絶武笊
  2108.  
  2109.    1. Select the objects you want to cut. 
  2110.  
  2111.    2. Choose Edit=> Cut from the Project window. 
  2112.  
  2113.  
  2114. 笊絶武笊 7.11.3.2. To copy objects to the clipboard: 笊絶武笊
  2115.  
  2116.    1. Select the objects you want to copy. 
  2117.  
  2118.    2. Choose Edit=> Copy from the Project window. 
  2119.  
  2120.  
  2121. 笊絶武笊 7.11.3.3. To paste objects from the clipboard to a new location: 笊絶武笊
  2122.  
  2123.    1. Select the object that will receive the object you cut or copied to the 
  2124.       clipboard. 
  2125.  
  2126.    2. Choose Edit=> Paste from the Project window. 
  2127.  
  2128.  When you want to paste an object, you must ensure that you are pasting on a 
  2129.  container object. If you try to paste objects on an invalid site or primitive 
  2130.  object, an error message appears. For example, you cannot paste a label on a 
  2131.  push button. 
  2132.  
  2133.  
  2134. 笊絶武笊 7.11.3.4. To delete objects 笊絶武笊
  2135.  
  2136.    1. Select the objects you want to delete. 
  2137.  
  2138.    2. Choose Edit=> Delete from the Project window. Objects listed in the 
  2139.       Project window, such as form, are deleted using the Project window File 
  2140.       menu. 
  2141.  
  2142.  or 
  2143.  
  2144.    1. Choose the object you want to remove from the File List Area in the 
  2145.       project window. 
  2146.  
  2147.    2. Choose File=> Remove from the Project window. 
  2148.  
  2149.  When you delete an object, it is removed from your application interface and 
  2150.  any editor into which it is loaded-Property Editor, Code Editor, or Color 
  2151.  Selector. However, you must remove typed-in references to the deleted object 
  2152.  in code modules to avoid run-time errors. 
  2153.  
  2154.  
  2155. 笊絶武笊 7.12. Undoing and Redoing Changes 笊絶武笊
  2156.  
  2157. Most changes that affect the objects that you build are reversible. You can 
  2158. undo the following operations by choosing Undo from the Edit menu: move, 
  2159. resize, cut, copy, and paste, and delete. 
  2160.  
  2161. Tip:  If a command cannot be undone, VisualAge for Basic warns you before 
  2162. performing the command. For example, you cannot undo a Remove=> File operation 
  2163. for files that you remove from the Project window. 
  2164.  
  2165. You can undo and redo multiple levels of changes that you make to objects while 
  2166. you build interfaces. The system keeps track of the operations you make on 
  2167. objects. The order of operations are undone and redone in the same sequence as 
  2168. they were performed. 
  2169.  
  2170.  
  2171. 笊絶武笊 7.12.1. To Undo an Operation 笊絶武笊
  2172.  
  2173.      Choose Edit=> Undo [operation] from the Project window. The most recent 
  2174.       operation appears after Undo in the menu. For example, if the most recent 
  2175.       operation you made was resize, the menu item shows Undo Resize. 
  2176.  
  2177.  The object is restored to its state prior to the operation. The Edit menu is 
  2178.  modified to show that a Redo operation is available for the operation that is 
  2179.  just undone. 
  2180.  
  2181.  When you undo an operation for the first time in a sequence of operations, the 
  2182.  Undo menu item is gray until you redo it. 
  2183.  
  2184.  
  2185. 笊絶武笊 7.12.2. To Redo an Operation 笊絶武笊
  2186.  
  2187.      Choose Edit=> Redo [operation] from the Project window. 
  2188.  
  2189.  The change appears as it did before you chose Undo. 
  2190.  
  2191.  A redo operation is only available after at least one undo operation is made. 
  2192.  The first Undo operation makes the Redo menu item gray. Accordingly, when you 
  2193.  have redone the most recent operation in the sequence of operations, the Redo 
  2194.  menu item is gray. As soon as you undo an operation, the Redo menu item is 
  2195.  selectable again, showing Redo [ ]. 
  2196.  
  2197.  
  2198. 笊絶武笊 7.13. Moving Objects to a Different Container 笊絶武笊
  2199.  
  2200. When you drag an object onto a form, the form becomes the object's parent. 
  2201. Similarly, when you drag an option button into a Frame component, the frame 
  2202. becomes its parent. You cannot move an object to a form if the object has the 
  2203. same Name property as an object already existing on the form. As discussed in 
  2204. Naming Objects make sure each object you create has a unique name. 
  2205.  
  2206. Objects can be moved to a different container as follows: 
  2207.  
  2208.      Interactively-by dragging an object from one form to another. For 
  2209.       example, you can move a push button from a form, Form1, to another form, 
  2210.       Form2. Form2 is the push button's new parent. 
  2211.  
  2212.      Using the Property Editor. 
  2213.  
  2214.  Each object has a Container property that identifies its parent. You can 
  2215.  change its value by typing the object name of the new parent. If the object is 
  2216.  not a valid parent, the system displays an error dialog. 
  2217.  
  2218.  See also:  Chapter 4, Using the Property Editor, Assigning a New Container 
  2219.  Property. 
  2220.  
  2221.  
  2222. 笊絶武笊 8. Chapter 4     Using the Property Editor 笊絶武笊
  2223.  
  2224. The Property Editor lets you customize the appearance and behavior of the 
  2225. objects in your application. At design time, you use the Property Editor to set 
  2226. initial property values for objects as you build your application. At run time, 
  2227. statements in your code modules can change certain property values as your 
  2228. application executes and interacts with the user. 
  2229.  
  2230. The Property Editor enables you to: 
  2231.  
  2232.      View all property values of a single selected object. 
  2233.  
  2234.      View the common property values of multiple selected objects. 
  2235.  
  2236.      Change the values of selected objects, facilitated by drop-down lists and 
  2237.       specialized editors. 
  2238.  
  2239.      Customize the Property Editor to suit your needs; for example, you can 
  2240.       control which properties it displays. 
  2241.  
  2242.      Create control arrays. 
  2243.  
  2244.      Undo one or more of your changes through a multiple-undo feature. 
  2245.  
  2246.      Change common values for multiple objects in one step. 
  2247.  
  2248.      View and. change values as constants or expressions. 
  2249.  
  2250.  
  2251. 笊絶武笊 8.1. Understanding the Property Editor 笊絶武笊
  2252.  
  2253. When you open the Property Editor, it displays all selected objects by default. 
  2254. To open the Property Editor do one of the following: 
  2255.  
  2256.      In the Project window, choose the Windows=>Property Editor menu item. 
  2257.  
  2258.      In the tool bar, click on the Property Editor button. 
  2259.  
  2260.  When the Property Editor appears, it displays the properties of the object (or 
  2261.  objects) currently selected. The Property Editor allows you to customize the 
  2262.  appearance and behavior of objects in your application. You use the Property 
  2263.  Editor to set initial property values for objects as you build your 
  2264.  application at design time. 
  2265.  
  2266.  The Property Editor, shown in Figure 4-1, consists of a menu bar, a control 
  2267.  bar containing restore and apply buttons, a list of objects, and a list of 
  2268.  properties. 
  2269.  
  2270.  Figure 4-1    Property Editor 
  2271.  
  2272.  The following table describes the parts of the Property Editor. 
  2273.  
  2274.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2275.   笏1art                笏escription                                       笏
  2276.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2277.   笏enu bar            笏ontrols the objects and properties displayed in  笏
  2278.   笏                    笏Uhe object list area and the properties list.     笏
  2279.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2280.   笏3estore button      笏3estores the previous property values.            笏
  2281.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2282.   笏pply button        笏pplies the new property values.                  笏
  2283.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2284.   笏0bject list area    笏isplays a scrolling list of selected objects.    笏
  2285.   笏                    笏xpands, using the resizeable sash, to show       笏
  2286.   笏                    笏Nultiple objects. View=>Show Class. displays both 笏
  2287.   笏                    笏Uhe object name and class.                        笏
  2288.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2289.   笏ist of Properties  笏isplays a scrolling list of property rows. Each  笏
  2290.   笏                    笏Sow contains a property name and shows the current笏
  2291.   笏                    笏Qroperty setting. You use the resizeable sash to  笏
  2292.   笏                    笏Fxpand the properties list area.                  笏
  2293.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2294.   笏xpression mode     笏isplays an  icon  indicating the property is     笏
  2295.   笏                    笏Eisplayed as an expression.                       笏
  2296.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2297.   笏4tatus area         笏isplays a change bar (| ) if the property value  笏
  2298.   笏                    笏Ias been modified but not applied. When more than 笏
  2299.   笏                    笏Pne object is listed in the object list area, the 笏
  2300.   笏                    笏Ttatus area displays a not equal sign if the      笏
  2301.   笏                    笏Pbjects have different settings for the same      笏
  2302.   笏                    笏Qroperty.                                         笏
  2303.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2304.   笏7alue area          笏4hows the current property value. You can edit    笏
  2305.   笏                    笏Uhis field to change the property value.          笏
  2306.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2307.  
  2308.  
  2309. 笊絶武笊 8.2. Selecting Objects for Display 笊絶武笊
  2310.  
  2311. When you select objects in your form, the Property Editor displays their 
  2312. properties automatically. To display properties of multiple objects, select 
  2313. multiple objects. To remove an object, deselect the object. 
  2314.  
  2315. Tip:  To selectively add more objects to the object list area, hold down the 
  2316. Ctrl key and select the objects you want to add. To selectively delete objects 
  2317. from the object list, hold down the Ctrl key and click on the selected object 
  2318. on your form. 
  2319.  
  2320. See also:  Selecting Objects. 
  2321.  
  2322. All selected object names and classes are displayed in the object list area. If 
  2323. you select two or more objects, the only properties shown are those common 
  2324. among the selected objects. Not-equal signs appear in the status area for 
  2325. object property values that are different among the selected objects in the 
  2326. Property Editor. 
  2327.  
  2328.  
  2329. 笊絶武笊 8.3. Viewing and Editing Properties 笊絶武笊
  2330.  
  2331. When you select any object on the form, the Property Editor displays the 
  2332. property values of that object. For example, if you click on Button1, the 
  2333. Property Editor displays the property values of Button1. 
  2334.  
  2335. To edit a particular property value, follow these steps: 
  2336.  
  2337.      Select the property to edit. 
  2338.  
  2339.      Edit the property value. Different ways are provided to edit different 
  2340.       type values, as discussed below. 
  2341.  
  2342.  
  2343. 笊絶武笊 8.3.1. Selecting the Property to Edit 笊絶武笊
  2344.  
  2345. To edit a particular property, click anywhere in the row that displays that 
  2346. property. Note that this causes that row to be highlighted with a different 
  2347. color border, selecting it for editing. 
  2348.  
  2349. You can change which row is selected for editing by using the up and down 
  2350. cursor keys. This selects the row above, or the one below, the row that is 
  2351. currently selected. 
  2352.  
  2353.  
  2354. 笊絶武笊 8.3.1.1. Entering a new value 笊絶武笊
  2355.  
  2356. The way you enter a new value depends on the type of property value in the row 
  2357. you selected: 
  2358.  
  2359.      For integer, float or string type property, you will see an I-beam, which 
  2360.       enables you to type in the new value. 
  2361.  
  2362.      For Boolean properties and other enumerated types, a drop-down list is 
  2363.       provided. To change the value, select one item from the drop-down list. 
  2364.  
  2365.      For color and other properties that have a specialized editor, an editor 
  2366.       icon appears on the selected row. To change a value, click on the editor 
  2367.       icon and choose one of the displayed options. 
  2368.  
  2369.  To change a property value you can: 
  2370.  
  2371.      Type the required value in the text box. The standard text editing 
  2372.       operations are available, for example, cut, copy, paste, backspacing, 
  2373.       highlighting text and over-writing. 
  2374.  
  2375.      Apply a change in the specialized editor. 
  2376.  
  2377.      Click on the value area's combo button and selecting a value from the 
  2378.       drop-down list. If the property is an enumerated type, the drop-down list 
  2379.       contains all the possible values. The left and right cursor keys are used 
  2380.       to scroll through the enumerated values without opening the drop down 
  2381.       list. 
  2382.  
  2383.  
  2384. 笊絶武笊 8.3.2. Confirming a Property Value Change 笊絶武笊
  2385.  
  2386. By default, you apply a change to a property value of the selected objects by: 
  2387.  
  2388.      Pressing the Enter key. 
  2389.  
  2390.      Selecting a new value from a combination drop-down list. 
  2391.  
  2392.      Applying a change in a specialized editor. 
  2393.  
  2394.      Clicking on the Apply button 
  2395.  
  2396.      Changing property rows. 
  2397.  
  2398.      Choosing Properties=> Apply Change 
  2399.  
  2400.  If the value area contains an invalid property value when you apply your 
  2401.  changes, a message dialog informs you that the update is not valid. The 
  2402.  invalid property values remain in their field for editing. 
  2403.  
  2404.  Tip:  Whenever a property value has been changed but not yet applied, a change 
  2405.  bar indicator is shown to the left of the property value area. 
  2406.  
  2407.  
  2408. 笊絶武笊 8.3.3. Undoing Property Value Changes 笊絶武笊
  2409.  
  2410. You restore unapplied changes to initial property values by clicking on the 
  2411. Restore button , by choosing Properties=> Restore from the Property Editor, or 
  2412. pressing the Esc key. 
  2413.  
  2414. For changes to property values that have already been applied choose Edit=> 
  2415. Undo Property Change (a multi-level edit feature) from the Project window. 
  2416.  
  2417. To reset all changes to the default setting, choose Selected=> Set To Default 
  2418. in the Property Editor. 
  2419.  
  2420. See also:  Undoing and Redoing Changes to understand more about the Undo and 
  2421. Redo features from the Project window. 
  2422.  
  2423.  
  2424. 笊絶武笊 8.3.4. Setting the Name Property 笊絶武笊
  2425.  
  2426. To recognize and reference objects in the system, each object must have a 
  2427. unique Name property. When you create a series of options buttons, the system 
  2428. assigns names in numerical sequence for each class of object. You should rename 
  2429. the object with more meaningful names that indicate their type and purpose. 
  2430.  
  2431. Tip:  The names you assign to objects in the Property Editor using the Name 
  2432. property are updated in the Code Editor navigation area. For example, if you 
  2433. name a command button cmdTransaction, the event procedure automatically shows 
  2434. cmdTransaction_Click when you select a Click event. 
  2435.  
  2436. Important:  If you assign duplicate names to either the Name or Container 
  2437. property for two or more components, you create a component array. 
  2438.  
  2439. See also:  Creating Component Arrays Using the Property Editor. 
  2440.  
  2441.  
  2442. 笊絶武笊 8.4. Viewing and Editing Properties for Multiple Objects 笊絶武笊
  2443.  
  2444. The Property Editor allows you to edit properties for more than one object at a 
  2445. time. If more than one object appears in the object list, only the properties 
  2446. those objects share appear in the properties area. Changes made to any shared 
  2447. property apply to all objects in the object list. For example, to change the 
  2448. background color for multiple objects, select the objects, change the BackColor 
  2449. property value, and then apply the changes. 
  2450.  
  2451. A property shared by several objects but with values that differ from object to 
  2452. object is highlighted by a not-equal sign to the left of the Value field. For 
  2453. example, consider two objects that share the BackColor property. For one, 
  2454. BackColor is set to Blue; for the other, Grey. If both objects are selected, a 
  2455. not-equal sign appears and the Value field is blank. 
  2456.  
  2457. By selecting a property with a not-equal sign, a drop-down box appears. To 
  2458. assign the same value to all selected objects, select the value you want from 
  2459. the drop-down box and press Enter. When the same property value is applied to 
  2460. all selected objects, the not-equal sign disappears. 
  2461.  
  2462.  
  2463. 笊絶武笊 8.5. Creating Component Arrays Using the Property Editor 笊絶武笊
  2464.  
  2465. Definition:  A component array is a group of objects that share the same name 
  2466. and behavior. Each element in a component array has a unique Index number used 
  2467. to access it in the array. You can create or modify component array elements 
  2468. from the Property Editor by changing the values of the Index and Name 
  2469. properties. You can also use the Container property to create a component 
  2470. array. 
  2471.  
  2472. A specific component array can only contain objects of the same class. That is, 
  2473. a component array made out of command buttons can only have command buttons as 
  2474. items of the array. 
  2475.  
  2476. Important:  Component array elements share event code but they do not have to 
  2477. share property values. Component arrays can be created from the Property Editor 
  2478. by: 
  2479.  
  2480.      Changing the Name property of an object to that of an existing object. 
  2481.       22660'. 
  2482.  
  2483.      Setting an object's Index property. 
  2484.  
  2485.      Assigning duplicate names to the Name or Container property for two or 
  2486.       more components. 
  2487.  
  2488.  Restriction:  With the exception of forms and MDI forms, any child object can 
  2489.  be part of a component array. 
  2490.  
  2491.  
  2492. 笊絶武笊 8.5.1. Setting the Index Property 笊絶武笊
  2493.  
  2494. By default a component's Index property is blank. Setting the Index property 
  2495. causes a message dialog to appear, asking if you want the component to be part 
  2496. of a component array. Selecting OK turns that component into a component array. 
  2497.  
  2498. To return a component array object to a regular object: 
  2499.  
  2500.    1. Change the name of the object that you want to delete. 
  2501.  
  2502.    2. Set the Index value to blank. 
  2503.  
  2504.  Restriction:  Setting the Index property of a component that is already part 
  2505.  of the component array to the same value as another component in the array 
  2506.  produces a property validation error. The objects in a component array cannot 
  2507.  have the same index value. 
  2508.  
  2509.  
  2510. 笊絶武笊 8.5.2. Undoing a Component Array 笊絶武笊
  2511.  
  2512. If you create a component array using the Shift-Drag technique, selecting 
  2513. Edit=>Undo Create undoes the creation of the array and removes all components 
  2514. from your form. 
  2515.  
  2516. To permanently remove an existing component array object, select it and press 
  2517. Delete. To remove an array component from the array and use it as a regular 
  2518. component: 
  2519.  
  2520.    1. Change the Name property for that component to another name and accept 
  2521.       the change. 
  2522.       form cannot have the same name and index number. 
  2523.  
  2524.    2. Set the Index value to be blank and accept the change. 
  2525.  
  2526.  Tip:  If the component array object is the last object in the array, you do 
  2527.  not have to change the Name property as there is no other component on that 
  2528.  form with that name. 
  2529.  
  2530.  
  2531. 笊絶武笊 8.6. Assigning a New Container Property 笊絶武笊
  2532.  
  2533. When you change the Container property you are also reorganizing the object 
  2534. family tree. You can do this with an object within the same form or from one 
  2535. form to another. Using the selected component's Container property, type in the 
  2536. new parent's name. 
  2537.  
  2538. For example, to move Form1.Command1 to inside Frame1 on Form2, type in 
  2539. Form2.Frame1 in Command1's Container property. This moves Command1 into the 
  2540. Frame component on Form2- Form2.Frame1.Command1.
  2541.  
  2542.  
  2543. 笊絶武笊 8.7. Showing and Hiding Property Rows 笊絶武笊
  2544.  
  2545. You can tailor which properties appear in the properties list by choosing 
  2546. options in the View menu: Hide Default, Hide Changed, Hide Equal, and Hide Not 
  2547. Equal. The Property Editor has a filtering mechanism that lets you control the 
  2548. object properties you want to view and modify. You filter the properties list 
  2549. view to simplify how you edit property values. You might want to edit the same 
  2550. properties several times for multiple objects or just edit them once. 
  2551.  
  2552. You can control the display of rows to simplify the editing task. To edit the 
  2553. same property for multiple objects, select Hide Default to display only those 
  2554. properties that have been previously set. For example, to set a different color 
  2555. property for different objects: 
  2556.  
  2557.    1. Select an object and change its background color. 
  2558.  
  2559.    2. Select View=>Hide Default. The property list is shortened showing only 
  2560.       those properties that changed. Because you changed the BackColor 
  2561.       property, it is no longer in its default state; therefore it stays in the 
  2562.       shortened list. 
  2563.  
  2564.    3. Select any other object that has a BackColor property. The shortened list 
  2565.       includes the BackColor property. 
  2566.  
  2567.  Conversely, the Hide Changed displays only those properties that have the 
  2568.  default value. Use the menu entries Hide Equal and Hide Not Equal to see how 
  2569.  objects differ or are the same. Hide Equal displays only those properties that 
  2570.  differ for multiply-selected objects. Hide Not Equal displays only those 
  2571.  properties that are the same for multiply-selected objects.
  2572.  
  2573.  The following table tells how to set your different viewing options: 
  2574.  
  2575.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2576.   笏5o:                           笏o:                                               笏
  2577.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2578.   笏ide properties with default  笏hoose View=> Hide Default. The properties with   笏
  2579.   笏Walues                        笏Eefault property values disappear from the        笏
  2580.   笏                              笏Qroperties list. Only properties whose values are 笏
  2581.   笏                              笏Oon-default settings are visible in the Property  笏
  2582.   笏                              笏ditor. You make the default property values      笏
  2583.   笏                              笏Wisible again by choosing View=>Hide Default. You 笏
  2584.   笏                              笏Dan reset selected objects to display their       笏
  2585.   笏                              笏Jnitial (or default) settings by choosing         笏
  2586.   笏                              笏4elected=> Set To Default.                        笏
  2587.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2588.   笏ide properties with unequal  笏hoose View=> Hide Not Equal. The properties      笏
  2589.   笏Walues                        笏Thowing in the status area disappear from the     笏
  2590.   笏                              笏Qroperties list. You make property values that are笏
  2591.   笏                              笏Oot equal visible again by choosing View=>Hide Not笏
  2592.   笏                              笏qual.                                            笏
  2593.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2594.   笏ide changes                  笏hoose View=> Hide Changed to hide properties     笏
  2595.   笏                              笏Xhose property values you have already modified.  笏
  2596.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2597.  
  2598.  
  2599. 笊絶武笊 8.8. Showing Object Classes 笊絶武笊
  2600.  
  2601. By default, the Property Editor shows object classes alongside object names in 
  2602. the object list area. You can hide and show object classes by choosing View=> 
  2603. Show Class from the Property Editor. The check box is checked on the View menu 
  2604. for the Show Class menu item when object classes appear in the object list 
  2605. area. The menu item is a toggle for either showing or hiding object classes. 
  2606.  
  2607.  
  2608. 笊絶武笊 8.9. Displaying Property Values by Constant or Expression 笊絶武笊
  2609.  
  2610. Property values can be displayed and entered as either constants or expressions 
  2611. by selecting the appropriate mode from the menu. When you select Expression, 
  2612. VisualAge for Basic interprets the property valuesas expressions. This means 
  2613. that property values can be computed at run time. In this mode, you must enter 
  2614. all strings with double quotes. 
  2615.  
  2616. Property values are displayed in constant mode by default. 
  2617.  
  2618. To display a property as an expression, choose Selected=> Expression. 
  2619.  
  2620. The letter E appears to the left of the property, indicating that it is an 
  2621. expression. A string is displayed with quotation marks ("") and values are 
  2622. displayed as numerics; for example, True and False are displayed as 0 and -1. 
  2623.  
  2624. You can specify a Basic expression as a property value that returns an 
  2625. appropriate type, including constants, global variables, and functions that 
  2626. take arguments. You can use this powerful technique to set values dynamically 
  2627. at run time, build user interfaces that depend on user-input parameters, or 
  2628. build interfaces that take their strings from a message catalog tailored to a 
  2629. specific locale. 
  2630.  
  2631. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2632. 笏1roperty Value      笏escription                                       笏
  2633. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2634. 笏nteger             笏ither an integer or a Basic expression that      笏
  2635. 笏                    笏Fvaluates to an integer.                          笏
  2636. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2637. 笏loat               笏n integer, a float, or a Basic expression that   笏
  2638. 笏                    笏Fvaluates to an integer or a float.               笏
  2639. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2640. 笏4tring              笏 string enclosed in quotation marks (""), or a   笏
  2641. 笏                    笏asic expression that returns a String.           笏
  2642. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2643. 笏oolean             笏n integer, -1 (True) or 0 (False) or a Basic     笏
  2644. 笏                    笏Fxpression that returns an integer.               笏
  2645. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2646. 笏olor               笏n integer, any color name recognized by your     笏
  2647. 笏                    笏Pperating system and enclosed in quotes, or a     笏
  2648. 笏                    笏asic expression that returns a Long integer.     笏
  2649. 笏                    笏                                                  笏
  2650. 笏                    笏6se the QBColor function to set the color         笏
  2651. 笏                    笏Qroperty-QBColor(10)                              笏
  2652. 笏                    笏                                                  笏
  2653. 笏                    笏6se the RGB() function to set the Red, Green, and 笏
  2654. 笏                    笏lue levels. For example: RGB(192,192,192) sets   笏
  2655. 笏                    笏Uhe color property to gray.                       笏
  2656. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2657. 笏numerated Type     笏 string enclosed in quotation marks ("").        笏
  2658. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2659. 笏asic               笏ny legal Basic expression or statement of the    笏
  2660. 笏                    笏Dorrect type for the property.                    笏
  2661. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2662.  
  2663.  
  2664. 笊絶武笊 8.10. Using the Specialized Editor 笊絶武笊
  2665.  
  2666. What dialog the Specialized Editor button  calls depends on the property it 
  2667. appears with-selecting the Picture property calls the Graphic Selector and 
  2668. selecting the Backcolor property calls the Color Property Tool. 
  2669.  
  2670.  
  2671. 笊絶武笊 8.10.1. Selecting Graphics 笊絶武笊
  2672.  
  2673. The Graphic Selector is a file selection box that lets you add graphic files 
  2674. for the Picture, Icon, and DragIcon properties. The displayed list of available 
  2675. images is platform specific.
  2676.  
  2677. How you enter the graphic file depends of whether you select constant mode or 
  2678. expression mode. In constant mode, the Specialized Editor button is available, 
  2679. and you can select the graphic file from the Graphic Selector.
  2680.  
  2681. In expression mode, the Graphic Selector is not accessible. The expression you 
  2682. set in the Property Editor is equivalent to a statement 
  2683. object.property=expression that you write in code modules. In constant mode the 
  2684. path does not have to be written as a string. In expression mode, you must 
  2685. incorporate the LoadPicture function format. 
  2686.  
  2687. When you switch from constant mode to expression mode, the string viewed in the 
  2688. property slot appears in quotes and is incorporated into a LoadPicture() 
  2689. function format. For example: 
  2690.  
  2691. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2692. 笏1roperty value in Constant    笏:\krista\expres.bmp                              笏
  2693. 笏Node                          笏                                                  笏
  2694. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2695. 笏1roperty value in Expression  笏oadPicture("D:\krista\expres.bmp")               笏
  2696. 笏Node                          笏                                                  笏
  2697. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2698.  
  2699. The contrary is true when switching from expression mode to constant mode. That 
  2700. is, the LoadPicture prefix and the quotes are removed. For example: 
  2701.  
  2702. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2703. 笏1roperty value in Expression  笏oadPicture("D:\krista\expres.bmp")     笏
  2704. 笏Node                          笏                                        笏
  2705. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2706. 笏1roperty value in Constant    笏:\krista\expres.bmp                    笏
  2707. 笏Node                          笏                                        笏
  2708. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2709.  
  2710.  
  2711. 笊絶武笊 8.10.2. Selecting Colors 笊絶武笊
  2712.  
  2713. You can use the Property Editor to change the color properties (BackColor, 
  2714. FillColor, and ForeColor) of an object or a group of objects. You can also use 
  2715. the Project window Window=> Color Selector menu item to change colors. 
  2716.  
  2717. The Color Selector and the Color Property Tool let you select color from your 
  2718. operating system's color selection. The customizable color palette lets you 
  2719. create your own colors using the Color Editor. You access the Color Editor from 
  2720. either the Project window or the Property Editor by clicking on the Edit Custom 
  2721. Colors button to create custom colors. The colors you create are added to your 
  2722. color palette. 
  2723.  
  2724. The Property Editor Color Property Tool and the Project window Color Selector 
  2725. are functionally similar in that they both set colors-however, the Color 
  2726. Selector behaves like a property editor window. Color properties can be edited 
  2727. in the Color Selector without the Property Editor. 
  2728.  
  2729. Tip:  Use the Project window Color Selector when you only want to change the 
  2730. colors of your objects,which is faster than going through the Property Editor. 
  2731. The Color Selector displays objects as you select them in your form. A group of 
  2732. objects with common color properties can be changed with a single edit. 
  2733.  
  2734. For example, you can select an array of check boxes and modify their Backcolor 
  2735. property to be the same color shade in one step. The Color Property drop-down 
  2736. list shows the common color properties.
  2737.  
  2738. Restriction:  Selecting objects without color properties causes the Color 
  2739. Property drop- down list to be blank. You can only access the Color Property 
  2740. Tool through the Property Editor. First you select an object, then you select a 
  2741. color property to modify and click on the Specialized Editor button 
  2742.  
  2743. When you click on a color in the Color Property Tool, the selected object's 
  2744. color property changes to the selected color.
  2745.  
  2746.  
  2747. 笊絶武笊 8.10.2.1. Customizing Colors 笊絶武笊
  2748.  
  2749. If the color windows do not contain the color you want, you can create a color 
  2750. using the Color Editor. Click on the RGB Color Selector. When the crosshair 
  2751. pointer appears, move it to customize the color. Click on Set Color to add the 
  2752. custom color to the palette.The new color is saved in the custom colors area of 
  2753. the window. To apply your custom color, select it as you would any of the other 
  2754. colors. 
  2755.  
  2756. You set your custom color using Hue-Saturation-Intensity and Red-Green-Blue. As 
  2757. you manipulate the gray value arrow, the values in the Red, Green, Blue, Hue, 
  2758. Sat, and Value areas update to follow the color selection. The color selection 
  2759. area creates a visual cue, providing an intuitive way to choose colors. 
  2760.  
  2761. You can create a color by using the color area and the value areas, or by 
  2762. entering numbers into the input areas. The following table describes the parts 
  2763. of the Color Editor: 
  2764.  
  2765. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2766. 笏1art                          笏escription                                       笏
  2767. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2768. 笏3GB Color Selection           笏1rovides a graphical way to select the hue and    笏
  2769. 笏                              笏Taturation of the color you want to create.       笏
  2770. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2771. 笏olor Display                 笏1rovides a visual cue for the selected color mix. 笏
  2772. 笏                              笏epending on the selection of the Solid Color     笏
  2773. 笏                              笏Dheck box, the color selection area divides into  笏
  2774. 笏                              笏Uwo display areas, one to show the color as       笏
  2775. 笏                              笏Eithered, the other to show the color as solid.   笏
  2776. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2777. 笏4olid Color                   笏4elected - displays selected color as a solid     笏
  2778. 笏heck Box                     笏Dolor.                                            笏
  2779. 笏                              笏eselected - displays selected color as dithered. 笏
  2780. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2781. 笏ray Value Bar                笏1rovides a graphical way to select the lightness  笏
  2782. 笏                              笏Pr darkness of the color you want to create.      笏
  2783. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2784. 笏nput value area: Hue, Sat,   笏1rovides a non-graphical way to select the        笏
  2785. 笏Bnd Value                     笏Mightness or darkness of the color you want to    笏
  2786. 笏                              笏Dreate.                                           笏
  2787. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  2788. 笏nput value area: Red, Green, 笏1rovides a nongraphical way to specify the hue,   笏
  2789. 笏Bnd Blue                      笏Taturation, and value of the color you want to    笏
  2790. 笏                              笏Dreate.                                           笏
  2791. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  2792.  
  2793.  
  2794. 笊絶武笊 9. Chapter 5     Using the Menu Editor 笊絶武笊
  2795.  
  2796. This chapter describes how to use the Menu Editor to create menus, which play 
  2797. an important role in polished, commercial-quality applications. Specifically, 
  2798. this chapter shows how to: 
  2799.  
  2800.      Create standard pull-down menus with multiple levels of menu items. 
  2801.  
  2802.      Create pop-up menus that the user displays with the right mouse button. 
  2803.  
  2804.      Create menus with component arrays of menu items, so your application can 
  2805.       build menus at run time. 
  2806.  
  2807.  
  2808. 笊絶武笊 9.1. Understanding the Menu Editor 笊絶武笊
  2809.  
  2810. Figure 5-1 shows the Menu Editor opened to a form with a File and an Edit menu:
  2811.  
  2812.  Figure 5-1    Menu Editor 
  2813.  
  2814.  
  2815. 笊絶武笊 9.1.1. Understanding the Menu Editor Outline 笊絶武笊
  2816.  
  2817. Figure 5-1 shows an outline of items, such as File, Save As, or Paste, in the 
  2818. lower part of the Menu Editor window. Each item represents a menu, submenu, or 
  2819. menu command: depending on its indentation level in the outline: 
  2820.  
  2821.      Menu title - when the item is indented least, flush left in the outline; 
  2822.       for example, Edit. 
  2823.  
  2824.      Menu command - when the item is indented most in that menu; for example, 
  2825.       Cut. 
  2826.  
  2827.      Submenu (not shown) - when there are more than two indentation levels on 
  2828.       the same menu, and the item is in the middle-neither the most nor least 
  2829.       indented. 
  2830.  
  2831.  
  2832. 笊絶武笊 9.1.2. Editing Menu Properties from the Menu Editor 笊絶武笊
  2833.  
  2834. Each item in the Menu Editor outline is a menu component-a visual object you 
  2835. can edit. First, you select it by clicking on it. Then, you can edit in any of 
  2836. the ways described in this section. 
  2837.  
  2838.  
  2839. 笊絶武笊 9.1.2.1. Editing Text Displayed in the Menu Editor 笊絶武笊
  2840.  
  2841. The Menu Editor highlights the text of the selected item and displays it as two 
  2842. entities, separated by a \t: 
  2843.  
  2844.      The caption - the text the user sees on the menu; for example, Save As. 
  2845.  
  2846.      A shortcut - enter the shortcut text after the \t. Certain keys have a 
  2847.       special representation in shortcut text; for example, you represent a 
  2848.       Control-C as ^c (caret c) and the Insert key as {Ins}. For further 
  2849.       information, see Adding Shortcuts. 
  2850.  
  2851.  For a picture of a selected item in the Menu Editor outline, see Figure 5-1; 
  2852.  Copy is selected. If there is no shortcut, you see just the caption and the 
  2853.  \t. 
  2854.  
  2855.  
  2856. 笊絶武笊 9.1.2.2. Adding New Items 笊絶武笊
  2857.  
  2858. You can add a new item below the selected item in these ways: 
  2859.  
  2860.      Choose Selected=>Add Item or enter Control-Insert from the keyboard. This 
  2861.       adds the new item at the same indentation level as the selected item. 
  2862.  
  2863.      Choose Selected=>Add Subitem or enter Shift-Insert from the keyboard. 
  2864.       This adds the new item indented below the selected item, as a "child." 
  2865.  
  2866.  
  2867. 笊絶武笊 9.1.2.3. Adjusting Items 笊絶武笊
  2868.  
  2869. You can adjust the indentation level of the selected item in these ways: 
  2870.  
  2871.      Choose Selected=>Move Left or click on the Left button. This moves the 
  2872.       item left in the outline, typically to become a menu title. 
  2873.  
  2874.      Choose Selected=>Move Right or click on the Right button. This moves the 
  2875.       item right in the outline, typically to become a menu command. 
  2876.  
  2877.  Similarly, you can move the selected item up or down in the outline: 
  2878.  
  2879.      Choose Selected=>Move Up or click on the Up button. 
  2880.  
  2881.      Choose Selected=>Move Down or click on the Down button. 
  2882.  
  2883.  Tip:  When you move a item that has subitems (children), the subitems move 
  2884.  with the item. 
  2885.  
  2886.  
  2887. 笊絶武笊 9.1.3. Editing Menu Properties from the Property Editor 笊絶武笊
  2888.  
  2889. Figure 5-2 shows the Property Editor displaying properties of the selected Copy item:
  2890.  
  2891. Figure 5-2    Property Editor displaying the Copy item. 
  2892.  
  2893. In the figure, you see Caption and Shortcut properties, which are initially set 
  2894. to the text you entered with the menu item. In the Property Editor, you can 
  2895. view all menu properties and edit most of them. 
  2896.  
  2897.  
  2898. 笊絶武笊 9.2. Using the Menu Editor 笊絶武笊
  2899.  
  2900. This section provides detailed steps for common Menu Editor tasks; for other 
  2901. menu tasks, see Using the Property Editor to Edit Menu Properties. 
  2902.  
  2903.  
  2904. 笊絶武笊 9.2.1. Opening the Menu Editor 笊絶武笊
  2905.  
  2906. To open the Menu Editor, choose one of the following commands in the Project 
  2907. window: 
  2908.  
  2909.      Choose Windows=>Menu editor. 
  2910.  
  2911.      Choose Selected=>Open menu. 
  2912.  
  2913.      Click on the Menu editor tool bar button 
  2914.  
  2915.  If a form is selected when the Menu Editor is opened, the menus of that form 
  2916.  are displayed. To select another form, use the drop-down list at the top of 
  2917.  the Menu Editor window. 
  2918.  
  2919.  
  2920. 笊絶武笊 9.2.2. Creating Menus on a Menuless Form 笊絶武笊
  2921.  
  2922. To show how to create menus on a form, we will build File and Edit menus. Each 
  2923. of the next sections will add another part toward this goal. When complete, the 
  2924. Menu Editor outline should look as follows: 
  2925.  
  2926. File
  2927.     Open
  2928.     Save As
  2929.     Close
  2930. Edit
  2931.     Copy
  2932.     Cut
  2933.     Paste
  2934.  
  2935. Begin with the following steps: 
  2936.  
  2937.    1. Click on the form, to select it. 
  2938.  
  2939.    2. In the Project window, choose Selected=>Open Menu. The Menu Editor 
  2940.       appears, displaying an empty window. 
  2941.  
  2942.    3. In the Menu Editor window, choose Selected=>Add Item. This adds the first 
  2943.       item. The Menu Editor outline should look as follows: 
  2944.  
  2945.                 Menu1
  2946.  
  2947.    4. Press Enter. This displays Menu1 on the form (prior to this, it was only 
  2948.       in the outline). 
  2949.  
  2950.  
  2951. 笊絶武笊 9.2.3. Adding an Item 笊絶武笊
  2952.  
  2953. Continuing with the example, add commands to the Menu1 menu: 
  2954.  
  2955.    1. In the Menu Editor, click on Menu1 to select it. 
  2956.  
  2957.    2. In the Menu Editor, choose Selected=>Add Subitem. This indents an item 
  2958.       below Menu1. Note that you can do the same thing by typing 
  2959.       Control-Shift-Insert. 
  2960.  
  2961.             Menu1
  2962.                 Menu2
  2963.  
  2964.    3. Then, click on the Menu2 item, choose Selected=>Add Item, and press 
  2965.       Enter. The Menu Editor outline should now look as follows: 
  2966.  
  2967.             Menu1
  2968.                 Menu2
  2969.                 Menu3
  2970.  
  2971.  
  2972. 笊絶武笊 9.2.4. Editing Captions 笊絶武笊
  2973.  
  2974. At this point, you have a menu with three commands, but the text in the 
  2975. captions is incorrect. Follow these steps to edit the caption: 
  2976.  
  2977.    1. In the Menu Editor, click on Menu1 to select the text. 
  2978.  
  2979.    2. Type over the selected text with File. Similarly, type over Menu2, and 
  2980.       Menu3 with Open and Save As and press Enter. The Menu Editor outline 
  2981.       should now look as follows: 
  2982.  
  2983.             File
  2984.                 Open
  2985.                 Save As
  2986.  
  2987.    3. To add an item for the Edit command, select the File item and choose 
  2988.       Selected=>Add Item. Note that this adds Menu4 after Save As, not Open. 
  2989.       The Menu Editor outline should now look as follows: 
  2990.  
  2991.             File
  2992.                 Open
  2993.                 Save As
  2994.             Menu4
  2995.  
  2996.    4. To complete the File and Edit menus, use the commands just shown to add 
  2997.       items and edit the selected text to produce the following outline: 
  2998.  
  2999.             File
  3000.                 Open
  3001.                 Save As
  3002.                 Close
  3003.             Edit
  3004.                 Copy
  3005.                 Cut
  3006.                 Paste
  3007.  
  3008.  These menus are now ready to be connected to event procedures. For steps to do 
  3009.  this, see Using the Code Editor to Define Menu Behavior, which completes this 
  3010.  example. 
  3011.  
  3012.  Tip:  File and Edit, in the menu edit outline, now have a dash (-) and a file 
  3013.  symbol to the left of their names. The dash or negative symbol indicates that 
  3014.  the menu title has submenus and is in an expanded state. To collapse the menu 
  3015.  selection, click the - symbol. The negative symbol changes to a positive 
  3016.  symbol. The - and + symbols are toggle switches to collapse or expand menu 
  3017.  titles and make it easier for you to view and edit your menus.
  3018.  
  3019.  The positive symbol illustrates that the menu title contains submenus but is 
  3020.  in a collapsed state. To expand the list to view all the submenus, click the + 
  3021.  symbol. 
  3022.  
  3023.  
  3024. 笊絶武笊 9.2.5. Deleting an Item 笊絶武笊
  3025.  
  3026. To delete an item, select it in the outline; then click on the Remove item 
  3027. button  or choose Edit=> Delete and the item is removed. Any items indented 
  3028. below the selected item (that is, children) are also deleted. 
  3029.  
  3030.  
  3031. 笊絶武笊 9.2.6. Adding a Separating Line 笊絶武笊
  3032.  
  3033. When you pull down the Menu Editor Selected menu, notice there are lines (that 
  3034. is, separator bars) separating the different programming functions. To include 
  3035. a separator bar in your menus, use a hyphen (-) as the caption of an item. 
  3036.  
  3037.  
  3038. 笊絶武笊 9.2.7. Undoing Menu Value Changes 笊絶武笊
  3039.  
  3040. The Menu Editor supports a multi-level undo feature. To undo an edit operation, 
  3041. choose Edit=> Undo. In the Menu Editor you can undo the following operations: 
  3042.  
  3043.      Editing an item and pressing Enter. 
  3044.  
  3045.      Choosing a Menu Editor menu command. 
  3046.  
  3047.      Clicking on the Left, Right, Up, or Down button. 
  3048.  
  3049.  If you choose Undo repeatedly, one edit command at a time is "undone" until 
  3050.  the Undo/Redo Stack Depth limit is reached. 
  3051.  
  3052.  Tip:  To increase this depth limit, choose Options=>Environment=>Undo/Redo 
  3053.  Stack Depth in the Project window. If you have undone an edit by mistake, you 
  3054.  can use the Edit=> Redo to reinstate the edit operation. 
  3055.  
  3056.  
  3057. 笊絶武笊 9.3. Using the Property Editor to Edit Menu Properties 笊絶武笊
  3058.  
  3059. The Property Editor can display the properties of an item that you selected in 
  3060. the Menu Editor. Most menu properties can be edited using the Property Editor. 
  3061.  
  3062. Tip:  When you select an item in the Menu Editor outline, this deselects any 
  3063. objects on your form, such as buttons or text boxes, that were previously 
  3064. selected. 
  3065.  
  3066.  
  3067. 笊絶武笊 9.3.1. Opening the Property Editor with Menu Properties 笊絶武笊
  3068.  
  3069. If you double-click on an item in the Menu Editor outline, the Property Editor 
  3070. displays properties of that item. Alternatively, you can select the item in the 
  3071. outline and choose Window=> Property Editor in the Project window (or simply 
  3072. press F4). 
  3073.  
  3074.  
  3075. 笊絶武笊 9.3.2. Adding Mnemonics 笊絶武笊
  3076.  
  3077. If you insert mnemonics (also called access keys) in your pull-down menus, the 
  3078. user sees certain designated characters underlined: File, Open, Save, Save As, 
  3079. and Close. To select an item, the user holds down a meta key (for example, Alt 
  3080. or Ctrl+Alt) and presses the designated character. 
  3081.  
  3082. To add a mnemonic, you can edit the Caption property of an item selected in the 
  3083. Menu Editor outline, using the Property editor. Or, you can edit selected text 
  3084. in the Menu Editor outline. Specifically, you insert an ampersand (&) in the 
  3085. caption of an item before each designated character. The following example 
  3086. shows items with ampersands in the Menu Editor outline: 
  3087.  
  3088. &File
  3089.     &Open
  3090.     &Save
  3091.     S&ave As
  3092.     &Close
  3093.  
  3094. To choose File=>Save As, the user enters Alt F A (if Alt is the meta key). 
  3095.  
  3096.  
  3097. 笊絶武笊 9.3.3. Adding Shortcuts 笊絶武笊
  3098.  
  3099. A shortcut is a key or combination of keys that activates a menu command 
  3100. whether the menu item is visible or not. For example, the OS/2 shortcuts for 
  3101. the edit commands include: 
  3102.  
  3103. Copy              Ctrl+INS
  3104. Cut               Shift+DEL
  3105. Paste             Shift+INS
  3106.  
  3107. And the Windows NT and Windows 95 shortcuts for the edit commands include: 
  3108.  
  3109. Copy            Ctrl+C
  3110. Cut             Ctrl+X
  3111. Paste           Ctrl+V
  3112.  
  3113. The shortcut associated with a menu item is displayed beside its caption on the 
  3114. menu, as shown above. 
  3115.  
  3116.  
  3117. 笊絶武笊 9.3.3.1. Representing Special Keys in Shortcuts 笊絶武笊
  3118.  
  3119. The following keys have a special representation as you enter them in 
  3120. shortcuts: 
  3121.  
  3122.      For the Control key, enter a caret (^). For example, for Ctrl+C, set the 
  3123.       Shortcut property to ^c. 
  3124.  
  3125.      For the Shift key, enter a plus sign (+). For example, for Ctrl+Shift+C, 
  3126.       set the Shortcut property to ^+c. 
  3127.  
  3128.      For the Alt key, enter a percent sign (%). For example, for Ctrl+Alt+F, 
  3129.       set the Shortcut property to ^%f. 
  3130.  
  3131.      For the Insert or Delete keys, enter {INS}, {insert}, {DEL}, or {delete} 
  3132.       For example, for Ctrl+INS, set the Shortcut property to ^{INS}. 
  3133.  
  3134.      For a function key, enter f and an integer enclosed in braces. For 
  3135.       example, for Function key F12, set the Shortcut property to {f12}. 
  3136.  
  3137.  Enter the characters in the order they are to appear on the menu. For example, 
  3138.  ^{INS} appears on the menu as CTRL+INS. The characters you enter are case 
  3139.  insensitive; the Menu Editor standardizes your entries. So, ^{ins} and ^{INS} 
  3140.  both appear as Ctrl+Ins. 
  3141.  
  3142.  Only the keys commonly used for shortcuts are shown here. To get a complete 
  3143.  list of the way to represent keys, see the Shortcut Property in the VisualAge 
  3144.  for Basic Language Reference Online Help. 
  3145.  
  3146.  
  3147. 笊絶武笊 9.3.3.2. Entering the Shortcut Text 笊絶武笊
  3148.  
  3149. You can add the encoded shortcut text in two ways: 
  3150.  
  3151.      Add the text after a \t in the item's selected text in the Menu Editor 
  3152.       outline. 
  3153.  
  3154.      Edit the ShortCut property of the selected item using the Property 
  3155.       Editor. 
  3156.  
  3157.  Follow these steps to enter a shortcut for the Copy command: 
  3158.  
  3159.    1. In the Menu Editor window, double-click on the Copy item. 
  3160.  
  3161.    2. When the Property Editor appears, displaying properties of Copy, set the 
  3162.       ShortCut property to the text ^{ins} or ^c, depending on customary usage 
  3163.       on your platform. 
  3164.  
  3165.  
  3166. 笊絶武笊 9.3.4. Creating Component Arrays for Menus 笊絶武笊
  3167.  
  3168. It is often convenient to reference menu commands as elements of an array, 
  3169. rather than as isolated commands. This is especially useful when your 
  3170. application builds some menus at run time; for example, in a menu of file names 
  3171. of open files. 
  3172.  
  3173. As an example of how to create a component array, consider the Edit menu 
  3174. mentioned throughout this chapter. As an alternative to menu items named mCopy, 
  3175. mCut, and mPaste, you could have an array, Edit[n], with n having index values 
  3176. of 0, 1 and 2. To do this, you must select each item (Copy, Cut, and Paste, in 
  3177. this case), item by item, in the Menu Editor outline and assign it the same 
  3178. name: Edit. See Chapter 4, Using the Property Editor., for further information 
  3179. about Creating Component Arrays. 
  3180.  
  3181.  
  3182. 笊絶武笊 9.4. Using the Code Editor to Define Menu Behavior 笊絶武笊
  3183.  
  3184. This section describes how to make your menus functional; specifically, you 
  3185. need to know the following information: 
  3186.  
  3187.      How the menus are connected to the event procedures. 
  3188.  
  3189.      How to enter the necessary code. 
  3190.  
  3191.  
  3192. 笊絶武笊 9.4.1. Connecting Menu Commands and Event Procedures 笊絶武笊
  3193.  
  3194. When an end-user chooses a menu, VisualAge for Basic calls the event procedure 
  3195. you specify to process that event. The name of the event procedure is derived 
  3196. from the name of the item and the name of the event. For example, Menu1_Click 
  3197. is derived from Menu1 and the Click event. 
  3198.  
  3199.  
  3200. 笊絶武笊 9.4.1.1. Using the Name Property to Connect 笊絶武笊
  3201.  
  3202. For any menu object, although the Caption property specifies the text the user 
  3203. sees (for example, Copy), the Name property specifies the object in your code. 
  3204. When you create an item in the Menu Editor outline, VisualAge for Basic 
  3205. automatically assigns it a name, such as Menu1. However, if you change the name 
  3206. to something more mnemonic, such as mCopy, you also make the name of the event 
  3207. procedure more understandable-changing it from Menu1_Click to mCopy_Click. 
  3208.  
  3209.  
  3210. 笊絶武笊 9.4.1.2. Changing Item Names 笊絶武笊
  3211.  
  3212. To change the Name of an item selected in the outline, edit the Name property 
  3213. using the Property Editor. You can use Copy both as the Name property and the 
  3214. Caption property of an item. 
  3215.  
  3216. To continue with the File and Edit menu example, use the Property Editor to 
  3217. change the Name property of your items-the names to use in your code. Take the 
  3218. following steps to change the Name property of Copy: 
  3219.  
  3220.    1. In the Menu Editor, double-click on Copy, to open the Property Editor. 
  3221.  
  3222.    2. In the Property Editor, change the Name property to mCopy. 
  3223.  Similarly, change the Name property of Cut and Paste items to mCut, and 
  3224.  mPaste. Now, you can supply code for these menu commands. 
  3225.  
  3226.  
  3227. 笊絶武笊 9.4.2. Adding Code to the Menu Sub Procedures 笊絶武笊
  3228.  
  3229. Enter code for the Copy command as follows: 
  3230.  
  3231.    1. In the Menu Editor, click on the Copy item to select it. 
  3232.  
  3233.    2. From the Project window, choose Selected=>Open Code. 
  3234.  This opens the Code Editor, which displays the mCopy_Click Sub procedure. 
  3235.  
  3236.  When the Code Editor opens, it displays a starter procedure, which you can 
  3237.  edit to add the code to process your command. 
  3238.  
  3239.  To construct an example that make a functional Edit menu with Copy, Cut, and 
  3240.  Paste commands, follow these steps: 
  3241.  
  3242.    1. Create a new application, draw a text box on the form, and change its 
  3243.       name to Text1.. 
  3244.  
  3245.    2. Set the Multiline property of Text1 to True. 
  3246.  
  3247.    3. Use the Code Editor to add code, one by one, to the Sub procedures 
  3248.       mCopy_Click, mCut_Click, and mPaste_Click: 
  3249.  
  3250.   Sub mCopy_Click()
  3251.   Clipboard.Clear
  3252.   Clipboard.SetText Text1.SelText
  3253.   End Sub
  3254.  
  3255.   Sub mCut_Click()
  3256.   Clipboard.Clear
  3257.   Clipboard.SetText Text1.SelText
  3258.   Text1.SelText = ""
  3259.   End Sub
  3260.  
  3261.   Sub mPaste_Click()
  3262.   Text1.SelText = Clipboard.GetText()
  3263.   End Sub
  3264.  
  3265.  Finally, to try out your menus, do the following: 
  3266.  
  3267.    1. In the Project Window, choose Run. 
  3268.  
  3269.    2. Use the Copy, Cut, and Paste commands to edit text in Text1, or to and 
  3270.       from Text1 and another object or application, using the clipboard. 
  3271.  
  3272.  
  3273. 笊絶武笊 9.5. Editing Other Menu Properties with the Property Editor 笊絶武笊
  3274.  
  3275. This section describes some other menu properties that you can view and edit 
  3276. using the Property Editor. You can open the Property Editor to edit an item 
  3277. selected in the Menu Editor outline using Selected=>Properties or by 
  3278. double-clicking on the item in the Menu Editor outline. 
  3279.  
  3280. See also:  Chapter 4, Using the Property Editor, for more about editing 
  3281. properties. 
  3282.  
  3283. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  3284. 笏1roperty       笏escription                                                 笏
  3285. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3286. 笏hecked        笏5rue places a check mark beside a menu item; False removes  笏
  3287. 笏               笏Jt. You can set Checked at run time to show a user whether a笏
  3288. 笏               笏Uoggle is on or off; for example, to show whether a lock is 笏
  3289. 笏               笏Tet or unset.                                               笏
  3290. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3291. 笏nabled        笏ontrols whether or not a menu item is available. You can   笏
  3292. 笏               笏Fnable and disable menu items at run time. For example, you 笏
  3293. 笏               笏Dan disable menu items when the commands or features they   笏
  3294. 笏               笏Domplement are invalid. When you disable a menu item, it    笏
  3295. 笏               笏Bppears dimmed (gray). To remove a disabled menu item       笏
  3296. 笏               笏Dompletely, set its Visible property to False.              笏
  3297. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3298. 笏elpContextID  笏1rovides your application with context-sensitive help. To   笏
  3299. 笏               笏Nake a menu item context sensitive, assign the same number  笏
  3300. 笏               笏Uo both the menu item's HelpContextID property and the .h   笏
  3301. 笏               笏(header file) used to compile the help file. A help file    笏
  3302. 笏               笏Dalls the identified topic by the current context number    笏
  3303. 笏               笏Xhen you press the F1 key.                                  笏
  3304. 笏               笏5ip: The name of the application help file is set using the 笏
  3305. 笏               笏elpFile property.                                          笏
  3306. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3307. 笏7isible :      笏5rue shows, and False hides, a menu item at run time.       笏
  3308. 笏               笏5ip: A menu item can only receive focus if both properties  笏
  3309. 笏               笏7isible and.Enabled are set to True.                        笏
  3310. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3311. 笏8indowList     笏4pecifies at design time whether a menu contains a window   笏
  3312. 笏               笏Mist selection. You use this property if your application   笏
  3313. 笏               笏Dan have many windows open at the same time. The WindowList 笏
  3314. 笏               笏Qroperty allows you to switch between the different windows 笏
  3315. 笏               笏Pr files. WindowList is read-only at run time. Only one menu笏
  3316. 笏               笏Domponent on a Form can have a Window List selection.       笏
  3317. 笏               笏4etting the WindowList property to True causes the Window   笏
  3318. 笏               笏ist menu to add menu items below it.                       笏
  3319. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  3320.  
  3321.  
  3322. 笊絶武笊 9.6. Creating a Pop-Up Menu 笊絶武笊
  3323.  
  3324. The menus described in this section are called pop-up menus because they appear 
  3325. only when the user takes a specific action, typically a click with the right 
  3326. mouse button. 
  3327.  
  3328.  
  3329. 笊絶武笊 9.6.1. Creating a Pop-up Menu 笊絶武笊
  3330.  
  3331. You can use the Menu Editor to build a pop-up menu the same way you do other 
  3332. menus. First, you build items on the menu bar and set the Visible property of 
  3333. the title item to False. When the user presses (and releases) the right mouse 
  3334. button, a MouseUp Sub procedure on the form is called. The MouseUp Sub 
  3335. procedure uses the PopupMenu method to display the menu you have built, at the 
  3336. position where the user clicks the right mouse button. The PopupMenu method 
  3337. displays the menu, ignoring the Visible property. 
  3338.  
  3339. To try this, follow these steps: 
  3340.  
  3341.    1. Click on a new form. 
  3342.  
  3343.    2. Choose Selected=>Open menu in the Project window. 
  3344.  
  3345.    3. In the Menu Editor window, choose Selected=>Add item. 
  3346.  
  3347.    4. Choose Selected=>Add Subitem. 
  3348.  
  3349.    5. Choose Selected=>Add Subitem. This gives you a Menu1 menu with commands 
  3350.       Menu2 and Menu3. 
  3351.  
  3352.    6. Double-click on Menu1 to open the Property Editor and set the Visible 
  3353.       property to False. 
  3354.  
  3355.    7. Also in the Property Editor, change the Name property to pMenu. 
  3356.  
  3357.    8. Choose Selected=>Code in the Project window, to open the Code Editor 
  3358.  
  3359.    9. In the Code Editor, select the Form object and the Mouse_Up event. 
  3360.  
  3361.   10. Enter the following code, which calls the PopupMenu method with the name 
  3362.       you gave the invisible menu on the menubar: 
  3363.  
  3364.             Sub Form_MouseUp(Button As Integer, Shift As Integer, X As
  3365.                 Single, Y As Single)
  3366.                 If Button = 2 Then        'Right mouse button?
  3367.                     PopupMenu pMenu;    'Call method
  3368.                 End
  3369.             End Sub
  3370.  
  3371.   11. Run the application. Click the form with the right mouse button, and 
  3372.       choose one of the commands displayed by the PopupMenu method. 
  3373.  
  3374.  The pop-up menu appears and then disappears after you choose the command. 
  3375.  Consider placing calls to a MsgBox command in the appropriate event Sub 
  3376.  procedures to make these menus functional. See Connecting Menu Commands and 
  3377.  Event Procedures and Adding Code to the Menu Sub Procedures for further 
  3378.  information. 
  3379.  
  3380.  
  3381. 笊絶武笊 9.6.1.1. More on Pop-up Menus 笊絶武笊
  3382.  
  3383. Pop-up menus follow these rules: 
  3384.  
  3385.      There can be only one pop-up menu at a time. 
  3386.  
  3387.      To anchor the pop-up menu in a specific location, set the X and Y 
  3388.       coordinates. 
  3389.  
  3390.      To display the pop-up menu at the current cursor position, do not set the 
  3391.       coordinates. 
  3392.  
  3393.  When the pop-up menu is called, all code processing is suspended until the 
  3394.  pop-up menu is closed or the user selects a menu item. Then, normal code 
  3395.  processing continues. 
  3396.  
  3397.  See also:  VisualAge for Basic Language Reference Online Help, PopupMenu 
  3398.  method. 
  3399.  
  3400.  
  3401. 笊絶武笊 10. Chapter 6     Using the Code Editor 笊絶武笊
  3402.  
  3403. You use the Code Editor to create, edit, and debug your project's source code. 
  3404. The Code Editor accelerates the entry and organization of code, saving you 
  3405. development time and cost. The Code Editor organizes your VisualAge for Basic 
  3406. project code into manageable groups of task units called classes, subroutines, 
  3407. functions, and declarations. 
  3408.  
  3409. The Code Editor allows you to: 
  3410.  
  3411.      Display a program as a continuous flow of instructions. 
  3412.  
  3413.      Organize your code into individual procedures attached to objects. 
  3414.  
  3415.      Add behavior to objects to respond to user actions. 
  3416.  
  3417.      Browse through all the procedures within your application. 
  3418.  
  3419.      Create class declarations. 
  3420.  
  3421.      Undo one or more of your changes through a multiple-undo feature. 
  3422.  The Code Editor's organizational approach simplifies programming and reduces 
  3423.  the time required to test and locate errors. 
  3424.  
  3425.  This chapter details how to create and edit your code. Chapter 7, Testing and 
  3426.  Debugging Code provides more information on how to test and debug your 
  3427.  project. 
  3428.  
  3429.  
  3430. 笊絶武笊 10.1. Code Editor Features 笊絶武笊
  3431.  
  3432. The Code Editor has the following features: 
  3433.  
  3434.      A multi-functional code area allowing you to create, edit, and delete 
  3435.       VisualAge for Basic code. 
  3436.  
  3437.      A navigation area for moving between procedures in different objects and 
  3438.       modules. 
  3439.  
  3440.      A built-in code indentation mechanism. 
  3441.  
  3442.      A divisible edit window displaying two sections of the same code module 
  3443.       or two separate modules. 
  3444.  
  3445.      Familiar editing tools to accelerate common editing tasks. 
  3446.  
  3447.      A powerful search and replace tool including support for regular 
  3448.       expressions. 
  3449.  
  3450.      Options for colorizing code. 
  3451.  
  3452.      An ability to test your application's execution prior to generating an 
  3453.       executable. 
  3454.  
  3455.      A bookmark area to locate specific sections of your code. 
  3456.  
  3457.      The ability to print part or all of your project code. 
  3458.  
  3459.      A complete debugging facility that helps you find and correct errors, as 
  3460.       well as test the functions of your code modules. 
  3461.  
  3462.  
  3463. 笊絶武笊 10.2. Understanding the Code Editor 笊絶武笊
  3464.  
  3465. The Code Editor consists of a menu bar, a horizontal and vertical tool bar, a 
  3466. navigation area, a code area, and a status area. By default, the Code Editor 
  3467. displays one window code pane. You can display a second code pane by using the 
  3468. sash to resize the code area window. 
  3469.  
  3470. See also:  The VisualAge for Basic Online Help, detailed information on each of 
  3471. the toolbars and icons. 
  3472.  
  3473.  
  3474. 笊絶武笊 10.3. Using the Navigation Area 笊絶武笊
  3475.  
  3476. The Code Editor contains a navigation area containing combination boxes for 
  3477. Module, Object/Class, and Event/Method. You use these combination boxes to 
  3478. navigate through your code. 
  3479.  
  3480. The ability to navigate through your code allows you to organize and edit code 
  3481. in smaller, more manageable sections. The "compartmentalization" of code lets 
  3482. you find and edit specific events or methods for the various objects within 
  3483. your project, thus avoiding needless scrolling through the code.
  3484.  
  3485. VisualAge for Basic is able to recognize events and methods attached to objects 
  3486. and classes. Because separate events are recognized, VisualAge for Basic 
  3487. automatically organizes the code into the individual events or methods. When 
  3488. you enter code for several events at once, VisualAge for Basic separates the 
  3489. code into the individual events as soon as you have finished entering the code 
  3490. for a specific event and started entering the code for another. When VisualAge 
  3491. for Basic fragments your code, you might notice that what you have just entered 
  3492. appears to have vanished-it has been organized into its own event or method. To 
  3493. view code for a specific event, open the Event/Method combination box to list 
  3494. the object's associated events and select the one you wish to view. 
  3495.  
  3496.  
  3497. 笊絶武笊 10.3.1. Working with Modules 笊絶武笊
  3498.  
  3499. You use the Module combination box to select the module that contains the 
  3500. VisualAge for Basic procedures you write. The Project window displays the 
  3501. modules that are part of your project. Code modules are shown in the Project 
  3502. window with a .bas file extension. Form modules are shown with a .i file 
  3503. extension. 
  3504.  
  3505.  
  3506. 笊絶武笊 10.3.1.1. Module Selector 笊絶武笊
  3507.  
  3508. The Module selector allows you to select which code module is displayed in the 
  3509. current Code Editor pane. The Module drop-down list displays all modules and 
  3510. objects available in your current project. The active editing pane displays the 
  3511. selected module. For example, when you first launch VisualAge for Basic, it 
  3512. opens with an empty form, named Form1-this is the type of object that would be 
  3513. found listed in the Module selector. 
  3514.  
  3515. Important:  If you change a module's Name property, the new name automatically 
  3516. replaces the name in the Module selector. You must modify any references to the 
  3517. module in your code. 
  3518.  
  3519.  
  3520. 笊絶武笊 10.3.1.1.1. Specifying Scope 笊絶武笊
  3521.  
  3522. You use the keywords Dim, Private, Global, and Public to set the scope of the 
  3523. variables. Where you place these keywords determines if the scope is for all 
  3524. modules or just the current module. For example, selecting the Module drop-down 
  3525. selection box, choosing Form1, and placing your code in the Form1.i module, 
  3526. determines the scope to be public. This means that Form1 and all its contained 
  3527. objects can access the value of the variable. 
  3528.  
  3529. See also:  Chapter 9, Working with Data and Object Variables for more 
  3530. information about variables and scope. 
  3531.  
  3532.  
  3533. 笊絶武笊 10.3.1.2. Object/Class Selector 笊絶武笊
  3534.  
  3535. The Object/Class selector allows you to select a specific object or class in 
  3536. the selected code module. The Object/Class selector lets you assign code to a 
  3537. specific object within the module, or to a general procedure, available to all 
  3538. objects in the project. For example, if you place a command button on your 
  3539. default startup form and you want to assign behavior specifically to this 
  3540. button, choose Command1 from the Object/Class selector. 
  3541.  
  3542. Tip:  Arrays use square brackets ([]) for easy identification in the 
  3543. Object/Class selector. 
  3544.  
  3545. Important:  If you change an object's Name property, the new name automatically 
  3546. replaces the name in the Object/Class selector. You must modify any references 
  3547. to the object in your code. 
  3548.  
  3549.  
  3550. 笊絶武笊 10.3.1.3. Event/Method Selector 笊絶武笊
  3551.  
  3552. The Event/Method selector allows you to select a specific method or event 
  3553. associated with an object in your project. After selecting an object, choose 
  3554. any of the object's specific events and set the object's behavior using 
  3555. VisualAge for Basic code. 
  3556.  
  3557. Tip:  An ellipsis (...) appears next to an event already containing code. 
  3558.  
  3559.  
  3560. 笊絶武笊 10.4. Programming Behavior 笊絶武笊
  3561.  
  3562. To access the Code Editor: 
  3563.  
  3564.      Select Windows=>Code Editor menu item from the Project window. 
  3565.  
  3566.      Click the Code Editor button  in the Project window. 
  3567.  
  3568.  For every module, object, and event you select, the code area displays a 
  3569.  procedure template ready for you to fill in. A procedure template is exclusive 
  3570.  to the object and event. The template contains Sub and End Sub statements. 
  3571.  
  3572.  You define how the object responds to other objects and to user input by 
  3573.  adding VisualAge for Basic code between the Sub and End Sub statements. 
  3574.  
  3575.  The event procedure template appears in the code area after you select an 
  3576.  object in the Object/Class combination box and an event in the Event/Method 
  3577.  combination box. 
  3578.  
  3579.  Tip:  The Code Editor provides Sub and End Sub, Function and End Function, 
  3580.  Property Set and End Property, Property Get and End Property, and Class and 
  3581.  End Class as templates. 
  3582.  
  3583.  
  3584. 笊絶武笊 10.5. Adding Code to the Form_Load Event: 笊絶武笊
  3585.  
  3586. To set or initialize Form1, add the following code to Form1's Load event. 
  3587.  
  3588.    1. Click on the drop-down button of the Module selector combination box. A 
  3589.       drop-down list containing all available project modules displays. 
  3590.  
  3591.    2. Click on Form1 module or press the cursor keys to scroll to Form1 module. 
  3592.  
  3593.    3. Click on the drop-down button of the Object/Class selector combination 
  3594.       box. A drop-down list containing all the module's available objects and 
  3595.       classes displays. 
  3596.  
  3597.    4. Click on Form or press the cursor keys to scroll to Form. 
  3598.  
  3599.    5. Click on the drop-down button of the Event/Method selector combination 
  3600.       box. A drop-down list containing all the available events and methods 
  3601.       displays. 
  3602.  
  3603.    6. Highlight Load... if it does not already appear as a selection. 
  3604.  
  3605.       The drop-down selection box closes and Load... appears under the words 
  3606.       Event/Method. 
  3607.  
  3608.       Tip:  To quickly select a drop-down list item, type the first letter of 
  3609.       the desired item. For example, press the L key to select a Load event. 
  3610.       The Code Editor's editing pane displays a procedure template for the Form 
  3611.       Load event. 
  3612.  
  3613.    7. Type in the following: 
  3614.  
  3615.             Sub Form_Load()
  3616.                 'List of instructions to perform on startup.
  3617.             End Sub
  3618.       The code is now attached to the Form_Load event. 
  3619.  
  3620.  To add code to the other components, click on the component in the form or 
  3621.  select the component from the Object/Class drop-down box. 
  3622.  
  3623.  
  3624. 笊絶武笊 10.6. Adding code to a General Procedure: 笊絶武笊
  3625.  
  3626. Event procedures do not contain all your code. You can also use the navigation 
  3627. area to create general procedures or class declarations. General procedures are 
  3628. not connected to a specific event. General procedures stored in a form are 
  3629. available to all procedures within that form. Procedures stored within a code 
  3630. module are general by definition and are globally available within the 
  3631. application. 
  3632.  
  3633. To create a general procedure: 
  3634.  
  3635.    1. Select the desired module from the Module combination box. 
  3636.  
  3637.    2. Select (General) in the Object/Class combination box. 
  3638.  
  3639.    3. Select (Declarations) in the Event/Method combination box. 
  3640.  
  3641.    4. Enter VisualAge for Basic code in the code area for the form's new 
  3642.       procedure. The general procedures you create apply to all objects 
  3643.       contained within the selected form 
  3644.  
  3645.  Tip:  You can create a new procedure automatically by entering the declaration 
  3646.  on a new line in the Code Editor. The Code Editor detects when you press the 
  3647.  Enter key and automatically creates the new procedure. 
  3648.  
  3649.  You can also enter a specific subroutine, including the object and event, 
  3650.  without selecting it in the navigation area. For example, you can code a Click 
  3651.  event for the Command1 object by entering Sub Command1_Click() in the code 
  3652.  area. The Code Editor automatically sorts and saves the code under Command1's 
  3653.  Click event. 
  3654.  
  3655.  See also:  Chapter 11, Organizing Code for more details on event and general 
  3656.  procedures. 
  3657.  
  3658.  
  3659. 笊絶武笊 10.7. The Code Area 笊絶武笊
  3660.  
  3661. The Code Editor's code area displays the code for your VisualAge for Basic 
  3662. project. When you first open the Code Editor, a single editing pane appears. To 
  3663. view code that is outside of the code area, you can scroll up, down, left, or 
  3664. right. You can scroll through the code area using the scroll bars, the cursor 
  3665. keys, or the Page Up or Page Down keys. You can also split the code area to 
  3666. display a second editing pane. 
  3667.  
  3668.  
  3669. 笊絶武笊 10.7.1. Logical Lines 笊絶武笊
  3670.  
  3671. A single line of continuous code is called a logical line. When you enter a 
  3672. long line of code, the Code Editor scrolls to display the text you enter until 
  3673. you press the Enter key (hard return). VisualAge for Basic scrolls the viewing 
  3674. window when you enter code that exceeds the width of the code area window. 
  3675.  
  3676. If you need to break the logical line into one or more physical lines, you must 
  3677. join the lines with the continuation character (_). A continuation character is 
  3678. similar to a soft return in a word processor. The following example shows how 
  3679. to break the logical line of a Declare function: 
  3680.  
  3681. Declare Function GetWindowsDirectory Lib "Kernel" (ByVal WDir$,_
  3682. ByVal Size%) As String
  3683.  
  3684.  
  3685. 笊絶武笊 10.7.2. Using Two Edit Panes 笊絶武笊
  3686.  
  3687. The VisualAge for Basic Code Editor allows you to split the code area into two 
  3688. editing panels. Each panel can be used to edit separate sections of the same 
  3689. code module, or two different code modules at the same time. 
  3690.  
  3691. Using two editing panes limits the amount of scrolling back and forth within 
  3692. the same code module. Each pane scrolls separately, both horizontally and 
  3693. vertically, making it easy to compare different code segments. You can also 
  3694. cut, copy, or paste code from one pane to another. 
  3695.  
  3696. To quickly move or copy text between procedures and code modules, split the 
  3697. code area into two panes. 
  3698.  
  3699. To split the Code Editor into two panes: 
  3700.  
  3701.    1. Select the sash with your mouse pointer. The cursor changes shape 
  3702.       indicating the sash can be moved.
  3703.  
  3704.    2. Drag the sash downward to size the two editing panes. The code area 
  3705.       splits to show two edit panes.
  3706.  
  3707.  
  3708.  As you switch between the panes, the Navigation area displays the 
  3709.  corresponding module, object, and procedure. 
  3710.  
  3711.  
  3712. 笊絶武笊 10.7.3. Using the Navigation Area with Two Edit Panes 笊絶武笊
  3713.  
  3714. The pane containing the cursor is the active pane. Several Code Editor 
  3715. operations apply only to the active editing pane. For example, to select a new 
  3716. code module to edit, the active edit pane (with the cursor) displays the new 
  3717. module. To choose which of the two panes displays the module you want to edit, 
  3718. click on the desired pane. 
  3719.  
  3720.  
  3721. 笊絶武笊 10.8. Editing Code 笊絶武笊
  3722.  
  3723. The code area provides you with editing operations to cut, copy, and paste 
  3724. text. You can select text with the mouse or by using keyboard commands. When 
  3725. you move the mouse into the code area, as with any text field, the mouse 
  3726. pointer changes from its normal pointer ( ) to a text pointer called the I-beam 
  3727. pointer (). 
  3728.  
  3729. The following table describes the editing operations available in the Code 
  3730. Editor. 
  3731.  
  3732. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  3733. 笏5o:                                     笏o This:                                笏
  3734. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3735. 笏nter code                              笏4elect the code area and type.          笏
  3736. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3737. 笏orrect mistakes as you type            笏6se the Backspace key.                  笏
  3738. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3739. 笏elete selected text                    笏6se the Delete key or choose Edit=>     笏
  3740. 笏                                        笏elete.  The text is deleted without    笏
  3741. 笏                                        笏Ceing saved in the clipboard.           笏
  3742. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3743. 笏4elect a word                           笏ouble-click. or Hold down the Shift key笏
  3744. 笏                                        笏Xhile pressing the right or left arrow  笏
  3745. 笏                                        笏Ley to extend the selection. If you     笏
  3746. 笏                                        笏Ttart typing while text is selected, the笏
  3747. 笏                                        笏Telected text is replaced.              笏
  3748. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3749. 笏4elect a line                           笏5riple-click. or Hold down the Shift key笏
  3750. 笏                                        笏Xhile pressing the up or down arrow key 笏
  3751. 笏                                        笏Uo extend selection.                    笏
  3752. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3753. 笏4elect a large section of text          笏rag the text pointer over the text you 笏
  3754. 笏                                        笏Xant to edit from the beginning to the  笏
  3755. 笏                                        笏Fnd of the text range.  or Hold down the笏
  3756. 笏                                        笏4hift key while pressing the up or down 笏
  3757. 笏                                        笏Brrow key, then mark the lines you want 笏
  3758. 笏                                        笏Uo edit.                                笏
  3759. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3760. 笏hange the text insertion mode          笏6se the Insert key. The Insert key works笏
  3761. 笏                                        笏Bs a toggle, enabling you to switch     笏
  3762. 笏                                        笏Cetween insert and overwrite text       笏
  3763. 笏                                        笏Fditing modes. The Code Editor status   笏
  3764. 笏                                        笏Brea displays a confirmation of the     笏
  3765. 笏                                        笏Durrent editing mode: Insert mode is    笏
  3766. 笏                                        笏Jndicated by a bold INS. Overwrite mode 笏
  3767. 笏                                        笏Js indicated by a grayed-out INS.       笏
  3768. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3769. 笏avigate through lines of text          笏6se the up, down, left, and right cursor笏
  3770. 笏                                        笏Leys, or use the code area scroll bars. 笏
  3771. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3772. 笏ut text                                笏hoose Edit=> Cut, click on the Cut icon笏
  3773. 笏                                        笏, or use the Ctrl+X keyboard shortcut.  笏
  3774. 笏                                        笏ou can cut, copy, and paste text       笏
  3775. 笏                                        笏Cetween the two text panes in the Code  笏
  3776. 笏                                        笏ditor.                                 笏
  3777. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3778. 笏opy text                               笏hoose Edit=> Copy, click on the Copy   笏
  3779. 笏                                        笏Jcon, .or use the Ctrl+C keyboard       笏
  3780. 笏                                        笏Thortcut.                               笏
  3781. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3782. 笏1aste text                              笏hoose Edit=> Paste, click on the Paste 笏
  3783. 笏                                        笏Jcon,. or use the Ctrl+V keyboard       笏
  3784. 笏                                        笏Thortcut.                               笏
  3785. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  3786.  
  3787. Tip:  You can access help on VisualAge for Basic syntax while working in the 
  3788. Code Editor. Select a property, event, method, or keyword in the code area and 
  3789. press the F1 key. The F1 key is also available for each event in the navigation 
  3790. area. 
  3791.  
  3792.  
  3793. 笊絶武笊 10.8.1. Undoing Changes in the Code Area 笊絶武笊
  3794.  
  3795. Most changes that affect the objects that you build are reversible. You can 
  3796. undo the following operations by choosing Undo from the Edit menu: Insert, 
  3797. Delete, Cut, Copy, Paste, and Replace. 
  3798.  
  3799. Tip:  If a command cannot be undone, VisualAge for Basic warns you before 
  3800. performing the command. 
  3801.  
  3802. You can undo and redo multiple levels of changes that you make to objects while 
  3803. you build interfaces. The system keeps track of the operations you make on 
  3804. objects. The order of operations are undone and redone in the same sequence as 
  3805. they were performed. 
  3806.  
  3807.  
  3808. 笊絶武笊 10.8.1.1. To Undo an Operation 笊絶武笊
  3809.  
  3810.      Choose Edit=> Undo [operation] from the Code Editor. The most recent 
  3811.       operation appears after Undo in the menu. For example, if the most recent 
  3812.       operation you made was resize, the menu item shows Undo Resize. 
  3813.  
  3814.  The object returns to its state prior to the operation. The Edit menu shows 
  3815.  that a Redo operation is available for the operation that was just undone. 
  3816.  
  3817.  When you undo an operation for the first time in a sequence of operations, the 
  3818.  Undo menu item is gray until you redo it. 
  3819.  
  3820.  
  3821. 笊絶武笊 10.8.1.2. To Redo an Operation 笊絶武笊
  3822.  
  3823.      Choose Edit=> Redo [operation] from the Code Editor. 
  3824.  
  3825.  The change appears as it did before you chose Undo. 
  3826.  
  3827.  A redo operation is only available after at least one undo operation. The 
  3828.  first Undo operation makes the Redo menu item gray. Accordingly, when you have 
  3829.  redone the most recent operation in the sequence of operations, the Redo menu 
  3830.  item is gray. As soon as you undo an operation, the Redo menu item is 
  3831.  selectable again, showing Redo [ ]. 
  3832.  
  3833.  
  3834. 笊絶武笊 10.8.2. Loading Code 笊絶武笊
  3835.  
  3836. In addition to writing code from scratch, you can bring existing Basic or text 
  3837. files into the Code Editor. VisualAge for Basic not only loads external code 
  3838. files, it automatically sorts the code in the Code Editor. 
  3839.  
  3840.    1. Select File=>Add File menu item. A file list box appears. 
  3841.  
  3842.    2. Locate the directory of your file, and select the *.bas file. 
  3843.  
  3844.    3. Acknowledge the file selection. The file *.bas loads into your project. 
  3845.       The Project window shows the file name. Select the Module drop-down 
  3846.       selection box to show the code in the Code Editor. 
  3847.  
  3848.  Tip:  Files with a .bas extension load Basic files into your project. Files 
  3849.  with a .i extension load existing forms into your project. 
  3850.  
  3851.  
  3852. 笊絶武笊 10.8.3. Saving Code 笊絶武笊
  3853.  
  3854. The Code Editor provides various file saving options that let you save code in 
  3855. the code area in text format. 
  3856.  
  3857. After you finish coding your project, save it so you can open the file again: 
  3858.  
  3859.    1. Select File=>Save As in the Project window. A file dialog box appears. 
  3860.       Type in your new file name. 
  3861.  
  3862.    2. Type in the file name for form1.i 
  3863.  
  3864.    3. Select the directory where you will store your completed project and save 
  3865.       the .i file. The new .i file name is updated in the Project window list 
  3866.       of files. 
  3867.  
  3868.       You are prompted to save the module. 
  3869.  
  3870.    4. Type in the filename, with a .bas extension, and select OK. The new .bas 
  3871.       file name is updated in the Project window list of modules. 
  3872.  
  3873.       The next prompt is the name of the project. 
  3874.  
  3875.    5. Type in the name of your project.prj and select OK. 
  3876.  
  3877.  
  3878. 笊絶武笊 10.9. Finding and Replacing Text 笊絶武笊
  3879.  
  3880. You use the Find and Replace, operations to: 
  3881.  
  3882.      Search for occurrences of text in the current module or across all 
  3883.       modules in your project. 
  3884.  
  3885.      Search for text forward and backward from the cursor position. 
  3886.  
  3887.      Search for text that matches the uppercase and lowercase letters you type 
  3888.       in the Find field. 
  3889.  
  3890.      Replace specific occurrences of text. 
  3891.  
  3892.  To search for text in your code modules: 
  3893.  
  3894.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  3895.   笏hoose:                                 笏5o:                                     笏
  3896.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3897.   笏dit=> Find                             笏ocate occurrences of the text you      笏
  3898.   笏                                        笏Tpecify.                                笏
  3899.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3900.   笏dit=>Replace                           笏hange text or code fragments throughout笏
  3901.   笏                                        笏Zour modules.                           笏
  3902.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3903.   笏dit=> Find Next, Find Previous after a 笏ocate the next or previous instance of 笏
  3904.   笏ind or Replace command                 笏Pf the text.                            笏
  3905.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  3906.  
  3907.  The Code Editor Edit=>Find menu selection calls the Find window.
  3908.  
  3909.  The Find and Replace windows have similar functions. The following table 
  3910.  describes the Find and Replace windows. 
  3911.  
  3912.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  3913.   笏0peration           笏escription                             笏
  3914.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3915.   笏ind/What           笏4pecifies the text you want to find.    笏
  3916.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3917.   笏8ith                笏4pecifies the text that replaces the    笏
  3918.   笏                    笏ind text.                              笏
  3919.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3920.   笏8hole words         笏inds entire words, not strings embedded笏
  3921.   笏                    笏Jn a larger word.                       笏
  3922.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3923.   笏ase sensitive      笏4earches for text with the same         笏
  3924.   笏                    笏Dapitalization as the text in the Find  笏
  3925.   笏                    笏Gield.                                  笏
  3926.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3927.   笏3egular expression  笏nterprets the specified text as a      笏
  3928.   笏                    笏Qattern (containing alphanumeric or     笏
  3929.   笏                    笏Tpecial characters) to be searched for. 笏
  3930.   笏                    笏f not selected, performs a literal     笏
  3931.   笏                    笏Natch.                                  笏
  3932.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3933.   笏4cope               笏4pecifies whether to search the text in 笏
  3934.   笏                    笏Uhe current module only or all modules. 笏
  3935.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3936.   笏ext                笏4earches for the next occurrence of the 笏
  3937.   笏                    笏Uext you want to find. When the         笏
  3938.   笏                    笏Tpecified text is found, the text is    笏
  3939.   笏                    笏Iighlighted in the code area.           笏
  3940.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3941.   笏1revious            笏inds the previous occurrence of the    笏
  3942.   笏                    笏Uext you want to find. When the         笏
  3943.   笏                    笏Tpecified text is found, the text is    笏
  3944.   笏                    笏Iighlighted in the code area.           笏
  3945.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3946.   笏3eplace             笏3eplaces occurrences of the Find text   笏
  3947.   笏                    笏Xith replacement text you specify.      笏
  3948.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3949.   笏ancel              笏ancels the search and closes the       笏
  3950.   笏                    笏Xindow.                                 笏
  3951.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  3952.  
  3953.  The Code Editor Edit=>Replace menu selection calls the Replace window.
  3954.  
  3955.  If you select Regular expression mode, the Find/What text is interpreted as 
  3956.  such. The syntax for regular expressions is defined as: 
  3957.  
  3958.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  3959.   笏3eg.Exp.Mode Syntax 笏eaning                                                     笏
  3960.   笏0ptions             笏                                                            笏
  3961.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3962.   笏D                   笏5he character c where c is not a special character.         笏
  3963.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3964.   笏c                  笏5he character c where c is any character, except a digit in 笏
  3965.   笏                    笏Uhe range 1-9.                                              笏
  3966.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3967.   笏                   笏5he beginning of the line being compared.                   笏
  3968.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3969.   笏$                   笏5he end of the line being compared.                         笏
  3970.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3971.   笏.                   笏ny character in the input.                                 笏
  3972.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3973.   笏s]                 笏ny character in the set s, where s is a sequence of        笏
  3974.   笏                    笏Dharacters and/or a range of characters, for example, [c-c].笏
  3975.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3976.   笏^s]                笏ny character not in the set s, where s is defined as above.笏
  3977.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3978.   笏S*                  笏ero or more successive occurrences of the regular          笏
  3979.   笏                    笏Fxpression r. The longest leftmost match is chosen.         笏
  3980.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3981.   笏S+                  笏0ne or more successive occurrences of the regular expression笏
  3982.   笏                    笏S. The longest leftmost match is chosen.                    笏
  3983.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3984.   笏S?                  笏ero or one occurrence of the regular expression r.         笏
  3985.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3986.   笏S1r2                笏5he occurrence of regular expression r1 followed by the     笏
  3987.   笏                    笏Pccurrence of regular expression r2. (Concatenation)        笏
  3988.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3989.   笏(r\)               笏5he regular expression r. When \n (where n is a number      笏
  3990.   笏                    笏Hreater than zero) appears in a constructed regular         笏
  3991.   笏                    笏Fxpression, it stands for the regular expression x where x  笏
  3992.   笏                    笏Js the nth regular expression enclosed in \( and \) that    笏
  3993.   笏                    笏Bppeared earlier in the constructed regular expression. For 笏
  3994.   笏                    笏Fxample, \(r\)x\(y\)z\2 is the concatenation of regular     笏
  3995.   笏                    笏Fxpressions rxyzy.                                          笏
  3996.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  3997.   笏(r)                 笏5he nested regular expression r. Nesting is used so that the笏
  3998.   笏                    笏Nultiplier characters (*, + and ?) can be applied to a      笏
  3999.   笏                    笏Domplex regular expression.                                 笏
  4000.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4001.  
  4002.  Tip:  If you are loading projects designed in other applications please note 
  4003.  that the ?, *, and # may have different meanings. 
  4004.  
  4005.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4006.   笏4yntax Option  笏efinition          笏0ther Apps          笏quivalent for Other笏
  4007.   笏               笏                    笏efinition          笏pps                笏
  4008.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4009.   笏?              笏0 or 1 occurence of 笏atches any single  笏.                   笏
  4010.   笏               笏Uhe prevision       笏Dharacter           笏                    笏
  4011.   笏               笏Segular expression. 笏                    笏                    笏
  4012.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4013.   笏*              笏0 or more occurences笏atches any number  笏.*                  笏
  4014.   笏               笏Pf the previous     笏Pf characters       笏                    笏
  4015.   笏               笏Segular expression  笏                    笏                    笏
  4016.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4017.   笏#              笏atch any single    笏atch any single    笏0-9]               笏
  4018.   笏               笏Eigit character.    笏Eigit character.    笏                    笏
  4019.   笏               笏                    笏6sed as a shortcut  笏                    笏
  4020.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4021.  
  4022.  Characters that have special meaning except when they appear within square 
  4023.  brackets ([]) or are preceded by \ are: ., *, [, \. Other special characters, 
  4024.  such as $ have special meaning in more restricted contexts. 
  4025.  
  4026.  The following table describes the meaning of special characters: 
  4027.  
  4028.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4029.   笏4pecial Character   笏eaning                                           笏
  4030.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4031.   笏                   笏 At the beginning of an expression permits a      笏
  4032.   笏                    笏Tuccessful match only immediately after a new     笏
  4033.   笏                    笏Mine.                                             笏
  4034.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4035.   笏$                   笏t the end of an expression requires a trailing   笏
  4036.   笏                    笏Oewline.                                          笏
  4037.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4038.   笏- only when used    笏enotes a range, [c-c], unless it is just after   笏
  4039.   笏Xithin square       笏Uhe open bracket or before the closing bracket,   笏
  4040.   笏Crackets            笏-c] or [c-] in which case it has no special      笏
  4041.   笏                    笏Neaning.                                          笏
  4042.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4043.   笏 only when used    笏eans complement of, if it immediately follows the笏
  4044.   笏Xithin square       笏Ppen bracket (example: [^c]). Elsewhere between   笏
  4045.   笏Crackets            笏Crackets (example: [c^]) it stands for the        笏
  4046.   笏                    笏Prdinary character ^.                             笏
  4047.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4048.   笏 operator          笏5o read as an ordinary character with no special  笏
  4049.   笏                    笏Neaning must be preceded with another \, for      笏
  4050.   笏                    笏Fxample, \\.                                      笏
  4051.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4052.  
  4053.  
  4054. 笊絶武笊 10.10. Code Colorization 笊絶武笊
  4055.  
  4056. To help you indentify the different elements in your source code, VisualAge for 
  4057. Basic displays keywords, user-defined types, and comments in different colors 
  4058. within the code area. 
  4059.  
  4060. As you type in the code area, the Code Editor recognizes an VisualAge for Basic 
  4061. keyword and changes the color or font style for that keyword. By default, 
  4062. VisualAge for Basic colorizes keywords. 
  4063.  
  4064. You can specify a color or font style for variants and user-defined types, 
  4065. making them easy to recognize as you review your code. For example, you can 
  4066. specify the display color for specific data types, such as Currency and Long. 
  4067.  
  4068. Comments are easier to recognize if you set them to a different color or font 
  4069. style. By default, each time you type the comment symbol ('), the font color 
  4070. and style of the comment text, including the comment symbol, changes 
  4071. immediately. 
  4072.  
  4073. See also:  Customizing VisualAge for Basic for complete details on how to set 
  4074. the colors for your code. The default colors VisualAge for Basic uses to 
  4075. colorize keywords and comments depend on the display settings of your 
  4076. environment. 
  4077.  
  4078.  
  4079. 笊絶武笊 10.11. Viewing Code 笊絶武笊
  4080.  
  4081. The Code Editor View menu provides several menu items that make it easy for you 
  4082. to view procedures, locate definitions, and view bookmarks. 
  4083.  
  4084. The Next Procedure and Previous Procedure menu items let you view declarations 
  4085. and procedures. The GoTo Definition menu item locates procedure declarations. 
  4086. The Bookmarks menu item lets you view the sections of your code where you 
  4087. inserted bookmarks. 
  4088.  
  4089.  
  4090. 笊絶武笊 10.11.1. Viewing Procedures 笊絶武笊
  4091.  
  4092. The Code Editor helps you find and view individual procedures. 
  4093.  
  4094. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4095. 笏hoose:                       笏5o:                                               笏
  4096. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4097. 笏ext Procedure and Previous   笏1rocedures appear in alphabetical order in the    笏
  4098. 笏1rocedure                     笏Dode area.  VisualAge for Basic ignores empty     笏
  4099. 笏                              笏Fvent templates .                                 笏
  4100. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4101. 笏7iew=>Next Procedure          笏7iew the next procedure. The next procedure       笏
  4102. 笏                              笏Bppears in the active pane of the code area. Any  笏
  4103. 笏                              笏Domments before the procedure appear at the top of笏
  4104. 笏                              笏Uhe active pane.                                  笏
  4105. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4106. 笏7iew=>Previous Procedure      笏7iew the previous procedure. The previous         笏
  4107. 笏                              笏Qrocedure appears in the active pane of the code  笏
  4108. 笏                              笏Brea. Any comments before the procedure appear at 笏
  4109. 笏                              笏Uhe top of the active pane.                       笏
  4110. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4111.  
  4112.  
  4113. 笊絶武笊 10.11.2. Locating Definitions 笊絶武笊
  4114.  
  4115. To look up procedure definitions quickly, use the Go To Definition menu item in 
  4116. the Code Editor's View menu. For example, the Catalog_Click procedure contains 
  4117. a call to the CardSelector_Click event procedure. 
  4118.  
  4119. To display the CardSelector_Click procedure in the code area: 
  4120.  
  4121.    1. Select CardSelector_Click in the Catalog_Click procedure. 
  4122.  
  4123.    2. Choose View=> Go To Definition or the GoTo button  The code for the 
  4124.       CardSelector_Click procedure appears in the code area. 
  4125.  
  4126.  You can locate variable declarations for variables you reference in your code. 
  4127.  To verify if the variable is an integer or a string: 
  4128.  
  4129.    1. Select the variable in the code area. 
  4130.  
  4131.    2. Choose View=> Go To Definition or click on the GoTo button. 
  4132.  
  4133.  The module containing the variable declaration appears in the Code Editor. 
  4134.  
  4135.  Choosing the Go To Definition menu item causes the interpreter to parse all 
  4136.  source code and display any errors in the bookmark area. 
  4137.  
  4138.  
  4139. 笊絶武笊 10.12. Running Your Application 笊絶武笊
  4140.  
  4141. You can test your project prior to compiling it, to make sure that the 
  4142. application's execution runs as expected. The Run menu commands lets you 
  4143. execute all or part of your project. With the syntax checking function, syntax 
  4144. and run-time errors are detected within your code and you must correct them 
  4145. prior to resuming execution. The ability to test your application and correct 
  4146. run-time and syntax errors reduces the chances of errors appearing after the 
  4147. project is compiled. 
  4148.  
  4149. When you go to test mode, two types of errors could occur-syntax errors and 
  4150. run-time errors. 
  4151.  
  4152. Run-time errors occur after you check your syntax and begin executing your 
  4153. application. Run-time errors are faults in logic (such as division by 0) or 
  4154. user commands that VisualAge for Basic cannot execute. 
  4155.  
  4156. To start execution of your project: 
  4157.  
  4158.      Press the Start/Continue button  on the Project window or the Code 
  4159.       Editor. 
  4160.  
  4161.      Choose Run=>Start/Continue from the menu bar. 
  4162.  
  4163.      On Windows NT and Windows 95: Click on the F5 key 
  4164.  
  4165.      On OS/2: Click on the F7 key 
  4166.  
  4167.  Your project changes from design mode to run mode. The Toolbox, Property 
  4168.  Editor, and Code Editor disappear from your screen. 
  4169.  
  4170.  You can also step through the code, line by line, to test each individual line 
  4171.  of code. Testing of individual lines of code can include or exclude 
  4172.  subroutines. You use the Run=>Step or Run=>Step over commands to test your 
  4173.  project line by line. 
  4174.  
  4175.  You can pause execution of your application by choosing Run=>Break or by 
  4176.  clicking on the Break button 
  4177.  
  4178.  When you pause execution of your project, you can make changes to the code 
  4179.  during run time. When the changes are complete, click on the Start/Continue 
  4180.  button to resume the project's execution. 
  4181.  
  4182.  You can resume a project's execution by either: 
  4183.  
  4184.      Choosing Run=>Start/Continue or clicking on the Start/Continue button. 
  4185.  
  4186.      Choosing Run=>Restart. 
  4187.  
  4188.  The Code Editor also lets you set breakpoints within your project. When 
  4189.  program execution encounters a breakpoint the execution pauses. 
  4190.  
  4191.  See also:  Chapter 7, Testing and Debugging Code, for more information on the 
  4192.  Code Editor's debugging interfaces, including breakpoints. 
  4193.  
  4194.  
  4195. 笊絶武笊 10.13. Using Bookmarks 笊絶武笊
  4196.  
  4197. The Code Editor's Bookmark area lets you set bookmarks within your project 
  4198. code. A bookmark is a placeholder in your code that lets you quickly locate and 
  4199. view marked sections. Bookmarks are useful when the size of your code modules 
  4200. increase and you need to refer back to certain code sequences. When VisualAge 
  4201. for Basic detects errors in your code, the bookmark area automatically lists 
  4202. each error. 
  4203.  
  4204. To display the bookmark area: 257693'. 
  4205.  
  4206.      Click on the display bookmark area toggle , or 
  4207.  
  4208.      Choose View=> Bookmarks from the Code Editor menu bar. 
  4209.  
  4210.  You add a bookmark by clicking on the Toggle Bookmark button  As you add 
  4211.  bookmarks, the bookmark area displays. 
  4212.  
  4213.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4214.   笏uttons             笏escription                                       笏
  4215.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4216.   笏elete Marker       笏eletes the selected bookmark.                    笏
  4217.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4218.   笏o To               笏ocates a bookmark and updates the view of the    笏
  4219.   笏                    笏Dode area with the corresponding line of code.    笏
  4220.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4221.   笏lear Markers       笏lears all bookmarks in the code area. Errors     笏
  4222.   笏                    笏Misted in the bookmark area are removed only when 笏
  4223.   笏                    笏Uhe error is fixed.                               笏
  4224.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4225.   笏ookmark icon or    笏isplays the corresponding line of code in the    笏
  4226.   笏rror icon          笏Dode area when you click on the icon.             笏
  4227.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4228.   笏ocation            笏ndicates the location of the bookmark within your笏
  4229.   笏                    笏Qroject code.                                     笏
  4230.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4231.   笏4tatement/Error     笏ndicates the line of code that contains the      笏
  4232.   笏                    笏Cookmark or a description of the error detected by笏
  4233.   笏                    笏7isualAge for Basic .                             笏
  4234.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4235.  
  4236.  To set a bookmark: 
  4237.  
  4238.    1. Position the cursor next to the line of code you want to mark. 
  4239.  
  4240.    2. Select Edit=> Add Bookmark. 
  4241.  
  4242.  You can also click on the Toggle Bookmark button.  A bookmark icon  appears in 
  4243.  the left margin of the code line and an entry is added to the bookmark list. 
  4244.  
  4245.  To locate bookmarks in your code modules, select the bookmark you want from 
  4246.  the bookmark area list and click on the Go To button. The code area updates to 
  4247.  display the module containing the bookmark. 
  4248.  
  4249.  Tip:  You can double-click anywhere on a bookmark line to go directly to that 
  4250.  bookmark's location in your code. To delete bookmarks, select the bookmark you 
  4251.  want to remove and click on the Delete Marker button. To remove all bookmarks 
  4252.  at once, click on the Clear Markers push button. 
  4253.  
  4254.  The bookmark area also serves as an error directory. Any errors in your code 
  4255.  have a syntax error icon  in the code area and a list of the errors appears in 
  4256.  the Bookmark. Syntax errors are spelling mistakes in your source code or 
  4257.  improperly used expressions. You locate syntax errors by selecting the Check 
  4258.  Syntax button 
  4259.  
  4260.  See also:  Chapter 7, Testing and Debugging Code to learn more about the 
  4261.  bookmark area and handling errors. Errors listed in the bookmark area can not 
  4262.  be removed using the Delete Marker or Clear Markers buttons. You must correct 
  4263.  any errors and perform a syntax check to remove the errors. 
  4264.  
  4265.  
  4266. 笊絶武笊 10.14. Printing from the Code Editor 笊絶武笊
  4267.  
  4268. You can print your code using your operating system's print features. Use the 
  4269. File=>Print menu command to activate the Print dialog box. The option buttons 
  4270. let you select the current module, current object, current event, method or all 
  4271. modules defined in the application. 
  4272.  
  4273. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4274. 笏4election           笏escription                             笏
  4275. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4276. 笏odule              笏1rints the text of code of the current  笏
  4277. 笏                    笏Nodule in the Code Editor.              笏
  4278. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4279. 笏0bject              笏1rints the text or code of the current  笏
  4280. 笏                    笏Pbject in the Code Editor.              笏
  4281. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4282. 笏vent method        笏1rints the code of the current event or 笏
  4283. 笏                    笏Nethod in the Code Editor.              笏
  4284. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4285. 笏ll                 笏1rints all module text or all code in   笏
  4286. 笏                    笏Uhe application.                        笏
  4287. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4288. 笏1rinter...          笏isplays the Printer Select dialog box. 笏
  4289. 笏                    笏isplays a list of installed printers.  笏
  4290. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4291. Tip:  The print feature uses the current operating system's printer drivers. 
  4292.  
  4293.  
  4294. 笊絶武笊 11. Chapter 7     Testing and Debugging Code 笊絶武笊
  4295.  
  4296. Debugging refers to the act of cleaning up of your program's source code. 
  4297. Programming bugs are not unlike insects: they are small, usually overlooked, 
  4298. and can be highly annoying-especially when they are recurring. VisualAge for 
  4299. Basic has several interfaces and tools that can help you exterminate the bugs 
  4300. within your application. 
  4301.  
  4302. Bugs can consist of simple syntax errors or more complex run-time errors. 
  4303. Syntax errors are usually due to spelling mistakes or improperly-used language 
  4304. elements. Run-time errors contain correct syntax, but cause your VisualAge for 
  4305. Basic application to act in unexpected ways. VisualAge for Basic does not allow 
  4306. you to test your application or create an executable file while syntax errors 
  4307. exist within the code. Syntax errors are fairly easy to correct-run-time errors 
  4308. require a deeper analysis and evaluation of the expressions within your project 
  4309. code. 
  4310.  
  4311. In Chapter 6, Using the Code Editor, you learned about the tools you commonly 
  4312. use when creating and editing code. In this chapter, you will learn about the 
  4313. Code Editor's extensive debugging facilities. When debugging your application, 
  4314. you primarily use the Breakpoints window and the Inspector. These interfaces 
  4315. let you set conditions to pause execution of your application and evaluate how 
  4316. it is treating certain watch expressions. 
  4317.  
  4318.  
  4319. 笊絶武笊 11.1. Understanding Program Modes 笊絶武笊
  4320.  
  4321. VisualAge for Basic can operate in three modes: design, run, or break mode. In 
  4322. design mode, you create interfaces, set properties, and add behavior. When you 
  4323. test your applications, VisualAge for Basic is in run mode. When there are 
  4324. errors or if you suspend testing of your program, VisualAge for Basic is in 
  4325. break mode. 
  4326.  
  4327. The Project window title bar indicates the current mode by displaying [Design], 
  4328. [Test], or [Test-Break] in the title bar. 
  4329.  
  4330. In the different program modes, certain Run menu items are enabled while others 
  4331. are disabled. The following table lists the Run menu items that are enabled and 
  4332. disabled for each mode. The corresponding tool bar buttons are also enabled or 
  4333. disabled. 
  4334.  
  4335. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4336. 笏ode                笏nabled Menu Items            笏isabled Menu Items           笏
  4337. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4338. 笏esign[Design]      笏4tart/Continue   Step, Step   笏reak, End, Restart   Set Next笏
  4339. 笏                    笏0ver (Code Editor only)       笏4tatement (Code Editor only)  笏
  4340. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4341. 笏3un[Test]           笏reak, End                    笏4tart/Continue, RestartStep,  笏
  4342. 笏                    笏                              笏4tep Over, Set Next Statement 笏
  4343. 笏                    笏                              笏(Code Editor only)            笏
  4344. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  4345. 笏reak[Test-Break]   笏4tart/Continue, End,          笏reak                         笏
  4346. 笏                    笏3estartStep, Step Over (Code  笏                              笏
  4347. 笏                    笏ditor only)                  笏                              笏
  4348. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  4349.  
  4350.  
  4351. 笊絶武笊 11.2. Checking Syntax 笊絶武笊
  4352.  
  4353. When you enter code in the Code Editor, mistakes sometimes find their way into 
  4354. the code. The mistakes can range from simple typing errors to misused language 
  4355. elements. These mistakes are called syntax errors. VisualAge for Basic 
  4356. interprets your code, locates syntax errors and lists them in the bookmark 
  4357. area. VisualAge for Basic also marks syntax errors in the code area. You can 
  4358. check your application's syntax in one of two ways: 
  4359.  
  4360.      Initiate a manual syntax check. 
  4361.  
  4362.      Have VisualAge for Basic check the syntax for you before testing your 
  4363.       application. 
  4364.  
  4365.  Both syntax-checking methods go through your code, line by line, and list the 
  4366.  syntax errors one at a time. 
  4367.  
  4368.  Important:  Errors stop the syntax checking process. To continue after 
  4369.  correcting an error, re-initiate the syntax check. 
  4370.  
  4371.  
  4372. 笊絶武笊 11.2.1. Manual Syntax Checking 笊絶武笊
  4373.  
  4374. When VisualAge for Basic is in design mode, you can perform a manual syntax 
  4375. check whenever you want. You can begin a syntax check in one of the following 
  4376. ways: 
  4377.  
  4378.      Choose the Debug=> Check Syntax command from the menu bar. 
  4379.  
  4380.      Click on the Check Syntax button on the tool bar. 
  4381.  
  4382.  Tip:  When saving your project, you might want to do a manual syntax 
  4383.  check-this prevents a lengthy, error-by-error check prior to testing the 
  4384.  application. After starting a manual syntax check, the Code Editor opens the 
  4385.  bookmark area to list all the syntax errors. 
  4386.  
  4387.  The code area displays the first syntax error from the bookmark area list. The 
  4388.  syntax error icon  identifies the line of code containing the error.
  4389.  
  4390.  If VisualAge for Basic detects more than one error in your code, the bookmark 
  4391.  area lists all the errors. After correcting a syntax error, select the next 
  4392.  error in the bookmark area and click on the Go To button; the code area 
  4393.  displays the selected procedure. You might have to scroll through the bookmark 
  4394.  area list to locate the next syntax error. You can also double click on an 
  4395.  error listed in the bookmark area to update the display of the code area. 
  4396.  
  4397.  You can update the error list in the bookmark area by manually checking the 
  4398.  syntax again. Corrected errors are no longer in the error list. 
  4399.  
  4400.  
  4401. 笊絶武笊 11.2.2. Syntax Checking in Run Mode 笊絶武笊
  4402.  
  4403. When you run your application in test mode, VisualAge for Basic automatically 
  4404. checks the syntax for errors. VisualAge for Basic prevents testing until you 
  4405. correct all syntax errors in your code. 
  4406.  
  4407. You correct errors and update the error list in the bookmark area in the same 
  4408. way you perform a manual syntax check. 
  4409.  
  4410. Important:  When you modify a procedure and verify its syntax, VisualAge for 
  4411. Basic automatically verifies the syntax of all dependant procedures. 
  4412.  
  4413.  
  4414. 笊絶武笊 11.2.3. Correcting Syntax Errors 笊絶武笊
  4415.  
  4416. After correcting syntax errors, you can either resume entering code, or you can 
  4417. begin (or resume) running your application in test mode. If there are no more 
  4418. errors, VisualAge for Basic closes the bookmark area and proceeds with the 
  4419. execution of your application in test mode. 
  4420.  
  4421. Tip:  You should save your project after you correct the syntax errors-this 
  4422. prevents you from having to correct the same mistake twice. The Code Editor's 
  4423. status area has an icon that toggles between two states to act as visual 
  4424. confirmation of whether or not the syntax has been checked. When a syntax check 
  4425. does not locate any errors, VisualAge for Basic displays the Verified Syntax 
  4426. icon 
  4427.  
  4428. As you enter new code, or if there are syntax errors, the Verified Syntax icon 
  4429. changes to the Unverified/Error icon. 
  4430.  
  4431. VisualAge for Basic recognizes procedures that depend on others. If you modify 
  4432. a procedure that references another, the Unverified/Error icon displays for the 
  4433. current procedure and all of its dependant procedures. 
  4434.  
  4435.  
  4436. 笊絶武笊 11.2.4. What is a Run-Time Error? 笊絶武笊
  4437.  
  4438. Run-time errors occur after you check your syntax and begin executing your 
  4439. application. Run-time errors are faults in logic (such as division by 0) or 
  4440. user commands that VisualAge for Basic cannot execute. 
  4441.  
  4442. When you test your VisualAge for Basic project, run-time errors cause the 
  4443. testing to pause. A run-time error dialog appears on your screen and the 
  4444. Run-time Error icon identifies the line of code containing the error. 
  4445.  
  4446. When a run-time error is found, VisualAge for Basic suspends execution by 
  4447. entering break mode until you correct the run-time error. You correct errors 
  4448. and update the error list in the bookmark area in the same way you perform a 
  4449. manual syntax check. 
  4450.  
  4451. Chapter 16, Handling Errors for more information on run-time errors and how to 
  4452. deal with them. 
  4453.  
  4454.  
  4455. 笊絶武笊 11.3. Testing the Application Behavior 笊絶武笊
  4456.  
  4457. After you have corrected all the syntax errors, test the appearance and 
  4458. behavior of your application's user interface. Verify that the application 
  4459. responds properly to mouse clicks and key presses and that the application 
  4460. updates data entered in text fields appropriately. As you test your 
  4461. application, you can pause execution, as well as specify statements you want to 
  4462. execute or bypass. When you test your program's execution, the system is in run 
  4463. mode. 
  4464.  
  4465.  
  4466. 笊絶武笊 11.3.1. Running Your Application 笊絶武笊
  4467.  
  4468. In previous chapters, you learned how to design your application. You test your 
  4469. application before creating an executable file to ensure everything works the 
  4470. way you expect. In run mode, your application functions exactly as it does when 
  4471. you create an executable file. Run mode saves you time because it lets you test 
  4472. your application and correct errors without having to create an executable file 
  4473. each time. 
  4474.  
  4475. Testing your code requires attention to detail; you must ensure that each 
  4476. command executes correctly. Some commands execute too quickly for you to notice 
  4477. them when the application is running at normal speed. In order to suspend the 
  4478. execution of your project, you can insert special markers, watchpoints, that 
  4479. allow you to evaluate the execution of specific instructions or the value of 
  4480. specified expressions. 
  4481.  
  4482. You use breakpoints when you want the application to stop execution, allowing 
  4483. for a more in- depth analysis of how a line of code executes. VisualAge for 
  4484. Basic lets you choose whether you use stop statements, or to suspend testing 
  4485. without modifying your project's source code (using breakpoints). 
  4486.  
  4487. Important:  If you use stop statements to suspend testing of your application, 
  4488. use bookmarks to locate and remove the statements before creating an 
  4489. executable. Removing these stop statements prevents your application from 
  4490. stopping when the user least expects it. 
  4491.  
  4492. See also:  VisualAge for Basic Language Reference Online Help, Stop Statement 
  4493. and Chapter 6, Using the Code Editor, for more information on using bookmarks. 
  4494.  
  4495.  
  4496. 笊絶武笊 11.3.1.1. Starting Execution 笊絶武笊
  4497.  
  4498. You start your application, switching from design mode to run mode, in one of 
  4499. the following ways: 
  4500.  
  4501.      Choose Run=>Start/Continue from the menu bar. 
  4502.  
  4503.      Click the Start/Continue  button on the tool bar. 
  4504.  
  4505.      On Windows NT and Windows 95: Press the keyboard shortcut: F5. 
  4506.  
  4507.      On OS/2: Press the keyboard shortcut: F7. 
  4508.  
  4509.  VisualAge for Basic checks for syntax errors, then begins execution of your 
  4510.  application if there are no errors. You work with your application as would an 
  4511.  end-user, making sure that your VisualAge for Basic application responds to 
  4512.  input as expected. 
  4513.  
  4514.  
  4515. 笊絶武笊 11.3.2. Detecting Problems 笊絶武笊
  4516.  
  4517. As you detect problems in the response or the behavior of your application, you 
  4518. can pause execution and put the system in break mode. VisualAge for Basic goes 
  4519. into break mode automatically when it detects  run-time errors. In break mode, 
  4520. you can modify your application code, evaluate watch expressions, and perform 
  4521. other debugging operations. 
  4522.  
  4523.  
  4524. 笊絶武笊 11.3.3. Breaking Execution 笊絶武笊
  4525.  
  4526. You can force your application to pause execution and enter break mode by 
  4527. placing breakpoints within your code. You can also include Stop statements, 
  4528. press the Ctrl+Break key, choose Run=>Break, or you can click on the Break 
  4529. button  to put your application in break mode. With the program in break mode, 
  4530. you can inspect the current state of the program. 
  4531.  
  4532. When the interpreter encounters a run-time error, a breakpoint, or a Stop 
  4533. statement in your application, execution is suspended. You can break execution 
  4534. manually in one of the following ways: 
  4535.  
  4536.      Choose the Run=>Break menu command. 
  4537.  
  4538.      Click the Break  button. 
  4539.  
  4540.  Using a Stop statement is an alternative to setting a breakpoint; however, it 
  4541.  is only recommended for use in debugging. Unlike breakpoints, Stop statements 
  4542.  remain in your programs unless you remove them manually. Remove all Stop 
  4543.  statements prior to generating the final version of your application. 
  4544.  
  4545.  
  4546. 笊絶武笊 11.4. Using Breakpoints 笊絶武笊
  4547.  
  4548. Breakpoints are markers you assign to a line of code to pause execution of your 
  4549. application for an analysis of code handling. Your application pauses after 
  4550. executing the line of code that precedes the line containing the breakpoint. 
  4551. When execution pauses, the Code Editor displays and identifies the line of code 
  4552. with a pointing hand. 
  4553.  
  4554. When your project reaches a line containing a breakpoint, it stops and enters 
  4555. break mode. You can set and inspect actions that respond to a breakpoint in the 
  4556. Immediate window of the Inspector. You can then step through the line of code 
  4557. to observe the results more closely, verify the value of watches you have set, 
  4558. or change the values of variables using the Quick Watch window. 
  4559.  
  4560. When your application pauses, you can verify the state of your code and test 
  4561. the value of expressions within your code. You can then step through the code 
  4562. line by line, or you can resume execution by clicking on the Start/Continue 
  4563. button. The application resumes normal execution until it encounters the next 
  4564. breakpoint. 
  4565.  
  4566. Important:  Breakpoints and watch expressions set in your code are not saved 
  4567. with your project. They also are not included in the generated applications. 
  4568.  
  4569.  
  4570. 笊絶武笊 11.4.1. Adding Breakpoints 笊絶武笊
  4571.  
  4572. Breakpoints can be set either in design or break mode. In design mode, you can 
  4573. set breakpoints on any line of your code module. If you set a breakpoint that 
  4574. cannot pause execution, VisualAge for Basic informs you before executing your 
  4575. application in test mode. When you set breakpoints in break mode, only lines 
  4576. that contain executable code accept a new breakpoint. 
  4577.  
  4578. Important:  VisualAge for Basic disables any breakpoints set on lines that do 
  4579. not contain executable code, such as comment lines, variable declarations, and 
  4580. blank lines. 
  4581.  
  4582. To add a breakpoint to your project code and display the Breakpoints window: 
  4583.  
  4584.    1. Select the code module and procedure. 
  4585.  
  4586.    2. Place the cursor at the line of code. 
  4587.  
  4588.    3. Choose Debug=> Add Breakpoints from the menu bar. 
  4589.  
  4590.  The next line of code displays the breakpoint  and the Breakpoints window 
  4591.  displays, highlighting the newly set breakpoint. 
  4592.  
  4593.  To add a breakpoint to your project code without displaying the Breakpoints 
  4594.  window: 
  4595.  
  4596.    1. Select the code module and procedure. 
  4597.  
  4598.    2. Place the cursor at the line of code. 
  4599.  
  4600.    3. Choose Debug=> Toggle Breakpoint or click on the Toggle Breakpoint 
  4601.       button on the toolbar. The code displays a new breakpoint  without 
  4602.       opening the Breakpoints window.
  4603.  
  4604.  Tip:  You can also toggle a breakpoint on or off in the Code Editor by 
  4605.  double-clicking in the margin of the line of code. 
  4606.  
  4607.  
  4608. 笊絶武笊 11.4.2. Viewing Breakpoints 笊絶武笊
  4609.  
  4610. You use the Breakpoints window to locate and monitor the breakpoints you set 
  4611. within your project code. The Breakpoints Window lets you select, enable or 
  4612. disable breakpoints, as well as delete one or all your breakpoints.
  4613.  
  4614. The Breakpoints window lists all breakpoints set in your project. You can 
  4615. resize the window to display more breakpoints, or you can scroll through the 
  4616. list using the scroll bars, the Page Up and Page Down keys, or the up and down 
  4617. arrow keys. 
  4618.  
  4619. The Location field displays the location of a breakpoint in the source code. A 
  4620. breakpoint's location corresponds to the settings in the line (Ln), procedure, 
  4621. and module where the breakpoint is set. 
  4622.  
  4623. See also: Chapter 6, Using the Code Editor, for more information on the 
  4624. Navigation area. You display the Breakpoints window in one of the following 
  4625. ways: 
  4626.  
  4627.      Choose Debug=> Edit Breakpoints from the menu bar. 
  4628.  
  4629.      Click on the Edit Breakpoints button  on the toolbar. 
  4630.  
  4631.  
  4632. 笊絶武笊 11.4.3. Enabling and Disabling Breakpoints 笊絶武笊
  4633.  
  4634. You can toggle a breakpoint on or off while maintaining the breakpoint's 
  4635. location in your project code. When you disable a breakpoint, execution of your 
  4636. program ignores the disabled breakpoint. When you disable a breakpoint, the 
  4637. Enable/Disable breakpoint marker  in the Breakpoints window toggles from red to 
  4638. gray. The breakpoint marker remains as part of the code module in your source 
  4639. code. 
  4640.  
  4641. To toggle a breakpoint on or off: 
  4642.  
  4643.    1. Open the Breakpoints window. 
  4644.  
  4645.    2. Select the breakpoint you want to toggle on or off. 
  4646.  
  4647.    3. Click on the Enable/Disable breakpoint marker When the marker turns gray, 
  4648.       the breakpoint is disabled. 
  4649.  
  4650.  
  4651. 笊絶武笊 11.4.4. Deleting Breakpoints 笊絶武笊
  4652.  
  4653. You should delete breakpoints when you no longer need them-this prevents 
  4654. unwanted breaks in testing execution during later stages of application 
  4655. development. You can delete breakpoints one at a time or you can delete all the 
  4656. breakpoints listed in the Breakpoints Window. 
  4657.  
  4658.  To delete a single breakpoint using the Code Editor: 
  4659.  
  4660.    1. Locate the breakpoint you want to delete. 
  4661.  
  4662.    2. Place the cursor on the line containing the breakpoint. 
  4663.  
  4664.    3. Choose Debug=> Toggle Breakpoint from the menu bar or click on the Toggle 
  4665.       Breakpoint button. The code area removes the breakpoint marker and the 
  4666.       Breakpoints Window removes the reference to the breakpoint. 
  4667.  
  4668.  To delete a single breakpoint using the Breakpoints Window: 
  4669.  
  4670.    1. Open the Breakpoints Window. 
  4671.  
  4672.    2. Select the breakpoint you want to delete. 
  4673.  
  4674.    3. Click on the Delete button. The breakpoint is removed from both the 
  4675.       Breakpoints window and the Code Editor. The list of breakpoints in the 
  4676.       Breakpoints window updates automatically. 
  4677.  
  4678.   To delete all breakpoints from your VisualAge for Basic project: 
  4679.  
  4680.    1. Open the Breakpoints Window. 
  4681.  
  4682.    2. Click on the Delete All button. This removes all breakpoints in your 
  4683.       project from both the Breakpoints window and the Code Editor. The 
  4684.       Breakpoints window remains open, without any breakpoints.
  4685.  
  4686.  
  4687. 笊絶武笊 11.5. Editing in Break Mode 笊絶武笊
  4688.  
  4689. VisualAge for Basic lets you make changes to your project code when the 
  4690. application is in break mode. The ability to edit in break mode lets you 
  4691. correct errors or change your source code without restarting program execution. 
  4692.  
  4693. Some edits made in break mode, such as changing variables, require that you 
  4694. restart program execution. VisualAge for Basic displays a message informing you 
  4695. to restart your application. When you restart, the source code initializes and 
  4696. runs from the beginning. When you continue program execution, VisualAge for 
  4697. Basic checks the syntax of the new text and reports any syntax errors to the 
  4698. bookmark area. 
  4699.  
  4700. Any changes you make to your source code in break mode can be undone when you 
  4701. end program execution. The undo buffer retains a list of the operations you 
  4702. perform in break mode and lets you undo them when your application returns to 
  4703. design mode. 
  4704.  
  4705. Important:  When you edit your source code in break mode, VisualAge for Basic 
  4706. clears previous operations from the undo buffer (made in design mode). The undo 
  4707. buffer only retains operations you perform in the current program mode (design 
  4708. or run). 
  4709.  
  4710.  
  4711. 笊絶武笊 11.5.1. Resuming Program Execution 笊絶武笊
  4712.  
  4713. You can resume execution of your application from the break position (without 
  4714. re-executing the code at the beginning of the module) by choosing 
  4715. Run=>Start/Continue from the menu bar or by clicking on the Start/Continue 
  4716. button. If you want to resume program execution from the first line of code, 
  4717. choose Run=>Restart to reinitialize your application. 
  4718.  
  4719.  
  4720. 笊絶武笊 11.5.2. Ending Program Execution 笊絶武笊
  4721.  
  4722. You end program execution by choosing Run=>End, or by clicking on the End 
  4723. button.  When you end execution, VisualAge for Basic returns to design mode, 
  4724. enabling design time menu items and tool bar icons. 
  4725.  
  4726.  
  4727. 笊絶武笊 11.6. Controlling Program Execution 笊絶武笊
  4728.  
  4729. You run your application to test it and to find problematic sections. When an 
  4730. error stops the execution of your application, or you pause the program because 
  4731. it does not respond as you expect, you can apply several techniques to resolve 
  4732. problems in your code. 
  4733.  
  4734. Although there is no precise sequence of steps in the debugging process, you 
  4735. need to control the execution of your program. In doing so, you can test 
  4736. individual lines of new or edited code, and walk through your code. Part of 
  4737. walking through your code includes testing the integrity of each line of code. 
  4738.  
  4739.  
  4740. 笊絶武笊 11.6.1. Using Step and Step Over 笊絶武笊
  4741.  
  4742. While your program runs, you can watch errors as they occur. You can step 
  4743. through (execute one line of source code at a time) or step over (skip the next 
  4744. procedure) lines of source code. 
  4745.  
  4746. The Code Editor's Run=>Step command executes a single line of source code and 
  4747. updates the current execution line automatically. 
  4748.  
  4749. The Run=>Step Over menu command steps over a procedure call. This means it 
  4750. treats sub and function procedures as single executable statements, while it 
  4751. executes one statement at a time and then pauses. You run the next statement 
  4752. exclusively by choosing the Step Over menu command. 
  4753.  
  4754. To step through code line by line: 
  4755.  
  4756.    1. In the Code Editor, select the line of code to begin execution. 
  4757.  
  4758.    2. Choose Run=>Step from the menu bar. 
  4759.  You can also click on the Step button. 
  4760.  
  4761.  The line of code executes and the pointing hand icon  advances one line. If 
  4762.  the next line is a subroutine call, it also executes. The call stack in the 
  4763.  Inspector displays the current subroutine. 
  4764.  
  4765.  To resume normal execution, choose Run=>Start/Continue or click on the 
  4766.  Start/Continue button. 
  4767.  
  4768.  To step through code, treating subroutines as a single line: 
  4769.  
  4770.    1. In the Code Editor, select the line of code to begin execution. 
  4771.  
  4772.    2. Choose Run=>Step Over from the menu bar. You can also click on the Step 
  4773.       Over button. 
  4774.       The next line of code executes, and the current-line icon advances one 
  4775.       line. If the next line is a subroutine call, VisualAge for Basic treats 
  4776.       it as a single statement. The subroutine executes, but you do not step 
  4777.       through its code line by line. The call stack in the Inspector displays 
  4778.       the line of code after the subroutine call. 
  4779.  
  4780.    3. To resume normal execution, choose Run=>Start/Continue or click on the 
  4781.       Start/Continue button. 
  4782.  
  4783.  
  4784. 笊絶武笊 11.6.2. Setting the Next Statement 笊絶武笊
  4785.  
  4786. Sometimes when testing or debugging code, you might want to start your program, 
  4787. then jump immediately to a specific section of code and execute it. In step 
  4788. mode, you can bypass statements without executing them, by choosing Run=> Set 
  4789. Next Statement command from the Code Editor's menu bar. This command lets you 
  4790. control the execution order of the lines of code in the same procedure. 
  4791.  
  4792. To bypass statements without executing them: 
  4793.  
  4794.    1. Choose Run=>Step from the menu bar. You can also click on the Step 
  4795.       button. 
  4796.  
  4797.    2. In the Code Editor, position the cursor in the line of code you want to 
  4798.       execute next. VisualAge for Basic always executes an entire line of code. 
  4799.  
  4800.    3. Choose Run=>Set next statement from the Code Editor. If the statement you 
  4801.       selected is in a different subroutine, the call stack (in the Inspector) 
  4802.       reflects the result. 
  4803.  
  4804.    4. Choose Run=>Start/Continue or click on the Start/Continue button  on the 
  4805.       toolbar. The program continues, beginning with the line of code you 
  4806.       selected. 
  4807.  
  4808.  
  4809. 笊絶武笊 11.7. Using Watch Expressions 笊絶武笊
  4810.  
  4811. You use watch expressions to determine the value of selected expressions in 
  4812. your source code. Watch expressions let you monitor how your VisualAge for 
  4813. Basic application handles certain expressions as execution unfolds. You can 
  4814. also evaluate how your application handles user input. 
  4815.  
  4816. Watch expressions are evaluated only when your application is in break mode. 
  4817. You can have expressions evaluated instantly or over a longer period of time. 
  4818. The Quick Watch window is a fast way of viewing an expression's value. The 
  4819. Inspector lets you track the changing values of several expressions over time. 
  4820.  
  4821. Important:  Watch expressions and breakpoints set in your code are not saved 
  4822. with your project. They also are not included in the generated applications. 
  4823. You use the Inspector window and the Quick Watch window to analyze errors and 
  4824. their causes by evaluating how watch expressions are treated. The watch 
  4825. expressions you set let you verify if the application is giving the expected 
  4826. results. Use the Quick Watch window to quickly evaluate a single VisualAge for 
  4827. Basic expression. You can monitor the changing values of several watch 
  4828. expressions during program execution using the Inspector. 
  4829.  
  4830. When your project enters break mode, VisualAge for Basic displays the value of 
  4831. the watch expression in the Inspector window. Unlike breakpoints, watchpoints 
  4832. are not associated with any particular line of code. 
  4833.  
  4834.  
  4835. 笊絶武笊 11.7.1. Evaluation Scope of Watch Expressions 笊絶武笊
  4836.  
  4837. Almost any VisualAge for Basic identifier (variables, functions, and 
  4838. subroutines) can be used as a watch expression. VisualAge for Basic identifiers 
  4839. can be defined on four levels: 
  4840.  
  4841.      Program-level, where you define the identifier globally for the entire 
  4842.       application. 
  4843.  
  4844.      Module-level, where you define the identifier for the entire code module. 
  4845.  
  4846.      Class-level, where you define the identifier for the class and its 
  4847.       procedures. 
  4848.  
  4849.      Procedure-level, where you define the identifier locally for the 
  4850.       procedure. 
  4851.  
  4852.  You can define a watch expression privately in the currently displayed 
  4853.  procedure (local) as well as publicly in the code module (global). If you 
  4854.  evaluate the expression in the procedure where it is defined, the Inspector 
  4855.  uses the local definition. If you evaluate the watch expression in a procedure 
  4856.  that does not contain the expression's definition, the Inspector then expands 
  4857.  its search, until it finds either a class-level, module-level, or global 
  4858.  definition. 
  4859.  
  4860.  The Inspector evaluates a watch expression within the current context of the 
  4861.  call stack. When the Inspector evaluates a watch expression, it first searches 
  4862.  for the expression locally (the procedure where the watch expression was 
  4863.  selected), then expands its search to the next-highest level, until it locates 
  4864.  the definition and evaluates the expression. The highest level the Inspector 
  4865.  can search for a definition is the program-level, where the expression is 
  4866.  defined globally. 
  4867.  
  4868.  Important:  If you try to evaluate a watch expression that is not defined in 
  4869.  your application, VisualAge for Basic returns an error message that the 
  4870.  selected expression cannot be evaluated. The following illustration shows a 
  4871.  variable, V1, being defined both locally and globally. Three different 
  4872.  procedures evaluate the V1 variable, with each procedure resulting in a 
  4873.  different watch expression value.
  4874.  
  4875.  In Procedure A, the Inspector returns the local value of V1 because it is 
  4876.  defined locally. In Procedure B, the V1 variable is used but not defined; the 
  4877.  Inspector uses the global definition to return the value for the V1 variable. 
  4878.  Using the V1 variable as a watch expression in Procedure C returns an error, 
  4879.  because the variable is not being used. 
  4880.  
  4881.  
  4882. 笊絶武笊 11.7.2. Inspecting Variables and Data Structures 笊絶武笊
  4883.  
  4884. You can set watch expressions within your code to display their values when the 
  4885. application enters break mode. You set and monitor watch expressions using the 
  4886. Quick Watch or Inspector windows. 
  4887.  
  4888. You can also evaluate VisualAge for Basic expressions in the Immediate window 
  4889. of the Inspector. The Immediate window gives you direct access to the 
  4890. interpreter. When your application is in break mode, you use the Immediate 
  4891. window to prompt the interpreter about the status of a variable or any other 
  4892. expression. 
  4893.  
  4894. The interpreter cannot recognize bugs that are contained in error-free 
  4895. instructions. You use the debugging tools to assess the values of variables 
  4896. that are passed from one procedure or another. These tools let you control the 
  4897. program, and set watch values. In this way you can isolate and resolve errors. 
  4898.  
  4899. As your application's code modules grow and multiply, you might want to review 
  4900. variable definitions to prevent using them improperly. VisualAge for Basic lets 
  4901. you quickly go to a variable definition in order to view or change it. 
  4902.  
  4903. To go to a variable definition: 
  4904.  
  4905.    1. In the Code Editor, highlight the name of a variable, constant, or the 
  4906.       name of a procedure. 
  4907.  
  4908.    2. Choose View=>Go to definition from the menu bar. 
  4909.  You can also click on the Go to definition button  on the toolbar. 
  4910.  
  4911.  The Code Editor displays the procedure containing the first occurence of the 
  4912.  variable or constant. 
  4913.  
  4914.  Important:  If your application is in break mode and you change the variable 
  4915.  definition, you must restart program execution. 
  4916.  
  4917.  
  4918. 笊絶武笊 11.7.3. The Quick Watch Window 笊絶武笊
  4919.  
  4920. You use the Quick Watch window when you want to evaluate the selected 
  4921. expression immediately. It can only be opened if your project is in break mode. 
  4922. The Quick Watch window lets you quickly determine the value of an expression 
  4923. while in break mode and then return to testing your application. The following 
  4924. illustrations show the Quick Watch window with collapsed and expanded 
  4925. subfields: 
  4926.  
  4927. The watch expression you select might have subfields that can be expanded or 
  4928. collapsed. Watch expressions that can be expanded are indicated by a plus sign 
  4929. (+) to the left of the watch expression. Expressions that can be collapsed are 
  4930. indicated with a minus sign (-) to the left of the expression. Click on the 
  4931. Expand/Collapse toggle button to expand or collapse the expression's subfields. 
  4932. You can also double-click on the plus sign (+) to expand or the minus sign (-) 
  4933. to collapse the subfield information. 
  4934.  
  4935. To determine the value of a selected expression: 
  4936.  
  4937.    1. To enter break mode, either: 
  4938.  
  4939.           Set a breakpoint in your project, and choose Run=>Start/Continue to 
  4940.            start execution of your project, or 
  4941.  
  4942.           Select Run=>Step to enter step mode 
  4943.  
  4944.    2. Select the expression you want to evaluate. 
  4945.  
  4946.    3. Choose Debug=>Quick watch from the menu bar or click on the Quick watch 
  4947.       button  on the toolbar. 
  4948.       The Quick Watch window is displayed, showing your watch expression and 
  4949.       its current value. 
  4950.  
  4951.    4. Click on the Close button to close the Quick Watch window and return to 
  4952.       your application in break mode. 
  4953.  
  4954.  
  4955. 笊絶武笊 11.7.4. The Inspector Window 笊絶武笊
  4956.  
  4957. You use the Inspector window to maintain a list of expressions in your code 
  4958. that you want to evaluate during program execution. The Inspector window allows 
  4959. you to select a specific procedure call on the current execution stack, view 
  4960. the value of your watch expressions, delete selected watch expressions, and 
  4961. enter VisualAge for Basic expressions to be evaluated. The following image 
  4962. shows the Inspector window: 
  4963.  
  4964. To set a watch expression and open the Inspector window: 
  4965.  
  4966.    1. Select an expression within your code module by clicking on it. 
  4967.  
  4968.    2. Choose Debug=> Add Watch from the menu bar or click on the Add Watch 
  4969.       button. 
  4970.  
  4971.       The Inspector window displays and adds the selected expression to the 
  4972.       Watch expression list. 
  4973.  
  4974.  To set a new watch expression from the Inspector window: 
  4975.  
  4976.    1. Scroll through the Watch expression list to display the empty row. 
  4977.  
  4978.    2. Click in the Watch column of the empty row. 
  4979.  
  4980.    3. Enter the watch expression you want to evaluate. 
  4981.  
  4982.    4. Press the Enter key. 
  4983.  
  4984.       The Inspector immediately evaluates the expression and displays the 
  4985.       result in the Value column. 
  4986.  
  4987.  To edit a watch expression: 
  4988.  
  4989.    1. Scroll through the Watch expression list to display the expression you 
  4990.       want to edit. 
  4991.  
  4992.    2. Double-click the watch expression to highlight it. 
  4993.  
  4994.    3. Edit the watch expression. 
  4995.  
  4996.    4. Press the Enter key. The Inspector immediately evaluates the expression 
  4997.       and displays the result in the Value column. 
  4998.  
  4999.  To remove a watch expression from the Watch expression list: 
  5000.  
  5001.    1. Select the watch expression you want to remove in the Watch expression 
  5002.       list. 
  5003.  
  5004.    2. Click on the Delete button. The selected watch expression is removed from 
  5005.       the Inspector window. 
  5006.  
  5007.  Important:  You can only delete watch expressions one at a time. 
  5008.  
  5009.  
  5010. 笊絶武笊 11.7.4.1. The Call Stack 笊絶武笊
  5011.  
  5012. The Call Stack provides a selection list of the calls contained in the current 
  5013. execution stack. The displayed call provides the scope for both the watchpoints 
  5014. you inspect and the expressions you enter in the Immediate Window. The active 
  5015. thread is included in the Call Stack list when it is in break mode. 
  5016.  
  5017. To select a call contained in the navigation area: 
  5018.  
  5019.    1. Click on the arrow at the end of the Call Stack field. The Call Stack 
  5020.       drop-down list opens, displaying the most recent calls. 
  5021.  
  5022.    2. Click on the desired call in the list. The Call Stack drop-down list 
  5023.       closes and the selected call displays in the Call Stack field. 
  5024.  
  5025.  
  5026. 笊絶武笊 11.7.4.2. Watch Expression and Value Lists 笊絶武笊
  5027.  
  5028. The Watch expression and Value lists let you evaluate the watchpoints you have 
  5029. set. The Watch expression list provides an area for you to list the simple 
  5030. watchpoint expressions you want to inspect. You can also enter new expressions 
  5031. directly in the field by double-clicking in the field to highlight the current 
  5032. text. The Value list shows the current value of the selected watch expression. 
  5033.  
  5034.  
  5035. 笊絶武笊 11.7.4.3. Split Pane Sash 笊絶武笊
  5036.  
  5037. You use the Split Pane Sash to resize the two main areas of the Inspector 
  5038. window. Drag the sash to display more or less of the Watch expression and Value 
  5039. list, and the Immediate Window. When you drag the sash, you might have to 
  5040. scroll through the lists to see information hidden by the resizing operation. 
  5041.  
  5042.  
  5043. 笊絶武笊 11.7.4.4. Immediate Window 笊絶武笊
  5044.  
  5045. The Immediate window lets you enter VisualAge for Basic expressions for the 
  5046. execution state on the current call of the call stack. When you type the 
  5047. expression and press the Enter key, VisualAge for Basic evaluates the 
  5048. expression immediately. 
  5049.  
  5050. You can use the Immediate window in one of the following ways: 
  5051.  
  5052.      Type ? before an expression that you want evaluated. The result displays 
  5053.       on the next line after you press the Enter key. 
  5054.  
  5055.      Assign the Debug.Print object in your project's source code to a 
  5056.       specified string. The string is displayed in the Immediate window as it 
  5057.       is executed. 
  5058.  
  5059.  Important:  The Inspector must be open to view the results of the Debug.Print 
  5060.  object. 
  5061.  
  5062.  Tip:  It is good programming practice to remove Debug.Print references from 
  5063.  your project's source code. 
  5064.  
  5065.  
  5066. 笊絶武笊 11.7.5. Tracing Procedure Calls 笊絶武笊
  5067.  
  5068. The Inspector's Call Stack browser is a selection list of the active procedure 
  5069. calls in your program. Active procedure calls are the procedures that start but 
  5070. are not complete. The Inspector helps you understand what causes errors in the 
  5071. source code by identifying the current state of the stack. The stack is a 
  5072. region of reserved memory that stores procedures, function call return 
  5073. addresses, passed parameters, and, in some cases, local variables. 
  5074.  
  5075. Many of the procedure calls in your program contain calls to other procedures. 
  5076. When a procedure call invokes a subsequent procedure, the subprocedure is said 
  5077. to be nested. Because you can view the procedure calls on the Call Stack 
  5078. Browser, you can easily trace the flow from one procedure call to the next. You 
  5079. use the Inspector to view nested procedures that either precede or follow a 
  5080. selected procedure call in the Call Stack Browser. 
  5081.  
  5082. You browse the call stack area by selecting the entry for the call you want to 
  5083. view. The list of arguments and local variables update to correspond to the 
  5084. selected procedure call. 
  5085.  
  5086. When VisualAge for Basic executes the code in your procedures, the call stack 
  5087. adds each procedure to a list-the list of active procedure calls. After the 
  5088. execution completes, the list updates, removing the procedure from the stack. 
  5089.  
  5090.  
  5091. 笊絶武笊 12. Part 2  Writing Code 笊絶武笊
  5092.  
  5093.  
  5094. 笊絶武笊 13. Chapter 8     Scripting Objects 笊絶武笊
  5095.  
  5096. This chapter describes how to add behavior to a visual interface. You do this 
  5097. by "scripting" the behavior of objects using VisualAge for Basic statements. 
  5098. This chapter is intended to introduce you to some of the fundamental concepts 
  5099. you need to script objects. 
  5100.  
  5101. VisualAge for Basic is a powerful language, but you can start simply, learning 
  5102. only what you need to perform a given task. For example, if you need to change 
  5103. the background color of Form1 in your application, you can add a simple 
  5104. statement to your script: 
  5105.  
  5106. Form1.backcolor = BLUE
  5107.  
  5108. You can also control objects that have been developed outside of VisualAge for 
  5109. Basic, by using VisualAge for Basic statements. VisualAge for Basic supports 
  5110. these types of external objects: 
  5111.  
  5112.      OLE 
  5113.  
  5114.      OCX 
  5115.  
  5116.      SOM 
  5117.  
  5118.      Opendoc 
  5119.  
  5120.  VisualAge for Basic statements are the script that provides direction and 
  5121.  intelligence to the objects in your application. 
  5122.  
  5123.  You add behavior to objects by defining event procedures-sets of statements 
  5124.  that are executed as soon as a certain event (such as a mouse click) occurs. 
  5125.  An event procedure is stored with the object for which the event is defined. 
  5126.  
  5127.  
  5128. 笊絶武笊 13.1. Driving an Object 笊絶武笊
  5129.  
  5130. Properties and methods simplify the control of software objects, because they 
  5131. hide the complexity within the object itself. When you change a property or 
  5132. invoke a method, you do not need to know how the object actually accomplishes 
  5133. the operations you request. Using an object is like driving a car-although very 
  5134. few people understand the details of how a car engine works, many people can 
  5135. drive cars by learning a limited number of controls. Properties and methods, 
  5136. then, are the steering wheel, gas pedal, and brake controls you use to "drive" 
  5137. a software object. When you write a script that controls the behavior of an 
  5138. object, you are simply giving the computer a list of tasks to perform, using 
  5139. the names of properties and events to specify the different operations you 
  5140. require from an object. 
  5141.  
  5142. Objects combine data and functionality-they contain not only information, but 
  5143. the skills (functionality) needed to manipulate that information. Although 
  5144. objects can contain complex inner workings, they are simple to control through 
  5145. properties and methods. 
  5146.  
  5147.  
  5148. 笊絶武笊 13.1.1. What is a Property? 笊絶武笊
  5149.  
  5150. A property is a value that specifies some aspect of the object, such as its 
  5151. color or location on a screen.  For example, you use the FontName property to 
  5152. specify which font should be used for text in many of the components. 
  5153.  
  5154.  
  5155. 笊絶武笊 13.1.2. What is a Method? 笊絶武笊
  5156.  
  5157. A method performs an action within an object. For example, some objects have a 
  5158. print method-you invoke this method in order to print the contents of the 
  5159. object on your computer's printer. 
  5160.  
  5161.  
  5162. 笊絶武笊 13.1.3. Accessing Properties 笊絶武笊
  5163.  
  5164. You access properties and methods within a VisualAge for Basic script by using 
  5165. object-oriented syntax. Object-oriented syntax uses the dot operator to 
  5166. separate object names from property and method names within a source code 
  5167. reference. For example, to determine the current background color of a text box 
  5168. called Text1, you refer to the object in the following way: 
  5169.  
  5170. ColorVariable = Text1.BackColor
  5171.  
  5172. To set the BackColor property of a text box called Text1, enter the statement: 
  5173.  
  5174. Text1.BackColor = BLUE
  5175.  
  5176. Tip:  BLUE refers to a value that has already been defined as a constant. 
  5177. Constants are discussed in greater detail in Chapter X, Working with Variables 
  5178. and Constants. To make Form1 appear, you call its Show method: 
  5179.  
  5180. Form1.Show
  5181.  
  5182. See also:  The VisualAge for Basic Language Reference Online Help Controlling 
  5183. Other Objects 
  5184.  
  5185. To refer to objects located in forms other the current form, use the ! (bang) 
  5186. operator to prefix the name of the object with the name of its form: 
  5187.  
  5188. Form2!Text1.BackColor = BLUE
  5189.  
  5190. In addition to the ! operator, VisualAge for Basic accepts the dot (.) operator 
  5191. as a separator between form names, for compatibility with older source code. 
  5192. You should use the ! operator exclusively for this operation. It reduces the 
  5193. possibility of the object name conflicting with a form property of the same 
  5194. name. 
  5195.  
  5196.  
  5197. 笊絶武笊 13.2. Using Variables 笊絶武笊
  5198.  
  5199. In VisualAge for Basic, you can use special memory areas called variables to 
  5200. store words, numbers, and other kinds of information temporarily while a 
  5201. program is running. If you write a script where a number of values depend on 
  5202. user input or the result of calculations, you can use variables to store those 
  5203. values temporarily. For example, if your script manipulates a sentence, a 
  5204. slogan, and values for the length and width (total area) of a carpet, you could 
  5205. declare the following variables within your script: 
  5206.  
  5207. Private Sentence
  5208. Private Slogan
  5209. Public CarpetLength
  5210. Private CarpetWidth
  5211. Private CarpetArea
  5212. Private LoopCounter
  5213.  
  5214. The LoopCounter variable, as its name suggests, is a counter that keeps track 
  5215. of how many times a loop has been executed. You often need variables for things 
  5216. like decisions and loops. 
  5217.  
  5218. See also:  Chapter 9, Working with Data and Object Variables. 
  5219.  
  5220.  
  5221. 笊絶武笊 13.3. Expressions and Operators 笊絶武笊
  5222.  
  5223. After you have stored values in variables, you can perform operations by 
  5224. combining the names of variables using operators. This is analogous to creating 
  5225. formulas in Algebra. It also looks similar to simple Algebra. 
  5226.  
  5227.  
  5228. 笊絶武笊 13.3.1. Expressions 笊絶武笊
  5229.  
  5230. When you combine variables and keywords in a formula, you create an expression 
  5231. that VisualAge for Basic must resolve: 
  5232.  
  5233. CarpetArea = CarpetLength * CarpetWidth
  5234.  
  5235.  
  5236. 笊絶武笊 13.3.2. Operators 笊絶武笊
  5237.  
  5238. The expression, CarpetArea = CarpetLength * CarpetWidth, uses the * operator. 
  5239. VisualAge for Basic uses + for addition, - for subtraction, * for 
  5240. multiplication, and / for division. The = sign that appears in expressions is 
  5241. also an operator-it tells VisualAge for Basic to resolve the formula to the 
  5242. right of the = sign and store the resulting value in the variable on the left 
  5243. side of the = sign. 
  5244.  
  5245. Some operators support non-arithmetic functions. For example, you use the & 
  5246. symbol for string concatenation (connecting two strings): 
  5247.  
  5248. Sentence = "Your carpet will have a total area of "
  5249. Print Sentence & Str(CarpetArea) & " square feet."
  5250.  
  5251. See also:  For a complete list of the operators accepted by VisualAge for 
  5252. Basic, refer to Appendix C of the VisualAge for Basic Language Reference Online 
  5253. Help. 
  5254.  
  5255.  
  5256. 笊絶武笊 13.4. Making Decisions with the If...Then Statement 笊絶武笊
  5257.  
  5258. The whole point of creating a script is to delegate tasks to the computer. 
  5259. However, sometimes a script should only be executed if certain criteria are 
  5260. met. You can describe these criteria to VisualAge for Basic in terms of "If X 
  5261. happens, then do Y." By creating decision constructs using the "If...Then" 
  5262. statement, your script can make limited decisions. 
  5263.  
  5264. This feature allows you specify several alternate courses of action, each 
  5265. appropriate for a certain situation. The following statements test the value of 
  5266. the CarpetLength variable. Different messages appear, depending on whether the 
  5267. value is longer or shorter than 12 feet: 
  5268.  
  5269. If CarpetLength >= 12 Then
  5270.      Print "We will have to place a special order."
  5271. Else
  5272.      Print "We have that item in stock."
  5273. End If
  5274.  
  5275.  
  5276. 笊絶武笊 13.5. Performing Repetitive Tasks 笊絶武笊
  5277.  
  5278. Computers are very good at performing repetitive tasks. You can organize your 
  5279. statements within special structures called looping constructs. Looping 
  5280. constructs repeat a set of statements a predetermined number of times, or until 
  5281. reaching an Exit loop statement. 
  5282.  
  5283.  
  5284. 笊絶武笊 13.5.1. For...Next Loops 笊絶武笊
  5285.  
  5286. You can tell your VisualAge for Basic script to execute the commands between 
  5287. the For and Next lines a certain number of times. In the example shown below, 
  5288. the statements execute 12 times, and the value stored in the variable 
  5289. CarpetLength: 
  5290.  
  5291. CarpetLength = 12
  5292. For LoopCounter = 1 to CarpetLength
  5293.      Printer.Print "This coupon good for $1 rebate on a carpet."
  5294.      Printer.NewPage
  5295. Next LoopCounter
  5296.  
  5297.  
  5298. 笊絶武笊 13.5.2. Do While 笊絶武笊
  5299.  
  5300. The statements above use a For...Next loop structure. However, the following 
  5301. code gives the same results: 
  5302.  
  5303. LoopCounter = 0
  5304. CarpetLength = 12
  5305. Do While LoopCounter < CarpetLength
  5306.     LoopCounter = LoopCounter + 1
  5307.     Printer.Print "This coupon good for $1 rebate on a carpet."
  5308.     Printer.NewPage
  5309. Loop
  5310.  
  5311.  
  5312. 笊絶武笊 13.5.3. Exit Do 笊絶武笊
  5313.  
  5314. Here's another way to achieve the same results as the previous examples: 
  5315.  
  5316. LoopCounter = 0
  5317. CarpetLength = 12
  5318. Do While True
  5319.     If LoopCounter > (CarpetLength) Then
  5320.       Exit Do
  5321.     End If
  5322.     Printer.Print "This coupon good for $1 rebate on a carpet."
  5323.     Printer.NewPage
  5324.     LoopCounter = LoopCounter + 1
  5325. Loop
  5326.  
  5327. The Exit statement provides a way of exiting the Do...Loop construct. 
  5328. Otherwise, the loop would never end. 
  5329.  
  5330.  
  5331. 笊絶武笊 13.5.4. Combining Loops and Decisions 笊絶武笊
  5332.  
  5333. Notice also that the If...Then structure is nested within the Do While...Loop 
  5334. structure. In VisualAge for Basic, you can nest decisions and loops within each 
  5335. other as necessary to make decisions and perform repetitive tasks. 
  5336.  
  5337.  
  5338. 笊絶武笊 13.6. Organizing Source Code 笊絶武笊
  5339.  
  5340. Event procedures are not the only way to organize VisualAge for Basic 
  5341. statements. Some procedures are not associated with events. Event procedures 
  5342. are actually a form of sub procedures, but VisualAge for Basic also provides 
  5343. non-event sub procedures, function procedures, and classes. You create 
  5344. procedures to automate certain tasks -- such as the processing of a payroll, or 
  5345. a series of file operations. 
  5346.  
  5347.  
  5348. 笊絶武笊 13.6.1. Forms and Modules 笊絶武笊
  5349.  
  5350. Forms are the graphical background on which you can place components and other 
  5351. objects. They can act as containers for visual interfaces as well as the 
  5352. scripts that brings those interfaces to life. Modules are special files that 
  5353. store procedures and functions not associated with a specific form-they are 
  5354. available to all the forms within your application. Modules also store other 
  5355. information, such as constant declarations. 
  5356.  
  5357. See also:  Chapter 9, Working with Data and Object Variables. 
  5358.  
  5359.  
  5360. 笊絶武笊 13.6.2. Sub Procedures 笊絶武笊
  5361.  
  5362. Event procedures are actually a form of sub procedures. Sub procedures are 
  5363. scripts that contain statements to be executed. You can run one script from 
  5364. within another script-just call it by name within the body of your script. Sub 
  5365. procedures are usually, but not always, associated with object events. 
  5366.  
  5367.  
  5368. 笊絶武笊 13.6.3. Function Procedures 笊絶武笊
  5369.  
  5370. Function procedures are special scripts that usually perform calculations or 
  5371. conversions. Function procedures are different from sub procedures in two ways: 
  5372.  
  5373.      They cannot be associated with events. 
  5374.  
  5375.      They return a result. 
  5376.  
  5377.  A function accepts arguments and returns a value. The order of parameters and 
  5378.  type of return value depend on the individual function. VisualAge for Basic 
  5379.  contains built-in functions, but you can create your own functions as well. 
  5380.  Function procedures are sometimes convenient because they allow you to execute 
  5381.  a script by simply referring to the name of that script as a variable within 
  5382.  an expression. For example, if you create a function procedure that converts 
  5383.  pounds to dollars, you can use that function within other scripts in the 
  5384.  following way: 
  5385.  
  5386.   ConvertedValue = Pounds2Dollars(InputAmount)
  5387.  
  5388.  
  5389. 笊絶武笊 13.6.4. Classes 笊絶武笊
  5390.  
  5391. Although you can create simple scripts using sub and event procedures, when 
  5392. your application becomes large and complex you should create classes to improve 
  5393. productivity. When you create classes, you are essentially creating objects of 
  5394. your own-complete with properties and methods you can control in the same way 
  5395. you control the other objects available in VisualAge ts for Basic, such as 
  5396. built-in components. 
  5397.  
  5398. See also:  Chapter 12, Object-Oriented Programming. 
  5399.  
  5400.  
  5401. 笊絶武笊 13.7. Reacting to Events 笊絶武笊
  5402.  
  5403. The simplest container for VisualAge for Basic statements is called an event 
  5404. procedure. An event procedure is a set of statements that are executed whenever 
  5405. a predefined event occurs. The most common kind of event is the click event: 
  5406. when the person using your program clicks their mouse over a specific 
  5407. component. By creating an event procedure associated with the click event, you 
  5408. are telling VisualAge for Basic how to react in a given situation. Most objects 
  5409. have events with which you can associate event procedures. 
  5410.  
  5411. You can define different event procedures for every component in your 
  5412. interface. This kind of programming, where you tell the computer how to react 
  5413. to events, is called event-driven programming. Event-driven programming is 
  5414. better than simply giving the computer a list of statements, since it places 
  5415. the user of your program in control of what's happening. 
  5416.  
  5417.  
  5418. 笊絶武笊 13.7.1. Naming an Event Procedure 笊絶武笊
  5419.  
  5420. VisualAge for Basic knows you have created an event procedure when you combine 
  5421. the name of the object with the name of the event. To create an event procedure 
  5422. executes when the user clicks on a component, declare the script using a name 
  5423. and following this format: 
  5424.  
  5425. Sub ComponentName_Click ()
  5426.  
  5427.  
  5428. 笊絶武笊 13.7.2. Sharing an Event Procedure within a Component Array 笊絶武笊
  5429.  
  5430. All elements of a component array share the same event procedures. The index 
  5431. number of the component array element that calls the procedure automatically 
  5432. passes as an argument to that procedure. Ensure that the index number is 
  5433. captured by the procedure as an argument:. 
  5434.  
  5435. Sub ComponentName_Click (Index as Integer)
  5436.  
  5437.  
  5438. 笊絶武笊 13.8. Communicating with Other Objects and Applications 笊絶武笊
  5439.  
  5440. In VisualAge for Basic, everything is an object, and everything can be 
  5441. controlled using the same tools, no matter where it comes from. VisualAge for 
  5442. Basic allows you to use built-in components, SOM objects, and OCX controls, and 
  5443. script their behavior using the same commands. 
  5444.  
  5445. On the Microsoft Windows NT and Windows 95 platforms, you can use VisualAge for 
  5446. Basic statements to control the behavior of other applications via OLE (Object 
  5447. Linking and Embedding). You can use OCX controls in any VisualAge for Basic 
  5448. application running on a Windows NT or Windows 95 machine, and SOM objects on 
  5449. any platform supported by VisualAge for Basic. 
  5450.  
  5451.  
  5452. 笊絶武笊 14. Chapter 9     Working with Data and Object Variables 笊絶武笊
  5453.  
  5454. VisualAge for Basic lets you store various kinds of information in the 
  5455. computer's memory while your application is running. These range from a simple 
  5456. piece of information like a number or a name, to a complex piece of 
  5457. information, such as an instance of a component. Pieces of information stored 
  5458. in the computer's memory are called variables; simple pieces are called data 
  5459. variables. You can use the names of variables in order to store, retrieve, or 
  5460. modify the values stored in variables. When an instance of a component is 
  5461. stored in memory, an object variable is created to manage that instance. 
  5462.  
  5463.  
  5464. 笊絶武笊 14.1. Understanding Variables 笊絶武笊
  5465.  
  5466. VisualAge for Basic uses variables to store information, as well as to manage 
  5467. references to the class instances that are active in your application. It 
  5468. handles data variables and object variables in much the same way, except that 
  5469. you use data variables to store information, while you use object variables to 
  5470. manage information. 
  5471.  
  5472.  
  5473. 笊絶武笊 14.1.1. Data Variables 笊絶武笊
  5474.  
  5475. VisualAge for Basic uses variables to store numeric, string, and date 
  5476. information while a program is running. VisualAge for Basic provides several 
  5477. variable types such as numeric, string and date, each with special 
  5478. characteristics that help you process information within your applications. A 
  5479. generic variable type, called Variant, provides a flexible way to store and 
  5480. manipulate data, allowing you to combine different kinds of data within the 
  5481. same operation. Specialized variable types provide more rigorous data typing 
  5482. than Variant. Arrays and user-defined types serve as compound data references. 
  5483. Several pieces of related data can be combined under a single variable name. 
  5484.  
  5485.  
  5486. 笊絶武笊 14.1.2. Object Variables 笊絶武笊
  5487.  
  5488. VisualAge for Basic treats forms and components as objects. Each time you 
  5489. create an object, VisualAge for Basic implicitly declares an object variable 
  5490. corresponding to the component's Name property. When you refer to objects such 
  5491. as Form1 within your procedure, you are referring to object variables, not to 
  5492. the original object, a form. 
  5493.  
  5494. Using object variables, you can create additional instances of existing forms 
  5495. within your application. Object variables simplify your task as a programmer, 
  5496. providing a simple way to manipulate instances using VisualAge for Basic 
  5497. statements. 
  5498.  
  5499. More than one object variable can point to the same object. You can create 
  5500. generic object variables to control form modules within generic procedures. You 
  5501. can use specific object variables to control form modules or components. Each 
  5502. object variable is also an object variable type. 
  5503.  
  5504. You can create multiple instances, or objects, of the form class within your 
  5505. application. An instance begins with the exact structure and configuration of 
  5506. the original object or instance. The instance then evolves separately. 
  5507.  
  5508. To create a new form instance based on the structure of an existing form, refer 
  5509. to the name of the existing form as an object variable type. Use the New 
  5510. keyword to specify that you are creating a new instance of the form. 
  5511.  
  5512. You can use the New keyword with a generic object variable to create an object 
  5513. based on any component type found in the VisualAge for Basic Toolbox. However, 
  5514. you cannot create new instances of existing components. 
  5515.  
  5516.  
  5517. 笊絶武笊 14.2. Naming Variables 笊絶武笊
  5518.  
  5519. When assigning names to variables in VisualAge for Basic, observe these 
  5520. guidelines: 
  5521.  
  5522.      Names must begin with a letter. 
  5523.  
  5524.      Names can only include alphanumeric characters and the underscore (_) 
  5525.       character. 
  5526.  
  5527.      Names cannot match reserved words in the VisualAge for Basic language 
  5528.  
  5529.  See also:  For a list of reserved words, see the VisualAge for Basic Language 
  5530.  Reference Online Help. 
  5531.  
  5532.  
  5533. 笊絶武笊 14.3. Data Types 笊絶武笊
  5534.  
  5535. The data type of a variable determines its characteristics and how it behaves 
  5536. in different operations. 
  5537.  
  5538. See also:  Appendix B, "Data Types" in the VisualAge for Basic Language 
  5539. Reference Online Help for a detailed description of the data types available in 
  5540. VisualAge for Basic. 
  5541.  
  5542.  
  5543. 笊絶武笊 14.4. Declaring Variables 笊絶武笊
  5544.  
  5545. You can declare variables explicitly, or have VisualAge for Basic create them 
  5546. for you automatically when you use a variable name within an expression. 
  5547.  
  5548.  
  5549. 笊絶武笊 14.4.1. Declaring Variables Implicitly 笊絶武笊
  5550.  
  5551. You do not have to declare variables explicitly before you use them. When 
  5552. VisualAge for Basic encounters an undeclared variable name in an expression, it 
  5553. assumes that you are making an implicit declaration, and creates a variable of 
  5554. that name of Variant type. For example, the following expression uses the 
  5555. variable Apple even though it was not previously declared:.br 
  5556.  
  5557. Private Orange
  5558. Orange = 2
  5559. Apple = Orange + 1
  5560.  
  5561. VisualAge for Basic treats an undeclared variable name within an expression as 
  5562. an implicit declaration. In this example, VisualAge for Basic creates a 
  5563. variable of type Variant called Apple and makes it local in scope. 
  5564.  
  5565.  
  5566. 笊絶武笊 14.4.2. Declaring Variables Explicitly 笊絶武笊
  5567.  
  5568. Explicit variables are declared using the Private, Dim, Global, and Public 
  5569. statements. Explicit declarations allow you to specify the type of variables. A 
  5570. variable declaration has the form: 
  5571.  
  5572. Private VariableName [As VariableType]
  5573.  
  5574. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  5575. 笏1arameter           笏escription                                       笏
  5576. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5577. 笏7ariableName        笏5he name of the variable.                         笏
  5578. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5579. 笏7ariableType        笏5he type of the variable.                         笏
  5580. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  5581.  
  5582. Unless otherwise instructed by a DefType statement, VisualAge for Basic assigns 
  5583. the Variant type to variables declared without a specific type. 
  5584.  
  5585.  
  5586. 笊絶武笊 14.4.2.1. Using the Option Explicit Statement 笊絶武笊
  5587.  
  5588. If you want to declare all variables explicity, use the Option Explicit 
  5589. statement. The Option Explicit statement disables implicit variable declaration 
  5590. within a module. When this option is in effect, undeclared variables within 
  5591. expressions are treated as errors. This eliminates mistyped variable names 
  5592. being mistaken for a new implicit variable declaration. Each module must have 
  5593. its own Option Explicit statement. 
  5594.  
  5595. Forcing the explicit declaration of variables is good programming practice, and 
  5596. reduces the likelihood of run time errors. Consider using the Option Explicit 
  5597. statement in the final versions of your applications, especially if they are 
  5598. intended for critical projects. 
  5599.  
  5600. Tip:  You can configure VisualAge for Basic so that Option Explicit is added to 
  5601. each new form and code module automatically by setting the Project Window 
  5602. Option=> Environment=> Require Variable Declaration option to Yes. 
  5603.  
  5604. See also:  VisualAge for Basic Language Reference Online Help, Option Explicit 
  5605. statement. 
  5606.  
  5607.  
  5608. 笊絶武笊 14.4.3. Object Variables 笊絶武笊
  5609.  
  5610. The syntax for declaring an object variable is similar to that used to declare 
  5611. other kinds of variables. This section discusses those aspects of object 
  5612. variable creation and management that differ from other variable types within 
  5613. VisualAge for Basic. 
  5614.  
  5615.  
  5616. 笊絶武笊 14.4.3.1. Using the New Keyword 笊絶武笊
  5617.  
  5618. Use the New keyword to create object variables that are self-instantiating. If 
  5619. you refer to an object variable that you declared with the New keyword, it 
  5620. creates a new instance of the object designated by the pointer (if one does not 
  5621. exist already). A self-instantiating object variable ensures that an instance 
  5622. of the object is always available. 
  5623.  
  5624.  
  5625. 笊絶武笊 14.4.3.2. Scope 笊絶武笊
  5626.  
  5627. The scope of an object variable is unrelated to the scope of the object to 
  5628. which it is pointing. Because an object variable is a pointer, only the 
  5629. pointer's scope is affected by the location of its declaration. 
  5630.  
  5631. Object variables follow the same rules for scope as other VisualAge for Basic 
  5632. variables . 
  5633.  
  5634.  
  5635. 笊絶武笊 14.4.3.3. Type 笊絶武笊
  5636.  
  5637. You can create specific or generic object variables in your application. 
  5638. Generic variables can manipulate any form or component in your application. 
  5639. Specific variables refer directly to individual forms and components. 
  5640.  
  5641. Using Specific Form Types 
  5642.  
  5643. VisualAge for Basic lets you create a new instance of a form based on an 
  5644. existing form in your application. In terms of object-oriented programming, 
  5645. this means that you can create an instance of an instance. A typical use for 
  5646. this feature would be the reproduction of a complex form-you use the form as a 
  5647. template to create other instances of that form. 
  5648.  
  5649. Using Specific Component Types 
  5650.  
  5651. You are restricted to using the default component types as models in the 
  5652. creation of new components. This means that you cannot configure one instance 
  5653. of the component with specific property settings, and then use that instance as 
  5654. a model to create other instances of the component at run time. However, you 
  5655. can create objects at run time by specifying one of the following keywords for 
  5656. specific component object types: 
  5657.  
  5658. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  5659. 笏heckBox            笏abel               笏
  5660. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5661. 笏omboBox            笏ine                笏
  5662. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5663. 笏ommandButton       笏istBox             笏
  5664. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5665. 笏ommonDialog        笏enu                笏
  5666. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5667. 笏ata                笏0ptionButton        笏
  5668. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5669. 笏irListBox          笏0LE                 笏
  5670. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5671. 笏riveListBox        笏1ictureBox          笏
  5672. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5673. 笏ile List Box       笏4hape               笏
  5674. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5675. 笏rid                笏5extBox             笏
  5676. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5677. 笏rame               笏5imer               笏
  5678. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5679. 笏ScrollBar          笏7ScrollBar          笏
  5680. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5681. 笏mage               笏                    笏
  5682. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  5683.  
  5684. Comparison of Generic and Specific Object Types 
  5685.  
  5686. When you pass an object to a procedure, use generic object types when your 
  5687. procedures refer to more than one component. If you create a procedure to be 
  5688. used with several forms in your application, you must use a generic object 
  5689. type. For example, you may need to create a procedure that activates the Show 
  5690. or Hide method on a series of forms within your application. 
  5691.  
  5692. You should use specific object types instead of generic object types wherever 
  5693. possible. Generic object types are significantly slower than specific object 
  5694. types at run time. The behavior of generic object types is harder to monitor 
  5695. during the debugging process. 
  5696.  
  5697.  
  5698. 笊絶武笊 14.4.4. Creating Instances of Forms 笊絶武笊
  5699.  
  5700. VisualAge for Basic automatically creates an object type for each form object 
  5701. within your application. You can use the Set statement to create new instances 
  5702. or to create associations between generic objects and specific instances within 
  5703. your application. 
  5704.  
  5705.  
  5706. 笊絶武笊 14.4.4.1. Creating an Instance 笊絶武笊
  5707.  
  5708. You can create an additional instance of a form by using the Set statement with 
  5709. the New keyword: 
  5710.  
  5711. Set MemberForm as New YearlyForm
  5712.  
  5713.  
  5714. 笊絶武笊 14.4.4.2. Referring to an Instance 笊絶武笊
  5715.  
  5716. You can use object variables as pointers rather than instantiation agents. 
  5717. Generic variables must be associated with a specific object instance within the 
  5718. application prior to accessing the object. You can associate multiple object 
  5719. variables as pointers to the same object instance within your application. You 
  5720. refer to an existing instance with the following syntax: 
  5721.  
  5722. Set GenericVariable = Panel!btnStop
  5723.  
  5724. This allows you to use generic procedural code with specific instances of 
  5725. objects within your application. You probably will want to automate this type 
  5726. of assignment, based on an argument that you pass either to the generic 
  5727. procedure or through a global flag value. 
  5728.  
  5729.  
  5730. 笊絶武笊 14.4.4.3. Instance Lifetimes 笊絶武笊
  5731.  
  5732. Object instances follow the same rules for lifetime behavior as other variables 
  5733. in VisualAge for Basic. 
  5734.  
  5735.  
  5736. 笊絶武笊 14.5. Setting the Scope of Variables 笊絶武笊
  5737.  
  5738. The scope of a variable determines which parts of the program can access its 
  5739. contents. Although the examples shown here are for data variables, object 
  5740. variables are subject to the same rules of scope. 
  5741.  
  5742. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  5743. 笏4cope               笏eclaration Method            笏escription                   笏
  5744. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5745. 笏ocal               笏mplicit declarations,        笏 local variable is accessible笏
  5746. 笏                    笏Fxplicit declarations within  笏Pnly within the procedure in  笏
  5747. 笏                    笏Uhe body of procedures.       笏Xhich it is declared.         笏
  5748. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5749. 笏odule-level        笏xplicit declaration placed in笏 module-level variable is    笏
  5750. 笏                    笏Uhe declarations section of a 笏Bccessible by any procedure   笏
  5751. 笏                    笏Nodule.                       笏Xithin the module in which it 笏
  5752. 笏                    笏                              笏Js declared.                  笏
  5753. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5754. 笏1ublic              笏xplicit declaration prefixed 笏 public variable is          笏
  5755. 笏                    笏Xith Public keyword, placed in笏Bccessible by any procedure   笏
  5756. 笏                    笏Uhe declarations section of a 笏Xithin the application.       笏
  5757. 笏                    笏Nodule.                       笏                              笏
  5758. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  5759.  
  5760.  
  5761. 笊絶武笊 14.5.1. Making Variables Local 笊絶武笊
  5762.  
  5763. You make variables local by using implicit declaration, or by placing their 
  5764. explicit declarations within the body of a procedure or function. The following 
  5765. procedure stores information in an implicitly declared variable:. 
  5766.  
  5767. Function Rollit ()
  5768.     Randomize
  5769.     DiceRoll = Int(Abs(Rnd * 6) + 1)
  5770.     Rollit = DiceRoll
  5771. End Function
  5772.  
  5773. The example declares DiceRoll implicitly as soon as it is used in an 
  5774. expression. As the result of an implicit declaration, it is automatically local 
  5775. in scope. 
  5776.  
  5777. You can also make an explicit declaration local in scope, by placing it within 
  5778. the body of a sub or function procedure; for example: 
  5779.  
  5780. Function Rollit ()
  5781.     Private DiceRoll
  5782.     Randomize
  5783.     DiceRoll = Int(Abs(Rnd * 6) + 1)
  5784.     Rollit = DiceRoll
  5785. End Function
  5786.  
  5787. Assigning local scope to a variable prevents other sub or function procedures 
  5788. from modifying its value. Local variables of the same name can exist in several 
  5789. sub or function procedures within an application. Each variable holds a 
  5790. different value without causing a conflict. 
  5791.  
  5792.  
  5793. 笊絶武笊 14.5.2. Making Variables Static 笊絶武笊
  5794.  
  5795. The end of a sub or function procedure frees the memory of its local variables 
  5796. for use by other parts of the program. This can pose a problem if the variables 
  5797. should retain their values for the next execution of the procedure. To create 
  5798. local variables that retain their values, even when the procedure ends, use the 
  5799. Static keyword: 
  5800.  
  5801. Sub CreditCheck ()
  5802.     Static CreditCheckDone
  5803.     If Not CreditCheckDone Then
  5804.         MsgBox "Credit check not yet performed."
  5805.         CreditCheckDone = True
  5806.     End If
  5807. End Sub
  5808.  
  5809. To make all local variables in the procedure static, precede the declaration of 
  5810. a sub or function procedure with the Static keyword: 
  5811.  
  5812. Static Sub PageCounter ()
  5813. ...
  5814. End Sub
  5815.  
  5816.  
  5817. 笊絶武笊 14.5.3. Making a Variable Available within a Module 笊絶武笊
  5818.  
  5819. If different sub and function procedures need to share information in a module, 
  5820. declare a module- level variable. You declare a module-level variable by 
  5821. placing its declaration in the Declarations section of the module. You can only 
  5822. access module-level variables using procedures residing in the same module. 
  5823. Module-level variables can be read and modified by any procedure within the 
  5824. module, and retain their values as long as the application is running. 
  5825.  
  5826.  
  5827. 笊絶武笊 14.5.4. Making Variables Public 笊絶武笊
  5828.  
  5829. A public variable is accessed by any procedure in any module. Declare a public 
  5830. variable by placing its declaration in the declarations section of the module 
  5831. using the Public keyword: 
  5832.  
  5833. Public NumberReportsGenerated
  5834.  
  5835. Like module-level variables, public variables retain their values as long as 
  5836. the application is running. 
  5837.  
  5838.  
  5839. 笊絶武笊 14.6. Working with Variants 笊絶武笊
  5840.  
  5841. The Variant is a flexible variable that holds numbers, words, dates, and other 
  5842. kinds of information. VisualAge for Basic lets you mix Variants containing 
  5843. different kinds of data in expressions, converting the data's format where 
  5844. necessary. 
  5845.  
  5846.  
  5847. 笊絶武笊 14.6.1. Using the Variant Type 笊絶武笊
  5848.  
  5849. The Variant type is the default data type in VisualAge for Basic. When a 
  5850. variable is declared implicitly, or when a variable is declared explicitly but 
  5851. without a type, VisualAge for Basic assigns it the Variant data type. The 
  5852. Variant data type can also be specified as part of an explicit variable 
  5853. declaration. 
  5854.  
  5855. Variants can be used in expressions with other Variants, as well as with 
  5856. variables of various fundamental  types. VisualAge for Basic converts the data 
  5857. in Variants as necessary to perform operations between  mixed data types. 
  5858.  
  5859. Variants maintain an internal representation of the type of data they hold. For 
  5860. example, storing a string in a Variant causes its internal representation to be 
  5861. of String type. Conversely, if a Variant contains a number, its internal 
  5862. representation may be of Integer or Double type, depending on the precision 
  5863. required to store the value. VisualAge for Basic uses these internal 
  5864. representations to convert Variant data into common data types. For example, 
  5865. when Variants of type Date and String are combined, VisualAge for Basic changes 
  5866. one of the data types to the lowest common denominator in order to complete the 
  5867. function. 
  5868.  
  5869.  
  5870. 笊絶武笊 14.6.1.1. String Operations 笊絶武笊
  5871.  
  5872. You use variants containing string data in string operations just like real 
  5873. string variables. When string operations are performed with Variants containing 
  5874. non-string data, the conversion behavior depends on the combination of the data 
  5875. types. In general, a Variant treated as a string behaves as a string, 
  5876. regardless of the internal representation of its data. The following example 
  5877. combines a Variant containing string data with a Variant containing numeric 
  5878. data: 
  5879.  
  5880. NameString = "Jane Doe"
  5881. EmployeeNumber = 2756
  5882. Print ("Employee Data: " &Name &" " &EmployeeNumber)
  5883.  
  5884.  
  5885. 笊絶武笊 14.6.1.2. Numeric Operations 笊絶武笊
  5886.  
  5887. You use variants containing numeric or currency data with any function designed 
  5888. to manipulate numeric data. However, if a numeric operation is attempted on a 
  5889. Variant containing non-numeric data, the program ends with a Type Mismatch 
  5890. error. 
  5891.  
  5892. Use the IsNumeric() function to test the contents of a Variant before 
  5893. attempting a numeric operation: 
  5894.  
  5895. If IsNumeric(InputData) Then
  5896.     PercentageData = InputData * 100
  5897.     PercentageString = Str(PercentageData) &"%"
  5898. Else
  5899.     PercentageString = "Error: Non-numeric data!"
  5900. End If
  5901.  
  5902. VisualAge for Basic's data conversion functions convert the internal 
  5903. representation of Variants between different formats. However, if VisualAge for 
  5904. Basic can not convert the Variant's contents to the required type 
  5905. automatically, you probably will not obtain meaningful data from conversion 
  5906. functions. 
  5907.  
  5908. The internal representation of numeric data in a Variant is assigned 
  5909. dynamically, using the type that is most efficient for the current value. 
  5910. Depending on its current contents, a Variant might have an internal 
  5911. representation of Integer, Single, Double, or some other numeric type. 
  5912.  
  5913. Tip:  You can not force a Variant to hold data in a fixed internal 
  5914. representation (data type). If this degree of data typing is required, use 
  5915. explicitly declared variables with a data type. 
  5916.  
  5917.  
  5918. 笊絶武笊 14.6.1.3. Date Operations 笊絶武笊
  5919.  
  5920. The flexibility of Variants is ideally suited to operations involving date and 
  5921. time values . Use system functions to store date and time values within a 
  5922. Variant. For example, this code stores the current date and time in a Variant: 
  5923.  
  5924. TheTime = Now
  5925.  
  5926. Use the IsDate() function to determine whether a Variant's contents represent 
  5927. date information. 
  5928.  
  5929. Assign date values by enclosing the information between # signs. For example: 
  5930.  
  5931. BirthDate = #March 26, 1966 2:30am#
  5932.  
  5933. Use the CVDate() function to convert a string representation of a date to its 
  5934. date value: 
  5935.  
  5936. DateString = "June 24, 1969"
  5937. DateVariable = CVDate(DateString)
  5938.  
  5939. See also:  Variants containing date and time information are compatible with 
  5940. any of VisualAge from for Basic's date and time functions. Consult the 
  5941. VisualAge for Basic Language Reference eric dataOnline Help for more 
  5942. information about these functions. 
  5943.  
  5944.  
  5945. 笊絶武笊 14.6.1.4. The Empty Value 笊絶武笊
  5946.  
  5947. The Empty value indicates that a Variant has been declared but never used. Test 
  5948. for this condition by using the IsEmpty() function, which can be useful in 
  5949. debugging operations. If needed, assign the Empty value to a Variant and copy 
  5950. the contents of another Variant containing the Empty value. 
  5951.  
  5952.  
  5953. 笊絶武笊 14.6.1.5. The Null Value 笊絶武笊
  5954.  
  5955. The Null value has a special meaning in database operations. Null values 
  5956. propagate- meaning the appearance of a single Null within an expression causes 
  5957. the entire expression to evaluate to Null. In addition, most VisualAge for 
  5958. Basic functions return Null if Null was passed as one of the parameters in the 
  5959. function call. Test for the Null value by using the IsNull() function. Assign 
  5960. Null to a Variant by using the Null keyword: 
  5961.  
  5962. ThisVariable = Null
  5963.  
  5964.  
  5965. 笊絶武笊 14.7. Using Symbolic Constants 笊絶武笊
  5966.  
  5967. You can use symbolic constants to represent values that do not change in 
  5968. programs. Constants represent numbers, strings, and other kinds of data. The 
  5969. syntax for declaring constants is similar to the syntax used  to declare 
  5970. variables. Unlike variables, however, constants cannot be modified after they 
  5971. have been declared. 
  5972.  
  5973.  
  5974. 笊絶武笊 14.7.1. Creating Symbolic Constants 笊絶武笊
  5975.  
  5976. To declare a symbolic constant that is accessible within a module, place a 
  5977. declaration in the declarations section of that module. Use the following 
  5978. syntax to declare symbolic constants: 
  5979.  
  5980. Const CONSTNAME = value
  5981.  
  5982. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  5983. 笏1arameter           笏escription                                       笏
  5984. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5985. 笏ONSTNAME           笏ame of the constant. By convention, this is typed笏
  5986. 笏                    笏Jn uppercase.                                     笏
  5987. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  5988. 笏Walue               笏n expression representing the value to be placed 笏
  5989. 笏                    笏Jn the constant.                                  笏
  5990. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  5991.  
  5992. As with variables, the location of a constant's declaration determines its 
  5993. scope: 
  5994.  
  5995.      To create a constant that is only accessible within a procedure, declare 
  5996.       the constant within the body of the procedure. 
  5997.  
  5998.      To create a constant that is accessible to all procedures within a 
  5999.       module, declare the constant in the declarations section of that module. 
  6000.  
  6001.      To create a constant that is publicly accessible within an application, 
  6002.       declare the constant with the Public keyword in the declarations section 
  6003.       of a module. 
  6004.  
  6005.      For example, to declare a public constant called EARTH_CIRCUMFERENCE, 
  6006.       place the following declaration in the Declarations section of a module: 
  6007.  
  6008.   Public Const EARTH_CIRCUMFERENCE = 24000
  6009.  
  6010.  
  6011. 笊絶武笊 14.7.2. Using the constant.bas File 笊絶武笊
  6012.  
  6013. VisualAge for Basic includes a file, constant.bas that contains a large number 
  6014. of public declarations. This file cannot be modified because it is read-only. 
  6015. You can use this file in one of two ways: 
  6016.  
  6017.      Include the file as a module in your VisualAge for Basic project. 
  6018.  
  6019.      Copy and paste the public constants you need from the constant.bas file 
  6020.       to the Declarations section of a module in your application. Remove 
  6021.       constant.bas from your application. 
  6022.  
  6023.  
  6024. 笊絶武笊 14.8. Using Arrays of Variables 笊絶武笊
  6025.  
  6026. Arrays are data variables that follow standard VisualAge for Basic rules for 
  6027. declaration and scope. Arrays allow you to store and reference a set of related 
  6028. data elements under a single variable name. All of the elements in an array 
  6029. must be of the same type. (This restriction can be overcome by using the 
  6030. Variant type.) VisualAge for Basic lets you create single and multiple 
  6031. dimension arrays, and specify their lower and upper boundaries. 
  6032.  
  6033. Tip:  Arrays of variables should not be confused with component arrays. 
  6034.  
  6035.  
  6036. 笊絶武笊 14.8.1. Creating Arrays 笊絶武笊
  6037.  
  6038. To create an array, declare the array variable by name, upper bound, and type. 
  6039. For example, this code creates an array that holds names: 
  6040.  
  6041. Dim NameList(39) As String
  6042.  
  6043. Since the lower bound (lowest possible data element) defaults to 0, the total 
  6044. number of data elements in the NameList array is 40. You can specify the lower 
  6045. bound as well as the upper bound (highest possible data element), using this 
  6046. syntax: 
  6047.  
  6048. Dim ArrayName(LowerBound To UpperBound)
  6049.  
  6050. You should define the bounds if you use the element number as an index in a 
  6051. For...Next operation. For example, the following code creates the NameList 
  6052. array with elements numbered from 1 to 40: 
  6053.  
  6054. Dim NameList(1 To 40) As String
  6055.  
  6056.  
  6057. 笊絶武笊 14.8.2. Accessing Array Elements 笊絶武笊
  6058.  
  6059. To access an array element, specify its element number using this syntax: 
  6060.  
  6061. Variable = ArrayName(ElementNumber)
  6062.  
  6063. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6064. 笏1arameter           笏escription                                       笏
  6065. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6066. 笏7ariable            笏 variable that contains the value of the array   笏
  6067. 笏                    笏Flement.                                          笏
  6068. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6069. 笏rrayName           笏5he name of the array being accessed.             笏
  6070. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6071. 笏lementNumber       笏5he number corresponding to the array element     笏
  6072. 笏                    笏Ceing accessed.                                   笏
  6073. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6074.  
  6075. To access the 13th entry in the NameList array (since the lower bound defaults 
  6076. to 0) use this code: 
  6077.  
  6078. Dim NameList(39) As String
  6079.     IndividualName = NameList(12)
  6080.  
  6081.  
  6082. 笊絶武笊 14.8.3. Creating Multidimensional Arrays 笊絶武笊
  6083.  
  6084. Create a multidimensional array by specifying multiple lower and upper bounds 
  6085. as the array is declared: 
  6086.  
  6087. Dim GridArray(0 to 9, 0 to 99) as Double
  6088.  
  6089. or 
  6090.  
  6091. Dim GridArray(9, 99) as Double
  6092.  
  6093. The code creates a two-dimensional array, 10 elements long by 100 elements 
  6094. wide. To access a data element from within a multidimensional array, provide a 
  6095. coordinate corresponding to each dimension. For example, to access the contents 
  6096. of the 20th cell in the 9th array line, enter this code: 
  6097.  
  6098. ThisCell = GridArray(8,19)
  6099.  
  6100.  
  6101. 笊絶武笊 14.8.4. Dynamic Arrays 笊絶武笊
  6102.  
  6103. To set or change the dimensions of an array at run time, declare the array as a 
  6104. dynamic array. Declare an array as dynamic by omitting its dimensions at 
  6105. declaration time. For example: 
  6106.  
  6107. Dim FlexibleArray()
  6108.  
  6109. To set the dimensions of a dynamic array use the ReDim statement. This example 
  6110. uses variables to set the lower and upper bounds of FlexibleArray at run time: 
  6111.  
  6112. ReDim FlexibleArray(1 to NumberRows, 1 to NumberColumns)
  6113.  
  6114.  
  6115. 笊絶武笊 14.8.5. Storing Objects in Arrays 笊絶武笊
  6116.  
  6117. You can store form and component variables within arrays. Arrays let you 
  6118. automate certain tasks and streamline the procedures required for group 
  6119. operations on similar forms or controls. 
  6120.  
  6121.  
  6122. 笊絶武笊 14.8.5.1. Creating Arrays of Forms 笊絶武笊
  6123.  
  6124. You can create an array containing specific or generic form variables. You 
  6125. declare form variables in the same way you declare other variable arrays: 
  6126.  
  6127.  Generic 
  6128.  
  6129. Dim FormGroup(20) as Form
  6130.  
  6131. Specific 
  6132.  
  6133. Dim FormGroup(20) as frmPayroll
  6134.  
  6135. To make the array elements self-instantiating, use the New keyword. 
  6136.  
  6137. Dim New FormGroup(20) as frmPayroll
  6138.  
  6139.  
  6140. 笊絶武笊 14.8.5.2. Creating Arrays of Components 笊絶武笊
  6141.  
  6142. You can create an array of generic or specific component objects. The Control 
  6143. keyword specifies a generic array. Create specific component objects by 
  6144. referring to one of the specific component types available within VisualAge for 
  6145. Basic. 
  6146.  
  6147. Dim CmpGroup(15) as Control
  6148. Dim CmpGroup(15) as TextBox
  6149.  
  6150. You cannot make the elements of an array of components self-instantiating. 
  6151.  
  6152.  
  6153. 笊絶武笊 14.9. Creating User-Defined Types 笊絶武笊
  6154.  
  6155. A user-defined type describes the structure of a variable that holds several 
  6156. related data elements within a single reference. After you define a 
  6157. user-defined type, it is available for use as a template for the creation of 
  6158. new variables with the same structure. 
  6159.  
  6160. See also:  Chapter 12, Object-Oriented Programming. 
  6161.  
  6162. User-defined types let you group simple data variables, such as strings, 
  6163. numbers, and dates, within a single reference. A variable of user-defined type 
  6164. is analogous to a variable structured like a database record. 
  6165.  
  6166. A user-defined type is not a variable-it is a custom template that dictates the 
  6167. structure of new variables. 
  6168.  
  6169. Important:  The definitions of user-defined types are always public and must be 
  6170. declared in the Declarations section of a code module. 
  6171.  
  6172. To declare variables of a user-defined type, use the same syntax as the data 
  6173. types they represent. The scope of user-defined variables is identical to the 
  6174. base data type. 
  6175.  
  6176. See also:  Refer to VisualAge for Basic Language Reference Online Help, 
  6177. Appendix B, Data Types for the range of each data type. 
  6178.  
  6179. Type SalesRep
  6180.     FamilyName As String
  6181.     FirstName As String
  6182.     EmployeeCode As String
  6183.     Territory As String
  6184.     CommissionRate As Single
  6185.     TotalSales As Currency
  6186. End Type
  6187.  
  6188. Dim PharmRep As SalesRep
  6189.  
  6190. To access a data element in a variable of user-defined type use the convention 
  6191. variable.element: 
  6192.  
  6193. Print PharmRep.TotalSales
  6194.  
  6195. To copy the contents of a variable of user-defined type to another variable: 
  6196.  
  6197. NewVariable = PharmRep
  6198.  
  6199.  
  6200. 笊絶武笊 14.9.1. Comparing User-Defined Types to Arrays of Variants 笊絶武笊
  6201.  
  6202. Like user-defined types, arrays can store several related data elements. 
  6203. Although elements within an array must all be of the same variable type, you 
  6204. can effectively overcome this restriction by using the Variant type. An array 
  6205. of Variants can provide the same functionality as a user-defined type. 
  6206.  
  6207. Unlike arrays, user-defined types allow you to assign meaningful names to each 
  6208. element. User-defined types also let you assign fundamental data types to the 
  6209. individual data elements. 
  6210.  
  6211. User-defined types generally result in source code that is easier to read and 
  6212. debug. 
  6213.  
  6214.  
  6215. 笊絶武笊 14.9.2. Object Variables as User-Defined Types 笊絶武笊
  6216.  
  6217. Object variable types let you specify the structure of a new object based on 
  6218. the structure of an existing object in your application. In effect, when you 
  6219. create a form in your application, its structure is automatically accessible 
  6220. within VisualAge for Basic as a user-defined type. 
  6221.  
  6222. Using object variables, you can create additional instances of existing forms 
  6223. within your application. Additional instances simplify your task as a 
  6224. programmer, allowing you to create the necessary copies of common interface 
  6225. forms. 
  6226.  
  6227.  
  6228. 笊絶武笊 14.10. Using and Testing Object Variables 笊絶武笊
  6229.  
  6230. VisualAge for Basic contains several keywords you can use to test object 
  6231. variables for their contents. These keywords are typically used in If...Then 
  6232. structures where you need to verify the contents or nature of an object 
  6233. variable prior to performing one or more operations. 
  6234.  
  6235.  
  6236. 笊絶武笊 14.10.1. Is 笊絶武笊
  6237.  
  6238. The Is operator allows you to compare two object variable pointers to find out 
  6239. if they refer to the same object within the application. Normally, object 
  6240. variable assignment and instance creation are carefully controlled by your 
  6241. procedural code. For example, you must determine the status of your pointer 
  6242. associations and instances at run time when using components that perform drag 
  6243. and drop operations. If both object variables refer to the same object 
  6244. instance, a non-zero True is returned. For example: 
  6245.  
  6246. LogicalVariable = ObjectVariable1 Is ObjectVariable2
  6247.  
  6248. or 
  6249.  
  6250. If ObjectVariable1 is TextBox Then
  6251. [...]
  6252.  
  6253.  
  6254. 笊絶武笊 14.10.2. Nothing 笊絶武笊
  6255.  
  6256. You can declare an object variable declared without the New keyword. If there 
  6257. is no instance of the object, the variable might point to an object that does 
  6258. not exist. You can test for this condition by using the Is operator to 
  6259. determine if the object variable has the special Nothing value: 
  6260.  
  6261. If ObjVariable3 Is Nothing
  6262.     [statements]
  6263. End If
  6264.  
  6265. If you declare an object variable using the New keyword, you cannot test it for 
  6266. the Nothing value. Accessing an auto-instantiating object variable causes 
  6267. VisualAge for Basic to create a new instance of the object if one does not 
  6268. already exist. 
  6269.  
  6270. Tip:  You can free memory resources by assigning the Nothing value to an object 
  6271. variable. 
  6272.  
  6273.  
  6274. 笊絶武笊 14.10.3. Me 笊絶武笊
  6275.  
  6276. The Me keyword serves as an identifier that always refers to the current form. 
  6277. If you are controlling batch operations on form variables within a procedure in 
  6278. a form, you address certain instructions to the current form by using the Me 
  6279. keyword. For example, an event procedure activated by a button on a form 
  6280. instance. If the procedure needs to access that form's Hide method, it can 
  6281. always refer to its own instance with the Me keyword: 
  6282.  
  6283. Sub cmdHide_Click()
  6284.     Hide Me
  6285. End Sub
  6286.  
  6287.  
  6288. 笊絶武笊 14.11. Passing Objects to Procedures 笊絶武笊
  6289.  
  6290. You can pass specific or generic object variables as arguments to procedures. 
  6291. Pass object variables as arguments to procedures in exactly the same way as 
  6292. other variables. 
  6293.  
  6294. Make sure the argument is properly matched to the type of the object variable's 
  6295. contents. For example, if the argument is typed as generic form on the 
  6296. procedure definition line, it can receive generic or specific form object 
  6297. variables as arguments. However, if a specific Form type is declared, you must 
  6298. pass an object of that type. 
  6299.  
  6300.  
  6301. 笊絶武笊 14.12. Using Permanent Objects 笊絶武笊
  6302.  
  6303. VisualAge for Basic includes read-only object names that allow you to control 
  6304. key system resources within procedures. 
  6305.  
  6306. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6307. 笏0bject Name         笏escription                                       笏
  6308. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6309. 笏pp                 笏1rovides application-specific information.        笏
  6310. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6311. 笏lipboard           笏ccesses operating environment's clipboard.       笏
  6312. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6313. 笏ebug               笏irects output to the Debug window.               笏
  6314. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6315. 笏1rinter             笏irects output to the default system printer.     笏
  6316. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6317. 笏4creen              笏1rovides diagnostic information about the current 笏
  6318. 笏                    笏Gorm and current component.                       笏
  6319. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6320.  
  6321. You cannot modify these object names or declare variables referring to these 
  6322. objects. 
  6323.  
  6324.  
  6325. 笊絶武笊 15. Chapter 10     Controlling Program Flow 笊絶武笊
  6326.  
  6327. Decision and loop structures control the execution sequence of blocks of 
  6328. instructions. Decision structures such as If... and Select Case allow you to 
  6329. specify the execution circumstances for specific statements. In addition to 
  6330. decision structures, VisualAge for Basic contains looping structures that 
  6331. repeat blocks of statements a specified number of times or to satisfy logical 
  6332. conditions. Using decision and loop structures, you can create procedures to 
  6333. execute instructions nonsequentially. 
  6334.  
  6335.  
  6336. 笊絶武笊 15.1. Making Decisions 笊絶武笊
  6337.  
  6338. Decision structures control whether or not certain instructions are executed, 
  6339. based on specified logical tests. Use the If... and Select Case decision 
  6340. structures to make decisions in VisualAge for Basic. 
  6341.  
  6342. Decision structures rely on logical expressions. Logical expressions return the 
  6343. value True or False. For example, if the following values are assigned: 
  6344.  
  6345. Apples = 24
  6346. Oranges = 12
  6347.  
  6348. the logical expression; 
  6349.  
  6350. Apples = Oranges
  6351.  
  6352. evaluates to False. If you use this logical expression with these values to 
  6353. control a decision structure such as If..., the statements contained within the 
  6354. structure are not executed. In a real application, these values are based on 
  6355. user input, calculations, or data read from external files. Using decision 
  6356. structures within an application allows a dynamic response to changing data. 
  6357.  
  6358.  
  6359. 笊絶武笊 15.1.1. If... 笊絶武笊
  6360.  
  6361. The If... structure is the simplest decision structure in VisualAge for Basic. 
  6362. Use If... to execute code only when a condition is satisfied. The If... 
  6363. structure syntax is as follows: 
  6364.  
  6365. If Expression Then
  6366.     [statements]
  6367. [ElseIf Expression2 Then
  6368.     [statements]]
  6369. [ElseIf Expression3 Then
  6370.     [statements]]
  6371.     [...]
  6372. [Else
  6373.     [statements]]
  6374. End If
  6375.  
  6376. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6377. 笏lement             笏escription                                       笏
  6378. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6379. 笏xpression          笏 logical expression that determines whether the  笏
  6380. 笏                    笏Ttatements are executed.                          笏
  6381. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6382. 笏xpression2         笏 logical expression that determines whether the  笏
  6383. 笏                    笏Ttatements in the ElseIf block are executed. This 笏
  6384. 笏                    笏Mogical expression is evaluated only if Expression笏
  6385. 笏                    笏Fvaluates to False.                               笏
  6386. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6387. 笏lseIf              笏f Expression evaluates to False, Expression2 is  笏
  6388. 笏                    笏Fvaluated. If Expression2 evaluates to True,      笏
  6389. 笏                    笏Ttatements in this section are executed.          笏
  6390. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6391. 笏lse                笏nstructions that follow this keyword are executed笏
  6392. 笏                    笏Jf Expression and (if applicable) Expression2     笏
  6393. 笏                    笏Fvaluate to False.                                笏
  6394. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6395.  
  6396. In the following example, examine a routine client's account that generates 
  6397. "past due" notices. Instructions within the If... structure execute only when 
  6398. the expression evaluates to True: 
  6399.  
  6400. If ((AmountOwing > 0) And ((Now - LastPaymentDate) > 30)) Then
  6401.     Result = SendNotice(ClientNumber)
  6402. End If
  6403.  
  6404.  
  6405. 笊絶武笊 15.1.1.1. Else (optional) 笊絶武笊
  6406.  
  6407. A set of instructions, identified with the Else keyword, executes if the 
  6408. expression controlling the structure evaluates to False. 
  6409.  
  6410. If ((AmountOwing > 0) And ((Now - LastPaymentDate) > 30)) Then
  6411.     Result = SendNotice(ClientNumber)
  6412. Else
  6413.     Result = SendThankYouNote(ClientNumber)
  6414. End If
  6415.  
  6416.  
  6417. 笊絶武笊 15.1.1.2. ElseIf (optional) 笊絶武笊
  6418.  
  6419. The ElseIf keyword is similar to the Else keyword, except that it uses its own 
  6420. logical expression to control the processing of statements. The statements in 
  6421. the ElseIf section process only if the logical expression controlling the If... 
  6422. structure is False, and the logical expression controlling the ElseIf section 
  6423. is True. 
  6424.  
  6425. If ((AmountOwing > 0) And ((Now - LastPaymentDate) > 30)) Then
  6426.     Result = SendNotice(ClientNumber)
  6427. ElseIf ((AmountOwing <= 0) And ((Now - LastPaymentDate) > 30)) Then
  6428.     Result = SendWeMissYouLetter(ClientNumber)
  6429.  Else
  6430.     Result = SendThankYouNote(ClientNumber)
  6431. End If
  6432.  
  6433.  
  6434. 笊絶武笊 15.1.2. Select Case 笊絶武笊
  6435.  
  6436. The Select Case decision structure compares a Select expression against a list 
  6437. of possible matching Case expressions. The Select Case structure evaluates the 
  6438. Select expression and executes the block of statements associated with the 
  6439. first matching Case expression in a list. If a Case expression matches a Select 
  6440. expression, evaluation of the Case expressions stops. If none of the Case 
  6441. expressions match the Select expression, the execution of statements contained 
  6442. in the Case Else section occurs. If there is no match, and the Select Case 
  6443. structure does not contain a Case Else section, there is no resulting action. 
  6444. You can specify an unlimited number of Case expressions. 
  6445.  
  6446. The value of the Select expression for a Select Case structure can be of any 
  6447. VisualAge for Basic basic data type. You cannot use a user-defined type as a 
  6448. Select expression in a Select Case structure. 
  6449.  
  6450. The syntax for a Select Case structure is: 
  6451.  
  6452. Select Case SelectExpression
  6453.     [Case CaseExpression1
  6454.     [statements]]
  6455.     [Case CaseExpression2
  6456.     [statements]]
  6457.     [Case CaseExpression3
  6458.     [statements]]
  6459.     [...]
  6460.     [Case Else
  6461.     [statements]]
  6462. End Select
  6463.  
  6464. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6465. 笏lement             笏escription                                       笏
  6466. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6467. 笏4electExpression    笏5he expression compared against the Case          笏
  6468. 笏                    笏Fxpressions in the structure.                     笏
  6469. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6470. 笏aseExpression      笏0ne or more expressions compared against          笏
  6471. 笏                    笏4electExpression. If the comparison between the   笏
  6472. 笏                    笏Fvaluated master expression and evaluated text    笏
  6473. 笏                    笏Fxpression returns True, execute the statements   笏
  6474. 笏                    笏Bssociated with the matching expression.          笏
  6475. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6476. 笏ase Else           笏xecute statements in this section if             笏
  6477. 笏                    笏4electExpression does not match any of the Case   笏
  6478. 笏                    笏Fxpressions in the Select Case structure.         笏
  6479. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6480.  
  6481.  
  6482. 笊絶武笊 15.1.2.1. Using Select Case to Match Expressions 笊絶武笊
  6483.  
  6484. The Select Case structure is different from other decision structures in that 
  6485. it is triggered by exact matches between the Select and Case expressions (which 
  6486. can be of any type.) This is in contrast to If... structures. 
  6487.  
  6488. Consider the following example: 
  6489.  
  6490. Select Case VacationBudget
  6491.     Case 500
  6492.         Message = "You should look at our weekend getaway
  6493. packages!"
  6494.     Case 1000
  6495.         Message = "Have you thought about a cruise?"
  6496.     Case 1500
  6497.         Message = "You will love our Far Off Places package!"
  6498.     Case 2000
  6499.         Message = "Do you want something exotic or luxurious?"
  6500. End Select
  6501.  
  6502. In this example, the Select Case structure is successful only if the dollar 
  6503. amount in the VacationBudget variable exactly matches one of the Case 
  6504. expressions. Because the structure is only sensitive to exact matches, nothing 
  6505. happens if a value entered by the user does not match a Case expression. To 
  6506. perform a default action, use a Case Else section. However, this section is 
  6507. inadequate for most situations, because it relies on exact matches. 
  6508.  
  6509.  
  6510. 笊絶武笊 15.1.2.2. Using Select Case to Match Logical Criteria 笊絶武笊
  6511.  
  6512. Using a Select expression of True and Case expressions that evaluate to True or 
  6513. False allows you to perform branching based on logical criteria. 
  6514.  
  6515. Select Case True
  6516.     Case VacationBudget < 500
  6517.         Message = "Sorry, we do not have any packages in that range."
  6518.     Case VacationBudget < 1000
  6519.           Message = "You should look at our weekend getaway packages!"
  6520.     Case VacationBudget < 1500
  6521.         Message = "Have you thought about a cruise?"
  6522.     Case VacationBudget < 2000
  6523.         Message = "You will love our Far Off Places package!"
  6524.     Case VacationBudget >= 2000
  6525.         Message = "Do you want something exotic or luxurious?"
  6526. End Select
  6527.  
  6528.  
  6529. 笊絶武笊 15.2. Looping 笊絶武笊
  6530.  
  6531. Use loop structures to perform repetitive tasks. Loop structures execute 
  6532. embedded instructions a specific number of times or while a condition is True. 
  6533. You can exit a loop structure using an explicit control statement. The 
  6534. following table describes the looping control mechanisms available in VisualAge 
  6535. for Basic. 
  6536.  
  6537. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6538. 笏ontrol Mechanism   笏xamples            笏escription                   笏
  6539. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6540. 笏ogical expression  笏o While True       笏ontinue executing            笏
  6541. 笏                    笏o While Variable1 <笏Jnstructions as long as       笏
  6542. 笏                    笏7ariable2           笏Fxpression remains True.      笏
  6543. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6544. 笏ogical expression  笏o Until            笏ontinue executing            笏
  6545. 笏                    笏o While Not        笏Jnstructions until condition  笏
  6546. 笏                    笏                    笏Js satisfied.                 笏
  6547. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6548. 笏umerical limit     笏or Counter = 1 to  笏ontinue executing            笏
  6549. 笏                    笏10                  笏Jnstructions until.brCounter  笏
  6550. 笏                    笏Y                   笏>= Limit.                     笏
  6551. 笏                    笏or Counter = 1 to  笏                              笏
  6552. 笏                    笏imit               笏                              笏
  6553. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6554. 笏xplicit control    笏xit Do             笏xit a loop structure and     笏
  6555. 笏Ttatement           笏xit For            笏Dontinue execution at the next笏
  6556. 笏                    笏                    笏Ttatement.                    笏
  6557. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6558.  
  6559.  
  6560. 笊絶武笊 15.2.1. Do...Loop 笊絶武笊
  6561.  
  6562. VisualAge for Basic contains several variations of the Do...Loop structure, 
  6563. including Do Until and Loop While. There are two ways to use the Do...Loop 
  6564. structure. The first checks a condition before performing any actions: 
  6565.  
  6566. Do [{While | Until} Expression]
  6567.     [statements]
  6568.     [Exit Do]
  6569.     [statements]
  6570. Loop
  6571.  
  6572. The second syntax checks the condition after performing any actions: 
  6573.  
  6574. Do
  6575.     [statements]
  6576.     [Exit Do]
  6577.     [statements]
  6578. Loop [{While | Until} Expression}
  6579.  
  6580. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6581. 笏lement             笏escription                                       笏
  6582. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6583. 笏xpression          笏valuates to True or False. The Not operator can  笏
  6584. 笏                    笏Ce used to reverse the logical value of Expression笏
  6585. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6586. 笏8hile               笏2ualifies the Do or Loop keyword. This keyword    笏
  6587. 笏                    笏Jndicates that statements in the loop should be   笏
  6588. 笏                    笏Qrocessed as long as Expression evaluates to True.笏
  6589. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6590. 笏6ntil               笏2ualifies the Do or Loop keyword. Indicates that  笏
  6591. 笏                    笏Ttatements in the loop should be processed as long笏
  6592. 笏                    笏Bs Expression evaluates to False.                 笏
  6593. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6594. 笏xit Do             笏xits the Do...While structure and continues      笏
  6595. 笏                    笏Fxecution at the next statement.                  笏
  6596. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6597.  
  6598. The following example shows how instructions contained in a Do...Loop statement 
  6599. continuously execute as long as the Do While expression evaluates to True. 
  6600.  
  6601. ArrayElement = 0
  6602. Do While ArrayElement > 10
  6603.     EntryForm(ArrayElement).PrintForm
  6604.     ArrayElement = ArrayElement + 1
  6605. Loop
  6606.  
  6607.  
  6608. 笊絶武笊 15.2.2. For...Next 笊絶武笊
  6609.  
  6610. The For...Next loop structure executes a series of instructions a preset number 
  6611. of times. The syntax for the For...Next structure is as follows: 
  6612.  
  6613. For LoopCounter = Begin to End [Step Increment]
  6614.        [statements]
  6615.        [Exit For]
  6616. Next [LoopCounter[, LoopCounter2] [, LoopCounter3] [,...]]
  6617.  
  6618. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6619. 笏lement             笏escription                                                 笏
  6620. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6621. 笏oopCounter         笏4erves as the counter for the For...Next structure. This    笏
  6622. 笏                    笏Walue can be used in instructions within the For...Next     笏
  6623. 笏                    笏Moop.                                                       笏
  6624. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6625. 笏egin               笏ndicates the starting value for LoopCounter. This is       笏
  6626. 笏                    笏Oormally 1.                                                 笏
  6627. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6628. 笏nd                 笏ndicates the ending value for LoopCounter.                 笏
  6629. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6630. 笏ncrement           笏4pecifies the value that LoopCounter should increment each  笏
  6631. 笏                    笏Uime. If this value is not specified, the Increment defaults笏
  6632. 笏                    笏Uo 1. A negative Increment value decrements the For...Next  笏
  6633. 笏                    笏Moop.                                                       笏
  6634. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6635.  
  6636. For...Next structures are useful when you need to repeat a series of 
  6637. instructions a given number of times. The following example sends a 
  6638. questionnaire letter to 10 customers on a merchant's client list: 
  6639.  
  6640. For ArrayElement = 0 to 9
  6641.         EntryForm(ArrayElement).PrintForm
  6642. Next ArrayElement
  6643.  
  6644. It is good programming practice to repeat the name of the counter variable 
  6645. after the Next keyword. This is especially true in nested code, where several 
  6646. Next statements may appear within a procedure. 
  6647.  
  6648.  
  6649. 笊絶武笊 15.2.3. While...Wend 笊絶武笊
  6650.  
  6651. The While...Wend structure is similar to the Do...Loop structure. This 
  6652. structure is retained for compatibility with source code created for other 
  6653. compilers. When you create a new application, use the Do...While structure 
  6654. instead. 
  6655.  
  6656. See also:  The VisualAge for Basic Language Reference Online Help for more 
  6657. information about the While...Wend decision structure. 
  6658.  
  6659.  
  6660. 笊絶武笊 15.3. Nesting Control Structures 笊絶武笊
  6661.  
  6662. To create nested control structures, place structures within each other. You 
  6663. can nest any combination of VisualAge for Basic decision and loop structures. 
  6664. For example, you can place an If... structure within a For...Next structure. 
  6665. The following example has an array of forms called EntryForm. 
  6666.  
  6667. For ArrayElement = 1 to 10
  6668.     If EntryForm(ArrayElement).Visible Then
  6669.         EntryForm(ArrayElement).PrintForm
  6670.     End If
  6671. Next ArrayElement
  6672.  
  6673. Tip:  Multiple indentation levels indicate multiple levels of nesting. To make 
  6674. code easier to read and maintain, indent the instructions within decision and 
  6675. loop structures to reflect their nesting. Indentation showing nesting levels 
  6676. has no effect on program execution. 
  6677.  
  6678.  
  6679. 笊絶武笊 16. Chapter 11     Organizing Code 笊絶武笊
  6680.  
  6681. The VisualAge for Basic statements that provide behavior for your application 
  6682. are referred to collectively as source code. This chapter describes the 
  6683. different language structures and organizational techniques you can use to 
  6684. organize your source code to perform operations within an easy-to-maintain 
  6685. application. 
  6686.  
  6687. At the highest level, you can organize your VisualAge for Basic source code by 
  6688. placing it in one of these project objects: 
  6689.  
  6690.      Forms - A form is a visual object that contains a number of graphical 
  6691.       components that the user interacts with. The form and each of its 
  6692.       components can contain your source statements, and a project can have 
  6693.       multiple forms. 
  6694.  
  6695.      Modules - A module can contain declarations, functions, sub procedures, 
  6696.       and class definitions. 
  6697.  
  6698.  
  6699. 笊絶武笊 16.1. Planning Your Application 笊絶武笊
  6700.  
  6701. The following issues influence how easily you and other programmers can fully 
  6702. understand, maintain, and debug your application. These issues may also affect 
  6703. the ease with which users can control your application. 
  6704.  
  6705.      Whether to place the components of your user interface on a single form 
  6706.       or on multiple forms. For many applications, a single form is adequate. 
  6707.       If your application supports several distinct activities, you could 
  6708.       simplify life for your users by placing each activity on a different 
  6709.       form. To draw an analogy with VisualAge for Basic itself, the Code Editor 
  6710.       and the Menu Editor are activities that would be candidates for different 
  6711.       forms-they perform different functions and have different menus. 
  6712.  
  6713.      Whether to group a set of statements as a sub procedure, or as a function 
  6714.       procedure, as described later in this chapter. 
  6715.  
  6716.      Whether you should move a certain function or sub procedure from a 
  6717.       particular form to a code module, where it could also be used in another 
  6718.       form. Procedures in code modules can be called from source code anywhere 
  6719.       in the application. 
  6720.  
  6721.      Whether operations on certain data could be organized as a class. The 
  6722.       class lets you reuse the code in this class in another application. 
  6723.  
  6724.  
  6725. 笊絶武笊 16.2. Choosing a Code Structure 笊絶武笊
  6726.  
  6727. VisualAge for Basic offers the following basic structures to organize your 
  6728. statements: 
  6729.  
  6730.      Sub procedures. 
  6731.  
  6732.      Function procedures. 
  6733.  
  6734.      Classes. 
  6735.  
  6736.  Classes are a means of grouping related procedures, called methods, and the 
  6737.  data that they work with. Because you can acess only part of the data and some 
  6738.  of the methods outside the class, code in classes is generally easier to debug 
  6739.  and maintain. 
  6740.  
  6741.  See also:  Chapter 12, Object-Oriented Programming 
  6742.  
  6743.  
  6744. 笊絶武笊 16.3. Scope of Procedures 笊絶武笊
  6745.  
  6746. By default, procedures in a code module are public in scope. This means you can 
  6747. access them from anywhere in the application. 
  6748.  
  6749. Two procedures of the same name stored in code modules in the same application 
  6750. cause a conflict that cannot be resolved. To prevent this, you can explicitly 
  6751. specify that a procedure in a code module be private (exclusive to the code 
  6752. module) in scope. You do this by adding a special qualifier to the variable 
  6753. declaration, as in the following example: 
  6754.  
  6755. Private Sub HandleError(Code As String)
  6756.     [statements]
  6757. End Sub
  6758.  
  6759. Procedures declared within a form module can be accessed by any other procedure 
  6760. within that form. 
  6761.  
  6762.  
  6763. 笊絶武笊 16.4. Creating a Sub Procedure 笊絶武笊
  6764.  
  6765. A sub procedure is a set of statements that execute when the procedure is 
  6766. invoked. Statements within the procedure are executed one at a time. You can 
  6767. specify operations in VisualAge for Basic so that they are either performed 
  6768. unconditionally, or when certain conditions have been met. These conditions can 
  6769. be based on any information you choose and, in particular, on user actions. 
  6770.  
  6771. The syntax for declaring a sub procedure in VisualAge for Basic is: 
  6772.  
  6773. [Static] [Private] Sub ProcedureName_Event ([Argument1]
  6774.    [,Argument2, ...])
  6775.        [statements]
  6776. End Sub
  6777.  
  6778. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6779. 笏lement             笏escription                                       笏
  6780. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6781. 笏4tatic              笏akes local variables used within the procedure   笏
  6782. 笏                    笏Setain their values between procedure calls. By   笏
  6783. 笏                    笏Eefault, VIsualAge for Basic discards the values  笏
  6784. 笏                    笏Pf local variables as soon as a procedure         笏
  6785. 笏                    笏Uerminates.                                       笏
  6786. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6787. 笏1rivate             笏imits access to this procedure to the current    笏
  6788. 笏                    笏Nodule. By default, a procedure placed within a   笏
  6789. 笏                    笏Dode module is available from anywhere in the     笏
  6790. 笏                    笏Bpplication, regardless of where the procedure is 笏
  6791. 笏                    笏Eefined.                                          笏
  6792. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6793. 笏1rocedureName       笏dentifies the sub procedure. If this is an event 笏
  6794. 笏                    笏Qrocedure, make sure that ProcedureName refers to 笏
  6795. 笏                    笏Uhe object where the event is located. Refer to   笏
  6796. 笏                    笏Uhe default template generated by the Code Window 笏
  6797. 笏                    笏Gor guidance.                                     笏
  6798. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6799. 笏vent               笏5riggers the procedure. This is the name of an    笏
  6800. 笏                    笏Fvent recognized by VisualAge for Basic, such as  笏
  6801. 笏                    笏lick. Refer to the default generated by the Code 笏
  6802. 笏                    笏ditor.                                           笏
  6803. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6804. 笏rgument            笏1erforms calculations or identifies the objects   笏
  6805. 笏                    笏Xhen used or manipulated by the procedure.        笏
  6806. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6807.  
  6808.  
  6809. 笊絶武笊 16.4.1. Creating an Event Procedure 笊絶武笊
  6810.  
  6811. An event procedure is a normal sub procedure that responds to a user action or 
  6812. other event. Each event procedure is linked to its event by a VisualAge for 
  6813. Basic naming convention, which derives the name of the event procedure from the 
  6814. name of the object and the name of the event. For example, the Command1_Click 
  6815. event procedure is called when a user clicks on the Command1 component. 
  6816.  
  6817. The general form of an event procedure is: 
  6818.  
  6819. Sub ComponentName_Event ()
  6820.     [statements]
  6821. End Sub
  6822.  
  6823. VisualAge for Basic creates stubs (skeletal procedures) for all defined events. 
  6824. You can locate these stubs using the Code Editor. You add statements between 
  6825. the Sub and the End Sub statements to provide the programming logic. 
  6826.  
  6827. When a user clicks on a form, VisualAge for Basic calls the Form_Click event 
  6828. procedure. The following procedure uses the Print method to print the contents 
  6829. of the form, and then uses the Cls method to clear the contents of the form. 
  6830. The form retains graphics and components placed at design time. 
  6831.  
  6832. Sub Form_Click
  6833.     Form1.PrintForm
  6834.     Form1.Cls
  6835. End Sub
  6836.  
  6837.  
  6838. 笊絶武笊 16.4.2. Creating a General Procedure 笊絶武笊
  6839.  
  6840. You can also create general procedures, which are not associated with a 
  6841. specific object or event. To add a general procedure, open the Code Editor and 
  6842. choose a form or code module. Within a form, place a general procedure in the 
  6843. General Class/Object category in the Code Editor. 
  6844.  
  6845. You can include calls to a general procedure from any script in the same form. 
  6846. You cannot call a general procedure from another form. To use a general 
  6847. procedure in more than one form, place it in a module.bas file. You can call 
  6848. procedures in .bas modules from anywhere in the application. 
  6849.  
  6850.  
  6851. 笊絶武笊 16.5. Creating Function Procedures 笊絶武笊
  6852.  
  6853. A function procedure, like a sub procedure, consists of a set of statements, 
  6854. but a function also returns a value. You call a function by placing its name 
  6855. (and its arguments in parentheses) in an expression, wherever you would place a 
  6856. variable. For example, since (x + y) is an expression in VisualAge for Basic, 
  6857. so is (x + f(y)), where f is the name of a function. 
  6858.  
  6859. For example, you can create the function km2miles that converts Kilometers to 
  6860. Miles. The function km2miles accepts the number of Kilometers as an argument 
  6861. and returns the equivalent number of Miles. The following example calls a 
  6862. function within an expression: 
  6863.  
  6864. miles = km2miles(km)
  6865.  
  6866. The syntax for declaring a function procedure is: 
  6867.  
  6868. [Static] [Private] Function FunctionName ([Argument] [, ...]) [As
  6869.    ReturnType]
  6870.        [statements]
  6871. End Sub
  6872.  
  6873. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6874. 笏lement             笏escription                                       笏
  6875. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6876. 笏4tatic              笏akes local variables used within the procedure   笏
  6877. 笏                    笏Setain their values between procedure calls. By   笏
  6878. 笏                    笏Eefault, discards the values of local variables as笏
  6879. 笏                    笏Toon as a procedure terminates.                   笏
  6880. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6881. 笏1rivate             笏imits access to this procedure to the current    笏
  6882. 笏                    笏Nodule. By default, a procedure placed within a   笏
  6883. 笏                    笏Dode module is available from anywhere in the     笏
  6884. 笏                    笏Bpplication, regardless of where the procedure is 笏
  6885. 笏                    笏Eefined.                                          笏
  6886. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6887. 笏unctionName        笏dentifies the function procedure.                笏
  6888. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6889. 笏rgument            笏5he name and type of each argument passed to this 笏
  6890. 笏                    笏Qrocedure.                                        笏
  6891. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  6892. 笏3eturnType          笏4pecifies the variable type of the value that is  笏
  6893. 笏                    笏Seturned.                                         笏
  6894. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  6895.  
  6896. The following function procedure uses VisualAge for Basic's date functions to 
  6897. calculate the number of days that a person has been alive. The function accepts 
  6898. the person's birth date as an argument and returns the difference between the 
  6899. birth date and the current date. 
  6900.  
  6901. Function DaysAlive (BirthDate) as Integer
  6902.     If IsDate(BirthDate) Then
  6903.         DaysAlive = Int(Now - CVDate(BirthDate))
  6904.     Else
  6905.         DaysAlive = Null
  6906.     End If
  6907. End Function
  6908.  
  6909. You assign the return value of the function by referring to the name of the 
  6910. function procedure. This return value passes to the expression that invoked the 
  6911. function procedure. Because the function procedure returns a value, you can 
  6912. refer to it in an expression as if it were a variable: 
  6913.  
  6914. BirthDate = InputBox ("Please enter your birth date: ")
  6915. MsgBox "You are " &Str(DaysAlive(BirthDate)) &" days old."
  6916.  
  6917.  
  6918. 笊絶武笊 16.6. Accepting and Returning Values 笊絶武笊
  6919.  
  6920. VisualAge for Basic procedures can accept and return values in a number of 
  6921. ways. Unless specifically noted, the following information applies equally to 
  6922. sub and function procedures. 
  6923.  
  6924.  
  6925. 笊絶武笊 16.6.1. Accepting Arguments by Reference 笊絶武笊
  6926.  
  6927. By default, values passed to sub and function procedures as arguments are 
  6928. passed by reference. This means that if you pass a variable as an argument, 
  6929. VisualAge for Basic passes a pointer to that variable, rather than creating a 
  6930. copy of the variable for argument passing. 
  6931.  
  6932. Note that if the called procedure modifies a variable passed as an argument, 
  6933. the original variable in the calling procedure is modified. You can avoid this 
  6934. by passing arguments by value. 
  6935.  
  6936.  
  6937. 笊絶武笊 16.6.2. Accepting Arguments by Value 笊絶武笊
  6938.  
  6939. Use the ByVal keyword to force VisualAge for Basic to create a local variable 
  6940. of the same name as a passed argument. You can then modify the value of the 
  6941. argument within the procedure as a local variable without disrupting the 
  6942. contents of the variable used to provide the argument. 
  6943.  
  6944. The ByVal keyword creates a local variable of the same name. You can manipulate 
  6945. the argument's contents without affecting the original variable. For example: 
  6946.  
  6947. Sub SomeProcedure (ByVal Answer As String)
  6948.     Answer = Answer &" This Answer was provided as part of a survey."
  6949.     [statements]
  6950. End Sub
  6951.  
  6952.  
  6953. 笊絶武笊 16.6.3. Accepting Arrays as Arguments 笊絶武笊
  6954.  
  6955. You can pass an array as an argument to a procedure. When you pass an array, 
  6956. omit the array's size information in the Sub or Function statement; for 
  6957. example: 
  6958.  
  6959. Sub SomeProcedure (SomeArray() as Integer)
  6960.     Private N as Integer
  6961.     For N = 0 to 9
  6962.         Print SomeArray(N)
  6963.     Next N
  6964. End Sub
  6965.  
  6966. This technique lets you pass arrays of various sizes, as long as the 
  6967. programming logic of your application also supports it. 
  6968.  
  6969.  
  6970. 笊絶武笊 16.6.4. Accepting Objects as Arguments 笊絶武笊
  6971.  
  6972. You can pass a form or any of its components to a procedure as an argument. 
  6973. When you declare the argument in the Sub statement, specify form_name As Form. 
  6974. When you pass a component, specify the object's name, As, and the appropriate 
  6975. keyword in the Sub statement. The keyword can be Object, Control, or the class 
  6976. name of the particular component; for example, TextBox. 
  6977.  
  6978. Sub HideIt (Ctrl As Control)
  6979.     Ctrl.Visible = FALSE
  6980. End Sub
  6981.  
  6982.  
  6983. 笊絶武笊 16.6.5. Returning a Value (Function Procedures Only) 笊絶武笊
  6984.  
  6985. One of the defining characteristics of a function procedure is its ability to 
  6986. return a value. The return value allows you to call a function from within 
  6987. expressions. Consider the following example: 
  6988.  
  6989. Function Pounds2Dollars (Pounds) As Currency
  6990.     ConversionFactor = 1.5
  6991.     Pounds2Dollars = Pounds * ConversionFactor
  6992. End Function
  6993.  
  6994. By assigning a value to the name of the function procedure, you specify the 
  6995. value to return when the function procedure is called. The return value allows 
  6996. you to use the function directly within an expression: 
  6997.  
  6998. Print "Cost of the trip in Dollars: " &Str(Pounds2Dollars(TripCost))
  6999.  
  7000.  
  7001. 笊絶武笊 16.7. Setting the Scope of a Procedure 笊絶武笊
  7002.  
  7003. The scope of a procedure depends on where the procedure is declared and the use 
  7004. of the Private keyword: 
  7005.  
  7006.      A procedure declared within a form module is accessible only within that 
  7007.       form. 
  7008.  
  7009.      A procedure declared in a code module is accessible from anywhere within 
  7010.       the application. You can override this behavior by prefixing the 
  7011.       procedure declaration with the Private keyword. 
  7012.  
  7013.  
  7014. 笊絶武笊 16.8. Retaining Values (Static) 笊絶武笊
  7015.  
  7016. By default, the values of local variables within a procedure (or function) are 
  7017. discarded as soon as the procedure is exited. If you declare a variable as 
  7018. Static within a procedure, the variable retains its value from the last time 
  7019. the procedure was called. In this function, the value of CountVariable is 
  7020. retained from one call to the next: 
  7021.  
  7022. Function CountIt ()
  7023.     Static CountVariable
  7024.     If IsEmpty(CountVariable) Then
  7025.         CountVariable = 0
  7026.     End If
  7027.     CountVariable = CountVariable + 1
  7028.     CountIt = CountVariable
  7029. End Function
  7030.  
  7031. If you place the Static keyword before a sub or function procedure definition, 
  7032. all local variables within the procedure retain their values between calls. 
  7033.  
  7034.  
  7035. 笊絶武笊 16.9. Why Classes are Better 笊絶武笊
  7036.  
  7037. Although creating an application based on classes rather than procedures 
  7038. requires a bit more study and time at the beginning, the benefits to you and 
  7039. your organization are real and measurable. 
  7040.  
  7041. A primary advantage of classes is that the implementation of methods can change 
  7042. without affecting the objects of other classes. Other classes find such changes 
  7043. invisible as long as the public interface of the class remains the same 
  7044.  
  7045. An application based on classes is easier to understand, easier to maintain, 
  7046. and easier to expand. After you have created and debugged a class in one 
  7047. application, you can use the class in new applications, typically without 
  7048. further modification. 
  7049.  
  7050. See also:  Chapter 12, Object-Oriented Programming. 
  7051.  
  7052.  
  7053. 笊絶武笊 17. Chapter 12     Object-Oriented Programming 笊絶武笊
  7054.  
  7055. VisualAge for Basic is a powerful object-oriented development environment. You 
  7056. can use VisualAge for Basic statements to declare new classes. You can also 
  7057. declare specialized subclasses of existing classes- including the built-in 
  7058. components contained in the Toolbox, or external classes imported via the 
  7059. Component Catalog. *. 
  7060.  
  7061.  
  7062. 笊絶武笊 17.1. Classes and the VisualAge for Basic Model 笊絶武笊
  7063.  
  7064. You use VisualAge for Basic  to create applications by combining software 
  7065. objects. VisualAge for Basic creates objects according to the specifications 
  7066. contained in classes. For example, forms, which hold visual interfaces, are 
  7067. actually objects of the Form class. The components on the Toolbox are also 
  7068. classes. When you select SOM or OLE classes using the Component Catalog, you 
  7069. are actually making external classes available to VisualAge for Basic. 
  7070.  
  7071. A class is a specification for the construction of a software object. Classes 
  7072. combine related data variables and the procedures that manipulate them. You can 
  7073. create multiple objects according to the specifications in a class definition. 
  7074. When you drag multiple copies of a component to a form, you are actually 
  7075. creating several objects of the same class. After you create an object, it can 
  7076. operate in a manner independent from other objects based on the same class. 
  7077. Although the objects all have the same structure, the specific information 
  7078. stored in each object can be different. 
  7079.  
  7080. A powerful characteristic of classes is their ability to be subclasses. A 
  7081. subclass is a class which is based on another class. Subclasses inherit all of 
  7082. the characteristics of the classes upon which they are based. When you create a 
  7083. subclass, it is identical to the class that you based it upon. However, you can 
  7084. customize the subclass, by overriding existing behavior, or by adding special 
  7085. behavior. 
  7086.  
  7087. In addition to the component classes listed on the Toolbox and the external 
  7088. classes you can load using the Component Catalog, there is a third kind of 
  7089. class: the classes you declare using VisualAge for Basic statements. 
  7090.  
  7091. You can declare new classes using VisualAge for Basic statements, using a 
  7092. syntax similar to sub or function procedure syntax. You use classes as a way to 
  7093. organize related procedures and data variables, making your application easier 
  7094. to understand. You can also create a specialized subclass of an existing class, 
  7095. and add procedures specific to the needs of your department or organization. 
  7096.  
  7097. VisualAge for Basic treats forms, components, and external classes in the same 
  7098. way: they are all classes. The subclasses you declare using VisualAge for Basic 
  7099. inherit all the functionality of the classes upon which they are based, and can 
  7100. contain additional behavior. 
  7101.  
  7102.  
  7103. 笊絶武笊 17.1.1. The Elements of a Class 笊絶武笊
  7104.  
  7105. When you declare a class, you are writing a template, similar to a user-defined 
  7106. type definition, that guides VisualAge for Basic in the creation of 
  7107. objects-specifying their methods, member data, and properties. The following 
  7108. class elements are described in detail in later sections of this chapter: 
  7109.  
  7110. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  7111. 笏lass Element       笏escription                                       笏
  7112. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7113. 笏ata Member         笏 variable that stores part of the current state  笏
  7114. 笏                    笏Pf an object.                                     笏
  7115. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7116. 笏ethod              笏 sub or function procedure that implements part  笏
  7117. 笏                    笏Pf the services or behavior of an object. Special 笏
  7118. 笏                    笏Nethods are used to implement other parts of the  笏
  7119. 笏                    笏Dlass.                                            笏
  7120. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7121. 笏onstructor Method  笏 sub procedure called New() that initializes new 笏
  7122. 笏                    笏Pbjects.                                          笏
  7123. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7124. 笏estructor Method   笏 sub procedure called Delete() that performs     笏
  7125. 笏                    笏Dleanup operations before an object of the class  笏
  7126. 笏                    笏Js destroyed.                                     笏
  7127. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7128. 笏1roperty            笏n attribute of the object, such as color or      笏
  7129. 笏                    笏Ieight. Properties are part of the interface      笏
  7130. 笏                    笏Qrocedures use to communicate with an object.     笏
  7131. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  7132.  
  7133. Restriction:  Events can be inherited by subclasses. However, you cannot define 
  7134. an event using VisualAge for Basic syntax. 
  7135.  
  7136.  
  7137. 笊絶武笊 17.1.2. Classes You Can Create 笊絶武笊
  7138.  
  7139. In the VisualAge for Basic language, you can create classes of these general 
  7140. types: 
  7141.  
  7142.      Non-visual classes. You can add these classes to a graphical user 
  7143.       interface, but they are not visible to the user during run time. You can 
  7144.       write an original non-visual class or write a class as a subclass of 
  7145.       another non-visual class. 
  7146.  
  7147.      Visual classes. These classes do have a visual representation at run 
  7148.       time.  You cannot write an original visual class in the VisualAge for 
  7149.       Basic language, but you can write a new subclass of an existing VisualAge 
  7150.       for Basic component class. For example, you can declare a subclass of the 
  7151.       TextBox class. When you subclass a visual component, the information you 
  7152.       add to the subclass does not appear until run time. For example, if you 
  7153.       add properties to a subclass using VisualAge for Basic statements, they 
  7154.       will not appear in the Property Editor. 
  7155.  
  7156.  
  7157. 笊絶武笊 17.2. Declaring a Non-Visual Class 笊絶武笊
  7158.  
  7159. You declare a non-visual class using VisualAge for Basic statements. Class 
  7160. declarations should be placed in a code module (.bas) file. You can declare 
  7161. multiple classes in the same code module file, or create a code module file for 
  7162. each class declaration you create. 
  7163.  
  7164. A class declaration identifies data members, the constructor and destructor 
  7165. methods, methods of the class, and property assignments. The following example 
  7166. declares a typical non-visual class: 
  7167.  
  7168. Class EmployeePay
  7169.     Private HourlyRateVar as Currency
  7170.     Private VacationPay As Currency
  7171.  
  7172.     Sub New()
  7173.         HourlyRateVar = 0
  7174.     End Sub
  7175.  
  7176.     Sub Delete()
  7177.         Form1.Print "Deleting EmployeePay object"
  7178.     End Sub
  7179.  
  7180.     Function CalculateVacationPay() As Currency
  7181.         CalculateVacationPay = HourlyRateVar * 0.04
  7182.     End Function
  7183.  
  7184.     Property Get VacationPay() As Currency
  7185.         VacationPay = CalculateVacationPay()
  7186.     End Property
  7187.  
  7188.     Property Get HourlyRate() As Currency
  7189.         HourlyRate = HourlyRateVar
  7190.     End Property
  7191.  
  7192.     Property Let HourlyRate(HourlyRateArg As Currency)
  7193.         If HourlyRateArg >= 0 Then
  7194.             HourlyRateVar = HourlyRateArg
  7195.         Else
  7196.             HourlyRateVar = 0
  7197.         End If
  7198.     End Property
  7199.  
  7200. End Class
  7201.  
  7202. HourlyRateVar and VacationPay are data members. HourlyRateVar and VacationPay 
  7203. are private, so they cannot be accessed outside this class. 
  7204.  
  7205. The New method is called a constructor. When VisualAge for Basic creates an 
  7206. object, it automatically executes the method called New. The Delete method is 
  7207. called a destructor. It is for cleanup operations. VisualAge for Basic 
  7208. automatically executes the Delete method when the last reference to an object 
  7209. of this class is removed-just before it deletes the object. 
  7210. CalculateVacationPay is a method implemented as a function procedure. 
  7211.  
  7212. When you include an accessor method, using the Property Get keywords, VisualAge 
  7213. for Basic declares a read-only property called VacationPay. When you include a 
  7214. pair of accessor methods, using the Property Get and Property Let keywords, 
  7215. VisualAge for Basic declares a read-write property called HourlyRate. 
  7216.  
  7217.  
  7218. 笊絶武笊 17.2.1. Data Members 笊絶武笊
  7219.  
  7220. An object's current state is stored in data members, which are data variables 
  7221. declared within the class. In general, it is good programming practice to 
  7222. declare each data member Private so it cannot be accessed outside the class. If 
  7223. other objects need to manipulate the value stored in a data member, declare it 
  7224. as a property. A private data member can still be accessed by other members of 
  7225. the class in which it is declared. 
  7226.  
  7227. Tip:  Private data members are always protected in VisualAge for Basic. 
  7228. Although data members cannot be accessed outside the class in which they are 
  7229. declared, they are inherited by subclasses. Subclasses therefore have access to 
  7230. data members declared in their base classes. 
  7231.  
  7232. See also:  Declaring Properties. 
  7233.  
  7234. To declare a data member, use the same syntax you use to declare a variable 
  7235. within a procedure. For example: 
  7236.  
  7237. Private HourlyRateVar As Currency
  7238.  
  7239. Tip:  Do not declare data members within the body of the New() constructor 
  7240. method if they are needed by other members of the class. Instead, declare data 
  7241. members outside the body of the New() method declaration, using the Private or 
  7242. Public keywords. You can then set the initial values for the data members 
  7243. within the constructor method. VisualAge for Basic initializes data members to 
  7244. 0 by default. It also erases the contents of a data member within an object of 
  7245. a class when the last reference to the object of the class is removed. 
  7246.  
  7247.  
  7248. 笊絶武笊 17.2.2. Methods 笊絶武笊
  7249.  
  7250. A method is a procedure that performs an action in relation to an object of a 
  7251. class. A method is a sub or function procedure that is declared within the body 
  7252. of a class. A method implemented as a function procedure returns a value, 
  7253. whereas a method implemented as a sub procedure does not return a value. 
  7254.  
  7255. The following example declares a method called CalculateVacationPay: 
  7256.  
  7257.     Function CalculateVacationPay() As Currency
  7258.         CalculateVacationPay = HourlyRateVar * 0.04
  7259.     End Function
  7260.  
  7261. In the same way you invoke a method on a component, you can invoke a method on 
  7262. an object of a class. For example, if you created an object of the class 
  7263. EmployeePay as EmpPay1, you can invoke the CalculateVacationPay method in the 
  7264. following manner: 
  7265.  
  7266. VacPayVar = EmpPay1.CalculateVacationPay()
  7267.  
  7268.  
  7269. 笊絶武笊 17.2.3. Constructor Method 笊絶武笊
  7270.  
  7271. The constructor method (Sub New) handles operations that are required when you 
  7272. first create an object, for example, initializing data members. If you write a 
  7273. New method for your class, VisualAge for Basic calls it automatically when it 
  7274. creates a new object of that class. A New method can prevent programming 
  7275. errors, because initialization is performed automatically. The following 
  7276. example initializes the HourlyRateVar variable when the object is created: 
  7277.  
  7278.     Sub New()
  7279.         HourlyRateVar = 0
  7280.     End Sub
  7281.  
  7282. Tip:  As with any sub procedure, variables declared within a method are private 
  7283. to that method. If you need to declare a variable that must be available to all 
  7284. members of the class, declare the variable as a separate member, outside the 
  7285. body of a specific method. It is good programming practice to declare data 
  7286. members with the Private keyword wherever possible. A Private data member is 
  7287. available to other members of the same class and its subclasses, but is not 
  7288. available outside the class. 
  7289.  
  7290.  
  7291. 笊絶武笊 17.2.4. Destructor Method 笊絶武笊
  7292.  
  7293. You can define a special method called Delete() that is automatically executed 
  7294. when the last reference to the object is removed. In this method, include any 
  7295. operations that must be performed just before the object is destroyed. For 
  7296. example, relinking the remaining elements of a linked list when an element is 
  7297. deleted. This method is referred to as the destructor method. 
  7298.  
  7299.  
  7300. 笊絶武笊 17.2.5. Declaring Properties 笊絶武笊
  7301.  
  7302. You declare properties to provide a means to control the state or behavior of 
  7303. an object, such as its color or height. You declare a property by providing 
  7304. methods that provide read and/or write access. These methods are called 
  7305. accessor methods. You control a property using the same syntax you use to 
  7306. control a variable. Properties are safer than variables because their accessor 
  7307. functions can make decisions about whether a proposed value should be rejected. 
  7308. If you specify a Get accessor method, VisualAge for Basic creates a read-only 
  7309. property. If you specify a Get and Let or Set accessor method, VisualAge for 
  7310. Basic creates a read-write property. If you only specify a Let or Set method, 
  7311. VisualAge for Basic creates a write-only property. 
  7312.  
  7313. A Get method retrieves the value of a property. A Let or Set method sets the 
  7314. value of a property. Set accessor methods provide a means by which an object 
  7315. can be stored as the value of a property. Use Let accessors to define access 
  7316. for fundamental types such String or Currency. Use Set for object types. 
  7317.  
  7318.  
  7319. 笊絶武笊 17.2.5.1. Declaring a Get Accessor Method 笊絶武笊
  7320.  
  7321. If a procedure attempts to read the value of a property on an object, VisualAge 
  7322. for Basic automatically invokes the appropriate Get accessor method. The Get 
  7323. accessor method is simply a function procedure that returns a value. However, 
  7324. from outside the class, the operation is analogous to retrieving the value of a 
  7325. public data member. The following example shows a Get accessor method: 
  7326.  
  7327.     Property Get HourlyRate() As Currency
  7328.          HourlyRate = HourlyRateVar
  7329.     End Property
  7330.  
  7331. VisualAge for Basic automatically invokes this accessor method when it 
  7332. encounters the following statement: 
  7333.  
  7334. EmployeeHourlyRateVar = EmpPay1.HourlyRate
  7335.  
  7336.  
  7337. 笊絶武笊 17.2.5.2. Declaring a Let Accessor Method 笊絶武笊
  7338.  
  7339. If a procedure attempts to write the value of a property on an object, 
  7340. VisualAge for Basic automatically invokes the appropriate Let accessor method. 
  7341. The Let accessor method is a sub procedure that implicitly accepts the value 
  7342. written to the property as a parameter to the accessor method. The accessor 
  7343. method can contain instructions that verify proposed property values, so that 
  7344. illegal values are rejected without crashing the object. The following example 
  7345. shows a Let accessor method with a single argument: 
  7346.  
  7347.     Property Let HourlyRate(HourlyRateArg As Currency)
  7348.         If HourlyRateArg >= 0 Then
  7349.              HourlyRateVar = HourlyRateArg
  7350.         Else
  7351.                HourlyRateVar = 0
  7352.         End If
  7353.     End Property
  7354.  
  7355. VisualAge for Basic automatically invokes this accessor method if it encounters 
  7356. the following statement: 
  7357.  
  7358. EmpPay1.HourlyRate = EmployeeHourlyRateVar
  7359.  
  7360.  
  7361. 笊絶武笊 17.2.5.3. Declaring a Set Accessor Method for Properties Containing Objects 笊絶武笊
  7362.  
  7363. In addition to simple data types, you can store objects within properties. You 
  7364. must use the Set keyword, rather than the Let keyword, to define a way of 
  7365. storing object data in a property. The following example shows how the Set 
  7366. keyword provides access to object data within properties: 
  7367.  
  7368. Class TestClass
  7369.     Private VarA As AnotherClass
  7370.     Property Get AProperty() As AnotherClass
  7371.         Set AProperty = VarA
  7372.     End Property
  7373.  
  7374.     Property Set AProperty(X As AnotherClass)
  7375.         Set VarA = X
  7376.     End Property
  7377.  
  7378. End Class
  7379.  
  7380. Class AnotherClass
  7381.     Private VarB As Integer
  7382.  
  7383.     Default Property Let TheDefProp(X As Integer)
  7384.          VarB = X
  7385.     End Property
  7386.  
  7387.     Default Property Get TheDefProp() As Integer
  7388.            TheDefProp = VarB
  7389.     End Property
  7390. End Class
  7391.  
  7392. Sub Form_Click()
  7393.     Dim Y As AnotherClass
  7394.     Dim X As TestClass
  7395.     Set Y = New AnotherClass
  7396.     Set X = New TestClass
  7397.     Y = 5
  7398. Set X.AProperty = Y
  7399. Form1.Print X.AProperty
  7400. End Sub
  7401.  
  7402. To assign the value to the property, use the following statement: 
  7403.  
  7404. Y = 5
  7405.  
  7406. The previous expression assigns the value to the default property of the object 
  7407. stored in the AProperty property. The Default keyword has designated TheDefProp 
  7408. as the property to manipulate when an expression assigns a value to the object 
  7409. directly. The expression is equivalent to: 
  7410.  
  7411. Y.TheDefProp = 5
  7412.  
  7413.  
  7414. 笊絶武笊 17.2.5.4. Designating a Default Property 笊絶武笊
  7415.  
  7416. VisualAge for Basic permits implicit property access. For example, if you are 
  7417. assigning a value to an object Y, you can do so either explicitly: 
  7418.  
  7419. Y.TheDefProp = 5
  7420.  
  7421. or implicitly: 
  7422.  
  7423. Y = 5
  7424.  
  7425. Implicit property access requires that you designate a property as the default 
  7426. property within the class declaration. You can designate a default property by 
  7427. preceding the declaration of the Get and/or Let or Set accessor methods with 
  7428. the Default keyword: 
  7429.  
  7430. Class TestDefault
  7431.     Private HourlyRateVar As Currency
  7432.     Default Property Get HourlyRate() As Currency
  7433.          HourlyRate = HourlyRateVar
  7434.      End Property
  7435.  
  7436.     Default Property Let HourlyRate(HourlyRateArg As Currency)
  7437.           If HourlyRateArg >= 0 Then
  7438.              HourlyRateVar = HourlyRateArg
  7439.           Else
  7440.              HourlyRateVar = 0
  7441.           End If
  7442.     End Property
  7443. End Class
  7444.  
  7445. Important:  You can only designate one default set of accessor methods per 
  7446. class. *. 
  7447.  
  7448.  
  7449. 笊絶武笊 17.2.5.5. Declaring Properties as Read or Write 笊絶武笊
  7450.  
  7451. If you implement a property with a Get accessor method, but you do not specify 
  7452. a Let or Set accessor method, VisualAge for Basic declares the property is 
  7453. read-only. Conversely, if you implement with a Let or Set accessor method, but 
  7454. you do not specify a Get accessor method, VisualAge for Basic declares the 
  7455. property as write-only. If you implement a property with both Get and Let or 
  7456. Set accessor methods, VisualAge for Basic declares it as read-write. 
  7457.  
  7458.  
  7459. 笊絶武笊 17.3. Subclassing from a Non-Visual Class 笊絶武笊
  7460.  
  7461. In order to create a subclass of an existing non-visual class, use the same 
  7462. syntax you would use to declare a new class, specifying the base class as the 
  7463. type for the new class. For example: 
  7464.  
  7465. Class ManagerPay As EmployeePay
  7466.     Sub New() As EmployeePay()
  7467.         [statements]
  7468.     End Sub
  7469. End Class
  7470.  
  7471. Any new properties or methods you specify in the declaration of the subclass 
  7472. are available to objects of the subclass, in addition to the functionality 
  7473. inherited from the base class. 
  7474.  
  7475.  
  7476. 笊絶武笊 17.4. Subclassing from a Visual Class 笊絶武笊
  7477.  
  7478. In order to create a subclass of a visual class (a component from the Toolbox), 
  7479. use the same syntax you would use to declare a new class, specifying the base 
  7480. class as the type for the new class. For example: 
  7481.  
  7482. Class ManagerPayForm As Form
  7483.     Private ManagerDepartmentVar As Integer
  7484.     Sub New() As Form(App, "MyForm", Nothing, 1000, 1000, 2000, 1000)
  7485.     End Sub
  7486.  
  7487.     Property Get ManagerDepartment() As Integer
  7488.          ManagerDepartment = ManagerDepartmentVar
  7489.     End Property
  7490.  
  7491.     Property Let ManagerDepartment(ManagerDepartmentArg As Integer)
  7492.          ManagerDepartmentVar = ManagerDepartmentArg
  7493.    End Property
  7494.  
  7495. End Class
  7496.  
  7497. In addition to the functionality inherited from the Form component class, 
  7498. objects of the ManagerPayForm subclass also have a property called 
  7499. ManagerDepartment. 
  7500.  
  7501.  
  7502. 笊絶武笊 17.4.1. Invoking Base Class Constructor Arguments 笊絶武笊
  7503.  
  7504. You must invoke the constructor method of the visual base class in the 
  7505. constructor of the subclass, passing the arguments required by the constructor 
  7506. of the base class. You do this by specifying the name of the base class as a 
  7507. type for the constructor of the subclass, passing the arguments required by the 
  7508. constructor of the base class: 
  7509.  
  7510.     Sub New() As BaseClassName(Argument1, Argument2 [,...])
  7511.         [statements]
  7512.     End Sub
  7513.  
  7514. See also:  Component Constructor Syntax, in theVisualAge for Basic Language 
  7515. Reference Online Help for a complete listing of the constructor arguments for 
  7516. the component classes shipped with VisualAge for Basic. 
  7517.  
  7518.  
  7519. 笊絶武笊 17.5. Inheritance 笊絶武笊
  7520.  
  7521. When you declare a subclass of an existing class, you are declaring a new class 
  7522. that will inherit the features of the class upon which it is based. You can 
  7523. also declare a subclass of a subclass, creating a class that can inherit the 
  7524. features of two levels of classes. You can use inheritance to design a 
  7525. hierarchy of classes in which you place features that are shared by all classes 
  7526. in a common base class, while specialized behavior is placed in subclasses at 
  7527. various levels of the hierarchy. In this way, you can greatly reduce redundancy 
  7528. in your application, by placing shared behavior in a few classes. The following 
  7529. diagram illustrates a hierarchy of specialized subclasses:
  7530.  
  7531. The Employee class contains properties and methods that are common to all 
  7532. employees, such as EmployeeName and EmployeeNumber. However, there are 
  7533. different kinds of employees within an organization. Specialized subclasses can 
  7534. inherit the properties and methods common to all employees, while each provides 
  7535. the specific attributes required to track a specific kind of employee. 
  7536.  
  7537. In the example shown above, the HourlyEmployee subclass inherits the 
  7538. EmployeeName and EmployeeNumber properties of the Employee class. In addition 
  7539. to those inherited attributes, the HourlyEmployee subclass also contains the 
  7540. additional property HourlyRate, as well as the properties HoursWorked and 
  7541. VacationEarned. 
  7542.  
  7543. The HEmpPerm and HEmpTemp subclasses of the HourlyEmployee class provide a 
  7544. further level of specialization. The HEmpPerm inherits all the features of the 
  7545. HourlyEmployee class as well as those of the Employee class. The HEmpPerm 
  7546. subclass contains the property YearsOfService, while the HEmpTemp subclass 
  7547. contains the property DaysOfService. 
  7548.  
  7549. The VacationEarned property, which both HEmpPerm and HEmpTemp inherit, 
  7550. calculates the value of VacationEarned by multiplying the number of hours 
  7551. worked by 4%. While this approach is appropriate for permanent hourly 
  7552. employees, who will collect their vacations as time off, it is not appropriate 
  7553. for temporary employees, who will collect the amount as a cash lump sum. This 
  7554. problem introduces the concepts of overriding methods and polymorphism. 
  7555.  
  7556.  
  7557. 笊絶武笊 17.5.1. Overriding Methods and Polymorphism 笊絶武笊
  7558.  
  7559. By providing a new implementation to override the inherited accessor method, 
  7560. the VacationEarned property behaves in a completely different manner in objects 
  7561. of the HEmpTemp class than it does in objects of the HourlyEmployee class. The 
  7562. ability of different objects to respond to the same method call in different 
  7563. ways is called inheritance-based polymorphism. 
  7564.  
  7565. The act of replacing the implementation of a class with a different algorithm 
  7566. in a subclass is called overriding. All methods of classes declared in 
  7567. VisualAge for Basic can be overridden. Because properties are implemented by 
  7568. pairs of accessor methods, you override properties by overriding the methods 
  7569. that implement them. 
  7570.  
  7571. When you override a method in a subclass, you are instructing VisualAge for 
  7572. Basic to ignore the implementation for a method that was inherited from its 
  7573. base class, and to use an alternative implementation instead. 
  7574.  
  7575. The VacationEarned property contained in the HourlyEmployee class is 
  7576. implemented by the following accessor method: 
  7577.  
  7578.     Property Get VacationEarned() As Currency
  7579.         VacationEarned = HoursWorked * HourlyRate * 0.04
  7580.     End Property
  7581.  
  7582. A call to this property would return a value in currency: 
  7583.  
  7584. VacationVar = HourlyEmployeeObject.VacationEarned
  7585.  
  7586. However, temporary employees earn a higher vacation premium. In the declaration 
  7587. of the HEmpTemp subclass, the implementation for the VacationEarned property is 
  7588. overridden by the declaration of a new accessor method of the same name: 
  7589.  
  7590. Class HEmpTemp As HourlyEmployee
  7591.     Sub New() As HourlyEmployee()
  7592.          Form1.Print "Startup of HEmpTemp Object"
  7593.     End Sub
  7594.  
  7595.     Property Get VacationEarned() As Currency
  7596.            VacationEarned = HoursWorked * HourlyRate * 0.06
  7597.     End Property
  7598.  
  7599. End Class
  7600.  
  7601. A call to this property would return a value in currency: 
  7602.  
  7603. VacationVar = HEmpTempObject.VacationEarned
  7604.  
  7605. Important:  You must specify the same argument list for the new property or 
  7606. method implementation as exists in properties or methods of the same name in 
  7607. the base class. Overriding an existing method or property with a different 
  7608. argument list causes an error. 
  7609.  
  7610.  
  7611. 笊絶武笊 17.5.2. Inheritance and Scope 笊絶武笊
  7612.  
  7613. Subclasses inherit all methods and properties of all classes in the chain of 
  7614. inheritance. Data members declared with the Private keyword are also inherited 
  7615. by subclasses of the class in which they are declared. Private members are 
  7616. analogous to protected members in C++. 
  7617.  
  7618.  
  7619. 笊絶武笊 17.5.3. Multiple Inheritance: Combining Base Classes 笊絶武笊
  7620.  
  7621. You can create a subclass that inherits the attributes of two or more base 
  7622. classes. Instead of specifying a single base class from which the subclass 
  7623. should inherit its attributes, specify multiple classes as the type for the new 
  7624. class: 
  7625.  
  7626. Class MultipleClass As BaseClass1 [,BaseClass2 [,...]]
  7627.     Sub New() As BaseClass1() [, BaseClass2() [,...]]
  7628.    End Sub
  7629.     [statements]
  7630. End Class
  7631.  
  7632.  
  7633. 笊絶武笊 17.5.3.1. An Example of Multiple Inheritance 笊絶武笊
  7634.  
  7635. The following example shows the declaration of a subclass called BothFruit, 
  7636. which inherits from the base classes AppleClass and OrangeClass. 
  7637.  
  7638. The following code declares a class called AppleClass: 
  7639.  
  7640. Class AppleClass
  7641.     Private AppleVar As Integer
  7642.     Sub New()
  7643.         AppleVar = 1
  7644.     End Sub
  7645.  
  7646.     Property Get Apples() As Integer
  7647.            Apples = AppleVar
  7648.      End Property
  7649.  
  7650. End Class
  7651.  
  7652. The following code declares a class called OrangeClass: 
  7653.  
  7654. Class OrangeClass
  7655.     Private OrangeVar As Integer
  7656.     Sub New()
  7657.         OrangeVar =1
  7658.     End Sub
  7659.  
  7660.     Property Get Oranges() As Integer
  7661.         Oranges = OrangeVar
  7662.     End Property
  7663.  
  7664. End Class
  7665.  
  7666. The following code declares a subclass called BothFruit which inherits from 
  7667. both AppleClass and OrangeClass: 
  7668.  
  7669. Class BothFruit As AppleClass, OrangeClass
  7670.     Sub New() As AppleClass(), OrangeClass()
  7671.     End Sub
  7672.  
  7673.     Property Get TotalFruit() As Integer
  7674.         TotalFruit = Apples() + Oranges()
  7675.     End Property
  7676.  
  7677. The AppleClass class contains a property called Apples. The OrangeClass class 
  7678. contains a property called Oranges. The BothFruit subclass inherits both the 
  7679. Apples and Oranges properties. In addition, it contains a property called 
  7680. TotalFruit, which contains the sum of the AppleClass and OrangeClass 
  7681. properties, inherited from the two base classes. 
  7682.  
  7683. You can test the inheritance of the properties from both base classes with the 
  7684. following procedure: 
  7685.  
  7686. Sub Form_Click
  7687.     Dim X As BothFruit
  7688.     Set X = New BothFruit
  7689.     Form1.Print X.Apples
  7690.     Form1.Print X.Oranges
  7691.     Form1.Print X.TotalFruit
  7692. End Sub
  7693.  
  7694. VisualAge for Basic retrieves or calculates the values of the three properties 
  7695. and prints them on the form: 
  7696.  
  7697. 1
  7698. 1
  7699. 2
  7700.  
  7701.  
  7702. 笊絶武笊 17.5.3.2. Multiple Inheritance and Visual Base Classes 笊絶武笊
  7703.  
  7704. You can specify a visual component as one of the base classes when you declare 
  7705. a subclass. Generally, you would do this if you wished to combine the 
  7706. attributes of a visual component with the attributes of one or more non-visual 
  7707. classes. 
  7708.  
  7709.  
  7710. 笊絶武笊 17.5.3.3. How Method and Property Name Conflicts Are Resolved 笊絶武笊
  7711.  
  7712. When you declare a subclass which inherits its attributes from multiple base 
  7713. classes, conflicts between methods and properties of the same name in both base 
  7714. classes may occur. VisualAge for Basic resolves method and property name 
  7715. conflicts by applying two rules: 
  7716.  
  7717.      Where two or more base classes have a method or property of the same 
  7718.       name, the implementation contained in the left-most base class in the 
  7719.       subclass declaration is adopted for the subclass. For example, if a 
  7720.       subclass declaration has the following form: 
  7721.  
  7722.                 Class NewClass As BaseClass1, BaseClass2, BaseClass3
  7723.  
  7724.      Conflicts between properties, methods, or data members of the same name 
  7725.       are resolved by accepting the definitions found in BaseClass1 over those 
  7726.       found in BaseClass2 or BaseClass3, and the definitions found in 
  7727.       BaseClass2 over those found in BaseClass3. 
  7728.  
  7729.      The specification of a new implementation for a method or property 
  7730.       accessor overrides any previous implementation for that method or 
  7731.       property accessor, including the implementation contained in the left- 
  7732.       most base class of the subclass declaration. 
  7733.  
  7734.  
  7735. 笊絶武笊 17.5.3.4. Multiple Visual Base Classes and Name Conflicts 笊絶武笊
  7736.  
  7737. Although you can declare a subclass that specifies more than one visual 
  7738. component as a base class, you should refrain from doing so. Subclassing from 
  7739. multiple visual base classes can produce visual subclasses that are difficult 
  7740. to to control. This is because visual components often have properties or 
  7741. methods of the same name. If you specify two or more visual components as base 
  7742. classes, VisualAge for Basic will resolve the name conflicts by ignoring the 
  7743. properties or methods of all but the left-most visual base class listed in the 
  7744. subclass declaration. 
  7745.  
  7746.  
  7747. 笊絶武笊 17.6. Using Classes 笊絶武笊
  7748.  
  7749. You can create and refer to objects of the classes you declare in VisualAge for 
  7750. Basic using the same syntax you use to refer to component instances. 
  7751.  
  7752.  
  7753. 笊絶武笊 17.6.1. To Create an Object of a Class Within a Procedure 笊絶武笊
  7754.  
  7755. To create a new object variable, create an object variable referring to the 
  7756. class name, preceded by the New keyword: 
  7757.  
  7758. Dim ObjectName As ClassName
  7759. Set ObjectName = New ClassName
  7760.  
  7761. You can combine the Dim and Set keywords to create an object using a single 
  7762. line of code: 
  7763.  
  7764. Dim ObjectName As New ClassName
  7765.  
  7766. The New keyword forces the instantiation of a new object of your class. For 
  7767. example, to create a new object of the HEmpPerm class, you would enter the 
  7768. following line within a procedure: 
  7769.  
  7770. Dim NewPermanentEmployee As HEmpPerm
  7771. Set NewPermanentEmployee = New HEmpPerm
  7772.  
  7773. You can also specify the name of the base class as the type for the object 
  7774. variable that will hold an object of the subclass: 
  7775.  
  7776.  
  7777. Dim NewPermanentEmployee As HourlyEmployee
  7778. Set NewPermanentEmployee = New HEmpPerm
  7779.  
  7780. Tip:  If you type an object variable using the type of the base class, rather 
  7781. than the type of the subclass, you are limited to the interface of the base 
  7782. class (the methods and properties declared in the base class.) However, if one 
  7783. of these methods or accessors references a method that you have overridden in 
  7784. the subclass, that behavior will still apply for the subclass object. 
  7785.  
  7786.  
  7787. 笊絶武笊 17.6.2. To Destroy an Object Within a Procedure 笊絶武笊
  7788.  
  7789. You destroy an object within a procedure by setting its value to Nothing: 
  7790.  
  7791. Set ObjectVariableName = Nothing
  7792.  
  7793.  
  7794. 笊絶武笊 17.6.3. Declaring Object Variables of Type Object or Type Variant 笊絶武笊
  7795.  
  7796. Although it is good programming practice to specifically type object variables 
  7797. to the class type of the object they will hold, you can also store objects in 
  7798. variables of type Object or of type Variant. Storing objects in variables of 
  7799. these types will result in slower execution of your application. This 
  7800. performance decrease is due to late binding. Normally, VisualAge for Basic 
  7801. analyzes all of the instructions in your program when you compile your program. 
  7802. This is called early binding. However, if you use object variables of type 
  7803. Object or of type Variant, VisualAge for Basic can only determine which 
  7804. instructions are necessary at run time. This is called late binding, and is 
  7805. slower than early binding. 
  7806.  
  7807.  
  7808. 笊絶武笊 17.6.3.1. Declaring Object Variables of Type Object 笊絶武笊
  7809.  
  7810. Dim NewPermanentEmployee As Object
  7811. Set NewPermanentEmployee = New HEmpPerm
  7812.  
  7813.  
  7814. 笊絶武笊 17.6.3.2. Declaring Object Variables of Type Variant 笊絶武笊
  7815.  
  7816. Dim NewPermanentEmployee As Variant
  7817. Set NewPermanentEmployee = New HEmpPerm
  7818.  
  7819.  
  7820. 笊絶武笊 17.6.4. Referring to Objects Using Object Variables 笊絶武笊
  7821.  
  7822. In order to access a method or property of an object, combine the name of the 
  7823. object and the property or method you are accessing. For example: 
  7824.  
  7825. EmployeeNumberVar = NewPermanentEmployee.EmployeeNumber
  7826.  
  7827. See also:  Chapter 9, Working with Data and Object Variables. 
  7828.  
  7829.  
  7830. 笊絶武笊 18. Chapter 13     Writing an Error-Handling Routine 笊絶武笊
  7831.  
  7832. You can create custom error-handling code to override VisualAge for Basic's 
  7833. default handling of run- time errors. 
  7834.  
  7835. This chapter describes how to write an error-handling routine by showing you 
  7836. how to: 
  7837.  
  7838.      Branch to the routine 
  7839.  
  7840.      Write the subroutine 
  7841.  
  7842.      Check the error code 
  7843.  
  7844.      Branch back to the application 
  7845.  
  7846.  When VisualAge for Basic encounters a run-time error, error-handling code is 
  7847.  executed. In some situations, error-handling code traps errors and takes 
  7848.  corrective action, allowing your application to continue executing. In other 
  7849.  situations, error-handling code may only be able to terminate your application 
  7850.  safely by closing all files and returning to the system. 
  7851.  
  7852.  
  7853. 笊絶武笊 18.1. Understanding Error Handling 笊絶武笊
  7854.  
  7855. Every software application experiences error conditions. Some of these errors 
  7856. are caused by flaws in the original source code instructions. Source code 
  7857. errors must be resolved by making the necessary corrections to the original 
  7858. VisualAge for Basic code. 
  7859.  
  7860. Many run-time error conditions are caused by unexpected conditions in the 
  7861. computer's operating environment. These conditions include problems such as 
  7862. lack of memory or disk space. 
  7863.  
  7864. In addition to performing remedial actions, error-handling code can report 
  7865. detailed diagnostic messages. Detailed error reporting can simplify 
  7866. troubleshooting. 
  7867.  
  7868. Error-handling code is a "last resort" measure. Try to prevent errors from 
  7869. occurring at run time by validating data wherever there is a possibility that 
  7870. an operation might result in an error condition, for example: 
  7871.  
  7872. If Denominator <> 0 Then
  7873.  
  7874.     Result = Numerator / Denominator
  7875.  
  7876. Else
  7877.  
  7878.    Result = 0
  7879.  
  7880. End If
  7881.  
  7882.  
  7883. 笊絶武笊 18.2. Step 1. Branching to the Routine 笊絶武笊
  7884.  
  7885. You use the On Error statement to branch program execution to an error-handling 
  7886. routine. The On Error statement has the following switches: 
  7887.  
  7888. On Error GoTo {Label | LineNumber | 0 | Resume Next}
  7889.  
  7890. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  7891. 笏1arameter           笏escription                                       笏
  7892. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7893. 笏abel               笏ndicates the beginning of the error-handling     笏
  7894. 笏                    笏Soutine using a tag or a label within the current 笏
  7895. 笏                    笏Qrocedure.                                        笏
  7896. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7897. 笏ineNumber          笏dentifies the line location in the procedure     笏
  7898. 笏                    笏Xhere the error-handling routine begins.          笏
  7899. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7900. 笏0                   笏isables error handling in the current procedure. 笏
  7901. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7902. 笏3esume Next         笏ontinues execution at line following the error.  笏
  7903. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  7904.  
  7905.  
  7906. 笊絶武笊 18.2.1. Labels Versus Line Numbers 笊絶武笊
  7907.  
  7908. Avoid using line numbers to identify the location of error-handling routines. 
  7909. This feature exists solely to retain compatibility with source code written for 
  7910. other versions of Basic. 
  7911.  
  7912. Tip:  Use labels to identify the location of error-handling routines. 
  7913.  
  7914.  
  7915. 笊絶武笊 18.3. Step 2. Storing Error-Handling Instructions in a Subroutine 笊絶武笊
  7916.  
  7917. You store the error-handling routine in a subroutine identified by a label 
  7918. within the current procedure. A subroutine is an informal section within a sub 
  7919. or function procedure. You mark the beginning of a subroutine with a label 
  7920. consisting of a string followed by a colon (:). You mark the end of the 
  7921. subroutine with the Resume statement. The Resume statement directs procedural 
  7922. execution back to the line where the error occurred, or to another location in 
  7923. the procedure. 
  7924.  
  7925.  
  7926. 笊絶武笊 18.4. Step 3. Analyzing the Meaning of Standard Error Codes 笊絶武笊
  7927.  
  7928. VisualAge for Basic reports error conditions using a set of standard error 
  7929. codes. The Err register returns the code corresponding to the most recent error 
  7930. condition.. Use this value to control a decision structure containing 
  7931. instructions to address individual problems. 
  7932.  
  7933. See also:  Trappable Errors of the VisualAge for Basic Language Reference 
  7934. Online Help for a complete listing of the VisualAge for Basic error codes. 
  7935.  
  7936.  
  7937. 笊絶武笊 18.5. Step 4. Branching Back to the Application 笊絶武笊
  7938.  
  7939. You use the Resume statement: 
  7940.  
  7941.      To identify the end of an error-handling routine. 
  7942.  
  7943.      To branch program execution back to the calling procedure. 
  7944.  
  7945.      To branch program execution to another location identified by a label. 
  7946.  
  7947.  The Resume statement has the following syntax: 
  7948.  
  7949.   Resume [{0 | Next | Label}]
  7950.  
  7951.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  7952.   笏1arameter           笏escription                                       笏
  7953.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7954.   笏3esume {0}          笏3esumes execution at the line where the original  笏
  7955.   笏                    笏Frror occurred. This branching statement should   笏
  7956.   笏                    笏Pnly be used with resource errors, as opposed to  笏
  7957.   笏                    笏Mogic errors. For example, this branching         笏
  7958.   笏                    笏Ttatement could be useful if the trapped error    笏
  7959.   笏                    笏Dode indicated a locked file. However, if the     笏
  7960.   笏                    笏Priginal error was due to a flaw in program logic,笏
  7961.   笏                    笏Uhis statement could cause an unending loop.      笏
  7962.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7963.   笏3esume Next         笏3esumes execution at the line following the       笏
  7964.   笏                    笏Mocation of the original error.                   笏
  7965.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  7966.   笏Y Resume Label      笏3esumes execution at the location indicated by    笏
  7967.   笏                    笏abel.                                            笏
  7968.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  7969.  
  7970.  
  7971. 笊絶武笊 18.6. An Example Error-Handling Routine 笊絶武笊
  7972.  
  7973. The following code example shows an error-handling routine that intercepts 
  7974. error conditions during execution of a function procedure. 
  7975.  
  7976. Function SuccessRate (MadeSale as Integer, TotalApproached as
  7977. Single)
  7978.     On Error GoTo ErrorHandler
  7979.     SuccessRate = (MadeSale / TotalApproached) * 100
  7980.     Exit Function                            'Error-handling routine
  7981. ErrorHandler:
  7982.     If Err = 11 Then
  7983.        SuccessRate = 0
  7984.     Resume Next
  7985.     Else
  7986.        MsgBox Error(Err)
  7987.        End
  7988.     End If
  7989. End Function
  7990.  
  7991. The function returns the value of MadeSale divided by TotalApproached, 
  7992. expressed as a percentage. If TotalApproached is equal to zero, a 
  7993. division-by-zero error occurs. Normally, this would cause the application to 
  7994. stop execution. In this case, however, the error condition is intercepted by 
  7995. the On Error statement, which branches execution to the ErrorHandler 
  7996. error-handling routine. 
  7997.  
  7998. An If...Then structure within the ErrorHandler routine retrieves the value 
  7999. returned by the Err function. If the error code corresponds to 11 
  8000. (division-by-zero error), ErrorHandler assigns the value 0 to the function. The 
  8001. Resume Next statement branches program execution back to the line following the 
  8002. line that caused the original error. 
  8003.  
  8004. If an error condition other than error code 11 is detected, ErrorHandler uses 
  8005. the MsgBox statement and the Error function to display a detailed message 
  8006. explaining the error. ErrorHandler then terminates program execution using the 
  8007. End statement. 
  8008.  
  8009. The line immediately preceding the ErrorHandler: label contains the Exit 
  8010. Function statement, which bypasses execution of the routine's statements during 
  8011. non-error conditions. 
  8012.  
  8013.  
  8014. 笊絶武笊 19. Part 3  Integrating with External Systems 笊絶武笊
  8015.  
  8016.  
  8017. 笊絶武笊 20. Chapter 14     Integration Overview 笊絶武笊
  8018.  
  8019. VisualAge for Basic provides a myriad of tools to help you integrate your 
  8020. programs with other programming systems. Part 3 Integrating with External 
  8021. Systems, describes in detail how to integrate your programs with other 
  8022. programs, object systems, databases, and communication protocols. 
  8023.  
  8024. This chapter provides an overview of VisualAge for Basic's integration support. 
  8025. It also describes how to use the Component Catalog to integrate non-visual, 
  8026. external classes.  You can use this catalog for SOM, OLE, and OCX classes.  Of 
  8027. course you can also integrate visual classes; for more information see Adding 
  8028. Objects from Other Object Systems. 
  8029.  
  8030.  
  8031. 笊絶武笊 20.1. What Does VisualAge for Basic Support? 笊絶武笊
  8032.  
  8033. The following table lists the chapters in this part, and the supported 
  8034. environments. 
  8035.  
  8036. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8037. 笏hapter...                              笏escribes           笏4upported           笏
  8038. 笏                                        笏Jntegration with... 笏nvironment         笏
  8039. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8040. 笏ntegrating System Object Model (SOM)   笏4ystem Object Model 笏0S/2, Windows 95,   笏
  8041. 笏0bjects                                 笏                    笏Bnd Windows NT      笏
  8042. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8043. 笏andling OLE in VisualAge for Basic     笏0bject Linking and  笏8indows NT and      笏
  8044. 笏                                        笏mbedding           笏8indows 95          笏
  8045. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8046. 笏4tored Procedure OCX Component          笏B2 stored          笏8indows NT and      笏
  8047. 笏                                        笏Qrocedures via an   笏8indows 95          笏
  8048. 笏                                        笏0LE custom control  笏                    笏
  8049. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8050. 笏alling DLL Procedures                  笏ny program saved as笏0S/2,  Windows 95,  笏
  8051. 笏                                        笏B DLL               笏Bnd Windows NT      笏
  8052. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8053. 笏6sing OpenDoc Documents                 笏0penDoc             笏0S/2                笏
  8054. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8055.  
  8056.  
  8057. 笊絶武笊 20.2. Integrating Non-Visual Classes 笊絶武笊
  8058.  
  8059. VisualAge for Basic supports the integration of SOM and OLE non-visual classes. 
  8060. After integrating these classes, they can appear in the Toolbox, and you can 
  8061. interactively use the classes as you would any other VisualAge for Basic 
  8062. integrated class. 
  8063.  
  8064.  
  8065. 笊絶武笊 20.2.1. Customizing Integration with an Integration Data File 笊絶武笊
  8066.  
  8067. Non-visual classes use an integration file to provide information such as what 
  8068. icon to use in the Toolbox, help context ID, or help file. The format of this 
  8069. file is the same as a VisualAge for Basic form file (with an extension of .i). 
  8070. Integration data files have file names corresponding to the names of the 
  8071. classes they describe. You can customize certain aspects by creating or 
  8072. modifying the integration data file. 
  8073.  
  8074. When you save an integration file, you must set the directory path where the 
  8075. integration files can be found. When you refer to a class, VisualAge for Basic 
  8076. refers to the following to locate the corresponding integration file: 
  8077.  
  8078.      Current directory. 
  8079.  
  8080.      Directory environment variable in CLASSDATA. 
  8081.  
  8082.      VisualAge_dir/config directory. 
  8083.  
  8084.  
  8085. 笊絶武笊 20.2.1.1. Integration Data File Example 笊絶武笊
  8086.  
  8087. This section describes how to create an integration data file for the SOM 
  8088. Calculator class. 
  8089.  
  8090.    1. Open a Command Prompt window. 
  8091.  
  8092.    2. Make the directory containing the SOM example part the current directory: 
  8093.  
  8094.       cd \visage\samples\integrat\somcalc1 
  8095.  
  8096.    3. Open the NotePad application with the argument "SomCalculator.int" 
  8097.  
  8098.       notepad SomCalculator1.int. 
  8099.  
  8100.    4. When presented with the following dialog, click on the "Yes" button: 
  8101.  
  8102.    5. Within NotePad, enter the following text: 
  8103.  
  8104.       *SomCalculator1.IconLabel: TestLabel 
  8105.  
  8106.    6. Save the file and exit NotePad. Exit and re-enter VisualAge for Basic so 
  8107.       the change can take effect. 
  8108.  
  8109.  
  8110. 笊絶武笊 20.2.1.2. Additional Parameters You Can Specify in an Integration Data File 笊絶武笊
  8111.  
  8112. You can control many aspects of how VisualAge for Basic handles a part by 
  8113. specifying parameters in the integration data file. There are two groups of 
  8114. parameters you can configure: . 
  8115.  
  8116.      Those that apply to the part as a whole. 
  8117.  
  8118.      Those that apply to individual properties of the part. 
  8119.  . 
  8120.  
  8121.  Tip:  Each line in the integration data file describes one attribute of the 
  8122.  part. You do not have to describe every attribute-only those you wish to 
  8123.  customize for the integration. Each entry you specify in an integration data 
  8124.  file should have the following structure: 
  8125.  
  8126.   .
  8127.   *PartName.Parameter: Value
  8128.  
  8129.  For example, to specify that a help file called SOMCALC.HLP be used with the 
  8130.  example part, you would enter the following line in the integration data file: 
  8131.  
  8132.   .
  8133.   *SomCalculator1.HelpFile: SOMCALC.HLP
  8134.  
  8135.  
  8136. 笊絶武笊 20.2.1.3. Integration Properties for the Part as a Whole 笊絶武笊
  8137.  
  8138. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8139. 笏1arameter                     笏1ossible Values                                   笏
  8140. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8141. 笏conLabel                     笏Ttring                                            笏
  8142. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8143. 笏conFilename                  笏Gilename                                          笏
  8144. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8145. 笏elpFile                      笏Gilename                                          笏
  8146. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8147. 笏ontextID                     笏Mong                                              笏
  8148. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8149. 笏ditorAccess                  笏oAccess / ReadOnly / ReadWrite                   笏
  8150. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8151. 笏efaultEvent                  笏Ttring                                            笏
  8152. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8153. 笏ameProperty                  笏Ttring                                            笏
  8154. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8155. 笏1arentProperty                笏Ttring                                            笏
  8156. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8157. 笏ndexProperty                 笏Ttring                                            笏
  8158. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8159. 笏7isualClass                   笏Ttring                                            笏
  8160. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8161. 笏sManager                     笏5rue / False                                      笏
  8162. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8163. 笏sDrawnOnParent               笏5rue / False                                      笏
  8164. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8165. 笏sResizable                   笏5rue / False                                      笏
  8166. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8167. 笏sMoveable                    笏5rue / False                                      笏
  8168. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8169. 笏efaultWidth                  笏nteger                                           笏
  8170. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8171. 笏efaultHeight                 笏nteger                                           笏
  8172. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8173.  
  8174.  
  8175. 笊絶武笊 20.2.1.4. Integration Properties that Apply to Individual Properties of a Part 笊絶武笊
  8176.  
  8177. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8178. 笏1arameter                     笏1ossible Values                                   笏
  8179. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8180. 笏ditorAccess                  笏oAccess / ReadOnly / ReadWrite                   笏
  8181. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8182. 笏elayedSet                    笏oAccess / ReadOnly / ReadWrite                   笏
  8183. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8184. 笏ultiEdit                     笏5rue / False                                      笏
  8185. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8186. 笏annotBeExpression            笏5rue / False                                      笏
  8187. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8188. 笏7olatile                      笏5rue / False                                      笏
  8189. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8190. 笏7aluesList                    笏Jtem1 item2 item3...                              笏
  8191. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8192. 笏ixedList                     笏5rue / False                                      笏
  8193. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8194. 笏7aluesConstsList              笏Walue1 value2 value3 ...                          笏
  8195. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8196. 笏1ass                          笏0 / 1 / 2                                         笏
  8197. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8198. 笏ontextID                     笏Mong                                              笏
  8199. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8200. 笏efaultValue                  笏Ttring                                            笏
  8201. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8202.  
  8203.  
  8204. 笊絶武笊 20.2.2. Integrating SOM, OLE, and OCX 笊絶武笊
  8205.  
  8206. Any class referenced in a VisualAge for Basic project file (.prj) loads and 
  8207. appears in the Toolbox at startup. After VisualAge for Basic is running, you 
  8208. can integrate other classes using the Component Catalog. The Component Catalog 
  8209. displays all available classes through the SOM and OLE object system adapters 
  8210. (OSAs). 
  8211.  
  8212. The SOM, or OLE Operating System Adapters (OSAs) appear in the project outline 
  8213. under the Extensions category.  The OCXs appear under the OLE OSA. 
  8214.  
  8215. Important: If you want to use SOM objects, ensure that the VWADDSOM environment 
  8216. variable is set to YES. You can either set the variable in your config.sys (for 
  8217. OS/2) or autoexec.bat (for Windows NT and Windows 95) file, or you can set the 
  8218. variable when you need it. If you added SOM after installing VisualAge for 
  8219. Basic, you might need to update this environment variable. 
  8220.  
  8221. To load a class: 
  8222.  
  8223.    1. Open the Component Catalog by highlighting the OSA and clicking on 
  8224.       Selected=>Open Component Catalog. You can also open the Component Catalog 
  8225.       by selecting the Window=>Component Catalog menu item. The Component 
  8226.       Catalog appears, displaying a list of all available classes, including 
  8227.       OCXs. 
  8228.  
  8229.    2. To load a class, click on the box to the left of the component name. The 
  8230.       selected class automatically appears in the Toolbox, and the Components 
  8231.       node listing in the Project window automatically updates, displaying the 
  8232.       new component. 
  8233.  
  8234.  You can remove a class by highlighting the class and selecting the 
  8235.  Selected=>Remove menu item. A message dialog appears asking you to confirm the 
  8236.  removal of the class. 
  8237.  
  8238.  Creating a new project or loading an existing project also removes all 
  8239.  integrated classes. 
  8240.  
  8241.  Important:  You cannot remove the class from the project if an instance of the 
  8242.  component exists in your project. 
  8243.  
  8244.  
  8245. 笊絶武笊 20.2.3. Editing Properties of a Class 笊絶武笊
  8246.  
  8247. You can edit the properties of an instance of an integrated SOM or OLE class in 
  8248. the Property Editor. Enumerated properties display allowable values in a combo 
  8249. box. You can edit simple properties, such as integral type properties (int, 
  8250. single, etc.) and enumerated properties,  in constant or expression mode. The 
  8251. initial value of more complex properties such as unions, structures, and 
  8252. objects utilizing expressions can only be set in expression mode. Constant mode 
  8253. is not available unless a quick selector or specialized editor exists for that 
  8254. property. 
  8255.  
  8256. You can edit properties of OCX instances, including: 
  8257.  
  8258.      Enumerated types 
  8259.  
  8260.      Blobs 
  8261.  
  8262.      Picture-like properties saved in .frx files 
  8263.  
  8264.      Properties providing quick selector, or type editor 
  8265.  
  8266.  
  8267. 笊絶武笊 20.2.4. Editing Code for a Class 笊絶武笊
  8268.  
  8269. Instances of classes that do not have events do not show up in the Code 
  8270. Editor's middle combo box. 
  8271.  
  8272.  
  8273. 笊絶武笊 20.2.5. Generating an Executable 笊絶武笊
  8274.  
  8275. If you generate an executable for a project containing integrated OCX, SOM, or 
  8276. OLE classes, the information required to find and create instances of the class 
  8277. is built into the executable file. 
  8278.  
  8279. If the classes cannot be found at run time, the executable gives an error 
  8280. message and quits. The following rror situations can occur: 
  8281.  
  8282.      A form.i file that creates an instance of an OCX or SOM class loads 
  8283.       through the Project window File=>Add File menu item. VisualAge for Basic 
  8284.       loads the file, reports an error that it cannot create a class instance, 
  8285.       and continues loading the rest of the file. 
  8286.  
  8287.      A project that refers to an OCX or SOM class that is not available in the 
  8288.       system loads  through the Project window File=>Open Project menu item. 
  8289.       VisualAge for Basic reports errors stating it cannot create the SOM 
  8290.       instances and continues loading the project. 
  8291.  
  8292.  In both cases, attempting to go to Test mode results in compilation errors or 
  8293.  run-time exceptions. 
  8294.  
  8295.  See also:  Creating an Executable for more information on creating an 
  8296.  executable. 
  8297.  
  8298.  
  8299. 笊絶武笊 21. Chapter 15     Integrating System Object Model (SOM)  Objects 笊絶武笊
  8300.  
  8301. In VisualAge for Basic, you can use System Object Model (SOM) classes in your 
  8302. application.  This chapter describes SOM, and how to make your SOM classes work 
  8303. with VisualAge for Basic.  The example in this section shows how to use the 
  8304. SomCalculator object in VisualAge for Basicfor Basic.  To use this object you 
  8305. must: 
  8306.  
  8307.      Create your SOM IDL file. 
  8308.  
  8309.      Set the SOM environment variables. 
  8310.  
  8311.      Specify an initialization function. 
  8312.  
  8313.      Register the SOM object. 
  8314.  
  8315.      Load the object onto the Toolbox. 
  8316.  
  8317.  
  8318. 笊絶武笊 21.1. What is SOM? 笊絶武笊
  8319.  
  8320. SOM is an object-oriented programming technology for building, packaging, and 
  8321. manipulating reusable binary class libraries.  With SOM, you describe the 
  8322. interface for a class of objects in a standard language, called the Interface 
  8323. Definition Language (IDL).  You then implement methods in your preferred 
  8324. language, which can either be an object-oriented language, such as C++, 
  8325. Object-Oriented COBOL, or a procedural language, such as C. 
  8326.  
  8327. Unlike the object model found in formal object-oriented programming systems, 
  8328. SOM is language neutral. It preserves the key object-oriented programming 
  8329. characteristics of encapsulation, inheritance, and polymorphism without 
  8330. requiring the implementor of a SOM class and user of a SOM class to use the 
  8331. same programming language. 
  8332.  
  8333. See also:  SOM is an implementation of the Common Object Request Brokerage 
  8334. Architecture (CORBA).  CORBA objects and VisualAge for Basic Type Mapping lists 
  8335. the type mapping between CORBA objects and VisualAge for Basic data types. 
  8336.  
  8337. For more information on implementing SOM classes and methods, see the 
  8338. SOMobjects Base Toolkit User's Guide, and the SOMobjects Base Toolkit 
  8339. Programmer's Reference Manual. 
  8340.  
  8341.  
  8342. 笊絶武笊 21.2. Writing a SOM IDL file 笊絶武笊
  8343.  
  8344. When you create your SOM IDL file, you need to include a dllname='name.dll" 
  8345. statement in the implementation section.  For example, in the IDL for the 
  8346. Calculator you must have the following statement: 
  8347.  
  8348.     dllname = "calc.dll";
  8349.  
  8350.  
  8351. 笊絶武笊 21.3. Setting the SOM Environment Variables 笊絶武笊
  8352.  
  8353. The following environment variables specify information needed by the SOM 
  8354. compiler, interface repository framework, and run time. 
  8355.  
  8356. See also:  For full details, see the SOMobjects Developer's Toolkit User Guide 
  8357. Version 2.1 
  8358.  
  8359.  SMINCLUDE Specifies where to look for #include files included by the .idl file 
  8360.            being compiled. 
  8361.  
  8362.                       set SMINCLUDE=.;c:\toolkt20\include;c:\som\include
  8363.  
  8364.  SMTMP     Specifies where to put intermediate output files. This directory 
  8365.            should not be the same as the ones where input and output files are 
  8366.            located. 
  8367.  
  8368.                       set SMTMP=c:\tmp\garbage
  8369.  
  8370.  SMEMIT    Specifies which emitters the SOM compiler runs.  The most frequent 
  8371.            emitters are: the .h emitter, which produces a header file for use 
  8372.            by a C client, the .c emitter, which produces C bindings, and the 
  8373.            .ih emitter, which produces the implementation header files. 
  8374.  
  8375.                       set SMEMIT="h,ih,c"
  8376.  
  8377.            For example, the following series of statements directs the SOM 
  8378.            Compiler to produce calculator class files and populate the IR from 
  8379.            the "calc.idl" input specifications: 
  8380.  
  8381.                       set SMEMIT="h,ih,c"
  8382.                       sc -usir calc.idl
  8383.  
  8384.  SOMIR     Specifies the location of the interface repositories. 
  8385.  
  8386.                       set SOMIR=c:\mydir\calc.ir
  8387.  
  8388.  As with the SOMIR environment variable, you can type these environment 
  8389.  variables when you need them. However, it is easier to put the above 
  8390.  statements in your config.sys or autoexec.bat file. 
  8391.  
  8392.  Important: If you want to use SOM objects, ensure that the VWADDSOM 
  8393.  environment variable is set to YES. You can either set the variable in your 
  8394.  config.sys (for OS/2) or autoexec.bat (for Windows NT and Windows 95) file, or 
  8395.  you can set the variable when you need it. If you added SOM after installing 
  8396.  VisualAge for Basic, you might need to update this environment variable. 
  8397.  
  8398.  
  8399. 笊絶武笊 21.4. Specifying an Initialization Function 笊絶武笊
  8400.  
  8401. You must provide an initialization function for the class library to support 
  8402. dynamic loading of the library by the SOM Class Manager.  The SOM Class Manager 
  8403. DLL expects that, whenever it loads a class library, the initialization 
  8404. function will create and register class objects for all of the classes 
  8405. contained in the library.  These classes are then managed as a group. 
  8406.  
  8407. The following example shows the initialization function for the Calculator: 
  8408.  
  8409. void SOMLINK SOMInitModule(integer4 majorVersion, integer4
  8410. minorVersion)
  8411.     printf("initializing\n");
  8412.     SOM_TraceLevel = 1;
  8413. /*    PrintStaticClassInfo(&SomCalculatorSCI); */
  8414.     SomCalculatorNewClass(0,0);
  8415. /*    PrintStaticClassInfo(&SomCalculatorSCI); */
  8416.     fflush(stdout);
  8417.  
  8418. The class DLL must export the function name SomInitModule, and the standard 
  8419. three externals for the class definitions:CalculatorNewClass, 
  8420. CalculatorClassData, and CalculatorCClassData. 
  8421.  
  8422. See also:  For full details, see the SOMobjects Developer's Toolkit User Guide 
  8423. Version 2.1. 
  8424.  
  8425.  
  8426. 笊絶武笊 21.5. Registering a SOM class 笊絶武笊
  8427.  
  8428. This section tells how to register the SomCalculator class and add it to your 
  8429. Toobox at run time. 
  8430.  
  8431. First, access the SomCalculator object files  and copy the following files to 
  8432. your directory. 
  8433.  
  8434. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8435. 笏ile                笏xtension Description                             笏
  8436. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8437. 笏Dalc.idl            笏efines the SOM object.                           笏
  8438. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8439. 笏Dalc.dll            笏mplementation file shown in the Component Catalog笏
  8440. 笏                    笏4OM listing.                                      笏
  8441. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8442. 笏Dalc.h              笏anguage-dependent binding file.                  笏
  8443. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8444. 笏Dalc.ih             笏anguage-dependent binding file.                  笏
  8445. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8446. 笏Dalc.c              笏anguage-dependent binding file.                  笏
  8447. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8448. 笏Dalc.mak            笏reates the .dll file.                            笏
  8449. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8450. 笏Sules.mak           笏ontains path information.                        笏
  8451. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8452.  
  8453. Important:  You need to ensure that your .idl file contains the DLL name in the 
  8454. implementation section, by including the following statement: 
  8455.  
  8456. dllname='calc.dll"
  8457.  
  8458. If the .dll file exists: 
  8459.  
  8460. To register the SOM object, enter: sc -sir -u calc.idl (ir = interface 
  8461. repository, u = update). You can access the registered .dll file using the 
  8462. Component Catalog. 
  8463.  
  8464. If the .dll file does not exist: 
  8465.  
  8466.    1. Access the directory where the calc.idl is stored. 
  8467.  
  8468.    2. Enter: 
  8469.  
  8470.              sc -sc;h;ih calc.idl.
  8471.  
  8472.       This command creates or updates the .h, .ih, and .c files 
  8473.       (language-dependent binding files).. 
  8474.  
  8475.    3. To register the SOM object, enter: 
  8476.  
  8477.              sc -sir -u calc.idl
  8478.  
  8479.       You can access the registered .dll file using the Component Catalog. 
  8480.  
  8481.    4. To confirm the proper registration of the SOM object, enter: 
  8482.  
  8483.             irdump SomCalculator
  8484.  
  8485.       Tip:  The name of the SOM Calculator can be viewed in the first few lines 
  8486.       of the calc.idl file. For example: 
  8487.  
  8488.             #include <somobj.idl>
  8489.             #define StackSize       8
  8490.  
  8491.             interface SomCalculator: SOMObject
  8492.  
  8493.    5. Create the .dll file by entering: 
  8494.  
  8495.              nmake -f calc.mak
  8496.  
  8497.       This creates the .dll file. 
  8498.  
  8499.    6. Windows NT and Windows 95: Specify the location of the .dll in the PATH 
  8500.       variable of autoexec.bat. 
  8501.  
  8502.       OS/2: Specify the location of the .dll in the LIBPATH variable of 
  8503.       config.sys.  Specifying the path ensures that VisualAge for Basic will 
  8504.       locate the DLL in the proper directory at run time. 
  8505.  
  8506.       Tip:  You could also copy the .dll file to a directory pointed to by the 
  8507.       PATH or LIBPATH variable. 
  8508.  
  8509.    7. Change the directory to /vwdir/config/. 
  8510.  
  8511.    8. Edit the somclses file, using a text editor, to include the 
  8512.       SomCalculator.  If the file does not exist, create the file using a 
  8513.       standard text editor, and save it as plain text. The name of the SOM 
  8514.       object is case sensitive. 
  8515.  
  8516.    9. If the SomCalculator does not load into your application, ensure that the 
  8517.       path in the .mak file matches your installation. If it still doesn't 
  8518.       load, ensure that: 
  8519.  
  8520.           The DLL exports the SomInitModule function. 
  8521.  
  8522.           You have included the correct DLL name. 
  8523.  
  8524.           You have registered the class in the interface repository. 
  8525.  
  8526.           The DLL resides in a directory pointed to by the PATH (on Windows NT 
  8527.            and Windows 95) or the LIBPATH (on OS/2) variable. 
  8528.  
  8529.  
  8530. 笊絶武笊 21.6. Changing a Registered SOM DLL 笊絶武笊
  8531.  
  8532. If you make modifications or add features the calculator, you must recompile 
  8533. your DLL. 
  8534.  
  8535.    1. Access the directory where the SOM Calculator files are stored. 
  8536.  
  8537.    2. At the prompt, enter 
  8538.  
  8539.             nmake clean
  8540.       This command removes old .obj, .h, .o, .ih, .dll, and .lib files from the 
  8541.       previous version. 
  8542.  
  8543.    3. Re-register the SOM Calculator after removing all old files. 
  8544.  
  8545.  
  8546. 笊絶武笊 21.7. Loading the SomCalculator onto the ToolBox 笊絶武笊
  8547.  
  8548.    1. Access the Component Catalog by highlighting Extensions in the Project 
  8549.       window. 
  8550.  
  8551.    2. Select Windows=>Component Catalog in the Project window. 
  8552.       The Component Catalog appears. 
  8553.  
  8554.    3. Select the SOM Object System using the drop-down selection box. 
  8555.  
  8556.    4. Select the Classes  button.  An outline of classes appears. 
  8557.  
  8558.    5. Select SomCalculator from the outline of classes. 
  8559.       The name that appears in the outline of classes matches the name 
  8560.       appearing in the .idl file. A check mark appears in the box. 
  8561.  
  8562.    6. The SomCalculator loads into the ToolBox. 
  8563.  
  8564.  You can load the SomCalculator on Form1. It appears as an icon. You can also 
  8565.  use code to reference the SomCalculator. 
  8566.  
  8567.  You use the attribute list in the .idl file to verify the methods. The 
  8568.  SomCalculator contains the mathematical methods Add, Subtract, Multiply, and 
  8569.  Divide. For example: 
  8570.  
  8571.   interface SomCalculator: SOMObject
  8572.   {
  8573.           attribute long Accum;
  8574.           void Push();
  8575.           long Pop();
  8576.           void Plus();
  8577.           void Minus();
  8578.           void Divide();
  8579.           void Multiply();
  8580.           void Clear();
  8581.           boolean Changed();
  8582.   }
  8583.  
  8584.  
  8585. 笊絶武笊 22. Chapter 16     Handling OLE in VisualAge for Basic 笊絶武笊
  8586.  
  8587. VisualAge for Basic lets you display editable data from external applications 
  8588. within your application using Object Linking and Embedding (OLE). You can 
  8589. configure the OLE object to edit data in its native application, which is the 
  8590. source, or within a window in your VisualAge for Basic application, which is 
  8591. the destination. 
  8592.  
  8593. Definition:  In the following discussion, the term source refers to the data's 
  8594. original environment. The term destination refers to your VisualAge for Basic 
  8595. application. 
  8596.  
  8597. Platform-specific information: OLE support is only available on the Windows NT 
  8598. and Windows 95 platforms. 
  8599.  
  8600. In this chapter you will learn: 
  8601.  
  8602.      Why you use OLE. 
  8603.  
  8604.      How to create OLE objects at design time and run time. 
  8605.  
  8606.      How to manipulate OLE objects. 
  8607.  
  8608.  
  8609. 笊絶武笊 22.1. OLE components versus OLE objects 笊絶武笊
  8610.  
  8611. You can create an instance of the OLE component when you drag the OLE icon from 
  8612. the Toolbox to a form or a frame. When you first create an OLE component it is 
  8613. empty. You can create an OLE object in an OLE component at design time with the 
  8614. Insert Object dialog, pop-up menus, or with the Paste Special dialog. 
  8615.  
  8616. See also:  Creating Linked Objects at Design Time. 
  8617.  
  8618.  
  8619. 笊絶武笊 22.2. Why Use Object Linking and Embedding? 笊絶武笊
  8620.  
  8621. OLE lets you use data from another application in its original format. It 
  8622. inserts data into your application, along with its layout, features, and 
  8623. functionality. 
  8624.  
  8625. OLE provides the following benefits: 
  8626.  
  8627.      It displays and updates data from other applications. 
  8628.  
  8629.      It displays data identical to the source application. 
  8630.  
  8631.      Source applications do not have to be running simultaneously with your 
  8632.       application. 
  8633.  
  8634.      You can easily add OLE objects from other environments to your VisualAge 
  8635.       for Basic application without altering these objects. 
  8636.  
  8637.      You can modify OLE objects without leaving the VisualAge for Basic design 
  8638.       or run-time environment. 
  8639.  
  8640.  
  8641. 笊絶武笊 22.2.1. Understanding OLE 笊絶武笊
  8642.  
  8643. An OLE object is a collection of binary data. An application that is OLE-aware 
  8644. provides transparent cooperation between applications. Activating an OLE object 
  8645. applies some of the features and functionality from the source application to 
  8646. your application. For example, if your OLE source application contains special 
  8647. drawing features, these features are available through your application. You 
  8648. can attach OLE data to your application in two ways-by linking or by embedding. 
  8649. Both methods are available at run time and design time. 
  8650.  
  8651.  
  8652. 笊絶武笊 22.2.1.1. Objects That Are Linked 笊絶武笊
  8653.  
  8654. Linking data is useful when several applications must access a master data set. 
  8655. A master data set is easier to maintain when identical information appears in 
  8656. multiple external applications. 
  8657.  
  8658. You maintain and store linked data using the source application. The OLE object 
  8659. data is only a reference within your application-you do not edit it within your 
  8660. VisualAge for Basic project. To edit linked data, you select the data stored in 
  8661. the OLE object to activate the source application. In the open source 
  8662. application, you can edit and save the linked data, exit, then return to your 
  8663. VisualAge for Basic application. The linked data is automatically updated in 
  8664. your application. 
  8665.  
  8666. Using linked data frees you from the task of creating code to save any changes 
  8667. the user may make. The source application manages all data manipulation-your 
  8668. VisualAge for Basic application only displays the data. 
  8669.  
  8670. Important:  If another application modifies the data linked to your VisualAge 
  8671. for Basic project, the OLE object might not display the most current 
  8672. information. To ensure that your application's OLE object displays up-to-date 
  8673. information, set the Action property to update linked data (OLE_UPDATE) each 
  8674. time your application is run. 
  8675.  
  8676.  
  8677. 笊絶武笊 22.2.1.2. Objects That Are Embedded 笊絶武笊
  8678.  
  8679. You maintain embedded data using the destination application (your VisualAge 
  8680. for Basic project). This means that the data is copied to your application's 
  8681. OLE object. You can access an embedded object's data only from your 
  8682. application. In essence, the embedded data is invisible to the outside 
  8683. world-controlled only through your application. A user can modify an embedded 
  8684. object by activating it. You set how the OLE object activates through the 
  8685. AutoActivate property using the Property Editor at design time, or in VisualAge 
  8686. for Basic code at run time. 
  8687.  
  8688. The user edits the OLE-embedded object in the source application. However, all 
  8689. data and any modifications are stored in your application in a separate file. 
  8690. An embedded object's changed data is not yet a permanent part of your 
  8691. application. 
  8692.  
  8693. If you edit an embedded object's data at design time, you must save the project 
  8694. and recompile your application to make the change permanent. 
  8695.  
  8696. See also:  Saving Changed Data . 
  8697.  
  8698.  
  8699. 笊絶武笊 22.3. Creating OLE Objects 笊絶武笊
  8700.  
  8701. The OLE object contains all path information to the source application. If the 
  8702. end user's operating system does not have the source application, your 
  8703. VisualAge for Basic application displays the latest snapshot taken when the 
  8704. application's executable was generated. The data displays in the OLE component, 
  8705. but the user cannot edit the linked or embedded information. 
  8706.  
  8707. When you create an OLE component, you must set the component's properties. The 
  8708. primary OLE properties you must set are those that indicate whether the 
  8709. component contains linked or embedded data. In addition to the primary 
  8710. properties, you must also consider how the OLE component appears on the screen, 
  8711. how the data is manipulated, and how, in some cases, objects are resized. 
  8712.  
  8713. To determine if an OLE object is displayed as an icon or as data, set the 
  8714. DisplayType property. You can not change the display format after the OLE 
  8715. object is created. Selecting DisplayType Icon automatically selects the Display 
  8716. As Icon check box in the Insert Object dialog. 
  8717.  
  8718. To determine if the imported data is clipped or stretched, or the object itself 
  8719. is resized, use the SizeMode property. 
  8720.  
  8721. The following table describes the SizeMode property settings: 
  8722.  
  8723. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8724. 笏4izeMode Setting    笏escription                                       笏
  8725. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8726. 笏lip                笏5he OLE object is too large for the OLE component 笏
  8727. 笏                    笏Bnd the edges are cut.                            笏
  8728. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8729. 笏4tretch             笏5he OLE object is stretched to fit the size of the笏
  8730. 笏                    笏0LE component.                                    笏
  8731. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8732. 笏utosize            笏5he OLE component changes its size at run time to 笏
  8733. 笏                    笏Bccommodate the size of the OLE object it         笏
  8734. 笏                    笏Dontains. At design time, the OLE component does  笏
  8735. 笏                    笏Oot change and remains at the default clip view.  笏
  8736. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8737.  
  8738. See also:  VisualAge for Basic Language Reference Online Help, OLE object for a 
  8739. complete list of supported properties, methods, and events. 
  8740.  
  8741.  
  8742. 笊絶武笊 22.4. Creating Linked Objects at Design Time 笊絶武笊
  8743.  
  8744. The OLE-object data in a linked OLE component exists and is maintained in a 
  8745. separate file. Your application only contains a reference to the data. To 
  8746. create a reference to the data, you must know the complete path and file name 
  8747. of the linked data. You can create a linked object either by using the Insert 
  8748. Object or Paste Special dialogs. 
  8749.  
  8750.  
  8751. 笊絶武笊 22.4.1. Using the Insert Object dialog 笊絶武笊
  8752.  
  8753. When you create an OLE object on your form, VisualAge for Basic immediately 
  8754. displays the Insert Object dialog. 
  8755.  
  8756.    1. Click the Create From File option. 
  8757.  
  8758.       VisualAge for Basic prompts you to select an existing file. 
  8759.  
  8760.    2. Select a file, type the path and the file name directly, or click the 
  8761.       Browse button to locate the desired file. 
  8762.  
  8763.    3. Select the Link check box to create the link between the source 
  8764.       application and your OLE object. VisualAge for Basic automatically 
  8765.       updates the SourceDoc property in the Property Editor. The linked file, 
  8766.       with its application, starts and displays on your screen. The OLE object 
  8767.       displays the linked data. 
  8768.  
  8769.    4. Click on the Display As Icon check box to display the OLE object as an 
  8770.       icon within your application. VisualAge for Basic displays the source 
  8771.       application's icon by default. Select a different icon using the Change 
  8772.       Icon button.
  8773.  
  8774.  
  8775.  Tip:  If you only want to link a portion of the linked data, use the 
  8776.  SourceItem property to specify data within the source document. The content of 
  8777.  the SourceItem synopsis depends on the source application. 
  8778.  
  8779.  Another way to import portions of existing data is to copy data to the 
  8780.  Clipboard and paste it into the OLE object using the Paste Special dialog box. 
  8781.  
  8782.  
  8783. 笊絶武笊 22.4.2. Using the Pop-up Menu 笊絶武笊
  8784.  
  8785. The pop-up menu is available when your cursor is over the OLE component. The 
  8786. pop-up menu divides into two parts. The first section provides design-time 
  8787. actions, cut, paste, and create object. The second section lists all OLE object 
  8788. verbs. The verbs are retrieved from the source application's list of available 
  8789. verbs. 
  8790.  
  8791. Tip:  The first section of the pop-up menu is available only at design-time. 
  8792. The second section, the list of OLE verbs, is only available if the OLE 
  8793. component contains an OLE object. 
  8794.  
  8795. To activate the pop-up menu by clicking the right mouse button, set the Class, 
  8796. SourceDoc, and OLETypeAllowed properties using the Property Editor. (Set the 
  8797. SourceItem property to select a portion of the data.) 
  8798.  
  8799. The menu items of the first part of the pop-up menu depend on the context of 
  8800. the OLE object. The following list itemizes possible menu items and when they 
  8801. are visible. 
  8802.  
  8803. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8804. 笏enu Item           笏s Visible...                                     笏
  8805. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8806. 笏nsert Object...    笏ll the time.                                     笏
  8807. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8808. 笏1aste Special...    笏8hen the clipboard contains an OLE object.        笏
  8809. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8810. 笏elete Embedded     笏8hen OLE component contains an embedded object.   笏
  8811. 笏0bject              笏                                                  笏
  8812. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8813. 笏elete Linked Object笏8hen the OLE component contains a linked object.  笏
  8814. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8815. 笏reate Embedded     笏8hen the Class property is set to a valid OLE     笏
  8816. 笏0bject              笏Dlass.                                            笏
  8817. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8818. 笏reate Linked Object笏8hen the SourceItem and the SourceDoc properties  笏
  8819. 笏                    笏Bre set to valid values.                          笏
  8820. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8821.  
  8822.  
  8823. 笊絶武笊 22.4.3. Using the Paste Special dialog 笊絶武笊
  8824.  
  8825. When you create an OLE object on your form, VisualAge for Basic immediately 
  8826. displays the Insert Object dialog. However, to include a specific piece of 
  8827. data, artwork, or section of a chart, use the Paste Special dialog. 
  8828.  
  8829. To access the Paste Special dialog: 
  8830.  
  8831.    1. Click the Cancel button to close the Insert Object dialog. 
  8832.  
  8833.    2. Launch the application that contains the data you want to copy to your 
  8834.       application and open the file. 
  8835.  
  8836.    3. Select the data to be transferred to your application and copy the data 
  8837.       to the Clipboard by choosing Edit=> Copy (or the native editing commands) 
  8838.       in the source application. 
  8839.  
  8840.    4. In your VisualAge for Basic project, select the OLE object outline and 
  8841.       click the right mouse button to display a pop-up menu. Your cursor must 
  8842.       remain over the OLE object. 
  8843.  
  8844.    5. After you choose Paste Special from the pop-up menu, the Paste Special 
  8845.       dialog appears displaying the source file and path. 
  8846.  
  8847.    6. Click the Paste Link option to link the data from the Clipboard to your 
  8848.       application. 
  8849.  
  8850.       Important:  If you click the the Paste option, VisualAge for Basic embeds 
  8851.       the data in your project. 
  8852.  
  8853.       The Paste Special dialog can display the data as content or as an icon. 
  8854.       VisualAge for Basic displays the source application's icon by default. 
  8855.  
  8856.    7. Click on the Change Icon button to select a different icon for the OLE 
  8857.       object. 
  8858.  
  8859.  
  8860. 笊絶武笊 22.5. Creating Embedded Objects at Design Time 笊絶武笊
  8861.  
  8862. You can copy existing file to create an embedded object or you can create a new 
  8863. embedded object at run time. The new embedded object allows the user to enter 
  8864. the data using the source application. 
  8865.  
  8866. Embedded objects display existing data at design time. The visibility of the 
  8867. data helps you determine how to display the information at run time. However, 
  8868. embedded OLE objects have a few drawbacks: 
  8869.  
  8870.      They increase the size of an application. 
  8871.  
  8872.      The changes might not be automatically updated. Data contained in an 
  8873.       embedded object is non- persistent-not saved when the parent form is 
  8874.       closed. If the data is modified at run-time and you want to show the 
  8875.       changed data the next time your VisualAge for Basic application opens, 
  8876.       you must program a Save procedure. 
  8877.  
  8878.  See also:  Saving Changed Data 
  8879.  
  8880.  Tip:  You can also create an embedded OLE object by accessing the Paste 
  8881.  Special dialog with the pop-up menu. Using the Property Editor set the Class, 
  8882.  SourceDoc, and OLETypeAllowed properties. After these properties are set, you 
  8883.  can click the right mouse button to activate the pop-up menu and select Create 
  8884.  Embedded Object. 
  8885.  
  8886.  When you create an OLE object on your form, VisualAge for Basic immediately 
  8887.  displays the Insert Object dialog. 
  8888.  
  8889.    1. Click the Create From File option to insert an existing file. 
  8890.  
  8891.    2. Either type the path and the file name directly, or click the Browse 
  8892.       button to locate the desired file. 
  8893.  
  8894.    3. Set and accept all the parameters to display the embedded data in the OLE 
  8895.       object. 
  8896.  
  8897.       The embedded file, with its source application, displays on your screen. 
  8898.  
  8899.    4. To create an empty embedded object, select the Create New menu option. 
  8900.  
  8901.       VisualAge for Basic creates an empty embedded object containing a 
  8902.       reference to the source application format. 
  8903.  
  8904.  Some source applications insert default data when an object is created or are 
  8905.  not OLE-aware. The pop-up menu reflects the list of verbs available from the 
  8906.  source application. If the OLE object is not OLE-aware, the OLE object 
  8907.  packages the information. 
  8908.  
  8909.  To launch the source application, select the Activate Contents Package 
  8910.  command. Select Edit Package() to activate a package-editing application to 
  8911.  edit the embedded objects information. 
  8912.  
  8913.  
  8914. 笊絶武笊 22.6. Creating OLE Objects at Run Time 笊絶武笊
  8915.  
  8916. You can use code to create linked or embedded OLE objects. You can create an 
  8917. OLE object at run time by setting the following properties using VisualAge for 
  8918. Basic code: Class, OLETypeAllowed, SourceDoc, SourceItem, and Action. 
  8919.  
  8920. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8921. 笏1roperty            笏escription                                       笏
  8922. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8923. 笏lass               笏dentifies the source application.                笏
  8924. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8925. 笏0LETypeAllowed      笏4ets the type of object.                          笏
  8926. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8927. 笏4ourceDoc           笏dentifies the name of the file to link to or the 笏
  8928. 笏                    笏Oame of the data you want copied into an embedded 笏
  8929. 笏                    笏Pbject.                                           笏
  8930. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8931. 笏4ourceItem          笏4pecifies the data to be linked from the source   笏
  8932. 笏                    笏Eocument.                                         笏
  8933. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  8934. 笏ction              笏etermines the actions for the object: delete,    笏
  8935. 笏                    笏Vpdate, edit, create, or paste from the Clipboard.笏
  8936. 笏                    笏5he Action property also determines which preset  笏
  8937. 笏                    笏Eialog box to display, for example, the Paste     笏
  8938. 笏                    笏4pecial, or Insert Object dialogs.                笏
  8939. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  8940.  
  8941. See also:  VisualAge for Basic Language Reference Online Help for further 
  8942. information on these property elements. 
  8943.  
  8944. Tip:  For run-time activation using VisualAge for Basic code, set the Action 
  8945. property to paste an OLE object from the Clipboard, or to use the Insert Object 
  8946. and Paste Special dialogs. 
  8947.  
  8948.  
  8949. 笊絶武笊 22.7. Creating Linked Objects At Run Time 笊絶武笊
  8950.  
  8951. Before you link an object at run time, the data to be linked must exist. 
  8952. VisualAge for Basic generates an error if the data does not exist. 
  8953.  
  8954. To link an object at run time, in your code set the SourceDoc property to 
  8955. include the complete name and the path to the data. To include only a portion 
  8956. of the data, set the SourceItem property. To display the linked data in the OLE 
  8957. object, set the Action property to 1, OLE_CREATE_LINK. 
  8958.  
  8959. You can access to the source document either by setting the AutoActivate 
  8960. property or by using the pop-up verb menu. 
  8961.  
  8962.  
  8963. 笊絶武笊 22.8. Creating Embedded Objects At Run Time 笊絶武笊
  8964.  
  8965. You can create embedded objects at run time. The objects can either contain 
  8966. data or be empty objects to be filled in by the user. 
  8967.  
  8968. Before you create an embedded object, first decide whether you want an empty 
  8969. OLE object or one containing data. 
  8970.  
  8971.      For an empty embedded object, set the Class property and specify the 
  8972.       source application. Empty objects are useful if you want the user to 
  8973.       import data from different sources. 
  8974.  
  8975.      To include data, set the SourceDoc property. You must include the name 
  8976.       and the path to the data. (VisualAge for Basic ignores the Class property 
  8977.       setting if you use the SourceDoc property.) 
  8978.  
  8979.  After the source application has been selected, set the Action property to 
  8980.  OLE_CREATE_EMBED. 
  8981.  
  8982.  
  8983. 笊絶武笊 22.9. Activating and Editing Objects 笊絶武笊
  8984.  
  8985. Both the Action property and the AutoActivate property activate an OLE object. 
  8986. You can set the AutoActivate property to activate an embedded OLE object 
  8987. whenever it gets the focus (only for objects that support in-place activation). 
  8988.  
  8989. Set the AutoActivate property to determine how to activate the OLE object at 
  8990. run time, for example, double-click or focus. This activates the source 
  8991. application and allows you to enter the data into your own application. You 
  8992. display new or changed data in your application by clicking File=>Update in the 
  8993. source application. The source application is not activated at run time, only 
  8994. at design time. 
  8995.  
  8996. See also:  VisualAge for Basic Language Reference Online Help for more 
  8997. information on how to use these properties. 
  8998.  
  8999.  
  9000. 笊絶武笊 22.9.1. Using the Verbs Pop-Up Menu 笊絶武笊
  9001.  
  9002. Whenever you create an OLE object, whether embedded or linked, the source 
  9003. application assigns its action verbs. These action verbs allow you to perform 
  9004. certain tasks. 
  9005.  
  9006. To edit an OLE object: 
  9007.  
  9008.    1. Select the OLE object and press the right mouse button. 
  9009.  
  9010.       At design time, the pop-up menu always appears. At run time, the 
  9011.       AutoVerbMenu property controls the visibility of the pop-up menu. The 
  9012.       pop-up menu is a list of action verbs provided by the source application. 
  9013.  
  9014.    2. Select the Edit action verb to edit the OLE object from within your 
  9015.       application. 
  9016.  
  9017.       This is in-place editing. 
  9018.  
  9019.    3. Select the Open action verb to activate the source application activates. 
  9020.  
  9021.       You can edit the OLE object data from the source application. 
  9022.  
  9023.  To allow users to edit and save changed data in an embedded object, you must 
  9024.  write a save procedure. 
  9025.  
  9026.  
  9027. 笊絶武笊 22.10. Saving Changed Data 笊絶武笊
  9028.  
  9029. If data contained in an OLE object changes, how it is saved depends on whether 
  9030. the OLE object is linked or embedded. 
  9031.  
  9032. If the data is linked, the source application is responsible for the save 
  9033. procedure. For example, if you select File=> Save As, the source application 
  9034. creates a new file. The header information linking the OLE object to the source 
  9035. application remains intact. 
  9036.  
  9037. An embedded OLE object's changed data is normally lost when the user exits your 
  9038. application, unless you write a save procedure. 
  9039.  
  9040. For example, to save data to a binary file you use the FreeFile function to get 
  9041. a file number. Open a new file in binary mode using the file number. Set the 
  9042. FileNumber property and set the Action property to save the file. Closing the 
  9043. file creates a new binary file that you can program to reload and display in 
  9044. the embedded OLE object. 
  9045.  
  9046. Sub Form_Load
  9047.     Dim FileNum
  9048.     FileNum = FreeFile
  9049.     Open "UserData.dat" for Binary As FileNum
  9050.     Ole1.FileNumber = FileNum
  9051.     Ole1.Action = 11
  9052.     Close #FileNum
  9053. End Sub
  9054.  
  9055.  
  9056. 笊絶武笊 22.11. Retrieving Saved Data 笊絶武笊
  9057.  
  9058. In order for an embedded OLE object to read from a file, you must first create 
  9059. the file using a save-to-file procedure. 
  9060.  
  9061. After you have saved to a file, you can display the changed data file in an OLE 
  9062. object. For example, in a click event procedure you can load a saved file by 
  9063. coding a load procedure. 
  9064.  
  9065. For example, to read changed data into an embedded OLE object, get a file 
  9066. number using the FreeFile function. Open the saved file in binary mode using 
  9067. the file number. First you set the FileNumber property, and then you set the 
  9068. Action property to read the file. When you set the Action property, the updated 
  9069. file data appears. 
  9070.  
  9071. Sub Form_Load
  9072.     Dim FileNum
  9073.     FileNum = FreeFile
  9074.     Open "UserData.dat" for Binary As FileNum
  9075.     Ole1.FileNumber = FileNum
  9076.     Ole1.Action = 12
  9077.     Close #FileNum
  9078. End Sub
  9079.  
  9080.  
  9081. 笊絶武笊 23. Chapter 17     Stored Procedure OCX Component 笊絶武笊
  9082.  
  9083. With VisualAge for Basic you can integrate your programs with other object 
  9084. systems. This chapter describes: 
  9085.  
  9086.      What is the Stored Procedure OCX component? 
  9087.  
  9088.      What can you do with the Stored Procedure OCX component? 
  9089.  
  9090.      How do you use the Stored Procedure OCX component? 
  9091.  
  9092.  Platform-specific information: 
  9093.  
  9094.  The Stored Procedure OCX component is only available for Windows 95 and 
  9095.  Windows NT. 
  9096.  
  9097.  
  9098. 笊絶武笊 23.1. What Is the Stored Procedure OCX Component? 笊絶武笊
  9099.  
  9100. VisualAge for Basic provides the stored procedure OCX component (SP OCX) to 
  9101. make it easy for you to call stored procedures that you develop and register 
  9102. with VisualAge for Basic on DB2 servers on OS/2, AIX/6000, Windows 95, and 
  9103. Windows NT. You can use this component in applications developed with either 
  9104. VisualAge for Basic or Microsoft Visual Basic 4.0. 
  9105.  
  9106. The SP OCX component has both properties and methods. Methods are built-in 
  9107. functions that let you manipulate the SP OCX component and its properties 
  9108. through code in your application. Properties are values or characteristics that 
  9109. hold information such as the database alias, database password, and database 
  9110. user ID. 
  9111.  
  9112.  
  9113. 笊絶武笊 23.2. What Can You Do with the Stored Procedure OCX Component? 笊絶武笊
  9114.  
  9115. The Property Page and the Property Editor let you set properties to customize 
  9116. the SP OCX component at design time. Changes that you make at design time are 
  9117. saved with your application and are used at run time. At run time, your code 
  9118. can test and set the properties and call the methods of the component. 
  9119.  
  9120. The SP OCX provides the following database-related properties that are 
  9121. available both at design time and run time: 
  9122.  
  9123.     DatabaseAlias
  9124.     DatabaseUserID
  9125.     DatabasePassword
  9126.     DatabaseSPInfo
  9127.  
  9128. Use the DatabaseUserID and DatabasePassword to connect to the database 
  9129. specified in the DatabaseAlias property. At run time, your code can pass 
  9130. arguments to the stored procedure specified in the DatabaseSPInfo property. 
  9131. Your application can then use any information returned from the stored 
  9132. procedure. 
  9133.  
  9134. See also:  How Do You Use the Stored Procedure OCX Component? for a complete 
  9135. list and an example of each property. 
  9136.  
  9137.  
  9138. 笊絶武笊 23.2.1. Passing Scalar Values to a Stored Procedure 笊絶武笊
  9139.  
  9140. The following example calls a scalar stored procedure that returns two 
  9141. parameters. 
  9142.  
  9143.    1. Build the Salary stored procedure. See the Visual Age for Basic Data 
  9144.       Access Guide. 
  9145.  
  9146.    2. Create a form with two text boxes named TopSalary and Employee, and a 
  9147.       command button named Command1. 
  9148.  
  9149.    3. Drag the SP OCX from the Toolbox to the form and set the database 
  9150.       properties in the Property Editor as follows: 
  9151.  
  9152.           Click on the DatabaseAlias property and select the alias of your 
  9153.            stored procedure. You must select a database alias before you can 
  9154.            specify the DatabaseSPInfo property. 
  9155.  
  9156.           Click on the DatabaseUserID and DatabasePassword properties and 
  9157.            enter your database user ID and password. 
  9158.  
  9159.           Click on the DatabaseSPInfo property and select your stored 
  9160.            procedure from the list. The list includes one line for each stored 
  9161.            procedure specifying the schema, entry point, and parameter data 
  9162.            types. 
  9163.  
  9164.    4. Paste the following code into the declarations section of your new form: 
  9165.  
  9166.       Sub Command1_Click()     Dim Salary As Double            ' Declare the 
  9167.       first stored             ' procedure argument.     Dim Employee As String 
  9168.       ' Declare the second stored             ' procedure argument. 
  9169.       Sp1.Opendb           ' Connect to the database. 
  9170.       Sp1.RunTimeTypeCheck=false           ' No need to check data types 
  9171.       ' for the stored procedure argument.     Sp1.Adapter.Call Salary, 
  9172.       Employee             ' Call the stored procedure             ' and pass 
  9173.       arguments.     TopSalary.Text = Salary       ' Display the returned value 
  9174.       ' of the Salary argument.     Employee.Text = Employee           ' 
  9175.       Display the returned value             ' of the Employee argument. 
  9176.       Sp1.Closedb           ' Disconnect from the database. End Sub 
  9177.  
  9178.  
  9179. 笊絶武笊 23.2.2. Passing an Array to a Stored Procedure 笊絶武笊
  9180.  
  9181. The following example illustrates how to use the SP OCX to call the spstafft 
  9182. stored procedure, which receives an array, list(), of user-defined data types, 
  9183. empData. 
  9184.  
  9185.    1. Build the spstafft stored procedure. See the Visual Age for Basic Data 
  9186.       Access Guide. 
  9187.  
  9188.    2. Create a form with a textbox with the name "Rows" and a grid with three 
  9189.       columns with the name "GridList." 
  9190.  
  9191.    3. Drag the SP OCX from the Toolbox to the form and set the database 
  9192.       properties in the Property Editor as follows: 
  9193.  
  9194.           Click on the DatabaseAlias property and select the alias of your 
  9195.            stored procedure. You must select a database alias before you can 
  9196.            specify the DatabaseSPInfo property. 
  9197.  
  9198.           Click on the DatabaseUserID and DatabasePassword properties and 
  9199.            enter your database user ID and password. 
  9200.  
  9201.           Click on the DatabaseSPInfo property and select your stored 
  9202.            procedure from the list. The list includes one line for each stored 
  9203.            procedure specifying the schema, entry point, and parameter data 
  9204.            types. 
  9205.  
  9206.    4. Add a new module, and paste the following spstafft code into the 
  9207.       declarations section: 
  9208.  
  9209.             Type EmpData
  9210.                     eSalary As Double
  9211.                     eId As Integer
  9212.                     eName As String *20
  9213.                 End Type
  9214.                 Declare Function SPArrayEmpData Lib "db2spl.dll" Alias "addr"_
  9215.                     (p() As EmpData) As Long
  9216.  
  9217.    5. In your client program, code the following: 
  9218.  
  9219.                 Sub Command1_Click()
  9220.                     Dim i As Integer
  9221.                     Dim Rows As Long
  9222.                     Dim list() As empData
  9223.                     ReDim list(50)
  9224.                     Sp1.OpenDb
  9225.                     Sp1.NullIndicator(0) = 0                     'input/output.
  9226.                     Sp1.NullIndicator (1) = 0                     'input/output.
  9227.                     Sp1.RunTimeTypeCheck = True
  9228.                                     'Check the data types of arguments.
  9229.                                     'Do not pass null indicators
  9230.                                     'and sqlca as arguments, since
  9231.                                     'the SP OCX handles this automatically.
  9232.                     Sp1.Call SPArrayEmpData(list), rows
  9233.                     Rows.Text = Rows
  9234.                     For i = 0 to Rows -1
  9235.                         GridList.AddItem_
  9236.                         CStr(list(i).eSalary) &Chr$(9) &CStr(list(i).eld)_
  9237.                             &Chr$(9) &(list(i).eName
  9238.                     Next
  9239.                     Sp1.Closedb
  9240.                 End Sub
  9241.  
  9242.       Include the Declare Function statement in the client program so that you 
  9243.       can use the addr function to return the address of the array of empData. 
  9244.       After the call, you can reference the returned values in both list and 
  9245.       rows. 
  9246.  
  9247.  
  9248. 笊絶武笊 23.3. How Do You Use the Stored Procedure OCX Component? 笊絶武笊
  9249.  
  9250.    1. First, you must install and configure the SP OCX component. See VisualAge 
  9251.       for Basic Install Information. 
  9252.  
  9253.    2. Add the SP OCX component to your project. 
  9254.  
  9255.    3. To add the SP OCX component to a project in VisualAge for Basic: 
  9256.  
  9257.         a. Select the Extensions category to see the SP OCX Operating System 
  9258.            Adapter (OSA). 
  9259.  
  9260.         b. Select the SP OCX OSA. 
  9261.  
  9262.         c. Select Selected=>Open Component Catalog menu item to open the 
  9263.            Component Catalog. 
  9264.  
  9265.         d. Load the SP OCX class by clicking on the box labeled Stored 
  9266.            Procedure SP OCX to the left of the SP OCX component name and 
  9267.            clicking on the OK button. 
  9268.  
  9269.    4. To add the SP OCX component to a project in Microsoft Visual Basic: 
  9270.  
  9271.         a. Select Tools=>Custom Controls... in the Project Window to display 
  9272.            the Custom Controls window. 
  9273.  
  9274.         b. Scroll down in the list to find a checkbox with the label sp OLE 
  9275.            Control module. Click on this checkbox and then click on the OK 
  9276.            button. 
  9277.  
  9278.       The SP OCX component icon is added to the Toolbox. In VisualAge for 
  9279.       Basic, the Project window component listing automatically displays the SP 
  9280.       OCX component. 
  9281.  
  9282.    5. Select the SP OCX component icon  on the Toolbox and drag it onto your 
  9283.       form. 
  9284.  
  9285.       See also:  Chapter 3, Using the Toolbox and Visual Objects. 
  9286.  
  9287.    6. Customize the Sp1 component instance by setting properties in the 
  9288.       Property Page or Property Editor. 
  9289.  
  9290.           Select the Windows=>Property Editor menu item from the Project 
  9291.            window. 
  9292.  
  9293.           Click the Property Editor button  in the Project window. 
  9294.  
  9295.           Press F4. The Property Editor appears with the Sp1 component 
  9296.            instance properties listed. 
  9297.  
  9298.    7. In the Property Editor, specify the information to call your stored 
  9299.       procedure from the list. 
  9300.  
  9301.           Click on the DatabaseAlias property and select the alias of your 
  9302.            stored procedure. You must select a database alias before you can 
  9303.            specify the DatabaseSPInfo property. 
  9304.  
  9305.           Click on the DatabaseUserID and DatabasePassword properties and 
  9306.            enter your database user ID and database password. 
  9307.  
  9308.           Click on the DatabaseSPInfo property and select your stored 
  9309.            procedure from the list. The list includes one line for each stored 
  9310.            procedure specifying the schema, entry point, and parameter data 
  9311.            types. 
  9312.  
  9313.    8. Call the stored procedure that you selected by setting properties and 
  9314.       calling the methods of Sp1 in an event handler of your form, such as the 
  9315.       click event handler of a command button, as follows: 
  9316.  
  9317.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  9318.   笏1roperty or Method  笏xample                            笏escription              笏
  9319.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9320.   笏atabaseAlias       笏4p1.DatabaseAlias = "Sample"       笏4ets the alias of the    笏
  9321.   笏Qroperty            笏                                   笏Eatabase where the stored笏
  9322.   笏                    笏                                   笏Qrocedure has been built.笏
  9323.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9324.   笏atabaseSPInfo      笏4p1.DatabaseSPInfo =               笏4pecifies the schema,    笏
  9325.   笏Qroperty            笏"USERID.SPSALARY(DOUBLE,STRING)"   笏Oame, and argument data  笏
  9326.   笏                    笏                                   笏Uypes of your stored     笏
  9327.   笏                    笏                                   笏Qrocedure.               笏
  9328.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9329.   笏atabaseUserID      笏4p1.DatabaseUserID = "myname"      笏4pecifies a DB2 user ID  笏
  9330.   笏Qroperty            笏                                   笏Buthorized to connect to 笏
  9331.   笏                    笏                                   笏Uhe database.            笏
  9332.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9333.   笏atabasePassword    笏4p1.DatabasePassword = "mypassword"笏4pecifies the password   笏
  9334.   笏Qroperty            笏                                   笏Gor the user ID in the   笏
  9335.   笏                    笏                                   笏atabaseUserID.          笏
  9336.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9337.   笏0penDb method       笏4p1.DatabaseAlias = "sample"       笏onnect to a database.   笏
  9338.   笏                    笏4p1.OpenDb                         笏                         笏
  9339.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9340.   笏3untimeTypeCheck    笏4p1.RuntimeTypeCheck = False       笏o not check the data    笏
  9341.   笏Qroperty            笏                                   笏Uypes of the stored      笏
  9342.   笏                    笏                                   笏Qrocedure arguments.     笏
  9343.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9344.   笏IEnv and hDbc       笏4p1.OpenDb  Sp2.henv = Sp1.henv    笏onnects to multiple     笏
  9345.   笏Qroperties          笏4p2.hdbc = Sp1.hdbc                笏Eatabases by copying the 笏
  9346.   笏                    笏                                   笏IEnv environment handle  笏
  9347.   笏                    笏                                   笏Bnd the hDbc connection  笏
  9348.   笏                    笏                                   笏Iandle.                  笏
  9349.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9350.   笏all method         笏4p1.Adapter.Call num, array        笏4pecifies arrays of      笏
  9351.   笏                    笏4p1.Adapter.Call num, addr         笏Eefault type and         笏
  9352.   笏                    笏(arrayEmp)                         笏Vser-defined type.       笏
  9353.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9354.   笏bCommit method     笏4p1.DbCommit                       笏uarantees completion of 笏
  9355.   笏                    笏                                   笏Bn entire transaction.   笏
  9356.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9357.   笏bRollback method   笏4p1.DbRollback                     笏ancels changes to the   笏
  9358.   笏                    笏                                   笏Eatabase.                笏
  9359.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9360.   笏loseDb method      笏4p1.CloseDb                        笏isconnects from the     笏
  9361.   笏                    笏                                   笏Eatabase.                笏
  9362.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  9363.  
  9364.  7. Run your project by pressing the Run button  on the Project window, or by 
  9365.     selecting Run from the Run menu. 
  9366.  
  9367.  
  9368. 笊絶武笊 23.4. Sample Stored Procedure OCX project 笊絶武笊
  9369.  
  9370. VisualAge for Basic supplies a sample project to demonstrate how to call a 
  9371. stored procedure using the Stored Procedure OCX (SP OCX). You can modify this 
  9372. project to call a stored procedure you have built and registered with VisualAge 
  9373. for Basic. 
  9374.  
  9375. This sample is in the VisualAge for Basic samples subdirectory under: 
  9376. samples\sproc\firstapp\firstocx\ocsalary.prj 
  9377.  
  9378. This sample project assumes you have already built and registered a stored 
  9379. procedure by the name of spsalary, which works with the STAFF table of the DB2 
  9380. SAMPLE database. 
  9381.  
  9382. See also:  Visual Age for Basic Data Access Guide to learn how to create the 
  9383. spsalary stored procedure. 
  9384.  
  9385.    1. In the Project Window, select File=>Open Project and specify the 
  9386.       ocsalary.prj project. 
  9387.  
  9388.    2. Open ocsalary.i and notice the instance of the SP OCX control on the form 
  9389.       named Sp1. 
  9390.  
  9391.    3. Select the Sp1 component instance on the form. 
  9392.  
  9393.    4. Press F4, in the Properties window: 
  9394.  
  9395.           Choose DatabaseAlias and select the database alias where you 
  9396.            registered the spsalary stored procedure. 
  9397.  
  9398.           Choose DatabaseUserID and DatabasePassword to specify your user ID 
  9399.            and password for the database. 
  9400.  
  9401.    5. Open ocsalary.i in the Code Editor and look at the code for the 
  9402.       Command1_Click procedure. This code shows how to call the stored 
  9403.       procedure: 
  9404.  
  9405.       Sub Command1_Click ()     Dim Salary As Double            ' Declare the 
  9406.       first stored              ' procedure argument.     Dim Employee As 
  9407.       String           ' Declare the second stored              ' procedure 
  9408.       argument.     Sp1.Opendb           ' Connect to the database. 
  9409.       Sp1.RunTimeTypeCheck=False           ' No need to check data types 
  9410.       ' for the stored       procedure argument.     Sp1.Adapter.Call Salary, 
  9411.       Employee             ' Call the stored procedure and              ' pass 
  9412.       arguments.     TopSalary.Text = Salary       ' Display the returned value 
  9413.       of              ' the Salary       'argument.     Employee.Text = 
  9414.       Employee   ' Display the returned value of             ' the Employee 
  9415.       argument.     Sp1.CloseDB         ' Disconnect from the database.   End 
  9416.       Sub 
  9417.  
  9418.       This code calls the spsalary stored procedure, which returns two values: 
  9419.       Salary, a variable of Double type, and Employee, a variable of String 
  9420.       type. These values are assigned to the Text properties of text boxes on 
  9421.       the form. 
  9422.  
  9423.    6. Run the project and click on the Run button (Command1). The application 
  9424.       calls the spsalary stored procedure on your server and returns the name 
  9425.       and salary of the highest paid employee in the STAFF table of the SAMPLE 
  9426.       database. 
  9427.  
  9428.  
  9429. 笊絶武笊 24. Chapter 18     Using OpenDoc Documents 笊絶武笊
  9430.  
  9431. VisualAge for Basic lets you link to OpenDoc documents, which can contain one 
  9432. or more OpenDoc parts. This section describes: 
  9433.  
  9434.      What is OpenDoc? 
  9435.  
  9436.      What you can do with OpenDoc in VisualAge for Basic 
  9437.  
  9438.      How to acquire the prerequisite OpenDoc software 
  9439.  
  9440.  Important:  OpenDoc support is included in the VisualAge for Basic for OS/2 
  9441.  client only. 
  9442.  
  9443.  
  9444. 笊絶武笊 24.1. What is OpenDoc? 笊絶武笊
  9445.  
  9446. OpenDoc is an architecture and a set of technologies that let you develop 
  9447. applications or objects by assembling pluggable software components.  Just like 
  9448. you can assemble a stereo by combining a speaker from one vendor, CD player 
  9449. from another, and an amplifier from a third vendor, with OpenDoc you can 
  9450. assemble a software construct, called a compound document, by combining parts 
  9451. from multiple vendors. 
  9452.  
  9453. An OpenDoc part  consists of data and one or more part editors.  OpenDoc parts 
  9454. are stored in OpenDoc documents.  A part editor manipulates the data. A clock 
  9455. part might have one editor that lets you change the time on the clock and the 
  9456. background clock face.  Another clock part editor might let you set the clock's 
  9457. overall shape to round or square. 
  9458.  
  9459. You could think of a compound document as a container of "live" (active and 
  9460. editable) parts.  For example, let's look at an application that includes a 
  9461. page layout feature, which in turn contains some text and a running stock 
  9462. market ticker tape. 
  9463.  
  9464. Now imagine that each of these "features" can be edited in place with its own 
  9465. custom menus.  Each of the features is really a "live" OpenDoc part that can be 
  9466. edited with its own part editor. 
  9467.  
  9468. The OpenDoc architecture describes the rules that let parts interoperate and 
  9469. even collaborate in compound documents.  OpenDoc also defines a way to work 
  9470. cooperatively with Microsoft's OLE, through a part of the architecture called 
  9471. Open Link and Embedding of Objects (OLEO). 
  9472.  
  9473. OpenDoc and OLE both define compound document architectures.  However, OLE is 
  9474. defined and implemented by a single vendor (Microsoft) and OpenDoc is developed 
  9475. by a consortium of vendors called Component Integration Laboratories, Inc. (CI 
  9476. Labs). 
  9477.  
  9478. CI Labs provides a standard that shows all software vendors how to develop 
  9479. distributed objects that will "play" nicely together.  CI Labs was founded in 
  9480. 1993 by IBM, Apple,  Novell, Oracle, Taligent, SunSoft, WordPerfect, and Xerox. 
  9481. OpenDoc is being implemented for the various Windows platforms, OS/2, AIX, and 
  9482. Mac OS. 
  9483.  
  9484. Last but not least, the OpenDoc technologies are implemented on the CORBA 
  9485. compliant Object Request Broker, SOM.  Therefore OpenDoc is based on an open, 
  9486. industrial-strength architecture. 
  9487.  
  9488. See also:  Chapter 15, Integrating System Object Model (SOM) Objects. 
  9489.  
  9490.  
  9491. 笊絶武笊 24.2. What You Can Do with OpenDoc in VisualAge for Basic 笊絶武笊
  9492.  
  9493. Although VisualAge for Basic Release 1 is not an implementation of a compound 
  9494. document,  you can incorporate OpenDoc documents in your VisualAge for Basic 
  9495. applications using  the OpenDoc container component 
  9496.  
  9497.  in the Toolbox. 
  9498.  
  9499. You drag the OpenDoc icon to a form and then specify the OpenDoc document you 
  9500. want to link to. The document is active and you can edit it.  Let's see how 
  9501. this works. 
  9502.  
  9503.  
  9504. 笊絶武笊 24.2.1. Using OpenDoc: A Scenario 笊絶武笊
  9505.  
  9506. Important:  You must have the OpenDoc Runtime installed on your OS/2 client to 
  9507. complete this scenario.  See Acquiring the OpenDoc Software. After you have 
  9508. installed the the OpenDoc Runtime, you will see three new folders added to your 
  9509. desktop: 
  9510.  
  9511.      OpenDoc for OS/2 
  9512.  
  9513.      OpenDoc Templates 
  9514.  
  9515.      Shell Plug Ins 
  9516.  
  9517.  The parts you use in this scenario are in the OpenDoc Templates folder. In 
  9518.  this scenario, you: 
  9519.  
  9520.    1. Create an OpenDoc document, outside of the VisualAge for Basic 
  9521.       environment. 
  9522.  
  9523.    2. Link to the document from a VisualAge for Basic form. 
  9524.  
  9525.    3. While still in a VisualAge for Basic session, you open the document into 
  9526.       the OpenDoc environment for editing. 
  9527.  
  9528.    4. Do some editing in the OpenDoc environment to get the feel for the 
  9529.       OpenDoc session. 
  9530.  
  9531.    5. Go back to VisualAge for Basic to resume designing your form. 
  9532.  
  9533.  
  9534. 笊絶武笊 24.2.1.1. Creating an OpenDoc Document 笊絶武笊
  9535.  
  9536.    1. Open the OpenDoc Templates folder. 
  9537.  
  9538.    2. Click with the right mouse button on the Page Layout part.  Hold the 
  9539.       button and drag the Page Layout part to the desktop. This creates a 
  9540.       instance of the Page Layout part you can use for creating your document. 
  9541.  
  9542.    3. Double-click on the Page Layout part that you placed on your desktop. The 
  9543.       part is opened in an OpenDoc document in the OpenDoc environment.  We 
  9544.       will explore this environment further below, but for now, let's continue 
  9545.       to build the OpenDoc document. 
  9546.  
  9547.    4. From the OpenDoc Templates folder, drag a Text part and drop it onto the 
  9548.       OpenDoc document. Now your OpenDoc document has a root part, the Page 
  9549.       Layout part, which in turn contains one additional one part, the Text 
  9550.       part. 
  9551.  
  9552.    5. Click in the area where you dropped the Text part to make it the active 
  9553.       part. 
  9554.  
  9555.    6. Type some text into the Text part. For example, type OpenDoc is Fun!
  9556.  
  9557.    7. Select Document=>Save a copy. The Save A Copy dialog appears. 
  9558.  
  9559.       Specify a file name and path and click on OK. 
  9560.  
  9561.    8. Double-click on the system icon in the upper left corner of the menu bar 
  9562.       to close the OpenDoc environment. 
  9563.  
  9564.  Now you have an OpenDoc document you can use to add to a VisualAge for Basic 
  9565.  form. 
  9566.  
  9567.  
  9568. 笊絶武笊 24.2.1.2. Adding an OpenDoc document to a VisualAge for Basic Application 笊絶武笊
  9569.  
  9570.    1. In VisualAge for Basic, create a new form. 
  9571.  
  9572.    2. Drag the OpenDoc Container icon from the Toolbox to the form. The OpenDoc 
  9573.       Document Selection dialog appears. 
  9574.  
  9575.    3. Select the name of the OpenDoc document you created earlier and click on 
  9576.       OK. 
  9577.  
  9578.    4. Click with the right mouse button on the OpenDoc Container on your form. 
  9579.       A pop-up menu appears.
  9580.  
  9581.    5. Click on Open. The page layout document opens in the OpenDoc environment. 
  9582.       You can now edit it. 
  9583.  
  9584.  
  9585. 笊絶武笊 24.2.1.3. Editing in the OpenDoc Environment 笊絶武笊
  9586.  
  9587. Important:  The terms and behavior described in this section apply while you 
  9588. are in the OpenDoc environment only--not in VisualAge for Basic.  For more 
  9589. information on working in the OpenDoc environment click on Using OpenDoc in the 
  9590. OpenDoc for OS/2 folder. 
  9591.  
  9592. To move  the Text Part  in  OpenDoc: 
  9593.  
  9594.    1. Click with the left mouse button on the Text part. A hashed border 
  9595.       appears.  The Text part is said to be activated. The border is called the 
  9596.       activation border.  Notice also that the menu has changed to  the Text 
  9597.       part's part editor menu. 
  9598.  
  9599.    2. Click on the activation border. The Text part background turns black. 
  9600.       The part is said to be selected and you can now move it and size it.
  9601.  
  9602.    3. Click with the right mouse button on the Text part.  Hold the button and 
  9603.       drag the part to some empty place on the the Page Layout part. Notice 
  9604.       that if you attempt to move the text part to the extreme left edge of the 
  9605.       Page Layout part, that the Page Layout part forces the text back inside 
  9606.       the margin. 
  9607.  
  9608.       To size the Text Part part in OpenDoc: 
  9609.  
  9610.    4. Click with the left mouse button on the Text part. 
  9611.  
  9612.    5. Click on the activation border. 
  9613.  
  9614.    6. Grab one of the sizing handles and stretch or shrink the text part. 
  9615.  
  9616.  Notice that the part editor will not allow you to shrink the part smaller than 
  9617.  the actual size of the text. That is the defined behavior for this part 
  9618.  editor. 
  9619.  
  9620.  To add more parts to the OpenDoc document: 
  9621.  
  9622.    1. From the OpenDoc Templates folder, drag a second Text part to the page 
  9623.       layout document. 
  9624.  
  9625.    2. Type some text into the second part. For example, type 
  9626.  
  9627.             We've only just begun to see the power of OpenDoc!
  9628.  
  9629.    3. Double-click on the system icon in the upper left corner of the menu bar 
  9630.       to close the OpenDoc edit session. 
  9631.  
  9632.  Now you are back in the VisualAge for Basic environment. 
  9633.  
  9634.  
  9635. 笊絶武笊 24.2.1.4. Resuming Your Work in VisualAge for Basic 笊絶武笊
  9636.  
  9637. Add a command button to the form called Push Me.  Add a label under the OpenDoc 
  9638. Container. Your form should look similar to this.
  9639.  
  9640. Tip:  The sizing handles for the OpenDoc document may not be visible but they 
  9641. are still active.  Just click on the OpenDoc object and stretch it as you 
  9642. normally would. You have completed the simple scenario for using OpenDoc in 
  9643. VisualAge for Basic applications.  See the OS/2 Warp Toolkit and Club OpenDoc 
  9644. on the World Wide Web for additional parts you can use to create your own 
  9645. OpenDoc documents. 
  9646.  
  9647. For additional VisualAge for Basic samples, see \samples in the directory in 
  9648. which you installed VisualAge for Basic. 
  9649.  
  9650. Finally,  for more information on specific OpenDoc tasks in VisualAge for 
  9651. Basic, see the VisualAge for Basic online task help. 
  9652.  
  9653.  
  9654. 笊絶武笊 24.3. Acquiring the OpenDoc Software 笊絶武笊
  9655.  
  9656. To use the VisualAge for Basic OpenDoc support, you must have OpenDoc Runtime 
  9657. for OS/2 Warp installed on your system.  The Runtime is free and is available 
  9658. through the World Wide Web or the IBM  Developer Connection  for OS/2 CD ROM. 
  9659.  
  9660. After you install the OpenDoc Runtime, restart VisualAge for Basic for OS/2. 
  9661.  
  9662. Important:  For release 1, OpenDoc support is included in the VisualAge for 
  9663. Basic for OS/2 client only. 
  9664.  
  9665. To download the OpenDoc software: 
  9666.  
  9667.    1. Point your World Wide Web browser to the Club OpenDoc homepage: 
  9668.  
  9669.             http://www.software.ibm.com/clubopendoc/
  9670.  
  9671.    2. Download the OpenDoc Runtime. 
  9672.  
  9673.    3. Follow the instructions that come with the package. 
  9674.  
  9675.  For more information on OpenDoc see: The Club OpenDoc homepage: 
  9676.  
  9677.   http://www.software.ibm.com/clubopendoc/
  9678.  The CI Labs home page: 
  9679.  
  9680.   http://www.cil.org/
  9681.  The IBM Object Technology home page: 
  9682.  
  9683.   http://www.torolab.ibm.com/objects/
  9684.  The Essential Distributed Objects Survival Guide, by  Orfali, Harkey, and 
  9685.  Edwards, 1996, John Wiley & Sons, Inc. 
  9686.  
  9687.  IBM International Technical Support Centers (Redbook)  OpenDoc:  An 
  9688.  Introduction to Part Development, SG24-4673-00.  Call 1-800-445-9269 or 
  9689.  e-mail: 
  9690.  
  9691.   bookshop at dk.ibm.com.
  9692.  Personal Systems Magazine, March/April 1996 issue on SOM Technology: Making 
  9693.  the Pieces Fit.  Free to IBM customers.  Fax your request to (817) 962-7218 or 
  9694.  request it from the World Wide Web 
  9695.  
  9696.   http://pscc.dfw.ibm.com/psmag/
  9697.  The IBM Developer Connection Volume 10, OpenDoc Developer Toolkit for OS/2, 
  9698.  which includes the OpenDoc Programming Guide, Programming Reference, User 
  9699.  Interface Guidelines, and Open Scripting Architecture and Reference. 
  9700.  
  9701.  
  9702. 笊絶武笊 24.3.1. Usage Tips 笊絶武笊
  9703.  
  9704. This section provides tips on how to use Opendoc. 
  9705.  
  9706.  
  9707. 笊絶武笊 24.3.1.1. Rexx Version 笊絶武笊
  9708.  
  9709. The OpenDoc Runtime includes a new version of Rexx.  If you have Rexx execs on 
  9710. your system, they may behave differently after you install the OpenDoc Runtime. 
  9711. You can easily revert to your earlier version of Rexx by disabling the new 
  9712. version. 
  9713.  
  9714.    1. Edit your config.sys file, using the OS/2 system editor. 
  9715.  
  9716.    2. Delete the references to OREXX from the PATH, LIBPATH, and DPATH 
  9717.       statements. For example,  if your PATH statement looks like this: 
  9718.  
  9719.             SET PATH=C:\IBMCOM;C:\OREXX:D:\OTHER
  9720.       Change it to: 
  9721.  
  9722.             SET PATH=C:\IBMCOM;D:\OTHER
  9723.  
  9724.    3. Reboot your system. 
  9725.  
  9726.  
  9727. 笊絶武笊 24.3.1.2. OpenDoc Parts 笊絶武笊
  9728.  
  9729. The VisualAge for Basic OpenDoc Component does not directly support the Open 
  9730. Scripting Arhitecture. OpenDoc parts written to exploit Open Scripting 
  9731. Architecture, as well as some other parts, may not work well as root parts of 
  9732. documents linked to VisualAge for Basic.  You may still be able to use the part 
  9733. by using the following technique: 
  9734.  
  9735.    1. Create an OpenDoc document whose root part is an OpenDoc container part. 
  9736.       Options include the Page Layout part used in the scenario above, or the 
  9737.       Container part, available as part of the Warp Toolkit. 
  9738.  
  9739.    2. Place the part you want to use in this OpenDoc document. 
  9740.  
  9741.    3. Link the document to your VisualAge for Basic form. 
  9742.  
  9743.  Usually this technique is sufficient to enable the part for usage with 
  9744.  VisualAge for Basic. 
  9745.  
  9746.  
  9747. 笊絶武笊 25. Chapter 19     Calling DLL Procedures 笊絶武笊
  9748.  
  9749. DLLs are libraries of procedures that applications can link to and use at run 
  9750. time rather than embedding multiple procedures at compile time. You can specify 
  9751. a DLL in the Property Editor or in the Code Editor to link procedures to your 
  9752. application at run time. This chapter describes how to call procedures stored 
  9753. in dynamic link libraries (DLLs) from VisualAge for Basic. 
  9754.  
  9755. You should use DLLs to: 
  9756.  
  9757.      Take advantage of commercial libraries. 
  9758.  
  9759.      Increase performance on time-consuming algorithms. 
  9760.  
  9761.      Access system resources. 
  9762.  In this chapter you will learn how to: 
  9763.  
  9764.      Access and use DLLs. 
  9765.  
  9766.      Call DLLs from the Code Editor. 
  9767.  
  9768.      Call DLLs from the Property Editor. 
  9769.  
  9770.  
  9771. 笊絶武笊 25.1. Why Use DLLs? 笊絶武笊
  9772.  
  9773. You use DLLs to increase your application's performance. Using an existing DLL 
  9774. from within VisualAge for Basic requires less programming experience than 
  9775. creating a new DLL. You use DLLs to access features not available within 
  9776. VisualAge for Basic, to control low-level aspects of the operating system, to 
  9777. internationalize your application, or to improve performance. 
  9778.  
  9779.  
  9780. 笊絶武笊 25.1.1. Accessing Commercial Libraries 笊絶武笊
  9781.  
  9782. If you were designing a tax form application with the ability to file the tax 
  9783. return electronically, you would need procedures to control a modem. You could 
  9784. write these procedures yourself, or you could access an existing third-party 
  9785. DLL. This not only saves you programming time, but should speed your testing 
  9786. and debugging time as well. 
  9787.  
  9788. For your tax form application you might access the following: 
  9789.  
  9790.      A DLL to control a modem. 
  9791.  
  9792.      A DLL with specialized fonts. 
  9793.  
  9794.      A DLL with tax-specific math calculations. 
  9795.  
  9796.  
  9797. 笊絶武笊 25.1.2. Controlling the Operating System 笊絶武笊
  9798.  
  9799. In order to use some aspects of your operating system, you must invoke 
  9800. procedures within DLLs shipped with the operating system (for example, 
  9801. kernel95.dll for Windows NT and Windows 95 and doscalls.dll for OS/2.). 
  9802.  
  9803.  
  9804. 笊絶武笊 25.1.3. Internationalizing your Application 笊絶武笊
  9805.  
  9806. You can internationalize your application by creating resource files compiled 
  9807. into a DLL. These resource files can contain translatable error message 
  9808. strings, menu names, and any other end-user information. 
  9809.  
  9810.  
  9811. 笊絶武笊 25.1.4. Improving Performance 笊絶武笊
  9812.  
  9813. If your application contains algorithms that are extremely 
  9814. computation-intensive, you can improve the speed of your application. You can 
  9815. rewrite the algorithms in another language and compile them into a DLL. 
  9816.  
  9817.  
  9818. 笊絶武笊 25.2. Where Do You Find DLLs? 笊絶武笊
  9819.  
  9820. A DLL must be in a directory accessible to your VisualAge for Basic application 
  9821. at run time. 
  9822.  
  9823. In a Windows NT or Windows 95 operating environment: DLLs must be in one of the 
  9824. following locations: 
  9825.  
  9826.      In the current working directory. 
  9827.  
  9828.      In the installation_drive\installation_directory\bin directory. 
  9829.  
  9830.      In a directory listed in the PATH environment variable. 
  9831.  
  9832.      In the system directory. 
  9833.  
  9834.  In an OS/2 operating environment: DLLs must be in one of the following 
  9835.  locations: 
  9836.  
  9837.      In the current working directory. 
  9838.  
  9839.      In a directory listed in the LIBPATH environment variable set in the 
  9840.       config.sys file 
  9841.  
  9842.  Tip:  Every DLL has its own set of requirements. Before referencing an 
  9843.  external DLL, refer to its documentation. 
  9844.  
  9845.  
  9846. 笊絶武笊 25.3. How Do You Use DLLs? 笊絶武笊
  9847.  
  9848. You can use the Property Editor or the Code Editor to access a DLL. You use DLL 
  9849. procedures in your VisualAge for Basic application by declaring the procedure 
  9850. and augmenting it with the DLL name. The DLL loads when you first reference it 
  9851. at run time. 
  9852.  
  9853. When you declare a DLL, you are telling your application that you need the 
  9854. DLL's information. When your application refers to the DLL at run time, active 
  9855. memory stores a copy of the DLL for future use with your application. The 
  9856. memory clears itself after your application exits. 
  9857.  
  9858. Tip:  An error is generated if you try to access an undeclared procedure. When 
  9859. you declare your DLL, you must decide whether it should be public or private, 
  9860. and whether it should be a sub or function procedure. 
  9861.  
  9862. Where you declare the DLL procedure in your application determines whether it 
  9863. is private or public. Declaring a DLL procedure in a form module makes it 
  9864. private to that form. Declaring a DLL procedure in a code module makes it 
  9865. public to your entire application. 
  9866.  
  9867. A sub procedure declares a procedure that does not return a value: 
  9868.  
  9869. A function procedure declares a procedure that returns a value. You can specify 
  9870. the data type returned by the function using a type-declaration character, or 
  9871. with a final As type clause. 
  9872.  
  9873.  
  9874. 笊絶武笊 25.4. Declaring a DLL Procedure in the Code Editor 笊絶武笊
  9875.  
  9876. To declare a DLL procedure, go to the Declarations section of the Code Editor. 
  9877. Use the Declare statement to call DLL as sub or function procedures. 
  9878.  
  9879. Declare Function ProcedureName Lib "LibraryName" (Arg1 As
  9880. Type) As Type
  9881.  
  9882. See also:  VisualAge for Basic Language Reference Online Help, Declare 
  9883. Statement. 
  9884.  
  9885. Tip:  Enter the DLL procedure as a single logical line in the Code window 
  9886. [General] [Declarations] sections. 
  9887.  
  9888.  
  9889. 笊絶武笊 25.4.1. Specifying the Library 笊絶武笊
  9890.  
  9891. To specify the location of the DLL procedure, use the Lib LibraryName 
  9892. attribute. 
  9893.  
  9894. Declare Function ProcedureName Lib "LibraryName" (Arg1 As
  9895. Type) As Type
  9896.  
  9897. You define the variables as follows: 
  9898.  
  9899.      Lib is a VisualAge for Basic keyword and identifies that the next 
  9900.       argument is the name of the DLL. 
  9901.  
  9902.      LibraryName is the string argument specifying the path to the DLL 
  9903.       containing the procedure. The full path is essential if the DLL does not 
  9904.       reside in your operating system's default path or the current directory. 
  9905.  
  9906.      In Windows NT and Windows 95: You must specify the full path if the DLL 
  9907.       does not reside in the current directory of a directory listed in the 
  9908.       PATH enviroment variable. 
  9909.  
  9910.      In OS/2: You do not need to specify the full path, but the DLL must be 
  9911.       located in the current directory, or one listed in the LIBPATH 
  9912.       environment variable. 
  9913.  
  9914.  
  9915. 笊絶武笊 25.4.2. Passing Arguments 笊絶武笊
  9916.  
  9917. The data types can either be expressed with a type-declaration character (%, &, 
  9918. !, #, @, $), or by using the As type clause. Valid data types are: Integer, 
  9919. Long, Single, Double, Currency, String (variable-length only), Variant, Any, 
  9920. User-Defined Type, and Class Type. You must delimit multiple arguments with 
  9921. commas. For example: 
  9922.  
  9923. Declare Function ProcedureName Lib "LibraryName" FirstVariable As
  9924. Long,_
  9925.  
  9926.     SecondVariable%, ThirdVariable As Any
  9927.  
  9928. See also:  VisualAge for Basic Language Reference Online Help, Data Types 
  9929.  
  9930. Tip:  Arguments are passed by reference or by value. When you pass a variable 
  9931. by reference, you pass a pointer to that variable. When you pass a variable by 
  9932. value, you pass the actual current value of that variable, as stored in the DLL 
  9933. procedure. The following table shows the data types and whether they can pass 
  9934. by reference or by value. 
  9935.  
  9936. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  9937. 笏ata Type           笏1assed by Reference 笏1assed by Value     笏
  9938. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9939. 笏nteger             笏Y                   笏Y                   笏
  9940. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9941. 笏ong                笏Y                   笏Y                   笏
  9942. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9943. 笏4ingle              笏Y                   笏Y                   笏
  9944. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9945. 笏ouble              笏Y                   笏Y                   笏
  9946. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9947. 笏urrency            笏Y                   笏Y                   笏
  9948. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9949. 笏4tring              笏Y                   笏Y                   笏
  9950. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9951. 笏rray               笏Y                   笏                    笏
  9952. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9953. 笏ull Pointers       笏Y                   笏                    笏
  9954. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9955. 笏6ser-Defined        笏Y                   笏Y                   笏
  9956. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9957. 笏7ariant             笏Y                   笏Y                   笏
  9958. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9959. 笏ny                 笏Y                   笏                    笏
  9960. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  9961. 笏lass               笏Y                   笏                    笏
  9962. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  9963.  
  9964. By default, VisualAge for Basic passes arguments by reference. However, some 
  9965. routines expect the value of an argument instead of a reference. To pass an 
  9966. argument to the called procedure by value, use the ByVal keyword, with the 
  9967. following syntax: 
  9968.  
  9969. Declare Function ProcedureName Lib "LibraryName" (ByVal FirstArg1
  9970. As Long)_
  9971.     (ByVal As SecondArg%) As Type
  9972.  
  9973. If the procedure passes the numeric argument by value, it converts the argument 
  9974. to the data type indicated in the Declare statement. For example, if a Declare 
  9975. statement argument declares a Long data type, an Integer automatically converts 
  9976. to a Long data format before it is passed. 
  9977.  
  9978. Not all DLL procedures support all the different VisualAge for Basic data 
  9979. types. When passing arguments to a DLL, some of the data types are not 
  9980. compatible. The ByVal keyword converts between the VisualAge for Basic data 
  9981. type and the DLL procedure data type. Depending on the DLL specifications, the 
  9982. DLL could accept strings, arrays, user-defined data types, and null pointers. 
  9983.  
  9984. The individual elements of a user-defined data type pass by value like any 
  9985. other variable. However, to pass an entire user-defined data type as an 
  9986. argument, you must pass it by reference. 
  9987.  
  9988.  
  9989. 笊絶武笊 25.4.3. Overriding Type Checking 笊絶武笊
  9990.  
  9991. You can use the As Any parameter to override data type checking for an 
  9992. argument. The Any data type is useful for procedures that accept more than one 
  9993. type for the same argument. It has the following syntax: 
  9994.  
  9995. Declare Function ProcedureName Lib "LibraryName" FirstVariable As
  9996. Long,_
  9997.     SecondVariable%, ThirdVariable As Any
  9998.  
  9999. When you use the Any data type, the argument passes only by reference. 
  10000.  
  10001.  
  10002. 笊絶武笊 25.4.4. Defining an Alias for a Procedure 笊絶武笊
  10003.  
  10004. Procedure names must follow VisualAge for Basic naming conventions. If the DLL 
  10005. procedure has names with illegal characters or reserved words, you can use the 
  10006. Alias keyword. 
  10007.  
  10008. You use the Alias keyword after the Lib keyword. It indicates that the 
  10009. procedure goes by another name in the DLL, for example: 
  10010.  
  10011. Declare Sub Transportation Lib "Police " Alias "RCMP"
  10012.                         'Transportation is also referred to as
  10013.                         'RCMP in the Police.DLL.
  10014.  
  10015. Some DLLs identify procedures by an ordinal position-some DLLs only have 
  10016. ordinal numbers. Using ordinal numbers saves memory in your application and is 
  10017. faster than referencing the DLL's procedures by name. You obtain ordinal 
  10018. numbers by consulting the DLL's documentation. To specify the ordinal number, 
  10019. place it after the Alias keyword, and always put a pound sign (#) before the 
  10020. number. 
  10021.  
  10022. Declare Sub Transportation Lib "Police " Alias "#10"
  10023.                         'Transportation is labeled or has an
  10024.                         'identification number of 10 in Police.DLL.
  10025.  
  10026.  
  10027. 笊絶武笊 25.5. Example of Declaring an External Function 笊絶武笊
  10028.  
  10029. The following example works in Windows 95, Windows NT, and OS/2. It uses a DB2 
  10030. Call Level Interface (CLI) DLL to set an environment variable. For OS/2, set 
  10031. CLILIB = db2cli.dll, and for Windows NT and Windows 95, set CLILIB=db2cliw.dll. 
  10032.  
  10033. Important:  To run this example, you must have the DB2 Client Application 
  10034. Enabler (CAE) installed. 
  10035.  
  10036. ' This example assumes you have installed the DB2 Client Application
  10037. ' Enabler (CAE)
  10038. Const CLILIB = "db2cli.lib"                        ' For OS/2:
  10039. db2cli.dll
  10040.                         ' For Windows NT and Windows 95: db2cliw.dll
  10041. Declare Function SQLAllocEnv Lib CLILIB (ByVal henv As Long,_
  10042.     phdbc As Long) As Integer
  10043. Declare Function SQLSetEnvAttr Lib CLILIB (ByVal henv As Long,_
  10044.     ByVal Attribute As Long, ByVal Value As Any,_
  10045.     ByVal StringLength As Long)As Integer
  10046.  
  10047. Declare Function SQLFreeEnv Lib CLILIB(ByVal henv As Long) As Integer
  10048. Sub main()
  10049. On Error Goto smainErr
  10050. Dim henv As Long                        ' Environment handle
  10051. Dim rc As Integer                        ' Return codes
  10052. Dim output_nts As Long
  10053.     output_nts = SQL_FALSE
  10054.     rc = SQLAllocEnv(henv)                    ' Allocate an environment handle
  10055. If (rc = SQL_SUCCESS) Then
  10056.     SQLSetEnvAttr(henv, SQL_ATTR_OUTPUT_NTS, output_nts, 0)
  10057.     If (rc = SQL_SUCCESS) Then
  10058.         MsgBox "Environment attribute successfully set"
  10059.     Else
  10060.         MsgBox "Environment attribute not set"
  10061.     End If
  10062.     Else
  10063.         MsgBox "Environment not allocated"
  10064. End If
  10065.  
  10066.     rc = SQLFreeEnv(henv)
  10067.  
  10068.     Exit Sub
  10069. smainErr:
  10070.     MsgBox "Error " & Err & ": " & Error$(Err) & " in seteattr"
  10071.     Resume Next
  10072. End Sub
  10073.  
  10074.  
  10075. 笊絶武笊 25.6. Windows NT and Windows 95: Example of Declaring an External Function 笊絶武笊
  10076.  
  10077. The following example declares an external function in the Windows Kernel DLL 
  10078. to obtain a string value corresponding to the name of the Windows directory. 
  10079. The As Integer portion of the function declaration refers to the return format 
  10080. for error codes. 
  10081.  
  10082. Declare Function GetWindowsDirectoryA Lib "Kernel32" (ByVal WDir$,_.br
  10083. ByVal Size&) As Long
  10084.  
  10085. Sub Form_Click ()
  10086.     Private OK                            'Declare Variables
  10087.     Private Msg
  10088.     Private WDir$, Size%
  10089.     WDir$ = String$(255, 0)                            'Initialize
  10090. Windows Directory String
  10091.     OK = GetWindowsDirectory(WDir$, Len(WDir$))
  10092.     If OK Then                            'No Error occurred
  10093.         Msg = "The Windows Directory is: " & WDir$
  10094.     Else                            'If Error occurred
  10095.         Msg = "Error. Failed to get the Windows Directory."
  10096.     End If
  10097.     MsgBox Msg                            'Pop up Message
  10098. End Sub
  10099.  
  10100.  
  10101. 笊絶武笊 25.7. Calling a DLL Procedure in the Code Editor 笊絶武笊
  10102.  
  10103. You call a DLL procedure in the same manner as any other statement or function. 
  10104. You can use the Call statement to switch to a DLL procedure.
  10105.  
  10106. See also:  VisualAge for Basic Language Reference Online Help, Call Statement. 
  10107.  
  10108. Tip:  Values exchanged between VisualAge for Basic and DLL procedures are not 
  10109. verified. The data passed to a DLL is not protected and could cause undefined 
  10110. behavior. 
  10111.  
  10112. You can pass Call statement arguments by reference or by value. A DLL procedure 
  10113. can alter the value of arguments passed by reference but does not alter 
  10114. arguments passed by value. The value arguments are assigned a temporary 
  10115. address. To pass arguments by value, enclose them in brackets or declare them 
  10116. using the ByVal keyword. 
  10117.  
  10118.  
  10119. 笊絶武笊 25.8. Example of Using the Call Statement with a DLL Function 笊絶武笊
  10120.  
  10121. The following example declares a DLL sub procedure. It demonstrates two ways to 
  10122. call the SetDoubleClickTime in the DLL library User DLL to set the double-click 
  10123. interval. 
  10124.  
  10125. Declare Function SetDoubleClickTime Lib "User32" (ByVal N As Long) As
  10126. Integer
  10127.     Return "Error Message"                    `If not compatible.
  10128. Private Flag                        'Declare global interval
  10129.  
  10130. Sub Command1_Click ()
  10131.     Private Msg
  10132.     If Not Flag Then                    'Set DblClick interval by call
  10133.                         'statement
  10134.         Call SetDoubleClickTime(2000)
  10135.         Msg = "The double-click interval is 2000 msec now"
  10136.         Flag = True
  10137.     Else
  10138.         SetDoubleClickTime 500                'Set DblClick interval without call
  10139.         Msg = "The double-click interval is 500 msec now"
  10140.         Flag = False
  10141.     End If
  10142.     MsgBox Msg & Chr(10) & "Double-click on Form1 to test"
  10143.                         'Display Message
  10144. End Sub
  10145.  
  10146. Sub Form_DblClick ()
  10147.     MsgBox "Double Click"                    'Pop Up Message Dialog
  10148. End Sub
  10149. Sub Form_Load ()
  10150.     Command1.Caption = "Change Interval"
  10151.     Flag = False
  10152. End Sub
  10153.  
  10154. Sub Form_Unload (Cancel As Integer)
  10155.     Call SetDoubleClickTime(0)                    'Reset to the normal time
  10156. End Sub
  10157.  
  10158.  
  10159. 笊絶武笊 25.9. Calling a DLL Procedure in the Property Editor 笊絶武笊
  10160.  
  10161. This example uses the Property Editor to access the first variable, called 
  10162. String, for a custom DLL named GetMessageString: 
  10163.  
  10164.    1. Declare GetMessageString in the Code Editor declaration section. 
  10165.  
  10166.       Declare Function GetMessageString As String 
  10167.  
  10168.    2. Change Label1's Caption property to Expression mode. Highlight the 
  10169.       Caption property, and choose Selected=> Expression. 
  10170.  
  10171.       An E (for Expression) is displayed to the left of the word Caption. 
  10172.  
  10173.    3. Type GetMessageString(1) in the Caption's text area. 
  10174.  
  10175.       The string in GetMessageString, String1 variable loads. 
  10176.  
  10177.  See also:  Chapter 4, Using the Property Editor, Displaying Property Values by 
  10178.  Constant or Expression. 
  10179.  
  10180.  
  10181. 笊絶武笊 25.10. Passing Data Between a DLL and Your Application 笊絶武笊
  10182.  
  10183. Some data types require special handling when passing data between your 
  10184. application and a DLL. This section describes the special handling for Strings, 
  10185. Arrays, Array Elements, User-Defined Types, Null Pointers, Properties, and 
  10186. Function results. 
  10187.  
  10188.  
  10189. 笊絶武笊 25.10.1. Passing and Receiving String Arguments (Null-Terminated) 笊絶武笊
  10190.  
  10191. String data types are always passed by reference. Most DLL procedures expect 
  10192. standard C-language strings ending with a null character. To convert a 
  10193. VisualAge for Basic string, use the ByVal keyword. This keyword does not pass 
  10194. the string by value, but converts it to a null-terminated string and passes the 
  10195. address. 
  10196.  
  10197. If the DLL modifies the string, the modified string is converted back into 
  10198. VisualAge for Basic format before writing to the original location (where it 
  10199. was called in your application). 
  10200.  
  10201. Some DLL procedures take a string buffer as an argument and use it to return a 
  10202. string. When you pass a string buffer, make sure there is sufficient buffer 
  10203. space allocated for insertion of returned data. If you do not allocate 
  10204. sufficient space the behavior is undefined. 
  10205.  
  10206. Use one of the following methods to make sure that sufficient space is 
  10207. available: 
  10208.  
  10209.      Set the length of the string using the Str or Space function. When the 
  10210.       DLL returns the string argument, the null-terminated string replaces the 
  10211.       filler characters, for example: 
  10212.  
  10213.         S$ = Space$(25) 
  10214.  
  10215.       Passing S$ as a parameter passes the address of a string containing 25 
  10216.       characters plus one for the ASCII Null character. 
  10217.  
  10218.      Define the string as fixed length using the Private statement, for 
  10219.       example: 
  10220.  
  10221.         Private FixedString As String*50 
  10222.  
  10223.       This example defines FixedString as private to that module and returns it 
  10224.       as a string containing 50 characters plus one for the ASCII Null 
  10225.       character. 
  10226.  
  10227.  
  10228. 笊絶武笊 25.10.2. Passing Arrays and Array Elements 笊絶武笊
  10229.  
  10230. A procedure passes an array by passing the first element by reference. Some 
  10231. arrays have specific data structures that are not compatible with certain DLL 
  10232. procedures. For example, the handling of multi-dimensional arrays depends on 
  10233. the DLL. 
  10234.  
  10235. Consult the DLL's documentation to verify acceptable data structures and the 
  10236. maximum size of an array for each DLL. 
  10237.  
  10238.  
  10239. 笊絶武笊 25.10.3. Passing User-Defined Types 笊絶武笊
  10240.  
  10241. A procedure passes the address of the user-defined type argument when passing 
  10242. by references. Pass the individual elements of a user-defined type in the same 
  10243. way you would pass ordinary variables. 
  10244.  
  10245. Consult the DLL's documentation to verify acceptable data types when passing 
  10246. user-defined types. 
  10247.  
  10248. See also:  Chapter 9, Working with Data and Object Variables for more 
  10249. information on user-defined types. 
  10250.  
  10251.  
  10252. 笊絶武笊 25.10.4. Passing Null Pointers 笊絶武笊
  10253.  
  10254. Use the null pointer format when you want to pass the address zero (0). For 
  10255. example, if you declare the arguments As String, passing a zero-length string 
  10256. ("") indicates a pointer to a null string, not a null pointer. 
  10257.  
  10258. To pass a null pointer as an argument, declare the argument As Any and pass the 
  10259. expression using ByVal 0 
  10260.  
  10261.      The ByVal keyword ensures that the routine gets a null pointer instead of 
  10262.       a pointer to zero. 
  10263.  
  10264.      The type-declaration character (&) after the zero (0) specifies the bit 
  10265.       size of the null pointer (Long). 
  10266.  
  10267.  See also:  VisualAge for Basic Language Reference Online Help, Appendix B, 
  10268.  Data Types. 
  10269.  
  10270.  
  10271. 笊絶武笊 25.10.5. Passing Properties 笊絶武笊
  10272.  
  10273. You can use a property argument as a variable, to set or get a single value. 
  10274. You pass a property using the ByVal keyword. 
  10275.  
  10276. Tip:  You can pass function results in the same manner as you pass property 
  10277. values. The following example uses the hWnd property. By declaring a handle 
  10278. argument (window identification number) with ByVal Integer in the Declare 
  10279. statement, you can pass it directly to a DLL procedure. 
  10280.  
  10281. Declare Function ProcedureName Lib "LibraryName"
  10282. (ByVal hWnd As Integer)_ As Integer
  10283.  
  10284. Usually you do not pass properties by reference but it can be done with a bit 
  10285. of data manipulation. First you assign the property to a variable, and then 
  10286. pass the variable by reference. 
  10287.  
  10288. The following example assigns the value of the window handle (window 
  10289. identification number) to a variable. You can then use the variable in an event 
  10290. procedure to manipulate the window: 
  10291.  
  10292. Dim variablex                      'Define the variable.
  10293. variablex = hWnd                   'Assign the value of the hWnd (window
  10294.                                    'handle) property to the variable.
  10295. Declare Function ProcedureName Lib "LibraryName"
  10296. (variablex As Integer)_ As Integer
  10297.  
  10298.  
  10299. 笊絶武笊 25.11. Building Your Own DLLs 笊絶武笊
  10300.  
  10301. You can build DLLs several ways. For example, you can hard-code messages in the 
  10302. DLL or use the Windows NT or Windows 95 resource support function and link a 
  10303. resource file (.rc) to your DLL. 
  10304.  
  10305.  
  10306. 笊絶武笊 25.11.1. Creating a Hardcoded DLL 笊絶武笊
  10307.  
  10308. This example shows a hard-coded GetMessageString procedure in a DLL: 
  10309.  
  10310. _ _declspec(dllexport) char * GetMessageString (Int msgID)
  10311. {
  10312.     Switch(msgID){
  10313.         Case 1:
  10314.             Return "String1";            'First variation of String.
  10315.         Case 2:
  10316.             Return "String2";            'Second variation of String.
  10317.         Case 3:
  10318.             Return "String3";            'Third variation of String.
  10319.         Default:
  10320.             Break
  10321.     }
  10322.     Return "ErrorMsg1";                    'If none of the above works,
  10323.                         'return an Error Message.
  10324. }
  10325.  
  10326.  
  10327. 笊絶武笊 25.11.2. Creating a DLL Using a Linked Resource File 笊絶武笊
  10328.  
  10329. This example shows a GetMessageString procedure in a DLL using a linked 
  10330. resource file: 
  10331.  
  10332. _ _declspec(dllexport) char * GetMessageString (Int msgID)
  10333. {
  10334.     Return GetStringTable(msgID).br
  10335.                         'Calls your custom resource file, .br
  10336.                         'GetStringTable pointing to a specific.br
  10337.                         'data message, msgID.
  10338. }
  10339.  
  10340. Windows NT and Windows 95: To compile your file contain your C source code 
  10341. using the Visual C++, the command line to build the DLL is as follows: 
  10342.  
  10343. cl /LD yourSourceFilename.c
  10344.  
  10345. OS/2: To compile the file containing your C source code using IBM VisualAge 
  10346. C++, use the following command lines to build the DLL: 
  10347.  
  10348. icc -Ge -c switch.c
  10349. ilink /nofree /PM:VIO /STACK:64400
  10350.   switch.obj,switch.dll,switch.map,switch.def
  10351.  
  10352. The contents of switch.def, which is needed for the link step, should be: 
  10353.  
  10354. LIBRARY SWITCH
  10355. EXPORTS
  10356.     funcname
  10357.  
  10358. where funcname is the function name defined in switch.c. This name is also the 
  10359. function name used in the Declare statement in VisualAge for Basic. 
  10360.  
  10361.  
  10362. 笊絶武笊 26. Part 4  Advanced Techniques 笊絶武笊
  10363.  
  10364.  
  10365. 笊絶武笊 27. Chapter 20     Improving Performance 笊絶武笊
  10366.  
  10367. In this chapter you will learn techniques to make your application smaller and 
  10368. to run faster. When reading this chapter remember: compact, fast applications 
  10369. may take up less memory but there are some draw backs. A compact application 
  10370. could be harder to maintain and debug. Also, some modes of compacting the 
  10371. application could cause your application to run slower. This chapter provides 
  10372. you with information on how to produce an application with the proper balance 
  10373. of compactness and speed. It contains the following sections: 
  10374.  
  10375.      Starting your application 
  10376.  
  10377.      Using data types and variables 
  10378.  
  10379.      Using language elements 
  10380.  
  10381.      Using objects 
  10382.  
  10383.      Using constants 
  10384.  
  10385.      Using DLLs 
  10386.  
  10387.      Using SOM objects 
  10388.  
  10389.  This chapter does not attempt to recommend any one technique or method as each 
  10390.  application is different. The following discussion describes alternatives and 
  10391.  tradeoffs. 
  10392.  
  10393.  
  10394. 笊絶武笊 27.1. Starting Your Application 笊絶武笊
  10395.  
  10396. The way your application first appears to the user must be interactive, fast, 
  10397. and professional. The easiest way for user interaction is to provide a status 
  10398. indicator. This is a simple method showing the user that your application is in 
  10399. the loading process. 
  10400.  
  10401. You can create a simple status indicator using a splash screen (a form with a 
  10402. graphic), or a simple dialog (an About screen). By assigning the mousepointer 
  10403. in the startup form's Form_Load event, you call the operating system's busy 
  10404. indicator. Each operating system automatically uses its custom Busy 
  10405. mousepointer. 
  10406.  
  10407. Your first form should contain a minimal amount of components. The more 
  10408. components on a form, the longer the display time. 
  10409.  
  10410. How you load your forms also affects the visual impact of your application. 
  10411. Preloading and then hiding the forms at startup increases the form's display 
  10412. during run time. This however, slows the installation speed. Not loading the 
  10413. forms until the user invokes them increases the installation time but slows the 
  10414. user interaction process. 
  10415.  
  10416.  
  10417. 笊絶武笊 27.2. Using Data Types and Variables 笊絶武笊
  10418.  
  10419. The VisualAge for Basic data types perform calculations and translations at 
  10420. different speeds. Integer and Long data types are the fastest data types best 
  10421. used for representing Boolean values and storing whole numbers. 
  10422.  
  10423. Tip:  On Windows NT, Windows 95,  and OS/2, the Long data type is faster than 
  10424. the Integer data type. On AIX, the Integer data type is faster than the Long 
  10425. data type. 
  10426.  
  10427. The Currency data type is the slowest data type, excluding Variant, for 
  10428. performing mathematical calculations. However, the Variant data type, though 
  10429. slow, has the greatest flexibility. Limit the use of the Variant data type as 
  10430. it uses more stack space than other data types. 
  10431.  
  10432. In your code, if you refer to the value of a property or a function, it is 
  10433. faster to assign the value to a variable and refer to the variable. It is even 
  10434. faster if the variable is defined as an Integer or Long data type, for example: 
  10435.  
  10436. Dim PropertyValue As Integer
  10437. Dim FunctionReturnValue As Long
  10438.  
  10439.  
  10440. 笊絶武笊 27.3. Using Language Elements 笊絶武笊
  10441.  
  10442. Different language elements affect either the run-time memory or the start up 
  10443. time of your application. The is a quick look at how some elements affect your 
  10444. application. 
  10445.  
  10446. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  10447. 笏anguage Elements   笏4et to...      笏escription                             笏
  10448. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10449. 笏lipControls        笏alse          笏3educes the amount of work and time to  笏
  10450. 笏Qroperty            笏               笏Sepaint controls.                       笏
  10451. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10452. 笏utoRedraw property 笏alse          笏6se the Paint event instead to refresh  笏
  10453. 笏                    笏               笏Hraphics that change frequently.        笏
  10454. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10455. 笏                    笏5rue           笏6se only for graphics that do not need  笏
  10456. 笏                    笏               笏Donstant updating.                      笏
  10457. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10458. 笏4how and Hide       笏               笏4how a basic startup form in the Load   笏
  10459. 笏Nethods             笏               笏Fvent while other forms are loading. Set笏
  10460. 笏                    笏               笏Uhe other forms to Hide until the user  笏
  10461. 笏                    笏               笏Oeeds them.                             笏
  10462. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10463. 笏6nload event        笏               笏6nload forms when no longer needed to   笏
  10464. 笏                    笏               笏Gree memory.                            笏
  10465. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10466. 笏mage property      笏               笏6se the Cls method and set AutoRedraw to笏
  10467. 笏                    笏               笏alse to free memory when graphicis no  笏
  10468. 笏                    笏               笏Monger needed.                          笏
  10469. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10470. 笏1icture property    笏               笏f the graphic is not longer required   笏
  10471. 笏                    笏               笏Tet the property to Nothing to remove   笏
  10472. 笏                    笏               笏Hraphic and free memory.                笏
  10473. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10474. 笏orm objects        笏               笏oad only if needed or frequently       笏
  10475. 笏                    笏               笏Dalled. Unload if no longer needed.     笏
  10476. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10477. 笏ommon Components   笏               笏6se arrays instead of many individual   笏
  10478. 笏                    笏               笏Domponents.                             笏
  10479. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10480. 笏4hapes and Lines    笏               笏6se only with simple graphics.          笏
  10481. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10482. 笏mage and Picture   笏               笏6se Image to display simple             笏
  10483. 笏ox                 笏               笏Oon-interactive graphics that do not    笏
  10484. 笏                    笏               笏Sequire the resources of a picture box. 笏
  10485. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  10486. 笏abels and Text     笏               笏abels use less memory than text boxes. 笏
  10487. 笏oxes               笏               笏                                        笏
  10488. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  10489.  
  10490.  
  10491. 笊絶武笊 27.4. Using Objects 笊絶武笊
  10492.  
  10493. When you use OLE objects, you enhance the look and feel of your application 
  10494. without excessive programming effort on your part. However, how and when you 
  10495. use an OLE object does affect the speed and size of your finished application. 
  10496.  
  10497. Your application's executable file contains all data, including data contained 
  10498. within an OLE object. The executable file size depends on when you create the 
  10499. OLE object. If you insert the OLE object at design time, the executable file is 
  10500. larger than if you create the OLE object at run time. 
  10501.  
  10502. When you include an OLE object in your application, you slow down the processor 
  10503. regardless of when you create the OLE object. For example, if you create an OLE 
  10504. object in the Form_Load event procedure, all processing suspends to create the 
  10505. OLE object. Processing speed reduces because the object must exist before the 
  10506. form displays. 
  10507.  
  10508. Refer to objects as specific objects rather than as generic objects. Specific 
  10509. objects resolve references to the properties and methods at compilation time 
  10510. instead of run time. To ensure recognition of specific object types, declare 
  10511. objects as they appear in the Project window. 
  10512.  
  10513.  
  10514. 笊絶武笊 27.5. Using Constants 笊絶武笊
  10515.  
  10516. Using constants listed in the constant.bas file allows your application to run 
  10517. faster and makes it easier to maintain. You can refer to the constants by 
  10518. number or by a corresponding name. 
  10519.  
  10520. Tip:  To improve your code's readability, refer to an OLE object's action by 
  10521. name or symbolic constant. 
  10522.  
  10523.  
  10524. 笊絶武笊 27.6. Using DLLs 笊絶武笊
  10525.  
  10526. You use DLLs to increase your application's performance. Using an existing DLL 
  10527. from within VisualAge for Basic requires less programming experience than 
  10528. creating a new DLL. If your application contains algorithms that are extremely 
  10529. computation-intensive, you can improve the speed of your application. You can 
  10530. rewrite the algorithms in another language and compile them into a DLL. 
  10531.  
  10532.  
  10533. 笊絶武笊 27.7. Using SOM objects 笊絶武笊
  10534.  
  10535. The VWADDSOM environment variable specifies that VisualAge for Basic loads the 
  10536. SOM OSA at startup. If you do not plan to use SOM objects, you can improve the 
  10537. performance of both VisualAge for Basic and of your generated executables by 
  10538. removing the VWADDSOM environment variable. 
  10539.  
  10540.  
  10541. 笊絶武笊 28. Chapter 21     Cross-Platform Development 笊絶武笊
  10542.  
  10543. When building applications for cross-platform environments your goal is to 
  10544. build a Graphical User Interface (GUI) that is polished, style-guide compliant, 
  10545. and tightly integrated with the native environment. 
  10546.  
  10547. You application should: 
  10548.  
  10549.      Have a style, look, and feel that matches users' expectations. 
  10550.  
  10551.      Comply with style guides. Consistent GUIs make users more productive and 
  10552.       reduce training and support costs. 
  10553.  
  10554.      Use the facilities provided by the native platform to interact both with 
  10555.       the environment and with other applications. 
  10556.  
  10557.  How can you do this without compromising your requirements or sacrificing 
  10558.  features? You have to choose the right approach to cross-platform development. 
  10559.  
  10560.  
  10561. 笊絶武笊 28.1. Naming Conventions 笊絶武笊
  10562.  
  10563. One of the cross-platform development issues is the naming of your files. Each 
  10564. platform has its own set of rules. Some of the cross-platform file constraints 
  10565. are: 
  10566.  
  10567.      Length of the file name 
  10568.  
  10569.      Length and format of the file extension 
  10570.  
  10571.      Case sensitivity 
  10572.  
  10573.      Use of special characters or wildcards 
  10574.  
  10575.  
  10576. 笊絶武笊 28.2. Cross-Platform Issues 笊絶武笊
  10577.  
  10578. You need to consider how you will move your project between platforms and keep 
  10579. the interface consistent with both the original project interface and the 
  10580. native platform interface: 
  10581.  
  10582.      Convert features that are obvious and standard per platform. For example, 
  10583.       some platforms use File=>Quit, and some use File=>Exit to end their 
  10584.       applications. 
  10585.  
  10586.      Match the general look and feel for each platform. Command buttons and 
  10587.       option buttons should look like the target platforms; however, sizes 
  10588.       should match those of the original application. 
  10589.  
  10590.      When you import a project created on Windows to OS/2, the Windows fonts 
  10591.       might not map to a usable font on OS/2.  You should change the name of 
  10592.       the fonts to those available on OS/2. VisualAge for Basic accesses the 
  10593.       current operating system fonts when you create an application.  You set 
  10594.       VisualAge for Basic fonts using the instpref.ini file. 
  10595.  
  10596.  See also: Modifying the instpref.ini File. For more information on fonts, see 
  10597.  Font Restrictions on OS/2 
  10598.  
  10599.      Do not assume more than one mouse button when mapping mouse buttons. 
  10600.  
  10601.      Each operating system has their own native File List, Drive, and 
  10602.       Directory List Boxes. References to these components give focus to the 
  10603.       platform's native dialog box. 
  10604.  
  10605.      Reference graphics in your application, do not embed them. Each operating 
  10606.       system supports a specific set of graphic formats. 
  10607.  
  10608.  
  10609. 笊絶武笊 28.2.1. Platform-Specific Elements 笊絶武笊
  10610.  
  10611. The VisualAge for Basic Language Reference describes all elements of the 
  10612. VisualAge for Basic language. Some of the elements contain features, such as 
  10613. file name format or wildcard behavior, that are specific to certain platforms. 
  10614. Platform-specific features are listed under the heading Platform Specific under 
  10615. applicable language elements. Supported platforms are AIX, OS/2, and Microsoft 
  10616. Windows NT and Windows 95. 
  10617.  
  10618. Use only those language elements and features supported on the operating system 
  10619. on which your VisualAge for Basic application will run. For example, use drive 
  10620. letters in your program only if it will run on OS/2, Windows 95, and Windows 
  10621. NT, not if it will run on AIX. 
  10622.  
  10623. Each language element summary lists the components applicable to that element. 
  10624. The following components are specific to the Microsoft Windows NT and Windows 
  10625. 95 platforms: 
  10626.  
  10627.      Data 
  10628.      OLE 
  10629.  
  10630.  Restriction:  References to these components are ignored if the project is 
  10631.  compiled for a platform other than Microsoft Windows NT or Windows 95. 
  10632.  
  10633.  
  10634. 笊絶武笊 28.2.1.1. Font Restrictions on OS/2 笊絶武笊
  10635.  
  10636. The following restrictions apply to fonts on VisualAge for Basic on OS/2: 
  10637.  
  10638.      Mnemonics that you entere via the Caption property for certain components 
  10639.       (for example the Check Box, Command Button, Option Button, and Label 
  10640.       components) do not appear underlined if you do not have Fixpack 17 
  10641.       installed on OS/2 Warp.  If you do not have Fixpack 17 installed, choose 
  10642.       a font such as Helv (not Helvetica) and ensure that the FontBold property 
  10643.       is set to False. 
  10644.  
  10645.      If you use a bitmapped font (for example System Proportional) as the 
  10646.       FontName for components, other properties such as FoldBold, FontItalic, 
  10647.       FontStrikethru, FontUnderline, and different font sizes only work if that 
  10648.       bitmapped font is available with the selected attributes. For example, 
  10649.       selecting a 48.00 point size for a System Proportional font might not 
  10650.       give you the desired font if a 48.00 point version of this font is not 
  10651.       available. 
  10652.  
  10653.  
  10654. 笊絶武笊 28.2.1.2. Caption Property Restriction on OS/2 笊絶武笊
  10655.  
  10656. In VisualAge for Basic for Windows NT and Windows 95, you can assign mnemonics 
  10657. to the Frame or Label component via the Caption property, to give focus to the 
  10658. next component in the tab order.  This function is not available in OS/2. 
  10659.  
  10660.  
  10661. 笊絶武笊 28.3. Taking an Application-Oriented Approach 笊絶武笊
  10662.  
  10663. VisualAge for Basic takes an application-oriented approach to cross-platform 
  10664. development. It starts at the top, with the applications' GUI, not at the 
  10665. bottom with the native user interface features. 
  10666.  
  10667. In VisualAge for Basic you decompose an application by identifying the key 
  10668. abstractions in its GUI, such as a financial stock-trading object. The goal is 
  10669. to identify and define the application-level or reusable objects that make up 
  10670. an application's GUI. 
  10671.  
  10672. By taking an application-oriented approach, you put off having the decide on 
  10673. how to implement a portable GUI. You tackle this question only when you have 
  10674. identified the reusable classes of GUI objects in your application. The 
  10675. advantage is that you start by focusing on reusability, not on the 
  10676. implementation details. 
  10677.  
  10678. The following list summarizes the VisualAge for Basic approach to 
  10679. cross-platform development: 
  10680.  
  10681.      Identify and define the classes of GUI objects in your application. 
  10682.  
  10683.      Implement the GUI objects on the target operating systems. 
  10684.  
  10685.      Integrate the GUI objects with VisualAge for Basic. 
  10686.  
  10687.      Build your GUI in VisualAge for Basic. 
  10688.  
  10689.      Use VisualAge for Basic to generate the portable interface code. 
  10690.  
  10691.      Move the generated code to the target operating system. 
  10692.  
  10693.      Compile and link the generated code with the platform-specific 
  10694.       implementation of the GUI objects. 
  10695.  
  10696.      Test the final product on all supported operating systems. 
  10697.  
  10698.  
  10699. 笊絶武笊 28.4. Defining Classes of GUI Objects 笊絶武笊
  10700.  
  10701. In VisualAge for Basic, when you define classes of GUI objects, and use them to 
  10702. build your GUIs, you separate interface code from implementation code. The 
  10703. interface code uses only the public interface of a GUI object. VisualAge for 
  10704. Basic encapsulates (hides) the implementation details within the GUI object. 
  10705.  
  10706. This means you can build portable GUIs and still use native controls. 
  10707. Application-level GUI objects can have different implementations on different 
  10708. operating systems. You can have OS/2- style interfaces on OS/2 platforms and 
  10709. Windows-style interfaces on Windows platforms. 
  10710.  
  10711. Building on native controls makes it easy to follow the native style guides. 
  10712. Not only do your interfaces have the right look and feel on each operating 
  10713. system, but they integrate well with the native environment: 
  10714.  
  10715.      The user gets the proper visual feedback when performing drag-and-drop 
  10716.       operations, because GUI objects use the native drag-and-drop mechanism. 
  10717.  
  10718.      When the user changes the overall color scheme, it applies to the GUI 
  10719.       objects. 
  10720.  
  10721.      Internationalization is handled properly. Because GUI objects are based 
  10722.       on the native operating system, they can use the input mechanism provided 
  10723.       by a system (for example, Japanese systems provide a Kanji input 
  10724.       mechanism). 
  10725.  
  10726.  
  10727. 笊絶武笊 28.5. Fine-Tuning Cross-Platform GUIs 笊絶武笊
  10728.  
  10729. Different operating systems have different characteristics, so it does not 
  10730. always make sense to implement a GUI object in exactly the same way. One of the 
  10731. benefits of the cross-platform approach is that you can change the 
  10732. implementation to suit the operating system. 
  10733.  
  10734. The level of abstraction is a measure of how the GUI object corresponds to 
  10735. actual environment elements. On one operating system you might implement a GUI 
  10736. objects as a combination of environment elements, while on another you might 
  10737. use a single environment element. 
  10738.  
  10739. For example, suppose you want to build a large, portable dialog that contains a 
  10740. file selection area. Each operating system has a unique style for accessing 
  10741. files. Windows NT, Windows 95,  and OS/2 platforms have a file list box, but 
  10742. you cannot use it as part of another dialog. You have to build the file 
  10743. selection area out of individual controls (a file list box, a directory list 
  10744. box, and a text box). 
  10745.  
  10746. Because its implementation is hidden, you can fine-tune the dialog to the 
  10747. capabilities of the target operating system. This allows you to provide the 
  10748. behavior expected by the user. For example, the Windows NT, Windows 95,  and 
  10749. OS/2 operating systems support the DOS wildcards. 
  10750.  
  10751.  
  10752. 笊絶武笊 28.6. Adding Third-Party Objects 笊絶武笊
  10753.  
  10754. Few applications consist solely of the components that come with a platform's 
  10755. native environment. Many use third-party objects and Windows controls as an 
  10756. important part of the GUIs. 
  10757.  
  10758. VisualAge for Basic was designed with this in mind. Unlike emulation features 
  10759. and least-common denominator approaches, VisualAge for Basic makes it easy to 
  10760. build portable GUIs using third-party objects. 
  10761.  
  10762. Both third-party objects and class libraries can be integrated and encapsulated 
  10763. in GUI object classes. After you have a GUI object class for a third-party 
  10764. object, you can put an instance of the class (the GUI object) in the Toolbox 
  10765. and start using it. Your generated interface code will be portable, as long as 
  10766. the implementation of the object on the target operating system offers the same 
  10767. interface. 
  10768.  
  10769.  
  10770. 笊絶武笊 29. Chapter 22     Preparing Your Application for Release 笊絶武笊
  10771.  
  10772. This chapter describes how to prepare your application for distribution to its 
  10773. end-users, as follows: 
  10774.  
  10775.      Create an executable file from your project window. 
  10776.  
  10777.      Identify files your end-users will need in addition to the executable 
  10778.       files and DLLs. 
  10779.  
  10780.      Attach a help file to your application. 
  10781.  
  10782.  In addition, a section describes the files and products that are required in 
  10783.  the end-user's environment. 
  10784.  
  10785.  
  10786. 笊絶武笊 29.1. Creating an Executable 笊絶武笊
  10787.  
  10788. You create an application executable from the project window, which displays 
  10789. the forms, modules, and any VisualAge for Basic custom components in its 
  10790. outline area. The outline area provides a good overall description of the 
  10791. elements of your application. 
  10792.  
  10793. Create the executable on the platform you want your application to run on; the 
  10794. stand-alone executable file is not portable. To create multiple-platform 
  10795. applications, build each executable on its native platform. 
  10796.  
  10797. To create an executable file: 
  10798.  
  10799. In the Project window, follow these steps: 
  10800.  
  10801.    1. Select File=>Build Executable from Project window. 
  10802.  
  10803.    2. Enter any legal file name. 
  10804.  
  10805.    3. Select OK. 
  10806.  
  10807.  VisualAge for Basic creates the executable file with an .exe extension. 
  10808.  
  10809.  
  10810. 笊絶武笊 29.2. Identifying Additional Files 笊絶武笊
  10811.  
  10812. This section helps you identify certain files-files that your end-users need in 
  10813. addition to the executable file and the standard set of DLLs for your platform. 
  10814.  
  10815. If your application refers to external DLLs or custom controls, you must 
  10816. distribute them to your users. 
  10817.  
  10818.  
  10819. 笊絶武笊 29.2.1. Including Graphics 笊絶武笊
  10820.  
  10821. If your application contains graphics loaded at design time, save and load the 
  10822. graphics with the form. Such graphics are included in the executable. 
  10823.  
  10824. If you use the LoadPicture function to load graphics in your application, 
  10825. however, they are not included in your executable. Distribute these graphics 
  10826. files to your users. 
  10827.  
  10828.  
  10829. 笊絶武笊 29.2.2. Using OpenDoc Documents 笊絶武笊
  10830.  
  10831. If your application contains OpenDoc documents, the executable file does not 
  10832. incorporate those documents. Distribute these OpenDoc documents to your users. 
  10833.  
  10834.  
  10835. 笊絶武笊 29.2.3. Using OLE Objects 笊絶武笊
  10836.  
  10837. If your application contains OLE objects, the executable file incorporates the 
  10838. associated data. If your application links to OLE objects, however, you need to 
  10839. distribute those objects to your users. 
  10840.  
  10841.  
  10842. 笊絶武笊 29.3. Attaching Help to Your Executable 笊絶武笊
  10843.  
  10844. VisualAge for Basic provides an easy way to attach help to your applications. 
  10845. Besides simply attaching a help file (.hlp) to your application as a whole, you 
  10846. can point to specific help topics to provide context- sensitive help to your 
  10847. users. 
  10848.  
  10849. You request context-sensitive help by pressing F1 when a particular component 
  10850. or menu item has focus. This type of help makes your application more user 
  10851. friendly and enables a user to find exactly the type of information they need. 
  10852. For example, if a user requested help while an entry field has focus, they 
  10853. probably want information on the possible values they could enter. They 
  10854. wouldn't want to be given a table of contents to search for this information. 
  10855.  
  10856. This section covers the following topics: 
  10857.  
  10858.      Creating the help file 
  10859.  
  10860.      Attaching the help file to your application 
  10861.  
  10862.      Creating context-sensitive help links to specific help topics 
  10863.  
  10864.  
  10865. 笊絶武笊 29.3.1. Creating the Help file 笊絶武笊
  10866.  
  10867. There are many factors to take into consideration when you are planning your 
  10868. help system, such as identifying your audience, the type of information you 
  10869. need to provide, etc. However, this chapter only addresses what you need to do 
  10870. in order to build a help file that works with an application created with 
  10871. VisualAge for Basic. 
  10872.  
  10873.  
  10874. 笊絶武笊 29.3.1.1. Windows NT and Windows 95 Considerations 笊絶武笊
  10875.  
  10876. Typically, a Windows help file defines each topic with a unique context string. 
  10877. You then map this string to a numerical constant that the application code uses 
  10878. to identify a help topic. Thus, when you build your help system, you need to 
  10879. identify each topic with a context string, such as IDH_CONTENTS. 
  10880.  
  10881. After you have defined all the topics within the help system with a unique 
  10882. context string, you should define numerical constants that correspond to each 
  10883. context string. You can choose these numbers arbitrarily, but after you select 
  10884. them, they should not be changed. 
  10885.  
  10886. The best place to include these mappings is in the Form.Load event for the 
  10887. startup form. For example, to define a constant for IDH_CONTENTS, code the 
  10888. following: 
  10889.  
  10890. Sub Form_Load ()
  10891.     Const IDH_CONTENTS = 1000
  10892.     ...
  10893. End Sub
  10894.  
  10895. For Windows NT and Windows 95 applications, you also need to create header 
  10896. files that contain the mapping for each context string. You include these files 
  10897. in the help build by specifying them in the [MAP] section of the help project 
  10898. file (.hpj). 
  10899.  
  10900. For example, to map the context string IDH_CONTENTS to the constant 1000, put 
  10901. the following line in a header file that is specified in the [MAP] section: 
  10902.  
  10903. #define IDH_CONTENTS     1000
  10904.  
  10905. When you create a help file for OS/2 using IPF, you identify each topic with a 
  10906. unique resource ID (res attribute) that must be numeric (1-64000). It helps to 
  10907. create some kind of numbering sequence to help you identify the various 
  10908. sections of your help file. 
  10909.  
  10910. Tip:  You cannot use the name or id attributes of a heading tag to identify a 
  10911. topic in a help file. 
  10912.  
  10913. You do not need to create a header file that maps these resource IDs to context 
  10914. strings like you would in Windows. However, it can be helpful to define a 
  10915. string constant for each resource ID and use this constant to refer to a help 
  10916. topic from within the application. This technique lets you change the numeric 
  10917. order of your help file without needing to change the code. 
  10918.  
  10919. The best place to define these string constants is in the Form.Load event for 
  10920. the startup form. For example, if you have a help topic with 1000 as its 
  10921. resource ID, you could define the constant IDH_CONTENTS to equal 1000: 
  10922.  
  10923. Sub Form_Load ()
  10924.     Const IDH_CONTENTS = 1000
  10925.     ...
  10926. End Sub
  10927.  
  10928.  
  10929. 笊絶武笊 29.3.2. Attaching the Help File 笊絶武笊
  10930.  
  10931. The first step to attach context-sensitive help to your application is to 
  10932. specify the name of the associated help file. The name of the help file is 
  10933. stored in the options file and is used every time the application is run. 
  10934.  
  10935.  
  10936. 笊絶武笊 29.3.2.1. To specify the name of the application help file: 笊絶武笊
  10937.  
  10938.    1. Select Options=>Project from the Project window menu. The Project options 
  10939.       window appears. 
  10940.  
  10941.    2. Enter the name of your help file (with .hlp extension) in the Application 
  10942.       Help File entry field. 
  10943.  
  10944.    3. Click on OK. 
  10945.  
  10946.  The help file is now associated with your application. All of the help topics 
  10947.  within the help file can be referenced directly from your application. 
  10948.  
  10949.  Tip:  Only one help file can be active at a time. However, you can override 
  10950.  the default application help file using the HelpFile property of the App 
  10951.  object. When you specify a new application help file, it remains active until 
  10952.  you reset the HelpFile property or quit the application. 
  10953.  
  10954.  
  10955. 笊絶武笊 29.3.3. Creating a Context-Sensitive Help Link 笊絶武笊
  10956.  
  10957. After you have built your help file and associated it with your application, 
  10958. all that is left is to create context-sensitive links to your application. You 
  10959. create a context-sensitive link by setting the HelpContextId property for an 
  10960. object. 
  10961.  
  10962.  
  10963. 笊絶武笊 29.3.3.1. To associate a help topic with an object: 笊絶武笊
  10964.  
  10965.    1. Select the component that you want to associate with a help topic. 
  10966.  
  10967.    2. Select Windows=>Property Editor from the Project window menu. The 
  10968.       Property Editor appears. 
  10969.  
  10970.    3. Set the HelpContextID property to the context string or numerical 
  10971.       constant for the desired help topic. 
  10972.  
  10973.    4. Close the Property Editor. 
  10974.  
  10975.  
  10976. 笊絶武笊 30. Part 5. Appendixes 笊絶武笊
  10977.  
  10978.  
  10979. 笊絶武笊 31. Appendix A     Customizing VisualAge for Basic 笊絶武笊
  10980.  
  10981. You can install the VisualAge for Basic client on Windows NT, Windows 95,  and 
  10982. OS/2 and install the VisualAge for Basic server on Windows NT,Windows 95, OS/2, 
  10983. and AIX/6000. You can run the VisualAge for Basic client and VisualAge for 
  10984. Basic server on different platforms or on the same machine. 
  10985.  
  10986. In this chapter you will learn how to configure VisualAge for Basic for both 
  10987. clients and servers. 
  10988.  
  10989.  
  10990. 笊絶武笊 31.1. Customizing VisualAge for Basic Interfaces 笊絶武笊
  10991.  
  10992. This section describes how VisualAge for Basic interfaces can be tailored to 
  10993. your needs. You can customize the Toolbox, Project window, Property Editor, and 
  10994. Code Editor. 
  10995.  
  10996. VisualAge for Basic installs with preset settings that you cannot change. It 
  10997. also has installation settings that you can modify, which are identified in the 
  10998. instpref.ini file. 
  10999.  
  11000. Important:  Any change to the .ini file requires that you restart VisualAge for 
  11001. Basic to invoke the changes. 
  11002.  
  11003. You set the installation configuration toggles in the instpref.ini file to 
  11004. control color, font display, and visibility. VisualAge for Basic searches for 
  11005. the instpref.ini file in the following directories and in the following order: 
  11006.  
  11007.    1. Current directory - the directory where you start VisualAge for Basic. 
  11008.  
  11009.    2. Windows NT and Windows 95 only: $HOME or root directory (). 
  11010.  
  11011.    3. $VWDIR variable to point to the location of the .ini file. 
  11012.  
  11013.  You should make a copy of the instpref.ini file, so that you can edit and save 
  11014.  your version locally. This is especially true for VisualAge for Basic 
  11015.  installed on a network where each workstation can run a customized version of 
  11016.  VisualAge for Basic. 
  11017.  
  11018.  VisualAge for Basic looks for interface attribute settings first in the .ini 
  11019.  file by interface, then by system setting. If the attribute is not set in the 
  11020.  .ini file, VisualAge for Basic then defaults to the operating system setting. 
  11021.  
  11022.  
  11023. 笊絶武笊 31.1.1. Modifying the instpref.ini File 笊絶武笊
  11024.  
  11025. \config\instpref.ini file using any text editor. 
  11026.  
  11027. Tip:  You must make changes exactly as shown. VisualAge for Basic ignores an 
  11028. incorrect setting in the .ini file and does not generate an error message. 
  11029.  
  11030. There are three types of settings: 
  11031.  
  11032.      Boolean - requiring a True or False value 
  11033.  
  11034.      String - requiring a character-string 
  11035.  
  11036.      Int - requiring an integer value 
  11037.  
  11038.  Separate compound attribute names with a dot (.) operator. For example: 
  11039.  
  11040.   Size.Width=1595
  11041.   MaxSize.Size.Height=2010
  11042.   Color.Red=132
  11043.   Background.Color.Blue=255
  11044.   SelectedForeground.Color.Green=196
  11045.   EditComponents.Font.FontName=helvetica
  11046.   CommandComponents.Font.Italic=FALSE
  11047.  
  11048.  Each attribute setting has its own list of possible values. For example: 
  11049.  
  11050.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11051.   笏ttribute           笏eywords                           笏                           笏
  11052.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11053.   笏7iew (Toolbox,      笏7isible                            笏1osition                   笏
  11054.   笏1roject window,     笏                                   笏                           笏
  11055.   笏1roperty Editor,    笏                                   笏                           笏
  11056.   笏ode Editor)        笏                                   笏                           笏
  11057.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11058.   笏4ize                笏inSize                            笏                           笏
  11059.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11060.   笏axSize             笏ackground                         笏                           笏
  11061.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11062.   笏oreground          笏ont                               笏                           笏
  11063.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11064.   笏                    笏enu                               笏5oolbar                    笏
  11065.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11066.   笏ustomization       笏4tatusText=String                  笏elpContext=Integer        笏
  11067.   笏(MenuItem, Toolbar  笏                                   笏                           笏
  11068.   笏tem)               笏                                   笏                           笏
  11069.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11070.   笏elpFile=String     笏rayed=Boolean                     笏                           笏
  11071.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11072.   笏nabled=Boolean     笏nvokedFile=String                 笏                           笏
  11073.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11074.   笏                    笏nvokedFunction=String             笏1osition.Size.[Height |    笏
  11075.   笏                    笏                                   笏8idth].[X | Y]=Integer     笏
  11076.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11077.   笏enu Editor         笏5oolBar.[EnabledPicture=Integer |  笏                           笏
  11078.   笏                    笏nabledPictureFile=String |        笏                           笏
  11079.   笏                    笏rayedPicture=Integer |            笏                           笏
  11080.   笏                    笏rayedPictureFile=String]          笏                           笏
  11081.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11082.   笏enuItem            笏aption=String                     笏nemonic=String            笏
  11083.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11084.   笏                    笏ccelerator=String                 笏                           笏
  11085.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11086.   笏pplication         笏itmapsDir=String                  笏ackground.Color.[RGB] =   笏
  11087.   笏                    笏                                   笏nteger                    笏
  11088.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11089.   笏                    笏allStackSize=Integer              笏oreground.Color.[RGB] =   笏
  11090.   笏                    笏                                   笏nteger                    笏
  11091.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11092.   笏                    笏reationMode=String                笏ibraryName=String         笏
  11093.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11094.   笏                    笏ir=String                         笏oadLibrary=Boolean        笏
  11095.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11096.   笏                    笏elpDir=String                     笏essCatalog=String         笏
  11097.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11098.   笏                    笏elpFile=String                    笏4ystemConfiguration=String 笏
  11099.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11100.   笏                    笏                                   笏6ndoStackSize=Integer      笏
  11101.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11102.  
  11103.  
  11104. 笊絶武笊 31.1.1.1. Customizing the Interface View 笊絶武笊
  11105.  
  11106. You can customize the Background, Foreground, FontSize, FontName, and the style 
  11107. of the font for areas of the Toolbox, Project window, Property Editor, and Code 
  11108. Editor. 
  11109.  
  11110. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11111. 笏0ption              笏4election           笏ata Type           笏efault             笏
  11112. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11113. 笏ackground /        笏0 to 255            笏nteger             笏4ystem              笏
  11114. 笏oreground          笏                    笏                    笏                    笏
  11115. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11116. 笏ont selection -    笏5rue or False       笏oolean             笏4ystem              笏
  11117. 笏old, Italic,       笏                    笏                    笏                    笏
  11118. 笏4trikeThru,         笏                    笏                    笏                    笏
  11119. 笏6nderline           笏                    笏                    笏                    笏
  11120. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11121. 笏ont selection -    笏ny font style      笏4tring              笏4ystem              笏
  11122. 笏ontName            笏Durrently available 笏                    笏                    笏
  11123. 笏                    笏Pn the operating    笏                    笏                    笏
  11124. 笏                    笏Tystem.             笏                    笏                    笏
  11125. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11126. 笏ont selection -    笏1 to 2048           笏nteger             笏4ystem              笏
  11127. 笏4ize                笏                    笏                    笏                    笏
  11128. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11129.  
  11130. Tip:  When checking attributes, VisualAge for Basic first checks the.ini file 
  11131. under the [Interface] heading, then the [Application] heading, and last the 
  11132. operating system setting. 
  11133.  
  11134. VisualAge for Basic's interfaces are divided into function groups to help you 
  11135. globally set the font and background colors. 
  11136.  
  11137. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11138. 笏roup                         笏escription                                       笏
  11139. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11140. 笏ditComponents                笏ncludes all editable components.                 笏
  11141. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11142. 笏4electComponents              笏ncludes all selectable components.               笏
  11143. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11144. 笏ommandComponents             笏ncludes all action buttons.                      笏
  11145. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11146. 笏llComponents                 笏llows you to globally set all interfaces.        笏
  11147. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11148.  
  11149. This example shows the instpref.ini Global Application view settings. 
  11150.  
  11151. [Application]
  11152. EditComponents.Background.Red=196
  11153. EditComponents.Background.Green=196
  11154. EditComponents.Background.Blue=196
  11155. EditComponents.Font.Size=12          'Font attributes that are not
  11156. EditComponents.Font.FontName=Courier 'set in the .ini reference the
  11157. EditComponents.Font.Bold=TRUE        'factory settings for a value.
  11158. EditComponents.Font.Italic=TRUE
  11159. EditComponents.Font.StrikeThru=FALSE
  11160.  
  11161. The Background and Foreground values set the foreground and background colors. 
  11162. The colors are set using a Red, Green, and Blue (RGB) value. Omitting one of 
  11163. the colors does not cause an error; however it does create a different color. 
  11164.  
  11165. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11166. 笏xamples                      笏escription                                       笏
  11167. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11168. 笏ackground.Red=#              笏# = Integer value, containing no spaces between 0 笏
  11169. 笏                              笏Bnd 255. If the numbers for Red, Green, Blue are  笏
  11170. 笏                              笏Tet to 255, 0, 0 respectively, so that the        笏
  11171. 笏                              笏Cackground is pure red. A combination of different笏
  11172. 笏                              笏Oumbers for each # gives various colors.          笏
  11173. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11174. 笏ackground.Green=#            笏                                                  笏
  11175. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11176. 笏ackground.Blue=#             笏                                                  笏
  11177. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11178. 笏ont.Bold=boolean             笏abels appear bold.                               笏
  11179. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11180. 笏ont.Italics=boolean          笏abels appear italic.                             笏
  11181. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11182. 笏ont.StrikeThru=boolean       笏abels appear with a line drawn through them.     笏
  11183. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11184. 笏ont.Underline=boolean        笏abels appear with an underline.                  笏
  11185. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11186. 笏ont.FontName=string          笏ame of a fontstyle, for example, Arial, Script,  笏
  11187. 笏                              笏5imesNewRoman, Courier                            笏
  11188. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11189. 笏ont.Size=#                   笏7alue between 1 and 2048                          笏
  11190. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11191.  
  11192. This example shows the instpref.ini Interface view settings. 
  11193.  
  11194.  
  11195. [ToolPalette]
  11196. Background.Red=196
  11197. Background.Green=196
  11198. Background.Blue=196
  11199. Foreground.Red=0
  11200. Foreground.Green=198
  11201. Foreground.Blue=225
  11202. Font.Size=12
  11203. Font.FontName=Courier
  11204. Font.Bold=TRUE
  11205. Font.Italic=TRUE
  11206. Font.StrikeThru=FALSE
  11207. Font.Underline=FALSE
  11208.  
  11209. You can use the attributes in [ToolPalette] for the [ApplicationWindow], 
  11210. [PropertyEditor], and [CodeWindow]. 
  11211.  
  11212.  
  11213. 笊絶武笊 31.1.1.2. Code Editor Customization 笊絶武笊
  11214.  
  11215. In the .ini file, a section for the Code Editor appears as [CodeWindow]. You 
  11216. can use the same View Customization font and color characteristics for 
  11217. VisualAge for Basic keywords. You assign the font and color properties as 
  11218. follows: 
  11219.  
  11220. FullKeywordName.Font.Italic=True
  11221.  
  11222. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11223. 笏eyword Name        笏xample                                           笏
  11224. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11225. 笏enericIdentifier   笏rackets placed after a subroutine name, such as  笏
  11226. 笏                    笏4ub Command1_Click().                             笏
  11227. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11228. 笏4tandardKeyword     笏4um, Dim, End Sub.                                笏
  11229. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11230. 笏dvancedKeyword     笏lass, Property, read-only, write-only, Public,   笏
  11231. 笏                    笏1rivate.                                          笏
  11232. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11233. 笏4tring              笏haracters or words appearing between " " such as 笏
  11234. 笏                    笏sgBox "This is a string."                        笏
  11235. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11236. 笏nteger             笏ny integer value.                                笏
  11237. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11238. 笏loat               笏ny floating point value.                         笏
  11239. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11240. 笏0ctal               笏ny octal value.                                  笏
  11241. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11242. 笏ex                 笏ny hexadecimal value                             笏
  11243. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11244. 笏dentifier          笏ain, all subroutine names, all Object names, all 笏
  11245. 笏                    笏vent names, and all Method names                 笏
  11246. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11247. 笏0perator            笏ll mathematical symbols such as =, *, /, +, -,   笏
  11248. 笏                    笏Bnd all logical symbols such as &                 笏
  11249. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11250.  
  11251. To set the highlight colors, change the SelectedBackground and 
  11252. SelectedForeground values. When you highlight a section of code the foreground 
  11253. (the characters) or the background changes color to the set color. The values 
  11254. are the same as for the ForeGround and BackGround. 
  11255.  
  11256. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11257. 笏0ption                   笏4election                笏efault                  笏
  11258. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11259. 笏4electedBackground /     笏nteger between 0 and 255笏4ystem                   笏
  11260. 笏4electedForeground       笏                         笏                         笏
  11261. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11262.  
  11263. Tip:  Specific settings take precedence over general settings. For example, if 
  11264. the Code Window Background is white, and the StandardKeyword Background is red, 
  11265. the background area surrounding the StandardKeyword is red. 
  11266.  
  11267. This example shows the instpref.ini Code Editor keyword settings. 
  11268.  
  11269.  
  11270. [CodeWindow]
  11271. GenericIdentifier.Font.Italic=TRUE
  11272. StandardKeyword.Background.Color.Blue=196
  11273. AdvancedKeyword.FontName=Courier
  11274. String.Font.Bold=TRUE
  11275. Integer.Foreground.Green=255
  11276. Float.Font.Italic=FALSE
  11277. Octal.Font.Size=12
  11278. Hex.Font.Size=9
  11279. Identifier.Font.FontName=Helvetica
  11280. Operator.Font.StrikThru=TRUE
  11281.  
  11282.  
  11283. 笊絶武笊 31.1.1.3. Toolbox Customization 笊絶武笊
  11284.  
  11285. In the .ini file, a section for the Toolbox appears as [ToolPalette]. You can 
  11286. customize how the Toolbox appears when starting VisualAge for Basic. 
  11287.  
  11288. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11289. 笏0ption              笏4elections          笏omments                                笏
  11290. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11291. 笏0rientation         笏4tring              笏0rientation=Vertical makes the Toolbox  笏
  11292. 笏                    笏                    笏Bppear vertically.                      笏
  11293. 笏                    笏                    笏0rientation=Horizontal makes the Toolbox笏
  11294. 笏                    笏                    笏Bppear horizontally.                    笏
  11295. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11296. 笏7iewMode            笏4tring              笏7iewMode=IconAndLabel makes the toolbox 笏
  11297. 笏                    笏                    笏Bppear with icons and labels.           笏
  11298. 笏                    笏                    笏7iewMode=IconOnly makes the toolbox     笏
  11299. 笏                    笏                    笏Bppear with icons only.                 笏
  11300. 笏                    笏                    笏7iewMode=LabelOnly makes the toolbox    笏
  11301. 笏                    笏                    笏Bppear with labels only.                笏
  11302. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11303.  
  11304. You can modify Toolbox settings at run time using the Project window 
  11305. View=>Toolbox menu. Exiting VisualAge for Basic destroys all run-time settings. 
  11306. This example shows the instpref.ini Toolbox settings: 
  11307.  
  11308. [ToolPalette]
  11309. Orientation=Vertical
  11310. ViewMode=IconOnly
  11311.  
  11312.  
  11313. 笊絶武笊 31.1.1.4. Application Customization 笊絶武笊
  11314.  
  11315. The Undo/Redo stack depth sets the number of times actions can be undone or 
  11316. redone in a project. Set the stack size under [Application] in the .ini file. 
  11317.  
  11318. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11319. 笏0ption         笏ata Type 笏efault     笏omments                                笏
  11320. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11321. 笏6ndoStackSize  笏nteger   笏10          笏6ndoStackSize=#  For example, a value of笏
  11322. 笏               笏          笏            笏5 limits Edit=>Undo to five actions and 笏
  11323. 笏               笏          笏            笏dit=>Redo. to five actions.            笏
  11324. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11325. 笏allStackSize  笏nteger   笏10          笏allStackSize=15  Sets the number of    笏
  11326. 笏               笏          笏            笏Eisplayable items in the Inspector Call 笏
  11327. 笏               笏          笏            笏4tack combo box.                        笏
  11328. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11329. 笏reationMode   笏4tring    笏ontrolArray笏reationMode=AskUser - User             笏
  11330. 笏               笏          笏            笏Donfirmation. CreationMode=ControlArray 笏
  11331. 笏               笏          笏            笏- No warning.                           笏
  11332. 笏               笏          笏            笏reationMode=IndividualControl - Group  笏
  11333. 笏               笏          笏            笏Dreated from Toolbox.                   笏
  11334. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11335.  
  11336. This example shows the instpref.ini Application settings. 
  11337.  
  11338.  
  11339. [Application]
  11340. UndoStackSize=5
  11341. CallStackSize=8
  11342. CreationMode=AskUser
  11343. CreationMode=ControlArray
  11344. CreationMode=IndividualControl
  11345.  
  11346.  
  11347. 笊絶武笊 31.1.1.5. Interpreter Customization 笊絶武笊
  11348.  
  11349. In the .ini file, a section for the Interpreter appears as [Interpreter]. You 
  11350. can customize the Variable Declaration, Compatibility, String Comparison, Array 
  11351. Base, and Type Check options. 
  11352.  
  11353. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11354. 笏0ption              笏ata Type           笏omments                                笏
  11355. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11356. 笏7ariableDeclaration 笏4tring              笏"Explicit" includes an Option Explicit  笏
  11357. 笏                    笏                    笏Ttatement at the beginning of every     笏
  11358. 笏                    笏                    笏Gorm..br"Implicit" does not include an  笏
  11359. 笏                    笏                    笏0ption Explicit statement.              笏
  11360. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11361. 笏ompatibility       笏4tring              笏"Strict" applies strict compatibility   笏
  11362. 笏                    笏                    笏Xith Visual Basic rules when loading a  笏
  11363. 笏                    笏                    笏7isual Basic** application. "Relax" does笏
  11364. 笏                    笏                    笏Oot apply strict compatibility rules.   笏
  11365. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11366. 笏4tringComparison    笏4tring              笏ompare=Text compares only text strings.笏
  11367. 笏                    笏                    笏ompare=Binary compares only binary     笏
  11368. 笏                    笏                    笏Ttrings.                                笏
  11369. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11370. 笏rrayBase           笏4tring              笏ase=1 starts array counting at 1.      笏
  11371. 笏                    笏                    笏ase=0 starts array counting at 0.      笏
  11372. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11373. 笏5ypeCheck           笏4tring              笏5ypeCheck=Strict checks the syntax as   笏
  11374. 笏                    笏                    笏Fach line of code is entered.           笏
  11375. 笏                    笏                    笏5ypeCheck=Relax checks the syntax only  笏
  11376. 笏                    笏                    笏Xhen asked.                             笏
  11377. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11378.  
  11379. This example shows the instpref.ini Interpreter settings. 
  11380.  
  11381.  
  11382. [Interpreter]
  11383. VariableDeclaration=Explicit
  11384. Compatibility=Relax
  11385. StringComparison=Text
  11386. ArrayBase.Base=0
  11387. TypeCheck=Relax
  11388.  
  11389.  
  11390. 笊絶武笊 31.1.1.6. Grid Customization 笊絶武笊
  11391.  
  11392. In the .ini file, a section for the Grid appears as [Grid]. The Grid refers to 
  11393. an array of dots that appear on VisualAge for Basic forms. The Grid is only 
  11394. visible when selecting an object from the Toolbox and placing it on the form, 
  11395. or when dragging objects on a form. 
  11396.  
  11397. You can display a visible Grid on forms to assist in the placement of 
  11398. components. You can control the size and visibility of these gridlines. The 
  11399. grid is useful in drawing and placing components as they are created, and in 
  11400. moving and resizing them afterwards. 
  11401.  
  11402. If you want the horizontal and vertical grid lines to be visible, set the 
  11403. Visible property to True. To change the grid size, type new values in the 
  11404. Height and Width text fields. These values measure the distance in twips 
  11405. between the grid lines. 
  11406.  
  11407. 笏娯楳笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11408. 笏1roperty  笏4elections笏ata Type 笏efault   笏omments                                笏
  11409. 笏懌楳笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11410. 笏Y Active  笏5rue/False笏oolean   笏4ystem    笏ctive=TRUE makes the object align with 笏
  11411. 笏          笏          笏          笏          笏Uhe dots when placing new objects on the笏
  11412. 笏          笏          笏          笏          笏Gorm or when moving the object around.  笏
  11413. 笏          笏          笏          笏          笏ctive=FALSE allows the placement of an 笏
  11414. 笏          笏          笏          笏          笏Pbject anywhere on the form.            笏
  11415. 笏懌楳笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11416. 笏4ize      笏45 to 1485笏nteger   笏5 pixels  笏4ize.Width=Int and Size.Height=Int set  笏
  11417. 笏          笏5wips     笏          笏          笏Uhe vertical and horizontal spacing     笏
  11418. 笏          笏          笏          笏          笏Cetween the dots.                       笏
  11419. 笏懌楳笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11420. 笏7isible   笏5rue/False笏oolean   笏5rue      笏7isible=TRUE makes the Grid visible.    笏
  11421. 笏          笏          笏          笏          笏7isible=FALSE makes the Grid invisible. 笏
  11422. 笏披楳笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11423.  
  11424.  
  11425. 笊絶武笊 31.1.1.6.1. Definition:  A Twip is a unit of measure that represents 1/20th of a point (derived from the phrase 笊絶武笊
  11426.  
  11427. TWentieth of an Inch Point). There are 72 points in an inch, 1440 twips in an 
  11428. inch, or 567 twips in a centimeter. Twips are used as a measurement system 
  11429. which is independent of screen resolution. 
  11430.  
  11431. This example shows the instpref.ini Grid settings. 
  11432.  
  11433.  
  11434. [Grid]
  11435. Active=TRUE
  11436. Size.Width=80
  11437. Size.Height=80
  11438. Visible=FALSE
  11439.  
  11440.  
  11441. 笊絶武笊 32. Appendix B     Migrating Microsoft Visual Basic**Programs 笊絶武笊
  11442.  
  11443. This section contains information to help you understand VisualAge for Basic if 
  11444. you are a Microsoft Visual Basic** (VB) user. It provides help to migrate your 
  11445. code from VB to VisualAge for Basic. 
  11446.  
  11447. What are the Differences? begins with an overall look at the differences in 
  11448. capabilities. 
  11449.  
  11450. Differences in the Interfaces lists the differences between the two interfaces. 
  11451.  
  11452. Loading Visual Basic Projects into VisualAge for Basic  describes how to load, 
  11453. convert, and save existing .MAK files. 
  11454.  
  11455.  
  11456. 笊絶武笊 32.1. What are the Differences? 笊絶武笊
  11457.  
  11458. This section provides an overview of the differences between VisualAge for 
  11459. Basic and Microsoft Visual Basic. They include: 
  11460.  
  11461.      Visual Basic is only available for the Microsoft Windows operating 
  11462.       system. Versions of VisualAge for Basic exist for several operating 
  11463.       systems, including Microsoft Windows, OS/2, and AIX. 
  11464.  
  11465.      The VisualAge for Basic language is compatible with Visual Basic. 
  11466.       However, VisualAge for Basic contains a number of unique statements and 
  11467.       functions as well. 
  11468.  
  11469.      Visual Basic uses proprietary "custom controls" as application elements. 
  11470.       VisualAge for Basic's components are classes from which you can derive 
  11471.       subclasses. 
  11472.  
  11473.      Visual Basic does not allow you to define or derive classes. VisualAge 
  11474.       for Basic lets you define new non-visual classes. In addition, you can 
  11475.       use VisualAge for Basic to derive from existing visual component classes. 
  11476.       Derivation can be done interactively or using VisualAge for Basic 
  11477.       statements. 
  11478.  
  11479.      VisualAge for Basic assigns the extension .i to new forms. VisualAge for 
  11480.       Basic also recognizes forms assigned the extension .frm by Visual Basic. 
  11481.  
  11482.      Visual Basic assigns the extension .mak to project files. VisualAge for 
  11483.       Basic assigns the extension .prj to project files. 
  11484.  
  11485.      VisualAge for Basic's debugging facilities are contained in the Inspector 
  11486.       and the Watchpoints and Breakpoints window. You use these tools to set 
  11487.       breakpoints and watchpoints, examine the call stack, and change the 
  11488.       values of variables using the Immediate window. 
  11489.  
  11490.      VisualAge for Basic lets you incorporate the following into your 
  11491.       applications: 
  11492.  
  11493.         -  Visual or non-visual C++ objects 
  11494.         -  SOM objects 
  11495.         -  OLE objects 
  11496.         -  Native GUI controls 
  11497.         -  OpenDoc components and OCXs 
  11498.  
  11499.  
  11500. 笊絶武笊 32.2. Differences in the Interfaces 笊絶武笊
  11501.  
  11502. The Project Window 
  11503.  
  11504.      Allows you to view your complete project outline. 
  11505.  
  11506.  The Component Catalog 
  11507.  
  11508.      Allows you to add new objects to your project. 
  11509.  
  11510.      Provides developers a wide choice of enterprise object systems they want 
  11511.       to include objects from:  OLE; SOM; or others through third-party 
  11512.       add-ons.  This capability, unique to Visual Age for Basic, means that you 
  11513.       can integrate and reuse virtually any enterprise object in your Visual 
  11514.       Age for Basic applications. 
  11515.  
  11516.  The Toolbox 
  11517.  
  11518.      Can be reshaped to suit your preference. 
  11519.  
  11520.      The Toolbox provides some additional convenient ways to create objects 
  11521.       beyond what VB provides. 
  11522.  
  11523.  Interactive Operations 
  11524.  
  11525.      Provide a full multi-level UNDO/REDO capability for all operations, 
  11526.       including graphical moving and resizing. 
  11527.  
  11528.      Provide the ability to resize more than one object at a time. 
  11529.  
  11530.      Provide the ability to drag objects to change their parent. 
  11531.  
  11532.      The Property Editor provides a menu of options to choose from when 
  11533.       editing properties. 
  11534.  
  11535.      The View menu on Visual Age for Basic's property editor lets you specify 
  11536.       which properties you want to display. 
  11537.  
  11538.      Provide a drop-down combo box that appears on each Property Editor row 
  11539.       when you have selected more than one control, and the value of the 
  11540.       particular property is different for each control.  VB simply shows an 
  11541.       empty row. 
  11542.  
  11543.      Provide the ability to put a Basic language expression directly in the 
  11544.       Property Editor row.  Think of it as object.property = {whatever you 
  11545.       type}. Visual Age for Basic allows dynamic initial values. These 
  11546.       expressions get evaluated only when you run the program. 
  11547.  
  11548.      Provide the ability to create a control array from the Property Editor by 
  11549.       selecting a number of the same type controls, and then changing their 
  11550.       names to all be the same. 
  11551.  
  11552.  The Code and Debug Windows 
  11553.  
  11554.      Provides multiple views of your code using a split window feature. 
  11555.  
  11556.      Provides bookmarking features to stop and view your code for debugging. 
  11557.  
  11558.  The VisualAge for Basic Language 
  11559.  
  11560.  VisualAge for Basic is very similar to VB's Basic language, with some notable 
  11561.  extensions.  The most important is the Object data type. 
  11562.  
  11563.  The Object data type can store instances (objects) of classes imported from 
  11564.  external systems such as SOM and OLE. An API allows you to package C++ classes 
  11565.  for use within VisualAge for Basic, allowing them to be manipulated using the 
  11566.  Object data type as well. You can use VisualAge for Basic statements to 
  11567.  declare subclasses of existing visual or non-visual classes, regardless of 
  11568.  their source. You can also use VisualAge for Basic to declare non-visual 
  11569.  classes. 
  11570.  
  11571.  You see any enterprise object (VisualAge for Basic, SOM, OLE, C++, etc.) as a 
  11572.  Basic object, and you can create new classes of objects that reuse existing 
  11573.  implementations through a feature called inheritance. VisualAge for Basic 
  11574.  supports a powerful version of inheritance called multiple inheritance, whose 
  11575.  prime benefit is that you can reuse and combine the broadest range of 
  11576.  implementations.  With multiple inheritance you gain all the properties and 
  11577.  methods of the objects without having to rewrite any code, while changing 
  11578.  whatever you need. 
  11579.  
  11580.  
  11581. 笊絶武笊 32.3. Loading Visual Basic Projects into VisualAge for Basic 笊絶武笊
  11582.  
  11583. Tip:  If you are porting a project to a different operating system, ensure that 
  11584. the rules for file and directory names reflect those on the new operating 
  11585. system. 
  11586.  
  11587.    1. Open Visual Basic and load your .MAK project. 
  11588.  
  11589.    2. Select File=> Save File As menu option to save the forms as text files. 
  11590.  
  11591.    3. When the Save File As dialog box appears, select the Save As Text 
  11592.       selection box. An X appears in the box as confirmation of text selection. 
  11593.  
  11594.    4. Ensure all the project files are saved in a directory available to 
  11595.       VisualAge for Basic. 
  11596.  
  11597.    5. Open VisualAge for Basic. 
  11598.  
  11599.    6. Select File=> Open Project menu option to load the Visual Basic .MAK 
  11600.       project file. 
  11601.  
  11602.       A warning appears. 
  11603.  
  11604.    7. Select OK. 
  11605.  
  11606.       If the project contains VBXs, another warning appears. The VBX's are 
  11607.       ignored by VisualAge for Basic and are automatically replaced by native 
  11608.       components. For example, the OLE and the Grid VBX are replaced by the OLE 
  11609.       and the Grid components. 
  11610.  
  11611.    8. Select OK. 
  11612.  
  11613.       Where there is no native VBX replacement, follow the VBX manufacturer's 
  11614.       instructions for migrating from VBX to OCX. 
  11615.  
  11616.    9. Select File=>Save Project As and rename your .prj file. 
  11617.  
  11618.       After an .MAK is saved to .prj file, the project format is no longer 
  11619.       recognized by Visual Basic. 
  11620.  
  11621.  
  11622. 笊絶武笊 33. Appendix C     Internationalization 笊絶武笊
  11623.  
  11624. One of the first things to ask yourself as you design your application is 
  11625. "Where is this application going to be used?" If your application is not 
  11626. intended for global use, you do not have to consider internationalization. 
  11627. However, to make your application available to the global market-you must 
  11628. design with internationalization in mind. 
  11629.  
  11630. Internationalization is the process of generalizing programs for a variety of 
  11631. languages, layouts, and character sets. An international application: 
  11632.  
  11633.      Displays labels and messages in a different language for each locale. 
  11634.  
  11635.      Adapts to locales and easily translates without loss of content or 
  11636.       meaning. 
  11637.  
  11638.      Ports between languages or locales with respect to window design, code, 
  11639.       and error messages. 
  11640.  
  11641.  Definition: A locale is a place or locality with its own language, idioms, and 
  11642.  window design. 
  11643.  
  11644.  Important:  You must think in terms of internationalization at the onset of 
  11645.  application development. 
  11646.  
  11647.  To develop an international application, you can either build separate 
  11648.  executables for each locale, or you can use the same executable and use 
  11649.  message catalogs to store internationalized messages. 
  11650.  
  11651.  Tip:  A modular approach facilitates the addition of new languages and locales 
  11652.  at a later date. 
  11653.  
  11654.  This chapter provides tips on: 
  11655.  
  11656.      How to design an international application. 
  11657.  
  11658.      How to create an international message catalog. 
  11659.  
  11660.      International language elements. 
  11661.  
  11662.      What to watch out for when internationalizing your application. 
  11663.  
  11664.  
  11665. 笊絶武笊 33.1. Designing an International Application 笊絶武笊
  11666.  
  11667. Designing an international application requires a bit of planning. How are you 
  11668. going to internationalize your application? How are you going to split up the 
  11669. modules? 
  11670.  
  11671. Your application needs to determine the locale by querying the user or the 
  11672. operating system using the operating system's setlocal API. Your application 
  11673. uses the returned value to set the path to the correct language DLLs or message 
  11674. catalogs. 
  11675.  
  11676. See also:  The SDK setlocal API for each operating system. 
  11677.  
  11678. Important:  If your application uses the Like operator with strings or regular 
  11679. expressions, you must include instrng.dll. If your application contains 
  11680. references to run-time error messages, you must include the appropriate 
  11681. VisualAge for Basic language DLL containing the error messages. 
  11682.  
  11683. Design your application to provide for size and layout changes of data for 
  11684. different locales. You can design complete form modules for each locale and 
  11685. save each form as a project. This has its advantages in that all labels and 
  11686. text fields will be the exact size and position that you specify. However, the 
  11687. size of your code will increase. 
  11688.  
  11689. Alternatively, you can program your labels and text areas to access their 
  11690. properties at installation, depending on a locale selection switch (determined 
  11691. by the setlocale API returned value). This technique requires only one form, 
  11692. but increases installation time. 
  11693.  
  11694. Tip:  Create different modules of text that need translation and save them 
  11695. separate from your application. These modules could include such information as 
  11696. locale-specific menu names, mnemonics, or error messages. 
  11697.  
  11698. As you see, designing an international application requires a bit of planning. 
  11699. Some other points to consider when designing your international application are:
  11700.  
  11701.      Making your text easy to translate. 
  11702.  
  11703.      Accessing locale-specific formats. 
  11704.  
  11705.      Using pictures instead of words. 
  11706.  
  11707.  
  11708. 笊絶武笊 33.1.1. Making Your Text Easy To Translate 笊絶武笊
  11709.  
  11710. For your user messages: 
  11711.  
  11712.      Use brief, simple sentences. 
  11713.  
  11714.      Use affirmative statements-they are easier to translate. 
  11715.  
  11716.      Use active voice. 
  11717.  
  11718.      Use simple vocabulary-no idioms or jargon. 
  11719.  
  11720.      Allow for expansion space-translated text tends to grow in size. 
  11721.  
  11722.  Tip:  Remember scanning directions when designing your dialog boxes and the 
  11723.  order of your menu selections. The scanning or tabbing direction should match 
  11724.  the input direction. 
  11725.  
  11726.  
  11727. 笊絶武笊 33.1.2. Locale-Specific Formats 笊絶武笊
  11728.  
  11729. You do not have to code data formats in your applications, because many 
  11730. locale-specific formatting applications display the correct format at 
  11731. installation. An example of a locale-specific format application is the Windows 
  11732. NT or Windows 95 operating system, Control Panel, Internationalization 
  11733. application. 
  11734.  
  11735. The following table shows how data display differs between locales. You must 
  11736. address these differences when designing the behavior and size of your 
  11737. components. 
  11738.  
  11739. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11740. 笏ata                          笏4pecial Formats                                   笏
  11741. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11742. 笏5housands separators          笏ommas, periods, quotations, or spaces            笏
  11743. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11744. 笏ecimal separators            笏ommas, periods, spaces, or brackets              笏
  11745. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11746. 笏rouping separators           笏ommas, semicolons, colons, or periods            笏
  11747. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11748. 笏1ositive and negative Values  笏1ositive(+) and negative(-) signs can appear      笏
  11749. 笏                              笏Cefore or after the number                        笏
  11750. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11751. 笏urrency separators           笏ommas, periods, colons, spaces, or nothing       笏
  11752. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11753. 笏urrency symbols              笏7ary in size and position, with spaces or not     笏
  11754. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11755. 笏ate separators               笏one, dashes, periods, spaces, or slashes(/ or \) 笏
  11756. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11757. 笏5ime formats                  笏ased on 12- or 24-hour clocks                    笏
  11758. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11759. 笏5ime separators               笏othing, spaces, colons, or periods               笏
  11760. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11761. 笏5elephone numbers             笏7ary in size and mixture of numbers and symbols   笏
  11762. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11763. 笏1roper Names and Address      笏7ary in size and mixture of numbers and characters笏
  11764. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11765.  
  11766. Tip:  Different currencies require different space and may also include 
  11767. alphanumerics. 
  11768.  
  11769.  
  11770. 笊絶武笊 33.1.3. Using Pictures Instead of Words 笊絶武笊
  11771.  
  11772. Graphical symbols should be locale independent. Graphics can represent 
  11773. non-translatable terms and have a greater impact than text alone. 
  11774.  
  11775. If you are going to incorporate a graphic to represent something in your 
  11776. application: 
  11777.  
  11778.      Use an existing international icon, if possible. 
  11779.  
  11780.      Make icons depict basic functions. 
  11781.  
  11782.      Do not use text in the icon. 
  11783.  
  11784.  
  11785. 笊絶武笊 33.2. Creating An International Message Catalog 笊絶武笊
  11786.  
  11787. Tip:  It is good programming practice to separate all the message strings to 
  11788. the user from the application. You can type the message calls into the Property 
  11789. Editor and never touch the generated code. 
  11790.  
  11791. For example, if you call message 133, the called message returns a string from 
  11792. the message catalog. The returned string depends on the translation of that 
  11793. string in the message catalog. 
  11794.  
  11795. You can build a DLL in several ways. For example, you can create DLLs with 
  11796. hard-coded messages or you can use the Windows NT or Windows 95 resource 
  11797. support function and link a resource file (.rc) to your DLL. 
  11798.  
  11799.  
  11800. 笊絶武笊 33.2.1. Creating a Hard-Coded DLL 笊絶武笊
  11801.  
  11802. The following examples show a hard-coded GetMessageString procedure in a DLL: 
  11803.  
  11804. Windows NT and Windows 95 Example: 
  11805.  
  11806. _ _declspec(dllexport) char * GetMessageString (Int msgID)
  11807. {
  11808.     Switch(msgID){
  11809.         Case 1:
  11810.             Return "String1";            'First variation of String.
  11811.         Case 2:
  11812.             Return "String2";            'Second variation of String.
  11813.         Case 3:
  11814.             Return "String3";            'Third variation of String.
  11815.         Default:
  11816.             Break
  11817.     }
  11818.     Return "ErrorMsg1";                    'If none of the above works,
  11819.                         'return an Error Message.
  11820.  
  11821. OS/2 Example: 
  11822.  
  11823. __export char * GetMessageString (Int msgID){
  11824.     Switch(msgID){
  11825.         Case 1:
  11826.             Return "String1";            'First variation of String.
  11827.         Case 2:
  11828.             Return "String2";            'Second variation of String.
  11829.         Case 3:
  11830.             Return "String3";            'Third variation of String.
  11831.         Default:
  11832.             Break
  11833.     }
  11834.     Return "ErrorMsg1";                    'If none of the above works,
  11835.                         'return an Error Message.
  11836. }
  11837.  
  11838.  
  11839. 笊絶武笊 33.2.2. Creating a DLL Using a Linked Resource File 笊絶武笊
  11840.  
  11841. The following examples show the GetMessageString procedure in a DLL using a 
  11842. linked resource file: 
  11843.  
  11844. Windows NT and Windows 95 Example: 
  11845.  
  11846. _ _declspec(dllexport) char * GetMessageString (Int msgID)
  11847. {
  11848.     Return GetStringTable(msgID).br
  11849.                         'Calls your custom resource file, .br
  11850.                         'GetStringTable pointing to a specific.br
  11851.                         'data message, msgID.
  11852. }
  11853.  
  11854. For example, if you use Visual C++ to compile the file containing your C source 
  11855. code, use the following command line to build the DLL: 
  11856.  
  11857. cl /LD yourSourceFilename.c
  11858.  
  11859. OS/2 Example: 
  11860.  
  11861. __export char * GetMessageString (Int msgID){
  11862. {
  11863.     Return GetStringTable(msgID).br
  11864.                         'Calls your custom resource file, .br
  11865.                         'GetStringTable pointing to a specific.br
  11866.                         'data message, msgID.
  11867. }
  11868.  
  11869. For example, if you use VisualAge C++ for OS/2 to compile the file containing 
  11870. your C source code, use the following command line to build the DLL: 
  11871.  
  11872. icc /Ge- yourSourceFilename.c
  11873. ilink /nofree /ST:32000 yourSourceFilename.obj, yourSourceFilename.dll,,,
  11874. You also need to create a definition file (yourSourceFilename.def), containing: 
  11875.  
  11876. LIBRARY  yourSourceFilename
  11877. EXPORTS  GetMessageString
  11878.  
  11879.  
  11880. 笊絶武笊 33.2.3. Using a Custom Message Catalog in Your Application 笊絶武笊
  11881.  
  11882. You access the messages in the DLL using the Property Editor or the Code 
  11883. Editor. This example uses the Property Editor to access the first variable, 
  11884. called String, for a custom DLL named GetMessageString: 
  11885.  
  11886.    1. Declare GetMessageString in the Code Editor declaration section. Declare 
  11887.       Function GetMessageString As String 
  11888.  
  11889.    2. Change Label1's Caption property to Expression mode. Highlight the 
  11890.       Caption property, and choose Selected=> Expression. 
  11891.  
  11892.       An E (for Expression) is displayed to the left of the word Caption.
  11893.  
  11894.    3. Type GetMessageString(1) in the Caption's text area. 
  11895.  
  11896.  The string in the GetMessageString, String1 variable loads. 
  11897.  
  11898.  See also:  Chapter 4, Using the Property Editor, Displaying Property Values by 
  11899.  Constant or Expression. 
  11900.  
  11901.  
  11902. 笊絶武笊 33.3. Internationalized Language Elements 笊絶武笊
  11903.  
  11904. VisualAge for Basic contains a fully internationalized run-time library. All 
  11905. functions that input, display, or use date, time, currency, or numbers are 
  11906. internationalized, as are VisualAge for Basic string manipulation and file 
  11907. input and output. 
  11908.  
  11909. See also:  VisualAge for Basic Language Reference for more information on the 
  11910. language elements. 
  11911.  
  11912.  
  11913. 笊絶武笊 33.3.1. Basic Support 笊絶武笊
  11914.  
  11915. The VisualAge for Basic language supports the MBCS literals ("....."), comments 
  11916. ('....), and anonymous character string data. However, MBCS formatting must 
  11917. follow Basic syntax rules. For example, a character preceded with a formatting 
  11918. character for a Format[$] function can be an MBCS character. 
  11919.  
  11920. Important:  The UCase and LCase functions are reserved for Single Byte 
  11921. Character Set (SBCS) characters in a mixed string. This avoids any 
  11922. misinterpretation of the MBCS second byte as an SBCS character. 
  11923.  
  11924. You can use special characters to match strings. To support 
  11925. internationalization, VisualAge for Basic enhanced the syntax options for 
  11926. regular expressions using the Find/Replace dialog as follows: 
  11927.  
  11928. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11929. 笏3eg.Exp. Mode Syntax Options            笏atches             笏
  11930. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11931. 笏?                                       笏1 Single-Byte       笏
  11932. 笏                                        笏haracter Set (SBCS)笏
  11933. 笏                                        笏Pr 1 Multi-Byte     笏
  11934. 笏                                        笏haracter Set (MBCS)笏
  11935. 笏                                        笏Dharacter           笏
  11936. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11937. 笏*                                       笏ny number of SBCS  笏
  11938. 笏                                        笏Pr MBCS characters  笏
  11939. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11940. 笏#                                       笏1 SBCS numeric      笏
  11941. 笏                                        笏Dharacter only      笏
  11942. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11943. 笏charlist}                              笏1 SBCS or MBCS      笏
  11944. 笏                                        笏Dharacter in the    笏
  11945. 笏                                        笏Dharlist            笏
  11946. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11947. 笏!charlist}                             笏1 SBCS or MBCS      笏
  11948. 笏                                        笏Dharacter other than笏
  11949. 笏                                        笏Jn the list         笏
  11950. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11951.  
  11952.  
  11953. 笊絶武笊 33.3.2. Internationalized Functions and Localized Behavior 笊絶武笊
  11954.  
  11955. The Asc, Chr, and String($) functions are extended for MBCS code. The Len 
  11956. option used in VisualAge for Basic functions handles logical character counting 
  11957. operations in an MBCS environment. 
  11958.  
  11959. The Len function returns the number of characters in an argument and the LenB 
  11960. function returns the number of bytes. For example, consider an MBCS character 
  11961. named astr that consists of two bytes. Len(astr) returns 1, and LenB(astr) 
  11962. returns 2. 
  11963.  
  11964. The following table lists byte-based functions and their corresponding 
  11965. character-based functions. 
  11966.  
  11967. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11968. 笏haracter-Based     笏yte-Based Functions笏
  11969. 笏unctions           笏                    笏
  11970. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11971. 笏nput($)            笏nputB($)           笏
  11972. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11973. 笏nStr               笏nStrB              笏
  11974. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11975. 笏eft($)             笏eftB($)            笏
  11976. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11977. 笏en                 笏enB                笏
  11978. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11979. 笏id($)              笏idB($)             笏
  11980. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  11981. 笏3ight($)            笏3ightB($)           笏
  11982. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  11983.  
  11984. Tip:  For functions that return values, a single-byte function returns only the 
  11985. ASCII code. A multi-byte function returns either ASCII, EUC, or Shift-JIS code. 
  11986.  
  11987.  
  11988. 笊絶武笊 33.3.3. Comparing Text 笊絶武笊
  11989.  
  11990. Different locales have specific rules regarding sort parameters. Any operations 
  11991. using the Option Compare or the StrComp statements sort to the parameters for 
  11992. that locale. The operators <, <=, >, >=, =, <>, and Like depend on the setting 
  11993. of the Option Compare statement. 
  11994.  
  11995. To control how string data is compared, use the Option Compare statement in the 
  11996. declarations section of the module. It has two comparison modes: binary and 
  11997. text. The comparison defaults to the binary mode. Select the text mode to sort 
  11998. using the locale-specific ordering. 
  11999.  
  12000.  
  12001. 笊絶武笊 33.4. Internationalization Do's and Don'ts 笊絶武笊
  12002.  
  12003. To internationalize your application, DO: 
  12004.  
  12005.      Design with attention to language and cultural conventions. 
  12006.  
  12007.      Avoid hard-coded character ranges. Define uppercase and lowercase 
  12008.       letters, numeric digits, punctuation markers, and spaces rather than 
  12009.       using hard-coded character ranges. 
  12010.  
  12011.      Allow for existing applications to format date and time for each area. 
  12012.  
  12013.      Allow for multiple currency formats. 
  12014.  
  12015.      Plan for size changes in user messages after translation. Different 
  12016.       languages reproduce the same message in differing length and height. 
  12017.  
  12018.      Use explicit functions to center and align text. 
  12019.  
  12020.      Allow punctuation characters within words. 
  12021.  
  12022.      Provide translation notes to translators, where possible (as in code 
  12023.       comments). This ensures correct translation of your user messages. 
  12024.  
  12025.      Make software 8-bit clean by not altering the most significant bit of a 
  12026.       character. 
  12027.  
  12028.  To internationalize your application, DO NOT: 
  12029.  
  12030.      Split user message strings. Write out whole messages instead. For 
  12031.       example, grammatical word order varies between languages. 
  12032.  
  12033.      Assume that the number of bytes is the same as the number of characters. 
  12034.  
  12035.      Embed graphics in code. 
  12036.  
  12037.      Use idioms or jargon. 
  12038.  
  12039.      Make assumptions about word order in strings. Grammatical word order 
  12040.       varies between languages. 
  12041.  
  12042.      Test for alphabetic characters by comparing specific characters, for 
  12043.       example, "A" and "Z". 
  12044.  
  12045.      Hard-code the numeric decimal separator in parsing, arithmetic 
  12046.       calculations, or currency characters. 
  12047.  
  12048.      Hard-code or limit the size of currency fields. 
  12049.  
  12050.      Assume the size of paper on which application output will print. 
  12051.  
  12052.      Use single-letter commands to represent the first letter of commands 
  12053.       (such as "p" for "print"). 
  12054.  
  12055.      Make assumptions about what might be in particular byte locations within 
  12056.       message strings. 
  12057.  
  12058.  
  12059. 笊絶武笊 34. Appendix D     CORBA objects and VisualAge for Basic Type Mapping 笊絶武笊
  12060.  
  12061. The following table shows the type mapping between Common Object Request 
  12062. Brokerage Architecture (CORBA) objects and VisualAge for Basic data types. 
  12063.  
  12064. 笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  12065. 笏ORBA                         笏7isualAge for Basic           笏
  12066. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12067. 笏ny                           笏7ariant                       笏
  12068. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12069. 笏rrays                        笏rray                         笏
  12070. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12071. 笏oolean                       笏nteger                       笏
  12072. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12073. 笏har                          笏nteger                       笏
  12074. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12075. 笏ouble                        笏ouble                        笏
  12076. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12077. 笏numerated                    笏ong                          笏
  12078. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12079. 笏loat                         笏4ingle                        笏
  12080. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12081. 笏oreign                       笏ot supported                 笏
  12082. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12083. 笏ong                          笏ong                          笏
  12084. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12085. 笏0ctet                         笏nteger                       笏
  12086. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12087. 笏0bject Reference              笏0bject Reference              笏
  12088. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12089. 笏1ointer                       笏ot supported                 笏
  12090. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12091. 笏4equence<type, max>           笏rray() as Integer            笏
  12092. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12093. 笏4equence<type>                笏rray() as Integer            笏
  12094. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12095. 笏4hort                         笏nteger                       笏
  12096. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12097. 笏4tring                        笏4tring                        笏
  12098. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12099. 笏4truct                        笏5ype... EndType               笏
  12100. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12101. 笏6nsigned Short                笏nteger                       笏
  12102. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12103. 笏6nsigned Long                 笏ong                          笏
  12104. 笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  12105. 笏6nion                         笏7ariant                       笏
  12106. 笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  12107.  
  12108. Important:  Convert any VisualAge for Basic data to the expected data type 
  12109. before passing it to an external object as a property data value. 
  12110.  
  12111. Restriction:  VisualAge for Basic does not support the Pointer and Foreign data 
  12112. types, which are IBM SOM extensions to CORBA.                .* 
  12113.  
  12114.  
  12115. 笊絶武笊 35. Glossary 笊絶武笊
  12116.  
  12117. This glossary defines important terms and abbreviations used in this book. It 
  12118. includes terms and definitions from the IBM Dictionary of Computing, 10th 
  12119. Edition (New York: McGraw-Hill, 1993). The glossary uses the following terms 
  12120. for cross-reference: 
  12121.  
  12122.  see       Refers you to the spelled-out form and definition of an acronym, or 
  12123.            to a term that is preferred in place of the term you are looking at. 
  12124.  
  12125.  see also  Refers you to a related term with a related or similar (but not 
  12126.            synonymous) meaning. 
  12127.  
  12128.  contrast with Refers you to a term with an opposite or substantially different 
  12129.            meaning. 
  12130.  
  12131.  
  12132. 笊絶武笊 35.1. A 笊絶武笊
  12133.  
  12134.  absolute value. The unsigned value of a number. For example, the absolute 
  12135.            value of -5 is 5. 
  12136.  
  12137.  abstract class. A class that cannot be used to create objects, but is used to 
  12138.            organize a class hierarchy, or to define properties, methods, and 
  12139.            variables that apply to its subclasses. See also class and subclass. 
  12140.  
  12141.  action choice. In VisualAge for Basic, a choice that immediately begins to 
  12142.            perform an action, such as the Close or Copy selection. 
  12143.  
  12144.  action query. A database operation that manipulates one or more records, but 
  12145.            does not return data. Examples of action queries are: Update, 
  12146.            Delete, and Insert. 
  12147.  
  12148.  active window. In a Graphical User Interface (GUI) application, several 
  12149.            windows can be on the screen at the same time. However, only one of 
  12150.            those windows can receive input at a time. On OS/2 and Microsoft 
  12151.            Windows**, you select the active window by clicking it with the 
  12152.            mouse. For information about window behavior on AIX, see the AIX 
  12153.            window manager software documentation. 
  12154.  
  12155.  advanced program-to-program communication (APPC). IBM's architected solution 
  12156.            for program-to-program communication, distributed transaction 
  12157.            processing, and remote database access. 
  12158.  
  12159.  aggregating function. See column function. 
  12160.  
  12161.  alphabetic character. One of the 26 uppercase or 26 lowercase letters of the 
  12162.            alphabet. 
  12163.  
  12164.  alphanumeric character. An uppercase or lowercase letter of the alphabet, a 
  12165.            digit between 0 and 9 inclusive, or the underscore (_). 
  12166.  
  12167.  American National Standards Institute (ANSI). A standards organization that 
  12168.            creates and maintains voluntary industry standards in the United 
  12169.            States. ANSI standards include a specification for the digital 
  12170.            representation of characters, which is a superset of the ASCII 
  12171.            specification. The term ANSI is used by Microsoft Windows to 
  12172.            identify special characters, and is often used interchangeably with 
  12173.            ASCII, although this is not technically correct. See also ASCII. 
  12174.  
  12175.  American Standard Code for Information Interchange (ASCII). ASCII is a 
  12176.            specification for the digital representation of characters. ASCII 
  12177.            files are supported by most computer systems, making them ideal for 
  12178.            the exchange of information between different kinds of computers. 
  12179.            ASCII is known as International Alphabet 5 (IA5) in some European 
  12180.            countries. See also ANSI. 
  12181.  
  12182.  ANSI.     See American National Standards Institute. 
  12183.  
  12184.  API.      See application programming interface. 
  12185.  
  12186.  APPC.     See advanced program-to-program communication. 
  12187.  
  12188.  application. A software component or collection of software components used to 
  12189.            perform specific types of user- oriented work on a computer. 
  12190.  
  12191.  application programming interface (API). An architected functional interface 
  12192.            supplied by an operating system or other software system. The 
  12193.            interface allows an application program to use specific data or 
  12194.            functions of the underlying system. 
  12195.  
  12196.  argument. A value passed to or returned from a function or procedure at run 
  12197.            time. 
  12198.  
  12199.  array.    A set of related data items stored under a single variable name. All 
  12200.            of the elements in an array must be of the same type, although this 
  12201.            restriction can be overcome by using the Variant type. 
  12202.  
  12203.  array element. A data item in an array. 
  12204.  
  12205.  ASCII.    See American Standard Code for Information Interchange. 
  12206.  
  12207.  attribute A member of a class that contains data for the class or for an 
  12208.            instance of the class. In VisualAge for Basic, an attribute contains 
  12209.            data that represents a property of a part. 
  12210.  
  12211.  
  12212. 笊絶武笊 35.2. B 笊絶武笊
  12213.  
  12214.  base class. A class from which the given class inherits properties, variables, 
  12215.            and methods. When you create a class, you specify the base classes 
  12216.            from which your new class inherits. See also abstract class, 
  12217.            inherit, and subclass. 
  12218.  
  12219.  base classes. In VisualAge for Basic, prefabricated components that are used 
  12220.            when constructing an application. 
  12221.  
  12222.  Basic.    See Beginner's All-purpose Symbolic Instruction Code. 
  12223.  
  12224.  Beginner's All-purpose Symbolic Instruction Code (BASIC) A simple programming 
  12225.            language originally developed to te.ach computing, Basic has gained 
  12226.            popularity and widespread adoption due to its simplicity and ease of 
  12227.            use. VisualAge for Basic contains an implementation of the Basic 
  12228.            language, including some extensions. 
  12229.  
  12230.  behavior. The way a component or other object acts and reacts; for example, a 
  12231.            command button looks recessed when a user clicks on it. 
  12232.            button displays its on or off status through an internal method or 
  12233.            property and 2) a file object would typically be opened through an 
  12234.            Open method. See also method and property. 
  12235.  
  12236.  binary.   Relating to or belonging to a numbering system with a base of 2. 
  12237.            Valid digits are 0 and 1. 
  12238.  
  12239.  binary file. A file whose data is encoded in binary form and is not readable. 
  12240.            For example, the compiled executable version of an application is 
  12241.            described as being a binary file. 
  12242.  
  12243.  binary large object (BLOB). A file whose data is encoded in binary form and is 
  12244.            not readable. For example, the compiled executable version of an 
  12245.            application is a binary file. 
  12246.  
  12247.  BLOB.     See binary large object. 
  12248.  
  12249.  branching. The technique of bypassing specific instructions or operations to 
  12250.            alter the sequential processing of instructions in a program. 
  12251.  
  12252.  branching instruction. An instruction that changes the sequence of program 
  12253.            processing. 
  12254.  
  12255.  break mode. Debugging using breakpoints or watch expressions. See also 
  12256.            breakpoint, watch expression. 
  12257.  
  12258.  breakpoint. During debugging, a breakpoint is a marker that you place in your 
  12259.            application to pause execution at that point. Using breakpoints in 
  12260.            design mode or break mode allows you to analyze variables and other 
  12261.            values at specific points during program execution. 
  12262.  
  12263.  browser.  A window that supports one or more programming activities, such as 
  12264.            creating new classes or methods, modifying existing classes or 
  12265.            methods, or viewing library members. 
  12266.  
  12267.  buffer.   A portion of main storage that data is read into or written from. 
  12268.  
  12269.  by reference. A method of passing arguments to a procedure in which the 
  12270.            address of the argument is passed to the called procedure. Any 
  12271.            changes made to the argument by the called procedure are made 
  12272.            directly to the variable at the given address, and thus can be seen 
  12273.            by the calling procedure. 
  12274.  
  12275.  byte.     A unit of storage consisting of eight adjacent binary digits (bits). 
  12276.            A byte can contain one EBCDIC character, and two bytes can contain 
  12277.            one DBCS character. 
  12278.  
  12279.  by value. A method of passing arguments to a procedure in which the called 
  12280.            procedure creates a local variable of the same name as the one in 
  12281.            the calling procedure and copies the value into it. Any changes made 
  12282.            to the argument by the called procedure are made to the local 
  12283.            variable and thus cannot be seen by the calling procedure. 
  12284.  
  12285.  
  12286. 笊絶武笊 35.3. C 笊絶武笊
  12287.  
  12288.  CAE.      See client application enabler. 
  12289.  
  12290.  call.     An instruction to a program to begin running. 
  12291.  
  12292.  called program. A program that is run by another program or by a command. 
  12293.  
  12294.  call level interface (CLI). An implementation of the ODBC interface used to 
  12295.            let applications access data stored in a relational database 
  12296.            management system (RDBMS). 
  12297.  
  12298.  cascaded menu. A submenu that appears when a higher-level cascading menu 
  12299.            choice is selected. The submenu contains a set of choices related to 
  12300.            the higher-level menu choice. Cascaded menus are used to reduce the 
  12301.            length of higher-level menus. 
  12302.  
  12303.  cell.     In VisualAge for Basic, the location in the Grid component at which 
  12304.            a row and a column intersect. 
  12305.  
  12306.  character. A letter, number, or symbol that belongs to the ASCII or ANSI 
  12307.            character set. 
  12308.  
  12309.  child.    1) A component that is contained in another component; for example, 
  12310.            an option button in a frame is called a child of the frame, and the 
  12311.            frame is called the button's parent. 2) An object contained in 
  12312.            another object; for example, a string object within a collection 
  12313.            object. 3) A class that inherits from another class is sometimes 
  12314.            called a child of that class; see subclass. 
  12315.  
  12316.  class.    A template, similar to a type definition, that guides creation of 
  12317.            objects. A class defines the methods, variables, and properties for 
  12318.            objects of the class. See also object and instance. 
  12319.            to instance. For example, all text boxes have Caption and Multiline 
  12320.            properties, defined by the Text class, but property values (for 
  12321.            example, "Save" and True) are different for each text box. 
  12322.  
  12323.  class extension. An extension to the functionality of a class defined by 
  12324.            another application. The extension consists of one or more methods 
  12325.            that define the added functionality. These methods cannot modify the 
  12326.            existing behavior of the defined class; they can only add behavior 
  12327.            specific to the application that contains the extended class. 
  12328.  
  12329.  class hierarchy. A tree structure that shows which classes inherit from which. 
  12330.            By looking at any class in the class hierarchy, you can see its base 
  12331.            classes and its subclasses. see also class, inherit, base class, and 
  12332.            subclass. 
  12333.  
  12334.  class method. See method. The term class method is sometimes used in contrast 
  12335.            to the term instance method. See also method and instance method. 
  12336.  
  12337.  CLI.      See call level interface. 
  12338.  
  12339.  client application enabler (CAE) An IBM program product that provides run-time 
  12340.            support to allow applications to access local or remote database 
  12341.            servers via popular communications protocols. 
  12342.  
  12343.  client/server. The model of interaction in distributed data processing in 
  12344.            which a program at one location (the client) sends a request to a 
  12345.            program at another location (the server), and awaits a response. 
  12346.  
  12347.  clipboard. A resource provided by the operating system that stores and returns 
  12348.            information highlighted by mouse, keyboard, or macro operations. The 
  12349.            clipboard allows data to be exchanged between different portions of 
  12350.            an application, or between different applications. 
  12351.  
  12352.  Code Editor. In VisualAge for Basic, a syntax-sensitive editor for BASIC 
  12353.            source code. 
  12354.  
  12355.  column function. In VisualAge for Basic, a function that calculates a value 
  12356.            from a set of values in a table. 
  12357.  
  12358.  comment.  A word or statement in a program, command, or file that serves as 
  12359.            documentation instead of instructions. A comment is ignored by a 
  12360.            compiler. 
  12361.  
  12362.  Common Object Request Broker Architecture (CORBA). An industry specification 
  12363.            for the design of Object Request Brokers (ORBs). ORBs allow 
  12364.            different kinds of computer systems to exchange object data with 
  12365.            each other. Distributed System Object Model (DSOM) is an example of 
  12366.            an Object Request Broker that conforms to the CORBA specification. 
  12367.  
  12368.  Common User Access (CUA). An IBM architecture for designing object-oriented 
  12369.            user interfaces using a set of standard components and terminology. 
  12370.  
  12371.  compile.  To translate source code instructions into machine language form. 
  12372.            For example, in VisualAge for Basic, when you select the menu option 
  12373.            File=>Build Executable, you are compiling the application. 
  12374.  
  12375.  component. An object that is an element of the graphical user interface, such 
  12376.            as a command button or a text box. 
  12377.  
  12378.  component array. Several instances of the same component that share a common 
  12379.            name; for example, an array of command buttons. An index is used to 
  12380.            specify a particular component. 
  12381.            shared by all elements of a component array. 
  12382.  
  12383.  concatenate. To join two strings together to form a larger string. In 
  12384.            VisualAge for Basic, you use the ampersand (&) operator to join 
  12385.            strings together. 
  12386.  
  12387.  constant. A value that, when assigned, cannot change during program execution. 
  12388.            For example, you might define a constant called Pi to hold the value 
  12389.            3.1415926535, and then refer to that constant in your procedures. 
  12390.            Constants are generally declared as Global in scope. In VisualAge 
  12391.            for Basic, the file constant.bas contains declarations for many 
  12392.            common constants that you can use in your applications. 
  12393.  
  12394.  construction from parts. A software development technology in which 
  12395.            applications are assembled from reusable, existing software 
  12396.            components known as parts. 
  12397.  
  12398.  constructor. A special method that initializes an object. In VisualAge for 
  12399.            Basic the constructor method is named New. A constructor is called 
  12400.            automatically just after the object is created. You can not call a 
  12401.            constructor directly. See also destructor. 
  12402.  
  12403.  container. A class that acts as the parent for other classes. Generally, a 
  12404.            container manages the layout of graphical component classes. The 
  12405.            Form class is a container. Container classes act as the parent of 
  12406.            the classes they manage. 
  12407.  
  12408.  control.  The Microsoft Visual Basic term for a component. See also component. 
  12409.  
  12410.  control array. The Microsoft Visual Basic term for a component array. See also 
  12411.            component array. 
  12412.  
  12413.  CORBA.    See Common Object Request Broker Architecture. 
  12414.  
  12415.  cross-platform. The ability of a product or application to run on different 
  12416.            operating systems. 
  12417.  
  12418.  CUA.      See Common User Access. 
  12419.  
  12420.  currency symbol. The character used to represent the currency of the country 
  12421.            selected under the operating system's international settings. 
  12422.  
  12423.  
  12424. 笊絶武笊 35.4. D 笊絶武笊
  12425.  
  12426.  DARI.     See distributed application remote interface. 
  12427.  
  12428.  data      Information supplied to a program or stored in a data file. 
  12429.  
  12430.  database. The collection of all data files stored in a system. The data files 
  12431.            contain descriptions of how input data is presented to a program 
  12432.            from internal storage and how output data is presented to internal 
  12433.            storage from a program. 
  12434.  
  12435.  data control language (DCL). The subset of SQL statements used to grant and 
  12436.            revoke access permissions on database objects. 
  12437.  
  12438.  data description language (DDL). The subset of SQL statements used to create, 
  12439.            delete, and modify structures within a database. DDL operates on the 
  12440.            metadata that defines the structure of the database objects. The DDL 
  12441.            for managing user- defined functions includes CREATE, DROP, and 
  12442.            COMMENT ON statements. 
  12443.  
  12444.  data file. A file containing information that is manipulated by an 
  12445.            application. For example, a file containing payroll information is a 
  12446.            data file. 
  12447.  
  12448.  data item. A unit of data, either a constant or a variable, that can be 
  12449.            processed. 
  12450.  
  12451.  data manipulation language (DML). The subset of SQL statements used to add, 
  12452.            insert, delete, and update data within a database. 
  12453.  
  12454.  data type. An attribute of a variable that specifies the data format for the 
  12455.            variable. The data type restricts the type of data the variable will 
  12456.            accept. 
  12457.  
  12458.  date expression. A numeric or string representation of the date and time, with 
  12459.            the number of days to the left of the decimal point, and the time of 
  12460.            day to the right of the decimal point. 
  12461.  
  12462.  DB2 Client/Server (DB2 C/S). A relational database management system available 
  12463.            on OS/2 and AIX. 
  12464.  
  12465.  DB2 C/S.  See DB2 Client/Server. 
  12466.  
  12467.  DB2 SDK.  See DB2 software developer's kit. 
  12468.  
  12469.  DB2 software developer's kit (DB2 SDK). A collection of tools that help 
  12470.            developers create database applications. 
  12471.  
  12472.  DCE.      See distributed computing environment. 
  12473.  
  12474.  DCL.      See data control language. 
  12475.  
  12476.  DDCS.     See distributed database connection services. 
  12477.  
  12478.  DDL       See data description language. 
  12479.  
  12480.  debug mode. An environment in which programs can be tested. 
  12481.  
  12482.  debugger. A software tool used to detect, trace, and eliminate software 
  12483.            errors. 
  12484.  
  12485.  declaration. The definition of a variable or constant. A declaration can 
  12486.            specify the data type of the variable or constant. If no data type 
  12487.            is specified, the Variant type is assigned. The location of the 
  12488.            declaration determines the scope of the variable or constant. 
  12489.  
  12490.  default property. In VisualAge for Basic, each component is assigned a default 
  12491.            property, which is generally the property accessed most frequently. 
  12492.            You can set or retrieve the default property by referring to the 
  12493.            component within an expression. For example, the default property of 
  12494.            the Text Box component is Text. 
  12495.  
  12496.  default value. A value assumed when no value has been specified. 
  12497.  
  12498.  defined class. A new class that a containing application adds to the system. 
  12499.            It consists of a textual definition (which defines elements such as 
  12500.            instance variables), and methods (which define behaviors). Contrast 
  12501.            with extended class. 
  12502.  
  12503.  demote.   To move a menu item to a lower level in the outline structure. 
  12504.  
  12505.  design time. The time when you are using the VisualAge for Basic application 
  12506.            builder interactively. For example, the Name property of a VisualAge 
  12507.            for Basic component is only available at design time. Contrast with 
  12508.            run time. 
  12509.  
  12510.  destructor. A special method that does cleanup just before an object is 
  12511.            destroyed. In VisualAge for Basic, the destructor method is called 
  12512.            New. 
  12513.            to constructors, which can not be called directly. See also object 
  12514.            lifetime. 
  12515.  
  12516.  directory separator. The character used to indicate subdirectory divisions. 
  12517.            For example, the directory separator for Microsoft Windows and OS/2 
  12518.            is the backslash (\), while the directory separator for AIX is the 
  12519.            forward slash (/). 
  12520.  
  12521.  distributed application. A workstation application that runs in cooperation 
  12522.            with programs running on other processes or machines. Client/server 
  12523.            applications are a subset of distributed applications. 
  12524.  
  12525.  distributed application remote interface (DARI). An application programming 
  12526.            interface that supports the sqleproc() function for invoking stored 
  12527.            procedures. 
  12528.  
  12529.  distributed computing environment (DCE). A set of services and tools that 
  12530.            support the creation, use, and maintenance of distributed 
  12531.            applications in a heterogeneous computing environment. 
  12532.  
  12533.  distributed database connection services (DDCS). A tool that provides local 
  12534.            applications with transparent read and update access to enterprise 
  12535.            data stored in DRDA application servers such as DB2 for MVS. 
  12536.  
  12537.  distributed relational database architecture (DRDA). An database architecture 
  12538.            that supports the SQL CALL statement for invoking stored procedures. 
  12539.  
  12540.  Distributed System Object Model (DSOM). An extension to SOM that enables SOM 
  12541.            objects to reside on multiple network nodes. See also System Object 
  12542.            Model. 
  12543.  
  12544.  DLL.      See Dynamic Link Library. 
  12545.  
  12546.  DML.      See data manipulation language. 
  12547.  
  12548.  DRDA.     See distributed relational database architecture. 
  12549.  
  12550.  drive identifier. A prefix used by some operating systems to indicate a 
  12551.            logical drive choice. For example, in the file path 
  12552.            c:\subdir\filename.txt, c: is the drive identifier. 
  12553.  
  12554.  DSOM.     See Distributed System Object Model. 
  12555.  
  12556.  dynamic array. An array whose size can change at run time. You create a 
  12557.            dynamic array by omitting the dimensions of the array from its 
  12558.            declaration statement, and then using the ReDim statement with 
  12559.            variables to set the dimensions of the array at run time. You can 
  12560.            change the dimensions of a dynamic array as many times as you need 
  12561.            to during the program. 
  12562.  
  12563.  dynamic binding. A process for resolving an address when a call to an object 
  12564.            is made, rather than resolving it at compile time. 
  12565.  
  12566.  Dynamic Link Library (DLL). A file containing data and code objects that can 
  12567.            be used by programs or applications at run time, but are not part of 
  12568.            the program's executable (.exe) file. DLLs store libraries of 
  12569.            functions in binary form for use by Windows applications. You can 
  12570.            access functions stored in DLLs by using special VisualAge for Basic 
  12571.            declarations. 
  12572.  
  12573.  
  12574. 笊絶武笊 35.5. E 笊絶武笊
  12575.  
  12576.  edit.     In general, to add, change, delete, or rearrange data. In the 
  12577.            VisualAge for Basic Project Window, the Edit menu choice enables you 
  12578.            to perform operations such as cut, paste, copy, or delete on an 
  12579.            object selected in a VisualAge for Basic form. 
  12580.  
  12581.  EHLLAPI.  See emulator high-level language application programming interface. 
  12582.  
  12583.  element.  The smallest addressable unit of an array or table. 
  12584.  
  12585.  embedded SQL. SQL statements contained in a source program that will be 
  12586.            converted, using precompilation services, to relational database 
  12587.            language statements. See also SQL. 
  12588.  
  12589.  emulator high-level language application programming interface (EHLLAPI). A 
  12590.            programming interface that enables a workstation application to 
  12591.            communicate with a mainframe application. EHLLAPI operates with a 
  12592.            terminal emulator, such as a 3270 terminal emulator. 
  12593.  
  12594.  encapsulation. An implementation technique that packages data and methods 
  12595.            inside an object for access control. Code inside an object can 
  12596.            access the object's internal representation: data and methods 
  12597.            private to the object. Code outside the object can access the 
  12598.            object's interface only: it's properties, public variables, and 
  12599.            public methods. 
  12600.            an object can be changed with no effect on other objects. 
  12601.  
  12602.  EUC.      See Extended UNIX Code. 
  12603.  
  12604.  event.    An occurrence relevant to an application. For example, when a user 
  12605.            clicks on a command button, a Click event is said to occur. See also 
  12606.            event procedure and event-driven. 
  12607.  
  12608.  event-driven. Application behavior that responds to events as they occur. For 
  12609.            example, when the user selects a Copy command, an event procedure 
  12610.            responds to that event with the appropriate Copy action. The term 
  12611.            "event- driven" describes applications that are controlled by a 
  12612.            series of such events, in contrast with applications that have a 
  12613.            pre-established order of operation. 
  12614.  
  12615.  event procedure. A sub procedure that implements an action in response to an 
  12616.            event. For example, when a user clicks on a command button with the 
  12617.            name Save, the Save_Click event procedure performs the save 
  12618.            operation. 
  12619.  
  12620.  explicit declaration. In VisualAge for Basic, the declaration of a variable 
  12621.            using the Dim, Global, Private, Public, or Static statements. 
  12622.            Contrast with implicit declaration. 
  12623.  
  12624.  expression. A mathematical formula or phrase that combines variable names and 
  12625.            operators to perform an operation. 
  12626.  
  12627.  extended class. In VisualAge for Basic, a class that uses and extends the 
  12628.            functionality of a class defined by a VisualAge for Basic class. It 
  12629.            consists of one or more methods that define the added functionality. 
  12630.            Contrast with defined class. 
  12631.  
  12632.  Extended UNIX Code (EUC). A code used for storing data in files that allows up 
  12633.            to four codesets in one data file. 
  12634.  
  12635.  extension language. A scripting language that allows execution of the source 
  12636.            text without compiling and linking. 
  12637.  
  12638.  extent of a variable. A variable's lifetime-that period of time during program 
  12639.            execution when storage is bound to the variable. When a Sub or 
  12640.            Function procedure ends, the extent of its local variables ends, and 
  12641.            the storage associated with them is freed for use by other parts of 
  12642.            the program. 
  12643.  
  12644.  external action. A function defined as having an external action can take some 
  12645.            action (such as sending a message or updating a file) that changes 
  12646.            the state of some non-DBMS object. 
  12647.  
  12648.  external function. A scalar function that resides in a library and is 
  12649.            implemented in an external programming language such as C, C++, or 
  12650.            VisualAge for Basic. 
  12651.  
  12652.  
  12653. 笊絶武笊 35.6. F 笊絶武笊
  12654.  
  12655.  fenced function. A user-defined function that is defined to be run isolated 
  12656.            from DB2 by a firewall across which DB2/user-defined function 
  12657.            communication must occur. An unfenced function runs in the DB2 
  12658.            process. 
  12659.  
  12660.  FFST.     See first failure support technology. 
  12661.  
  12662.  file.     In VisualAge for Basic, a generic term for the object type that 
  12663.            refers to a data base file, a device file, or a set of related 
  12664.            records treated as a unit. 
  12665.  
  12666.  file description. Information that describes a file and its contents. 
  12667.  
  12668.  file reference. In VisualAge for Basic, a numeric expression preceded by a 
  12669.            pound sign (#) that is used to specify the file of the device being 
  12670.            accessed in an input/output statement. 
  12671.  
  12672.  first failure support technology (FFST). An error reporting and recovery 
  12673.            mechanism used by DB2 Client/Server and VisualAge for Basic. 
  12674.  
  12675.  fixed-point format. A style for the formatting of numeric data in which the 
  12676.            number is always represented as a fixed number of decimal places, 
  12677.            regardless of actual value. 
  12678.  
  12679.  fixed row. The non-scrolling area of a Grid component. The default color is 
  12680.            gray. 
  12681.  
  12682.  floating-point format. A style for the presentation of numeric data in which 
  12683.            the number of decimal places shown is determined by the value of the 
  12684.            number. 
  12685.  
  12686.  focus.    The window that is currently selected on a graphical user interface 
  12687.            and will accept keyboard and mouse input is said to have focus. See 
  12688.            also active window. 
  12689.  
  12690.  form.     A container or window that you use to design the graphical user 
  12691.            interface of your application, including the placement and 
  12692.            configuration of VisualAge for Basic components. 
  12693.  
  12694.  format.   A specified arrangement of things such as characters, fields, and 
  12695.            lines, usually used for displays, printouts, or files. 
  12696.  
  12697.  function. In VisualAge for Basic, a set of instructions that perform a task. A 
  12698.            function accepts arguments and uses them as input values in its 
  12699.            calculations. When a function is complete, it returns a single 
  12700.            value. Therefore functions can be referenced directly within 
  12701.            expressions, and they are ideal for calculation or data conversion 
  12702.            tasks. 
  12703.  
  12704.  function body. In VisualAge for Basic, the piece of code that implements a 
  12705.            function. 
  12706.  
  12707.  function family. In VisualAge for Basic, the set of functions with the same 
  12708.            function name. The context determines whether the usage refers to a 
  12709.            set of functions within a particular schema, or all the relevant 
  12710.            functions with the same name within the current function path. 
  12711.  
  12712.  function invocation. In VisualAge for Basic, the use of a function in SQL, 
  12713.            together with any argument values being passed to the function body. 
  12714.            Also known as a function call. 
  12715.  
  12716.  function key. A keyboard key that is used to request a specific system 
  12717.            function. Shown as F followed by a number, such as F3. 
  12718.  
  12719.  function name. In VisualAge for Basic, the name by which a function is called 
  12720.            in SQL. Many specific functions can have the same function name, in 
  12721.            which case the name is said to be overloaded. 
  12722.  
  12723.  function path. In VisualAge for Basic, an ordered list of schema names that 
  12724.            restricts the search scope for unqualified function calls and 
  12725.            provides a final arbiter for the function selection process. 
  12726.  
  12727.  function path family In VisualAge for Basic, all the functions of the given 
  12728.            name in all of the schemas identified (or defaulted to) in the 
  12729.            function path. 
  12730.  
  12731.  function procedure. See function. 
  12732.  
  12733.  function result. In VisualAge for Basic, depending on the context, the value 
  12734.            generated by a function, or the definition of the characteristics of 
  12735.            the output of a function. 
  12736.  
  12737.  function signature. In VisualAge for Basic, the logical concatenation of a 
  12738.            function name with the data types of its parameters. Each function 
  12739.            in a schema must have a unique signature. 
  12740.  
  12741.  
  12742. 笊絶武笊 35.7. G 笊絶武笊
  12743.  
  12744.  Graphical User Interface (GUI). An interface that enables users to communicate 
  12745.            with an application by manipulating graphical elements such as 
  12746.            windows and icons, rather than by entering commands. Examples of 
  12747.            GUIs are Presentation Manager in OS/2, Program Manager in Microsoft 
  12748.            Windows, and XWindows in AIX. 
  12749.  
  12750.  GUI.      See Graphical User Interface. 
  12751.  
  12752.  
  12753. 笊絶武笊 35.8. H 笊絶武笊
  12754.  
  12755.  host variable. A variable in an SQL statement used for substituting data 
  12756.            values into the statement at execution time. In VisualAge for Basic, 
  12757.            a host variable is preceded by a colon. For example: :hclientIO 
  12758.  
  12759.  
  12760. 笊絶武笊 35.9. I 笊絶武笊
  12761.  
  12762.  icon.     A small pictorial representation of an object. 
  12763.  
  12764.  implicit declaration. VisualAge for Basic treats the use of an undeclared 
  12765.            variable name within an expression as an implicit declaration. 
  12766.            VisualAge for Basic declares a variable of type Variant and makes it 
  12767.            local in scope. 
  12768.  
  12769.  index.    In a database, an index is an ordered set of pointers to the rows of 
  12770.            a base table. Each index is based on the values of the data in one 
  12771.            or more table columns. An index is separate from the data in the 
  12772.            table. 
  12773.            number of the element in the set or array. 
  12774.  
  12775.  index variable. In programming, an index variable is a variable that holds an 
  12776.            index. 
  12777.  
  12778.  indicator variable. In embedded SQL, a SmallInt variable prefixed with a colon 
  12779.            and placed immediately after a host variable to indicate whether the 
  12780.            host variable is null. 
  12781.  
  12782.  inheritance. A process by which a class receives the properties, variables, 
  12783.            and methods of its base class (or classes) as specified in the class 
  12784.            definition. See also base class. 
  12785.            suppose you define a new class, based on a class that has a Print 
  12786.            method. And suppose further the new objects will not print correctly 
  12787.            with the inherited method. You can write a Print sub procedure and 
  12788.            define it as a method of the subclass. Then a method call to Print 
  12789.            with an object of the new subclass uses the new method, overriding 
  12790.            the inherited Print method. 
  12791.  
  12792.  input.    Information or data that can be processed. 
  12793.  
  12794.  input file. A database or device file that has been opened with the option to 
  12795.            allow the reading of records. 
  12796.  
  12797.  inspector. A window in the VisualAge for Basic debugger that helps you analyze 
  12798.            and correct errors in your application. The inspector lets you 
  12799.            inspect the values of watch expressions, and verify calls in the 
  12800.            call stack. See also breakpoint, watch expression. 
  12801.  
  12802.  instance. Any object of a class is said to be an instance of that class. For 
  12803.            example, Text1 and Text2 are instances of the TextBox class. 
  12804.  
  12805.  instance method. A method that provides behavior for particular instances of a 
  12806.            class. Messages that invoke instance methods are sent to particular 
  12807.            instances, rather than to the class as a whole. See also class 
  12808.            method. 
  12809.  
  12810.  instance variable. Private data that belongs to an instance of a class and is 
  12811.            hidden from direct access by all other objects. Instance variables 
  12812.            can only be accessed by the instance methods of the defining class 
  12813.            and its subclasses. 
  12814.  
  12815.  instantiation. The process of creating new instances of a class; see also 
  12816.            instance. 
  12817.  
  12818.  instruction. A statement that specifies an operation performed by the system 
  12819.            and that identifies the data, if any, involved in that operation. 
  12820.  
  12821.  integer.  A positive or negative whole number (that is, an optional sign 
  12822.            followed by a number) that does not contain a decimal place. Zero is 
  12823.            also an integer. 
  12824.  
  12825.  internal representation. The data format in which the data associated with a 
  12826.            variable is stored. The data format is specified by the variable's 
  12827.            data type attribute. See also data type. 
  12828.  
  12829.  interpreter. A computer program that translates instructions into computer 
  12830.            language and executes them in real time. The interpreter makes it 
  12831.            possible for an VisualAge for Basic program to be run in debug mode. 
  12832.            See also compile. 
  12833.  
  12834.  intrinsic function. A supplied function. Contrast with user-defined function. 
  12835.  
  12836.  invoke.   To cause an event or to initiate the execution of a program. 
  12837.  
  12838.  iterative development. A software development process that allows progress in 
  12839.            stages. At the end of each stage, the result is verified by end 
  12840.            users. Through such verification, requirements are dynamically 
  12841.            identified and refined while the whole product is under development. 
  12842.  
  12843.  
  12844. 笊絶武笊 35.10. J 笊絶武笊
  12845.  
  12846.  Julian date. A date format with the year in positions 1 and 2, and the day in 
  12847.            positions 3 through 5. The day is represented as 1 through 366, 
  12848.            right-aligned, with zeros in the unused high-order positions. For 
  12849.            example, Feb. 20, 1996 would be represented as 96051. 
  12850.  
  12851.  
  12852. 笊絶武笊 35.11. K 笊絶武笊
  12853.  
  12854.  K (kilobyte). The primary unit of measure for storage capacity; 1K = 1024 
  12855.            bytes. 
  12856.  
  12857.  keyword   See reserved word. 
  12858.  
  12859.  
  12860. 笊絶武笊 35.12. L 笊絶武笊
  12861.  
  12862.  label.    In VisualAge for Basic, the name that identifies a program line. 
  12863.  
  12864.  LAN.      See local area network. 
  12865.  
  12866.  left-align. To place an entry in a field or to move the contents of a field so 
  12867.            that the leftmost character of the data is in the leftmost position 
  12868.            of the field. 
  12869.  
  12870.  library.  A shared code repository represented by a single file. It stores 
  12871.            source code, object code, and persistent objects. 
  12872.  
  12873.  line number. In VisualAge for Basic, the number that prefaces and identifies a 
  12874.            program line. 
  12875.  
  12876.  line reference. The label or line number that specifies where control should 
  12877.            be transferred if certain conditions exist when the line executes. 
  12878.  
  12879.  literal.  In expressions, a literal is a value that is referenced directly, 
  12880.            rather than as the value of a variable. 
  12881.  
  12882.  load.     To place into memory. In VisualAge for Basic, for a form to be 
  12883.            displayed, it must first be loaded into memory. 
  12884.  
  12885.  local area network (LAN). A computer network located within a limited 
  12886.            geographical area. A LAN typically consists of one or more server 
  12887.            machines providing services to a number of client workstations. 
  12888.  
  12889.  logical line. One or more physical lines of code joined by the line 
  12890.            continuation character (_). 
  12891.  
  12892.  loop.     A sequence of instructions that is executed repeatedly. 
  12893.  
  12894.  
  12895. 笊絶武笊 35.13. M 笊絶武笊
  12896.  
  12897.  main procedure. In VisualAge for Basic, a general procedure called Main is 
  12898.            required if your application does not have a form designated as the 
  12899.            startup form. Normally, the startup form serves as the initializing 
  12900.            sequence when an application is executed. The Main procedure can 
  12901.            serve the same purpose. You cannot have a procedure called Main as 
  12902.            well as a startup form in the same application. 
  12903.  
  12904.  MDI.      See Multiple Document Interface. 
  12905.  
  12906.  menu.     A list of action, routing and settings choices presented to the 
  12907.            user. The user's selection determines what the application does 
  12908.            next. Menu types include menu bar, pull-down menu, cascades menu, 
  12909.            and pop- up menu. 
  12910.  
  12911.  menu bar. The area near the top of a window, below the title bar and above the 
  12912.            rest of the window, that provides access to pull-down menus. In the 
  12913.            VisualAge for Basic Project Window, the menu bar provides the 
  12914.            commands you use to develop your application. 
  12915.  
  12916.  menu browser. See Menu Editor. 
  12917.  
  12918.  Menu Editor. A design tool that lets the developer create menus for the user 
  12919.            interface. 
  12920.  
  12921.  menu item. A listing included on a drop-down or cascade menu that provides the 
  12922.            user with an action choice. 
  12923.  
  12924.  menu pane. One of the areas on a drop-down menu that is separated by a 
  12925.            separator bar. 
  12926.  
  12927.  method.   A sub procedure or function that implements part of the services or 
  12928.            behavior of an object. Objects that are Toolbox components come with 
  12929.            their methods built in; you do not have to write them unless you are 
  12930.            creating custom components. 
  12931.            interface and can be called from code external to the object. For 
  12932.            example, an  object named FilObj1, might have a Sort method callable 
  12933.            from a Form1 script as FilObj1.Sort. 
  12934.  
  12935.  mnemonics. A symbol that helps the user remember the meaning of a specific 
  12936.            action, entity, or event. Typically a mnemonic for a menu item is a 
  12937.            character in the menu item highlighted with an underscore, such as S 
  12938.            in Save. You can use a series of keystrokes that include the 
  12939.            designated character to select the action. 
  12940.  
  12941.  modal window. A window that pauses all other program operations until you 
  12942.            interact with it. For example, in most applications, quitting a file 
  12943.            with unsaved changes will bring up a modal window that asks for 
  12944.            confirmation. Contrast with non-modal window. 
  12945.  
  12946.  modeless window. See non-modal window. 
  12947.  
  12948.  module.   Building block of a VisualAge for Basic application. Code modules 
  12949.            contain functions and sub procedures, as well as declarations. The 
  12950.            functions, sub procedures, and declarations contained in a code 
  12951.            module are general in scope. 
  12952.  
  12953.  module-level variable. In VisualAge for Basic, a variable that is declared in 
  12954.            the Declarations section of a module using the Dim or Private 
  12955.            statement. A module-level variable can be read and modified by any 
  12956.            procedure in the module, but not by procedures in other modules. A 
  12957.            module-level variable retains its value as long as the application 
  12958.            is running. 
  12959.  
  12960.  modulo.   The remainder of a division operation. For example, 22 modulo 5 = 2 
  12961.            (2 is the remainder of the division operation). 
  12962.  
  12963.  Multiple Document Interface (MDI). An MDI form supports multiple forms within 
  12964.            the same form window. 
  12965.  
  12966.  multiple inheritance. A sharing mechanism that enables a new class to inherit 
  12967.            properties, variables, and methods from more than one base classs, 
  12968.            as specified in its class definition. See also inherit and base 
  12969.            class. 
  12970.  
  12971.  
  12972. 笊絶武笊 35.14. N 笊絶武笊
  12973.  
  12974.  NetBIOS.  See Network Basic Input/Output System. 
  12975.  
  12976.  Network Basic Input/Output System (NetBIOS). An operating system interface for 
  12977.            application programs used on IBM personal computers that are 
  12978.            attached to an IBM token-ring network. 
  12979.  
  12980.  non-fixed row. The scrolling area of a Grid component. The default color is 
  12981.            white. 
  12982.  
  12983.  non-graphical components. All objects within windows except graphical 
  12984.            components. 
  12985.  
  12986.  non-modal window. A window that does not require you to interact with it 
  12987.            before switching focus to another form, window, or application. For 
  12988.            example, most progress windows are non-modal. Contrast with modal 
  12989.            window. 
  12990.  
  12991.  non-visual component. A part that you can add to a graphical user interface 
  12992.            but that is not visible to the user during run time. A non-visual 
  12993.            component may allow access to a database or API, or it may represent 
  12994.            some real-world object that exists in the business environment. 
  12995.  
  12996.  null-call function. A null-call function can handle null arguments and can 
  12997.            produce a null result. 
  12998.  
  12999.  null value. A special value used in database and arithmetic operations to 
  13000.            indicate that an error has occurred. Any expression including a null 
  13001.            value equates to null. Thus, the null value propagates to the final 
  13002.            result of any series of operations and indicates an error. 
  13003.  
  13004.  numeric.  Character sequence interpreted as a number. Any combination of 
  13005.            variables, constants, functions, and operators that an application 
  13006.            can evaluate as a number. 
  13007.  
  13008.  
  13009. 笊絶武笊 35.15. O 笊絶武笊
  13010.  
  13011.  object.   A software structure that often has a visual representation, as do 
  13012.            forms, component arrays, and command buttons. Objects are the 
  13013.            building blocks of your application. 
  13014.            instance, instantiating, and class. 
  13015.  
  13016.  object ID (OID). A unique identifier for an object. 
  13017.  
  13018.  Object Linking and Embedding (OLE). A system for the exchange of object data 
  13019.            between applications in Microsoft Windows. 
  13020.  
  13021.  object-oriented programming (OOP). A programming method built around objects 
  13022.            and based on sending messages back and forth between those objects. 
  13023.            The basic concepts of OOP are encapsulation, inheritance, and 
  13024.            polymorphism. 
  13025.  
  13026.  object variable. An object variable is like a handle on an object: it allows 
  13027.            you to refer to the object within procedures. Each time an object is 
  13028.            created, an object variable of the same name is also created. When 
  13029.            you manipulate an object using VisualAge for Basic statements, you 
  13030.            are actually manipulating an object variable. You can also create 
  13031.            your own object variables, and more than one object variable can 
  13032.            point to the same object. 
  13033.  
  13034.  ODBC.     See Open Database Connectivity. 
  13035.  
  13036.  OID.      See object ID. 
  13037.  
  13038.  OLE.      See Object Linking and Embedding. 
  13039.  
  13040.  OOP.      See object-oriented programming. 
  13041.  
  13042.  Open Database Connectivity (ODBC). A protocol for the exchange of database 
  13043.            information between applications and relational databases in 
  13044.            Microsoft Windows, in which SQL statements are passed as arguments. 
  13045.  
  13046.  OpenDoc.  An open, cross-platform, object-oriented component embedding 
  13047.            architecture. 
  13048.  
  13049.  operating system. The software that controls the overall behavior of a 
  13050.            computer, including memory management, file storage, disk 
  13051.            management, and peripheral devices. 
  13052.  
  13053.  operator. A symbol used to represent an arithmetic operation, such as a + or - 
  13054.            used to indicated addition or subtraction. A symbol representing an 
  13055.            operation processed on character data, such as concatenation. 
  13056.  
  13057.  output.   Data that has been processed. Data transferred from storage to an 
  13058.            output device. 
  13059.  
  13060.  output file. A database or device file that has been opened with the option to 
  13061.            allow the writing of records. 
  13062.  
  13063.  overflow. The condition that occurs when a portion of the result of an 
  13064.            operation exceeds the capacity of the intended unit of storage. 
  13065.  
  13066.  overloaded function name. Using the same function name or identifier to 
  13067.            represent different functions. 
  13068.  
  13069.  overloading. A mechanism that enables a name to refer to more than one entity. 
  13070.            In a particular context, rules resolve which entity is actually 
  13071.            referenced. Polymorphism is one use of overloading. See also 
  13072.            polymorphism. 
  13073.  
  13074.  
  13075. 笊絶武笊 35.16. P 笊絶武笊
  13076.  
  13077.  parameter. A data element that is included in a message to provide the 
  13078.            requested method with any information that it might need to perform 
  13079.            its task. 
  13080.  
  13081.  parameterized data type. Any of the data types that can be defined with a 
  13082.            specific length, scale, or precision, such as strings. 
  13083.  
  13084.  parent.   A component's container, as specified by its Container property. For 
  13085.            example, a form serves as a parent to the components created 
  13086.            directly on it. 
  13087.  
  13088.  part.     A part is a component that enables users to edit compound documents. 
  13089.            systems. For example, an OpenDoc part can be placed in an OLE 
  13090.            container. 502584ミ「. 
  13091.            DLL's. 
  13092.  
  13093.  polymorphism. The ability of different objects to respond to the same method 
  13094.            call in different ways. At design time, method calls can contain a 
  13095.            single (overloaded) method name, which might refer to any of several 
  13096.            method implementations. 
  13097.            At design time, the name Print might be used for either method 
  13098.            implementation, for instance BitMap1.Print. At runtime, the method 
  13099.            call BitMap1.Print automatically invokes the correct implementation, 
  13100.            based on 1) method-name and 2) the object's class. See also 
  13101.            overloading. 
  13102.  
  13103.  pop-up menu. A menu that is only displayed when the user request it: typically 
  13104.            by a click of the right mouse button. 
  13105.  
  13106.  primitive part. A basic building block of other parts. Primitive parts can be 
  13107.            visual or non-visual. For example, a multi-line edit field is a 
  13108.            primitive visual part. 
  13109.  
  13110.  private.  A measure of the scope of a variable or procedure. A private 
  13111.            variable is only accessible within the procedure in which it is 
  13112.            declared. 
  13113.  
  13114.  private class. A class that is not visible outside its containing application. 
  13115.            Contrast with public class. 
  13116.  
  13117.  private method. A designation that application developers can use to indicate 
  13118.            that a method is only for internal use in the application they are 
  13119.            developing. This designation is provided for convenience, and does 
  13120.            not have any effect on the underlying code implementation. Contrast 
  13121.            with public method. 
  13122.  
  13123.  procedure. A set of commands, statements, input data, or remarks that process 
  13124.            a specific set of functions. In this book, procedure is used as a 
  13125.            generic term for Sub procedures and Function procedures in a 
  13126.            VisualAge for Basic application. 
  13127.  
  13128.  processing. The action of operating on input data. 
  13129.  
  13130.  program.  An object that contains a set of instructions that tell a computer 
  13131.            where to get input, how to process it, and where to put the results. 
  13132.            A program is created as a result of compilation. 
  13133.  
  13134.  project.  In VisualAge for Basic, the collection of source files necessary to 
  13135.            build an application or set of applications. 
  13136.  
  13137.  Project window. The main VisualAge for Basic window. It lists, in outline 
  13138.            format, the objects contained within a VisualAge for Basic project. 
  13139.            It contains a menu bar, tool bar, and status area that enable you to 
  13140.            use and modify the objects contained within a project. 
  13141.  
  13142.  promote.  Moving a menu item to a greater level in the outline structure. 
  13143.  
  13144.  promotion (of a function argument) The implicit conversion of a function 
  13145.            argument from one data type to another data type. 
  13146.  
  13147.  property. An attribute that helps define the behavior of an object. For 
  13148.            example, an attribute of a form could define the form's background 
  13149.            color. 
  13150.  
  13151.  Property Editor. In VisualAge for Basic, an editor that enables you to view 
  13152.            and modify the properties for all selected objects in the current 
  13153.            form. The properties define the object's appearance, and its 
  13154.            response to user actions. 
  13155.  
  13156.  public class. A class that is visible outside its containing application, and 
  13157.            provided as part of a product API. Contrast with private class. 
  13158.  
  13159.  public method. A method that can be called from scripts in objects of other 
  13160.            classes. Public methods are part of an object's interface. 
  13161.  
  13162.  pull-down menu. A menu that extends from a selected choice on a menu bar or 
  13163.            from the system-menu symbol. The choices in a pull-down menu are 
  13164.            related to one another in some manner 
  13165.  
  13166.  
  13167. 笊絶武笊 35.17. R 笊絶武笊
  13168.  
  13169.  receiver. The object that receives a message. Contrast with sender. 
  13170.  
  13171.  record.   An ordered set of fields that make up a single occurrence of the 
  13172.            unit of data transferred between a file and a program. 
  13173.  
  13174.  recordset. A group of records in a database. 
  13175.  
  13176.  regular expressions. In VisualAge for Basic, a check box in the Edit=>Find and 
  13177.            Edit=>Replace windows of the Code Editor. Selecting the checkbox 
  13178.            causes the alphanumeric and special characters that you enter to be 
  13179.            interpreted as a pattern to be searched for. 
  13180.  
  13181.  remote build. A process that transfers and makes a stored procedure or 
  13182.            user-defined function on a database server node on your network. 
  13183.  
  13184.  remote debugging. The process of debugging a stored procedure or user-defined 
  13185.            function running on a database server node on your network. 
  13186.  
  13187.  remote execution. The process of running a stored procedure or user-defined 
  13188.            function on a database server node on your network. 
  13189.  
  13190.  remote registration. The process of registering a stored procedure or 
  13191.            user-defined function on a database on a database server node on 
  13192.            your network. 
  13193.  
  13194.  reserved word. In VisualAge for Basic, a word that has a special meaning and 
  13195.            cannot be used as a variable name. Reserved words in VisualAge for 
  13196.            Basic include the names of functions, objects, and statements that 
  13197.            are part of the VisualAge for Basic language. 
  13198.  
  13199.  return value. The value returned by a function and substituted in the 
  13200.            expression that called the function. 
  13201.  
  13202.  routing choice. A choice that displays a pull-down menu, a cascaded menu, or a 
  13203.            window containing additional choices. 
  13204.  
  13205.  run.      To process a program, command, utility, or other machine function 
  13206.  
  13207.  run time. The state of an application when it is actively executing, as 
  13208.            opposed to when it is being designed. For example, in VisualAge for 
  13209.            Basic, properties associated with Grid cell selection such as 
  13210.            SelEndCol and SelEndRow are read and write available at run time, 
  13211.            but not at design time. Contrast with design time. 
  13212.  
  13213.  
  13214. 笊絶武笊 35.18. S 笊絶武笊
  13215.  
  13216.  scalar function. A VisualAge for Basic function that calculates a value from 
  13217.            one row in a relational table or view. The arguments of a scalar 
  13218.            function are single values (scalars) and it returns a single value 
  13219.            as a result. 
  13220.  
  13221.  schema.   (1) The set of statements, expressed in data definition language, 
  13222.            that completely describe the structure of a database. (2) The 
  13223.            high-order part of the two-part user-defined or built-in function 
  13224.            name. Functions are considered to be owned by a schema. 
  13225.  
  13226.  scope.    The extent to which a variable can be manipulated from other parts 
  13227.            of an application. For example, if a variable is private in scope, 
  13228.            it can only be accessed from within the procedure in which it is 
  13229.            declared. 
  13230.  
  13231.  sender.   An object that sends a message to another object. On the level of 
  13232.            code implementation, the sender is considered to be the sending 
  13233.            method within the class or instance that issues the message. 
  13234.            Contrast with receiver. 
  13235.  
  13236.  separator. A punctuation character used to delimit character strings. A space 
  13237.            is also acceptable as a date separator. 
  13238.  
  13239.  separator bars. A horizontal line in a drop-down menu that creates a separate 
  13240.            area or pane on the menu. 
  13241.  
  13242.  serial date. The number of days since December 30, 1899. December 30, 1899 is 
  13243.            considered day 0 and December 31, 1899 is considered day 1. 
  13244.  
  13245.  server.   A computer that provides services to multiple users or workstations 
  13246.            in a network. For example, a file server, print server, or mail 
  13247.            server. 
  13248.  
  13249.  server procedure. A general term that includes both stored procedures and 
  13250.            user-defined functions. 
  13251.  
  13252.  settings choice. A type of choice that sets characteristics of objects or 
  13253.            displays identifying characteristics of objects. 
  13254.  
  13255.  settings view. In VisualAge for Basic, a view of a part that provides a way to 
  13256.            display and set the attributes and options associated with the part. 
  13257.  
  13258.  shift-JIS. Japanese Industry Standard multi-byte coding. Codes are numerically 
  13259.            shifted from codes used by JIS. 
  13260.  
  13261.  shortcut key. A key or combination of keys, assigned to a menu command, that 
  13262.            selects the menu command even if the menu item is not currently 
  13263.            displayed; for example, using Ctrl+C to select a Copy command. 
  13264.  
  13265.  signature. The number, order, and data types of a function's arguments that 
  13266.            distinguish one function from all others bearing the same name 
  13267.            within the same schema. All methods are polymorphic, which means 
  13268.            that multiple methods may share the same name provided that they 
  13269.            reside in different classes or have different signatures. Method 
  13270.            signatures are different if they differ in the number or types of 
  13271.            arguments. 
  13272.  
  13273.  snapshot. The result of a query expression that contains requested fields from 
  13274.            one or more tables. A snapshot is equivalent to a dynaset, except a 
  13275.            snapshot is not editable. 
  13276.  
  13277.  SOM.      See System Object Model. 
  13278.  
  13279.  sourced function. A built-in or user-defined DB2 function that refers to 
  13280.            another function, either built-in or user-defined, already known to 
  13281.            the database. The referenced function will be executed as the body 
  13282.            of the sourced function, but DB2 does automatic type conversion if 
  13283.            needed. 
  13284.  
  13285.  specific function. A particular function known to the DBMS by its specific 
  13286.            name. Many specific functions can have the same function name. Also 
  13287.            known as a function instance. 
  13288.  
  13289.  SQL.      See structured query language. 
  13290.  
  13291.  SQLDA.    See structured query language data area. 
  13292.  
  13293.  startup form. In VisualAge for Basic, one of the forms in your application is 
  13294.            designated as the startup form and is the first form loaded. The 
  13295.            startup form load procedure is the first procedure executed when the 
  13296.            application is started. See also main procedure. 
  13297.  
  13298.  status area. A part of a window where information appears that shows the state 
  13299.            of an object or the state of a particular view of an object. 
  13300.  
  13301.  stored procedure. A program loaded at the server. If it contains SQL 
  13302.            statements or does any other kind of DB2 access, then it is executed 
  13303.            as part of the unit of work (UOW) started by the client program. 
  13304.  
  13305.  string.   A set of alphanumeric characters that are stored together. A 
  13306.            variable containing a person's name is an example of a string. 
  13307.  
  13308.  structured query language (SQL). A language used to access relational 
  13309.            databases. 
  13310.  
  13311.  structured query language data area (SQLDA). A set of nested structures that 
  13312.            provides information used for passing data between an application 
  13313.            and a database during the execution of certain SQL statements and 
  13314.            DB2 APIs. The SQLDA can describe columns, input variables, or output 
  13315.            variables. 
  13316.  
  13317.  subclass. A class that inherits behaviors and specifications (in other words, 
  13318.            methods and variables) from another class. Contrast with superclass. 
  13319.            For example, the class DUCK is a subclass of the class BIRD, which 
  13320.            is in turn a subclass of the class ANIMAL 
  13321.  
  13322.  Sub procedure. A series of VisualAge for Basic statements that perform a task. 
  13323.            Sub procedures can be associated with events and accept parameters, 
  13324.            but do not return values. 
  13325.  
  13326.  subroutine. In VisualAge for Basic, a group of statements in a program 
  13327.            processed by a GoSub statement or a separately compiled program 
  13328.            processed by the Call statement. 
  13329.  
  13330.  superclass. A class from which another class inherits behaviors and 
  13331.            specifications (in other words, methods and variables). Contrast 
  13332.            with subclass. 
  13333.  
  13334.  system date. The date established for the system when it is started. 
  13335.  
  13336.  System Object Model (SOM) An object-structured protocol that enables 
  13337.            applications to access and use objects and object definitions, 
  13338.            regardless of what programming language created them, with no need 
  13339.            to recompile the application. 
  13340.  
  13341.  system time. The elapsed time from when the system was started to the current 
  13342.            time. If the system time is changed to local time when the system is 
  13343.            started, the current system time is the local time. 
  13344.  
  13345.  
  13346. 笊絶武笊 35.19. T 笊絶武笊
  13347.  
  13348.  table.    The physical representation of a collection of fields and indexes. 
  13349.  
  13350.  TCP/IP.   See Transmission Control Protocol/Internet Protocol. 
  13351.  
  13352.  team programming. Development of a program, system, or application suite by a 
  13353.            team of two or more programmers. 
  13354.  
  13355.  test mode. See debug mode. 
  13356.  
  13357.  text box. A component that accepts text from the user or displays text. Class: 
  13358.            TextBox. 
  13359.  
  13360.  thread.   In OS/2 and other operating systems, the smallest unit of execution 
  13361.            within a process that is not identifiable outside of its parent 
  13362.            process. A process consists of a collection of threads in various 
  13363.            states. 
  13364.  
  13365.  title bar. The area at the top of each window that contains the system menu 
  13366.            symbol from which the system menu appears, a small icon, a window 
  13367.            title, and the window sizing buttons. 
  13368.  
  13369.  tool bar. In VisualAge for Basic, the strip of icons along the top of the 
  13370.            Project Window. The tool bar provides quick access to frequently 
  13371.            used VisualAge for Basic commands. 
  13372.  
  13373.  tool button. A button that performs a useful function, such as opening the 
  13374.            code editor. 
  13375.  
  13376.  transaction. In client/server transaction processing, a business activity that 
  13377.            transforms a database from one state to another (for example, making 
  13378.            an airline reservation). 
  13379.  
  13380.  Transmission Control Protocol/Internet Protocol (TCP/IP). A set of 
  13381.            communications protocols that provide peer-to-peer connectivity 
  13382.            functions for both local and wide-area networks. 
  13383.  
  13384.  trigger.  An update operation (insert, update, or delete) on a specified table 
  13385.            that causes a set of actions to be executed. You can use triggers to 
  13386.            validate input data, send an e-mail message, generate a value for a 
  13387.            newly inserted row, or write to other tables to create a log or 
  13388.            audit trail. 
  13389.  
  13390.  twip.     One twentieth of a point. Twips are used by VisualAge for Basic as a 
  13391.            unit of measurement for the placement of graphical components on 
  13392.            interfaces. There are 72 points or 1440 twips in an inch, and 567 
  13393.            twips in a centimeter. 
  13394.  
  13395.  type in.  The action of pressing keys on a keyboard to input information. 
  13396.  
  13397.  
  13398. 笊絶武笊 35.20. U 笊絶武笊
  13399.  
  13400.  UDF.      See user-defined function. 
  13401.  
  13402.  UDT.      See user-defined type. 
  13403.  
  13404.  UI.       See user interface. 
  13405.  
  13406.  user-defined function A scalar function that can be used in an SQL statement 
  13407.            and is not provided as a built-in SQL function. 
  13408.  
  13409.  user-defined type (UDT). A variable that holds several related data elements 
  13410.            within a single reference. 
  13411.  
  13412.  user interface (UI). The hardware, software, or both that enables the user to 
  13413.            interact with a computer. In VisualAge for Basic, the UI refers to 
  13414.            the visual presentation with which the user interacts, and its 
  13415.            underlying software. 
  13416.  
  13417.  
  13418. 笊絶武笊 35.21. V 笊絶武笊
  13419.  
  13420.  variable. A name that points to a memory location where information can be 
  13421.            temporarily stored. 
  13422.  
  13423.  variable name. A name that represents a type of value. In VisualAge for Basic, 
  13424.            a variable name cannot be a reserved word and cannot contain any 
  13425.            spaces or punctuation marks. A variable name must begin with a 
  13426.            letter and can be between 1 and 40 characters long, inclusive. 
  13427.  
  13428.  variant.  A flexible data type capable of storing different kinds of 
  13429.            information. Variants containing data of different types can be 
  13430.            combined in VisualAge for Basic operations, with data conversion 
  13431.            performed as necessary. 
  13432.  
  13433.  variant function. A user-defined function whose result is not solely dependent 
  13434.            on the values of the input arguments. That is, successive calls with 
  13435.            the same argument values could produce a different answer. 
  13436.  
  13437.  VBX.      See Visual Basic extension. 
  13438.  
  13439.  virtual class. See abstract class. 
  13440.  
  13441.  VisualAge for Basic. A programming language and development environment for 
  13442.            creating database applications, user- defined functions, and stored 
  13443.            procedures. 
  13444.  
  13445.  Visual Basic extension (VBX). An extension to the language definition of 
  13446.            Microsoft Visual Basic. 
  13447.  
  13448.  visual component. A part that has a visual representation at run time. Visual 
  13449.            parts, such as windows, push buttons, and entry fields, make up the 
  13450.            user interface of an application. Contrast with non-visual 
  13451.            component. 
  13452.  
  13453.  
  13454. 笊絶武笊 35.22. W 笊絶武笊
  13455.  
  13456.  watch button. A tool button that lets you set a watch over the value of a 
  13457.            property or expression. 
  13458.  
  13459.  watch expression. During debugging, a watch expression is an expression that 
  13460.            pauses your application when the expression changes or becomes true. 
  13461.            The watch expression enables you to check variable values and the 
  13462.            status of the expression during program execution. A watch 
  13463.            expression differs from a breakpoint because it is conditional and 
  13464.            because it does not specify a specific line of code where execution 
  13465.            pauses. See also breakpoint. 
  13466.  
  13467.  wildcards. Refer to Regular Expressions. 
  13468.  
  13469.  window.   An area with visible boundaries that presents a view of an object, 
  13470.            or enables a user to conduct a dialog with a computer system. 
  13471.  
  13472.  window title. The area on a title bar that contains the name of the object or 
  13473.            a short description of the contents of the window. 
  13474.   ********* Start of Header *********************               .* 
  13475.  
  13476.  
  13477. 笊絶武笊 36. Reader's Comments 笊絶武笊
  13478.  
  13479. VisualAge for Basic Programming Guide 
  13480. Publication Number  SC26-8833-00 
  13481.  
  13482. International Business Machines Corporation 
  13483. Department W92/H3 
  13484. PO Box 49023 
  13485. San Jose, CA 95161-9023 
  13486.  
  13487. We'd Like to Hear from You! 
  13488.  
  13489. Please use one of the following ways to send us your comments about this book: 
  13490.  
  13491.      Mail - Use the Readers' Comments form. 
  13492.  
  13493.       If you are sending the form from a country other than the United States, 
  13494.       give it to your local IBM branch office or IBM representative for 
  13495.       mailing. 
  13496.  
  13497.      Fax - Use this Readers' Comments form and fax it to this U.S. number: 
  13498.       800-426-7773 or (408) 463-4393. 
  13499.  
  13500.      Electronic mail - Internet:  COMMENTS@VNET.IBM.COM 
  13501.  
  13502.  Be sure to include the following with your comments: 
  13503.  
  13504.      Title and publication number of this book 
  13505.      Your name, address, and telephone number if you would like a reply 
  13506.  
  13507.  Please comment on the information in this book and the way the information is 
  13508.  presented.  If you want to comment on the product, please see the VisualAge 
  13509.  for Basic online help.  Select Help  Technical Support on the Project window. 
  13510.  
  13511.  To request additional publications, or to comment on other IBM information or 
  13512.  the function of IBM products, please give your comments to your IBM 
  13513.  representative or to your IBM authorized remarketer. 
  13514.  
  13515.  Readers' Comments 
  13516.  
  13517.  How satisfied are you with the information in this book? 
  13518.  
  13519.   笏娯楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏
  13520.   笏笏笏笏笏笏ャ笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  13521.   笏        笏      笏      笏     笏        笏   Very   笏
  13522.   笏        笏   Very  笏      笏     笏        笏  Dissatis-  笏
  13523.   笏        笏 Satisfied 笏 Satisfied 笏 Neutral 笏 Dissatisfied 笏   fied   笏
  13524.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏
  13525.   笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  13526.   笏 Technically  笏      笏      笏     笏        笏       笏
  13527.   笏 accurate    笏   [_]   笏   [_]   笏  [_]  笏    [_]   笏   [_]   笏
  13528.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏
  13529.   笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  13530.   笏 Complete    笏   [_]   笏   [_]   笏  [_]  笏    [_]   笏   [_]   笏
  13531.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏
  13532.   笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  13533.   笏 Easy to find  笏   [_]   笏   [_]   笏  [_]  笏    [_]   笏   [_]   笏
  13534.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏
  13535.   笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  13536.   笏 Easy to    笏      笏      笏     笏        笏       笏
  13537.   笏 understand   笏   [_]   笏   [_]   笏  [_]  笏    [_]   笏   [_]   笏
  13538.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏
  13539.   笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  13540.   笏 Well organ-  笏      笏      笏     笏        笏       笏
  13541.   笏 ized      笏   [_]   笏   [_]   笏  [_]  笏    [_]   笏   [_]   笏
  13542.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏
  13543.   笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  13544.   笏 Applicable to 笏      笏      笏     笏        笏       笏
  13545.   笏 your tasks   笏   [_]   笏   [_]   笏  [_]  笏    [_]   笏   [_]   笏
  13546.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏
  13547.   笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  13548.   笏 Grammatically 笏      笏      笏     笏        笏       笏
  13549.   笏 correct and  笏      笏      笏     笏        笏       笏
  13550.   笏 consistent   笏   [_]   笏   [_]   笏  [_]  笏    [_]   笏   [_]   笏
  13551.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏
  13552.   笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  13553.   笏 Graphically  笏      笏      笏     笏        笏       笏
  13554.   笏 well designed 笏   [_]   笏   [_]   笏  [_]  笏    [_]   笏   [_]   笏
  13555.   笏懌楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏
  13556.   笏笏笏笏笏笏シ笏笏笏笏笏笏笏笏笏笏笏笏笏笏、
  13557.   笏 Overall sat-  笏      笏      笏     笏        笏       笏
  13558.   笏 isfaction   笏   [_]   笏   [_]   笏  [_]  笏    [_]   笏   [_]   笏
  13559.   笏披楳笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏
  13560.   笏笏笏笏笏笏エ笏笏笏笏笏笏笏笏笏笏笏笏笏笏
  13561.  
  13562.  Please tell us how we can improve this book: 
  13563.  
  13564.  May we contact you to discuss your comments?  [_] Yes  [_] No