jsNoteBook and jsSysNoteBook Design and Description

The following is a brief description of basic overall operation and design of the jsNoteBook dBL class. Because the jsSysNoteBook class is a subclass of the jsNoteBook class, this description also applies to the jsSysNoteBook class. Don't worry if you don't clearly understand what is described. Simply read it for purposes of 'awareness'. Much of the following will become clearer as you become familiar with using jsNoteBook. In reality, jsNoteBook is quite simple to use. What follows is a small attempt to satisfy those who want to know 'just a bit more'.

jsNoteBook is a subclass of the stock NoteBook dBL class. It can be placed on a Form, a SubForm, a Container, or a NoteBook. Simply ensure that the form's metric property is set to 6 - Pixels, select the jsNoteBook class on the Component Palette, and drop it anywhere on the Form, Container, or NoteBook, or instantiate it as you would any other class within a SubForm. The form.metric property *must* be set to 6 - Pixels for proper function of jsNoteBook at runtime. The form.metric setting is checked when the jsNoteBook object is created and if form.metric # 6, a message box will display with a warning message.

At runtime, a jsNoteBook object will function the same as the stock NoteBook. None of the default stock NoteBook operation has been changed. jsNoteBook simply adds functionality that does not exist in the stock NoteBook.

Like most of the visual UI classes in the core product, the NoteBook class in the core product is not created by the core product. Rather, it is surfaced by the core product from the operating system. Although it is known as a NoteBook in the context of the core product, it is really a tab control window class provided by the operating system. dBASE simply 'surfaces' the tab control in a manner that is compatible and consistent with the dBL language. The additional functionality of the jsNoteBook class is achieved through the operating system's API in the same way that dBASE itself talks to the API to create a tab control and surface the dBL access through the stock NoteBook class. jsNoteBook simply uses API functionality to surface additional items that have not been exploited by the core product.

The tab control/NoteBook window is a message-based window rather than a function-based window. Almost all functionality is implemented via messages sent to the tab control/NoteBook window. Some of these messages use complex data structures to pass information to and from the NoteBook window. The jsNoteBook class implements methods (functions) which provide dBL access to the messages and structures. Each method encapsulates a specific message supported by the tab control/NoteBook window by creating and filling any necessary data structures, sending the appropriate message to the tab control/NoteBook window, and by retrieving any returned data as necessary from the associated data structures.

Don't let the discussion here regarding API, structures, and messages scare you away. jsNoteBook makes it easy to extend NoteBook functionality in dBL application code without needing to know how to work with structures or talk to any API. jsNoteBook bridges the gap between the application dBL code and the NoteBook window via the windows API. Through a few added methods, the advanced functionality of the jsNoteBook class can be directly exploited using relatively simple dBL application code.

Because the jsNoteBook class is, in the most simple definition, a dBL 'wrapper' for the operating system's tab control window class, the most authoritative resource for information regarding tab control technology, operation, and reference can be found at MSDN online under Individual Control Reference. Also, be sure to search MSDN for other information and examples of using the tab control.

But most of all, be sure to read the remaining jsNoteBook documentation. And review the dBL sample forms included with the jsNoteBook package to become more familiar with how jsNoteBook can be used in dBL applications.