NS Basic/Desktop Enhancements

Jun 25, 2009

© NS BASIC Corporation. All rights reserved.


This is a release by release listing of all the changes to NS Basic/Desktop.

Contents


NS Basic/Desktop 4

4.0.1

  1. IDE: CheckBox.Alignment can no longer be set to Center.
  2. IDE: Error 438 when adding objects fixed.
  3. IDE: Error 438 when using GOTO picker in module fixed.
  4. IDE: Gradient buttons were sometimes blank.
  5. IDE: Opening a sample project closes project already open.
  6. IDE: Paste Gradient Button fixed.
  7. NSBCEPictureBox 1.3.1 included

4.0.0

  1. Embed pictures, sound and files as resources.
  2. Gradient Buttons give a slick look and feel to Apps.
  3. Automatic creation of device installers.
  4. Smaller executables - programs are up to 1/3 smaller than before.
  5. Files can now be embedded in the exe and extracted at runtime, permitting single file distributions. (see below)
  6. IDE: Loaded apps go on recent files list, not just saved ones.
  7. IDE: Alignment can now be set to center on some additional objects.
  8. IDE: Bitmaps can be saved as resources in the exe file.
  9. IDE: More properties now have pickers.
  10. IDE: Now uses XP theme.
  11. IDE: Resources can be added to Project Explorer.
  12. IDE: Updated to XP theme.
  13. IDE: Error 425 when closing project fixed.
  14. IDE: ComboBox.Style=2 now works properly.
  15. IDE: Error 13 when using AppTitle fixed.
  16. IDE: Importing an NS Basic/CE project uses a properly sized form.
  17. NSCEPictureBox: ResourceBitmapIDstr added. (see below)
  18. NSCEPictureBox: Upgraded to Version 1.3.
  19. Runtime: Apps created now use XP theme.
  20. Runtime: New function: GetResource. See below.
  21. Runtime: PlaySound can now play sounds that are saved as resources.
  22. Runtime: PictureBox can now display bitmaps that are saved as resources.
  23. Sample added: GradientButton
  24. Sample added: Resources
  25. Sample added: NetStreams (replacement for Microsoft's Winsock)
  26. Samples: reorganized and cleaned up.
  27. Samples added to File menu.
  28. Help: Tutorials added to Help menu.
  29. Help: Command overview added to Language Reference
  30. Tech Note added: 41 Using Adobe Flash with NS Basic.
  31. Installers: SQLite3 is now included - SQLite2 is not.
  32. Installation: Installer now uses Inno Setup.
  33. Installation: Samples are in \My Documents\NSBasic Samples\Desktop

Documentation Changes for Version 4.0.0

  1. Gradient buttons: This new style of button gives apps a modern look and feel. The background color of the button transitions smoothly from one color to another, either vertically or horizontally. It is also useful as a background image. Complete details are in the Language Reference. See the "Gradient" sample as well.

  2. Embedding Files: You can now embed files in the main exe file, to be extracted and used and runtime. This results in a number of interesting possibilities:
    • Controls can be extracted, save as files and registered at runtime - simplifying or even eliminating the need for an installer.
    • Bitmaps can saved in the exe and displayed using a PictureBox - no separate file needs to be installed.
    • Sounds can be embedded in the exe and played, again without needing to install a separate file.
    • Store data for your program in the exe for use during runtime.
    To embed a file, add it as a Resource to the project. The GetResource function can be used to extract it, save it or register it.
  3. GetResource(Name[, [filename, register]])

    This powerful function allows you to do a number of things to resources contained in your app. The resources must already exist in your app: they must first be added in the IDE as Resources of type 'File' in the Project Explorer of the IDE.

    Use this function to:

    • Read the contents of a resource into a string in your program.
    • Copy the contents of a resource into a file.
    • Register and unregister controls.
    • Install an ActiveX control and register it.

    Complete documentation can be found in the Language Reference. See the "Resources" sample for more info.

  4. NSCEPictureBox.ResourceBitmapIDstr: This property gives the name of a bitmap (.bmp) resource to be displayed in a picturebox. The .ResourceFile property must also be set with the name of the file (an exe or dll) that contains the bitmap resource. It is similar to the .ResourceBitmapID resource, which only takes a resource number. The name must be in upper case.

    Example:

    myPicturebox.ResourceBitmapIDstr = "GRADIENTBUTTON"
    	
    See the "Resources" sample for more info.

3.0.4

  1. Code Window: Error 5 in Ctl F fixed.
  2. Code Window: Go To line number should always go to correct line now.
  3. IDE: Change tab order - fixed error 438 on exiting.
  4. Missing objects on open project in Vista fixed.

3.0.3

  1. Code Window: Go To line now goes to correct line
  2. Error 91 when changing bounds of ComboBox fixed.
  3. Hebrew version of IDE added.
  4. Intermittant Error 429 messages after installation fixed.
  5. New Sample: ProgressBar
  6. New Sample: SpreadSheet
  7. Samples: Undefined variable messages fixed

3.0.2

  1. IDE: End Select is properly colored.
  2. IDE: Limit of 32k in TextBox.MaxLength removed - will now be limited by Windows at runtime.
  3. IDE: Background grid on Design Screen draws properly on Vista.
  4. Compiler: Encoding of special characters fixed.

3.0.1

  1. ShowOkButton statement ignored (for NS Basic/Desktop compatibility).
  2. Runtime: A SetFocus in an OptionButton's click routine will work properly.
  3. IDE: The last item on a menu can now be deleted.
  4. IDE: Make on the File menu now works.
  5. IDE: Error when setting invalid value to Appearance property fixed.
  6. ActiveX Control Manager: Copy to Clipboard now works reliably.

3.0.0

  1. Windows Vista support added.
  2. ActiveX Controls: Added NSBComDlg.dll control. See Tech Note 4.
  3. ActiveX Controls: Added NSBControls.dll control, with ListView and ImageList. See Tech Notes 11 and 12.
  4. ActiveX Controls: Added SerialTools control. See Tech Note 5.
  5. ActiveX Controls: Added SQLite 3 Control, replaces SQLite 2. See Tech Note 15.
  6. ActiveX Controls: Control Manager - Entries were getting lost if there were too many.
  7. ActiveX Controls: Control Manager now shows all coClasses of controls.
  8. ActiveX Controls: New controls are in the default list in ActiveX Control Manager.
  9. ActiveX Controls: ToolBox now shows new controls.
  10. Code Window: Error 438 when using 'Goto' popup on a new module fixed.
  11. Code Window: Error when 'Goto' to Main on new project fixed.
  12. Code Window: Hints show up on functions
  13. Code Window: Lines ending in _ are syntax checked properly.
  14. Code Window: Loop is syntax checked properly.
  15. Code Window: More keywords and constants now colored.
  16. Code Window: TextBox.SelStart, SelLength and SelText show up in hints.
  17. DECLARE: now supports underbar character in function names.
  18. DECLARE: SUBs work properly (only FUNCs did before)
  19. Documenation: Language Reference updated.
  20. Documentation: CHAIN statement removed. Use ShellExecute instead.
  21. Documentation: Handbook updated extensively.
  22. Documentation: Help file format changed from hlp to chm format.
  23. Documentation: New Tech Note 19 on Regular Expressions.
  24. Documentation: New Tech Note 29 on Classes.
  25. Documentation: New Tech Notes on SerialTools (05), SQLite3 (15), NSBComDlg (04), ListView (12), ImageList (11).
  26. Documentation: ReadMe is now on the Help menu - people might read it!
  27. Documentation: Tech Notes renumbered.
  28. IDE: Changes are saved after each replace.
  29. IDE: Code Window: Intrinsic controls now show hints for methods as well as properties.
  30. IDE: Form Caption can now be edited in Properties Window.
  31. IDE: If you click on a scrollbar, the code window for its _Change is opened.
  32. IDE: Loading .txt files of NS Basic/Desktop projects improved.
  33. IDE: Problem with opening projects on network drives fixed.
  34. IDE: PropertiesList control updated - more properties show for ActiveX objects.
  35. IDE: Save will always save as .nsd, unless you use Save as TXT option.
  36. IDE: Scrrun.dll is no longer used - less complaints from anti-virus software.
  37. IDE: When opening a .txt file, existing .nsp with same name is ignored.
  38. IDE: Error 6 when opening starting big files fixed.
  39. Language enhanced with Regular Expressions.
  40. Runtime: Label_Click event now works
  41. Runtime: Max number of args on a DECLARE increased from 10 to 20.
  42. Runtime: Textbox_Change event is fired when textbox value changed by code.
  43. Runtime: Textbox_Click event now works
  44. Samples: Serial samples updated.
  45. Tools Menu: now accepts links in \program files\nsbasic\desktop\tools
Documentation Changes for Version 3.0.0
  1. New Controls: We have added a number of new controls to this release. The new controls have additional features and fix bugs, while supporting as much of the same feature set as possible.
  2. IDE: Errors in Form_Load are now handled properly. Until now, if you had an error in a Form_Load routine, the routine would exit silently and continue execution. As a result, applications that seemed to be working may now raise errors which are finally being reported properly.

NS Basic/Desktop 2

2.5.2

  1. IDE: Subscript error on Find fixed.
  2. IDE: Saving a module to a different folder no longer changes the project folder
  3. IDE: Module names are saved using relative paths.
  4. IDE: Doing a Replace now marks code as dirty so it will be saved.
  5. IDE: Setting the module order of a project without modules no longer gets error.
  6. IDE: Missing properties for Frame and TextBox added to Properties Window.
  7. IDE: AppTitle assignment now done at correct point.
  8. IDE: Control V for undo shortcut added
  9. IDE: Icon property now uses a file browser to select.
  10. Code Window: Syntax is checked as lines are entered.
  11. Code Window: Go To Line... now goes to the correct line in the main module
  12. Code Window: CodeMax control updated to 4.0.0.15

2.5.1

  1. Foo.txt file after running the program eliminated.
  2. Loss of uppercase in text strings fixed.
  3. Text1.Password=True fixed.

2.5.0

  1. Support added for Code Modules (See below)
  2. Declare statement added (See Tech Note 37)
  3. New Global: AllowDebug (see below)
  4. Multiple Windows are now supported (see below)
  5. Resizable Windows are now supported (see below)
  6. New Tech Note: 37 DECLARE: Calling API functions
  7. New Control: NSBWin32 replaces MGCEWin32
  8. New Samples: Declare.nsb and Declare2.nsb
  9. New Sample: SpeakMerlin demonstrates speech API
  10. New Sample: Ink demonstrates using Ink on Tablet and UMPC.
  11. New property: Output.HWnd
  12. AddObject: Invisible objects can be created (see below)
  13. NSCEPictureBox control updated
  14. Properties Window: Vertical splitter is now movable
  15. Properties Window: A variety of Error 380 and 13 messages fixed.
  16. Properties Window: Changing width of form no longer gets Error 91.
  17. Properties Window: Interior lines show in window.
  18. Properties Window: Error 91 when editing properties on closed window.
  19. Properties Window: New objects default to default height of 21 pixels.
  20. IDE: Format...Center in form work properly on custom forms.
  21. IDE: Menu Editor: Invalid Property Array Index error fixed.
  22. IDE: "Main" is no longer allowed as a form name
  23. IDE: Quotes (") in title, caption and text fields are now OK.
  24. IDE: Duplicate object names are not allowed.
  25. IDE: Delete too often in menu editor does not cause an error.
  26. IDE: PictureBox can be copied and pasted.
  27. IDE: Changing tab order redraws window display
  28. IDE: Changing width of form to 200 no longer gets Error 91.
  29. IDE: Opening a non existing file on recent list does not get an error.
  30. IDE: Opening of some large projects made much faster.
  31. IDE: Code for ComboBox.IntegralHeight was not generating properly.
  32. IDE: Generated boolean values were sometimes incorrect. See below.
  33. IDE: Recent files on a drive that is not longer mounted are now ignored.
  34. IDE: Subscript error on Find fixed.
  35. Code Window: Bug in WEND coloring fixed.
  36. Code Window: Bug in If/Then coloring fixed.
  37. Code Window: Keywords within parentheses are now colored properly.
  38. Code Window: ShowOkButton now colors properly
  39. Code Window: SubColor=1 will no longer cause "End Sub" to appear.
  40. Code Window: Goto on a new code window no longer gets error.
  41. Code Window: Backspace at end of code window longer gets error.
  42. Code Window: Bugs fixed in Find/Replace.
  43. Code Window: Error 5 on Go... fixed.
  44. Runtime: Problem with RemoveItem fixed.
  45. Runtime: Problem with ListIndex fixed.
  46. Runtime: Problem with ListBox events fixed.
  47. Runtime: Problem with setting date property in Time object fixed.
Documentation Changes for Version 2.5.0
  1. Invisible Objects: To create an object is is initially invisible, add Visible=0 in the AddObject statement. Example:
    AddObject "CommandButton::visible=0", "cb1", 10, 10, 100, 24
  2. A module is a file containing code that is to be included in your program when it is run. It can be a .txt, .bas or .cod file. Modules let you separate your code into more manageable chunks. You can also use module to reuse the same code in more than one project: a module can belong to more than one project.

    To add a module to a project, choose either Add Module from the Project menu or right click on the project in the Project Explorer. Modules are added to your program in the order they appear in the Project Explorer. If you want to change the order in which they are compiled, right click on the project in the Project Explorer.

    Internally, the modules are added to the project code in the order specificed before compilation. You can put DIM statements, subroutines, functions and code into a module. If you would like to see the actual code that will be compiled, save the project as a txt file and open it in NotePad.

    Running a program with modules is the same as one without. If you choose Start under the Run menu, a .nsd file will be produced that combines your main project code with all your modules.

  3. AllowDebug: This new global variable can be set to True or False. It controls the operation of the program when the Microsoft Script Debugger is installed. If set to False, the debugger will not be invoked if there is an error. Use this feature to keep your code secure in a runtime setting. The default value is false.
  4. Multiple Windows: It is now possible to create and use multiple windows within NSBasic. Example:
    AddObject "Window", "win1", -1, -1, -1, -1
    All windows created are children of the main window (named "Output"). The Output window must persist for the duration of the program. Any number of windows may be created below the Output window. The windows will behave like the Output window and can be moved anywhere on the screen, even behind the Output window.

    Always use the six-argument form of AddObject to create a subwindow. Using the seven-argument form to create a window underneath a window is not recommended.

    Everything that works with the Output window works with subwindows, with the exception that if the output window is closed, the subwindows will go away as well. The ParentHwnd property of a subwindow returns the Hwnd of the Output window.

    All subwindows are initially invisible when created. This allows a window to be populated with forms and other controls with a minimum of flashing. When a window is populated, use the Show method or the Visible property to show it.

    The x, y, width, and height are given in screen pixel coordinates. If any parameter is -1, the Windows default will be used.

  5. Resizeable Windows: Previous versions of NSBasic Desktop were designed for a fixed size window. All forms within a window had to be of the same size. This has changed in the new version.

    A window may now have several forms of different sizes. Only one of the forms should be visible at one time. You can use the show method or the visible property to show and hide forms.

    When you show or hide a form, or you set the width or height of the single visible form, the output window will automatically resize to fit the single visible form.

    Example:

    addobject "Form", "fm1", 0, 0, 400, 300
    addobject "Form", "fm2", 0, 0, 600, 400
    fm2.visible = false
    fm1.caption = "Form 1"
    fm2.caption = "Form 2"
    
    addobject "CommandButton", "cb1", 10, 10, 70, 17, fm1
    cb1.text = "Show form 2"
    
    addobject "CommandButton", "cb2", 10, 10, 70, 17, fm2
    cb2.text = "Show form 1"
    
    sub cb1_click
        fm1.hide
        fm2.show
    end sub
    
    sub cb2_click
        fm2.hide
        fm1.show
    end sub
    You can also change the size of a form by setting its width or height properties. This will also cause the window to resize if the form is the one visible form:

    Example:

    addobject "Form", "fm1", 0, 0, 400, 300
    addobject "CommandButton", "cb1", 10, 10, 70, 17, fm1
    cb1.text = "Make it big"
    addobject "commandButton", "cb2", 10, 30, 70, 17, fm1
    cb2.text = "Make it small"
    
    sub cb1_click
        fm1.width = 600
        fm1.height = 400
    end sub
    
    sub cb2_click
        fm1.width = 400
        fm1.height = 300
    end sub
    You can also have windows that can be resized by the user by dragging the corner or edges. A form has four properties: MinWidth, MaxWidth, MinHeight, and MaxHeight. You can set these properties to provide the minimum and maximum width and height of the form for dragging.

    If you set the minimum width, you must also set the maximum width. The same goes for height. When a window is dragged, it will automatically resize the only visible form. Your program will get a Resize message for the form.

    Example:

    addobject "Form", "fm1", 0, 0, 400, 300
    fm1.minWidth = 200
    fm1.maxWidth = 800
    addobject "CommandButton", "b1", 10, 10, 380, 20, fm1
    b1.text="A resized button"
    
    sub fm1_Resize
        b1.width = fm1.width - 20
    end sub
    There are some caveats with resized windows. When a window is expanded, Windows only draws the exposed portion of the window. This is good, because it minimizes flicker. However, if there is a feature on the main form that needs to be redrawn when expanded, such as when the form has a border or an image, the entire form needs to be redrawn.

    This must be done in your Resize subroutine. Simply set a property that would cause a redraw.

    Example:

    addobject "Form", "fm1", 0, 0, 400, 300
    fm1.caption = "Form 1"
    fm1.borderStyle = 1
    fm1.minWidth = 200
    fm1.maxWidth = 800
    
    sub fm1_Resize
        fm1.backColor = fm1.backColor
    end sub
    This can cause undesirable flashing when expanding or shrinking a window, but it works. It's best, however, not to have any elements that need to be erased on most resizable windows.
  6. The Output object in has a new read-only propery: HWnd. This returns the parent window of the Output window. It is useful for many system routines that require a window. The following example displays a popup menu on NSBasic CE, using the Output.HWnd property.

    AddObject "CommandButton", "cb1", 10, 10, 100, 20
    cb1.caption = "Menu"
    
    Declare "Function CreatePopupMenu Lib ""Coredll"" () As Long"
    
    Declare "Function AppendMenu Lib ""Coredll"" Alias "AppendMenuW"" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String) As Long"
    
    Declare "Function TrackPopupMenuEx Lib ""Coredll"" (ByBal hMenu As Long, ByVal un As Lont, ByVal n1 As Long, ByVal n2 As Long, ByVal hWnd As Long,lpTPMParams As Long) As Long"
    
    Const TPM_RETURNCMD = $H100&
    Const MF_ENABLED = &H0&
    Const MF_STRING = &H0&
    Const MF_GRAYED = &H1&
    Const MF_SEPARATOR = &H800&
    
    Sub cb1_Click
        Dim ret
        Dim hMenu
    
        hMenu = CreatePopupMenu
        AppendMenu hMenu, MF_ENABLED Or MF_STRING, 1, "Option 1"
        AppendMenu hMenu, MF_ENABLED Or MF_STRING, 2, "Option 2"
        AppendMenu hMenu, MF_ENABLED Or MF_STRING, 3, "Option 3"
        AppendMenu hMenu, MF_GRAYED Or MF_SEPARATOR, 4, ""
        AppendMenu hMenu, MF_ENABLED Or MF_STRING, 5, "Fuhgettaboutit"
    
        ret = ShowPopupMenu(0, 0)
        MsgBox ret
    End Sub
    You must use the HWnd property because under Windows Mobile 5, attempting to display a popup menu using Output.Hwnd causes undesirable results. This appears to be unique to Mobile 5 and does not occur on earlier devices.

    You can also present popup windows under NSBasic Desktop by using the Output.Hwnd property, provided that the appropriate core DLL is installed on the system.

    If you are writing code that is to run under both NSBasic CE and NSBasic Desktop, you can take advantage of the fact that Output.HWnd is always 0 under NSBasic Desktop.

    1. Check the value of Output.HWnd.
    2. If it is zero, the program is running on NS Basic/Desktop. Use Output.ParentHwnd.
    3. If it is not zero, the program is running on a CE device. Use Output.ParentHWnd.

    2.1.0

    1. SQLite is now built into the standard NS Basic/Desktop installer. There are no extra steps that are needed for development and testing.
    2. NetStreams, a Tcp/IP control, is also installed with NS Basic/Desktop.

    2.0.1

    1. New Sample: SQLite
    2. New Tech Note 11: Using SQLite
    3. New Tech Note 11a: SQLite Reference
    4. Events sink properly from Franson Serial Control and other controls
    5. Make exe on the File menu is no longer greyed out

    2.0.0

    1. Compile: Exe size cut almost in half for larger programs.
    2. Compile: Programs can be any size - no more 1 meg limit.
    3. Compile: Project properties now are in Windows Get Properties for the exe.
    4. Compile: Code is stripped to make smaller executables
    5. Tech Notes: New Tech note on using SQLite.
    6. Tech Notes: New Tech note on NS Basic's NSCEPicturebox.
    7. Runtime: PlaySound statement added. See Language Reference.
    8. Runtime: ExecuteGlobal statement added. See Language Reference.
    9. Runtime: ActiveX internal interface improved - many more ActiveX controls will work
    10. Runtime: AddObject now accepts a license key. See Docs below.
    11. Runtime: AddObject enhanced to allow properties to be set on instantiation. See Docs below.
    12. Runtime: Font support improved in objects
    13. Runtime: Fonts appear properly
    14. Runtime: ComboBox and ListBox: ItemData property added
    15. Runtime: If Caption property is blank on a frame or Label, no title will appear.
    16. Runtime: Label.BorderStyle=1 now shows a 3D label
    17. Runtime: ComboBox.Click, Gotfocus and LostFocus events now happen.
    18. Runtime: TextBox.GotFocus and TextBox.LostFocus events now happen.
    19. Runtime: Output_close event sent on application close
    20. Runtime: Bye now ends execution immediately
    21. Runtime: Formless apps now terminate properly.
    22. Runtime: DoEvents comes back right away if no events pending
    23. Runtime: Textbox.MaxLength works
    24. Runtime: AddObject of an non existing object now results in null object, not an error.
    25. Runtime:. ListBox object now has Scrollbars property. Scrollbars appear only if needed.
    26. Runtime: Listbox.List(Listbox.ListIndex used to return 1 byte too many.
    27. Runtime: Form1.Timer works properly
    28. Runtime: ListBox.IntegralHeight = False no longer resizes the height of the box.
    29. Runtime: New global constant: AppHInstance
    30. Runtime: New object "Window". Use to create a separate active Window. See Docs below.
    31. Runtime: Formless apps no longer flash outline of a window.
    32. Intrinisic Objects: Appearance property added; 0=Flat, 1=3D
    33. NSCEPictureBox is now included (replaces S309PictureBox)
    34. NSCEPictureBox: DrawText positions properly on multiple calls
    35. NSCEPictureBox: line drawing works properly.
    36. NSCEPictureBox.BorderStyle works properly.
    37. NSCEPictureBox: DrawText uses proper .FontSize
    38. NSCEPictureBox. Limit to number of points in SetPointArray removed.
    39. NSCEPictureBox: "SlowPath" message removed
    40. NSCEPictureBox: Refresh does the same thing as RefreshX.
    41. NSCEPictureBox: MouseUp and MouseDown events now work on desktop
    42. NSCEPictureBox: Objects get now created in same order on desktop and Windows CE.
    43. NSCEPIctureBox: Transparency now works the same on desktop and Windows CE.
    44. NSCEPictureBox: ScaleModes 0-7 now supported.
    45. IDE: Code sense on objects
    46. IDE: Code Hints
    47. IDE: Right menu in Code Window enhanced with new features
    48. IDE: Block comment/uncomment
    49. IDE: Lines now appear in code window separating funcs and subs
    50. IDE: App info now gets loaded properly
    51. IDE: Japanese support improved.
    52. IDE: Icon and project data saved in new .NSP file
    53. IDE: Moving the left bar of the Project Explorer too far right fixed.
    54. IDE: Moving the bar between Explorer and Properties too far down fixed.
    55. IDE: Error 5 on (Go to...) fixed.
    56. IDE: Double click on a control in Explorer no longer causes Error 438
    57. IDE: Double find and replace no longer causes an error
    58. IDE: Changing Project Properties now marks project as dirty.
    59. IDE: Save before Run setting now shows properly in Settings.
    60. IDE: Form object now shows properties in code window (instead of Error 380)
    61. IDE: Compile from command line
    62. Incorrect filename in initial Recent.dat corrected.
    63. Samples: MakeWav.nsd creates a wav file in code
    64. Samples: FileSystem.nsd reads and writes simple files

    2.0.0 Documentation

    1. AddObject now accepts a license number for controls which require it. Syntax is AddObject "objectID:license",...
    2. AddObject now lets you set properties immediately on creation of the object. This is a bit quicker than doing it in code, while also allowing properties to be set before the control displays for the first time. For example,
           AddObject "TextBox::Visible=0:Text=""My Text Box"" ","tbMyTextBox",10,10,100,100
      
      Use strings and constants as values; True and False are not recognised.
    3. The Form object is an instance of an intrinisic PictureBox object, and has all the same properties, methods and events. It is the base object of a form: all the objects on a form are children of it. See "PictureBox" in the Language Reference for more information.
    4. The Window object creates a separate window that is not a child is the current window. It has the same properties and methods as an Output window. It works exactly like the main window, except by default, if there is no _Close subroutine, it is just hidden. Can be shown later, and it doesn't destroy its subobjects. It is an error to have the AddObject have a seventh argument. A subwindow is always added to the main window. If X or Y are < 0, the system uses the default X and Y. The width and height should be the same as the first form added, if a form will be added. If not, the window will snap to the size of the first form, just as in the output window.
      addobject "Window", "win", 10, 10, 100, 100
      addobject "Form", "fm", 0, 0, 200, 200, win
      
    5. Intrinsic controls have both BorderStyle and Appearance properties. Together, they determine how the border of the control will look. A BorderStyle of 0 means no border, while a BorderStyle of 1 means a single line. An Appearance of 0 is a flat border, while an Appearance of 1 adds a 3D effect.