# The MIT License (MIT) # # Copyright (C) 2026 Scott Duensing # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. .topic ctrl.common.props .title Common Properties, Events, and Methods .toc 0 Common Properties, Events, and Methods .default .index Common Properties .index Common Events .index Common Methods .index Properties .index Events .index Methods .index DragMode .index DragIcon .index Drag .index DragDrop .index DragOver .index Drag and Drop .index Default Property .index Default Properties .h1 Common Properties, Events, and Methods Every control in DVX BASIC inherits a set of common properties, events, and methods. These are handled by the form runtime before dispatching to widget-specific interface descriptors. .h2 Common Properties .table Property Type R/W Description ---------- ------- --- ------------------------------------------- Name String R The control's name (e.g. "Command1"). Read-only at runtime. Left Integer R/W X position in pixels relative to the parent container. Top Integer R/W Y position in pixels relative to the parent container. Width Integer R/W Current width in pixels. Setting this changes the minimum width constraint. Height Integer R/W Current height in pixels. Setting this changes the minimum height constraint. MinWidth Integer R/W Minimum width for layout. Setting it works like setting Width; reading it returns the minimum that was set. MinHeight Integer R/W Minimum height for layout. Setting it works like setting Height; reading it returns the minimum that was set. MaxWidth Integer R/W Maximum width cap (0 = no limit, stretch to fill). MaxHeight Integer R/W Maximum height cap (0 = no limit, stretch to fill). Weight Integer R/W Layout weight. 0 = fixed size, >0 = share extra space proportionally. Visible Boolean R/W Whether the control is visible. Enabled Boolean R/W Whether the control accepts user input. Disabling a container (Frame, VBox, HBox...) also blocks mouse and keyboard input to every control inside it. BackColor Long R/W Background color as a 24-bit RGB value packed in a Long (use the RGB function to construct). ForeColor Long R/W Foreground (text) color as a 24-bit RGB value packed in a Long (use the RGB function to construct). TabIndex Integer R Accepted for VB compatibility but ignored. DVX has no tab order. ToolTipText String R/W Tooltip text shown after the mouse hovers over the control. Empty string or unset = no tooltip. HelpTopic String R/W Help topic opened by F1 while the control has the focus. Empty = the form's HelpTopic. F1 uses the project's help file. DragMode Integer R/W vbManual (0, the default): the program starts a drag with the Drag method. vbAutomatic (1): pressing the left mouse button on the control starts a drag. See Drag and Drop below. DragIcon Picture R/W Picture shown under the mouse while the control is dragged: a picture file name (BMP, PNG, JPEG or GIF) or a Picture object from LOADPICTURE (Set works too). Reading it gives a Picture object, which stands for the file name where a value is needed. Empty = a dotted outline the size of the control. .endtable Size properties (Width, Height and the Min/Max sizes) are limited to 0..32767. .h2 Default Properties As in Visual Basic, a control's name used where a value is needed means its default property: Text1 = "hi" sets Text1.Text, Print Label1 prints Label1.Caption, and If Check1 Then reads Check1.Value. Where an object is expected -- SET, Is, an object parameter, Collection.Add, TypeOf -- the name still means the control itself. .table Control Default property ------- ---------------- TextBox, TextArea, ComboBox, DropDown, ListBox, DBGrid Text Label, Frame, Data Caption CheckBox, OptionButton, CommandButton Value HScrollBar, SpinButton, ProgressBar Value Image, ImageButton, PictureBox Picture Timer Enabled .endtable Other controls, forms and menu items have no default property: using one as a value raises error 13. .h2 Common Events These events are wired on every control loaded from a .frm file. Controls created dynamically at runtime via code only receive Click, DblClick, Change, GotFocus, and LostFocus; the keyboard, mouse, and scroll events below require the control to be defined in the .frm file. .table Event Parameters Description --------- ------------------------------------------- ------------------------------------------- Click (none) Fires when the control is clicked. DblClick (none) Fires when the control is double-clicked. Change (none) Fires when the control's value or text changes. GotFocus (none) Fires when the control receives keyboard focus. LostFocus (none) Fires when the control loses keyboard focus. KeyPress KeyAscii As Integer Fires when a printable key is pressed. KeyAscii is the ASCII code. KeyDown KeyCode As Integer, Shift As Integer Fires when any key is pressed down. KeyCode is the scan code; Shift indicates modifier keys. KeyUp KeyCode As Integer, Shift As Integer Fires when a key is released. MouseDown Button As Integer, X As Integer, Y As Integer Fires when a mouse button is pressed over the control. MouseUp Button As Integer, X As Integer, Y As Integer Fires when a mouse button is released over the control. MouseMove Button As Integer, X As Integer, Y As Integer Fires when the mouse moves over the control. Scroll Delta As Integer Fires when the control is scrolled (mouse wheel or scrollbar). DragDrop Source As Control, X As Integer, Y As Integer Fires when a dragged control is dropped on this control. Source is the dragged control; X and Y are where, in this control. DragOver Source As Control, X As Integer, Y As Integer, State As Integer Fires while a dragged control moves over this control. State is vbEnter (0) when it comes onto the control, vbOver (2) as it moves across, vbLeave (1) when it goes off. .endtable .h2 Common Methods .table Method Parameters Description -------- ---------- ------------------------------------------- SetFocus (none) Gives keyboard focus to this control. Refresh (none) Forces the control to repaint. Drag [Action] Starts or ends dragging this control: vbBeginDrag (1, the default) starts, vbEndDrag (2) drops it where the mouse is, 0 cancels the drag without a drop. .endtable .h2 Drag and Drop Any control can be dragged onto another control or onto a form, as in Visual Basic. While a control is dragged, a dotted outline of it (or its DragIcon picture) follows the mouse, and the controls and forms it passes over get DragOver events. Releasing the mouse button drops it: the control or form under the mouse gets a DragDrop event, with the dragged control as Source. Pressing Esc cancels the drag. The mouse pointer shows where a drop can land: over a control or form that has a DragDrop event procedure it is the usual arrow; over one without, and outside the program's forms, it is the "no drop" sign (a circle with a line through it). The outline or DragIcon picture still follows the mouse either way. With DragMode set to vbAutomatic, pressing the left mouse button on the control starts the drag, and the control gets no Click, MouseDown or MouseUp from the left button. With DragMode vbManual, start the drag yourself, usually in MouseDown. A drag started while the mouse button is up ends at the next click. During a drag no mouse events other than DragOver and DragDrop are raised. Drop targets only react: nothing is moved or copied for you. Use Source in DragDrop to decide what to do, for example read its Name or Caption, or check what kind of control it is with TypeOf Source Is TextBox (see Operators). Note that vbCancel is the MsgBox Cancel value (2), which as a Drag action means vbEndDrag; cancel a drag with Drag 0. DragIcon takes a file name or a picture loaded with LOADPICTURE: Set Label1.DragIcon = LoadPicture("drag.bmp"). A missing file or one that is not a picture raises its error at LOADPICTURE; a file name that cannot be read when the drag starts shows the outline instead. .code ' Label1 has DragMode = 1 (vbAutomatic) in the form designer. Sub List1_DragOver(Source As Control, X As Integer, Y As Integer, State As Integer) If State = vbEnter Then Label2.Caption = "Drop to add " & Source.Caption End Sub Sub List1_DragDrop(Source As Control, X As Integer, Y As Integer) List1.AddItem Source.Caption End Sub ' DragMode vbManual: the button starts its own drag, left button only. Sub Command1_MouseDown(Button As Integer, X As Integer, Y As Integer) If Button = 1 Then Command1.Drag vbBeginDrag End Sub .endcode .link ctrl.form Form .link ctrl.databinding Data Binding .link ctrl.frm FRM File Format .topic ctrl.drawing .title Drawing on Forms and PictureBoxes .toc 1 Drawing on Forms and PictureBoxes .index Drawing Methods .index Cls .index PSet method .index Line method .index Circle method .index Point method .index Print method .index PaintPicture .index Raster Operations .index vbSrcCopy .index TextWidth .index TextHeight .index CurrentX .index CurrentY .index DrawWidth .index FillColor .index FillStyle .index AutoRedraw .index Paint event .index Scale .index ScaleMode .index ScaleX .index ScaleY .index vbHimetric .index ScaleLeft .index ScaleTop .index ScaleWidth .index ScaleHeight .h1 Drawing on Forms and PictureBoxes Forms and PictureBoxes have Visual Basic's drawing methods. They draw with the same code as the QBasic graphics statements (see Console and Graphics in the language reference), in pixels unless ScaleMode or Scale says otherwise, with colours as Visual Basic RGB values, &HBBGGRR (RGB(255, 0, 0) or &HFF is red). A PictureBox draws on its picture; a form gets a drawing area the size of its window the first time it draws, placed with its controls like a PictureBox (so draw on a form that has no controls, or use a PictureBox beside them). Drawings stay until they are drawn over or cleared. In a form's own code, write Me.Line, Me.Circle and so on: Line, Circle and PSet without an object are the QBasic graphics statements (they draw on the program's screen), and Print without an object is the PRINT statement. .h2 Drawing Methods .table Method Description ------ ----------- Cls Clears the drawing to BackColor; CurrentX and CurrentY go to 0. PSet [Step](x, y) [, color] Draws a point (DrawWidth wide). Line [[Step](x1, y1)]-[Step](x2, y2) [, color] [, B | BF] Draws a line, a box (B) or a filled box (BF). A box without F is filled with FillColor when FillStyle is 0. Circle [Step](x, y), radius [, color [, start [, end [, aspect]]]] Draws a circle, ellipse or arc, filled with FillColor when FillStyle is 0 (full circles). Point(x, y) The colour of a pixel, -1 outside the picture. Print items Writes text at CurrentX, CurrentY in ForeColor, with PRINT's ; , SPC and TAB; ends by moving to the next line unless the last item is followed by ; or ,. PaintPicture picture, x, y [, width, height [, srcX, srcY, srcWidth, srcHeight [, opcode]]] Copies a picture, stretched to width x height: an image file (BMP, PNG, JPEG or GIF), a picture from LOADPICTURE, or a PictureBox given by its name as a string or by a Control variable. opcode combines each pixel with the one already there (see Raster Operations). Scale [(x1, y1)-(x2, y2)] Gives the drawing coordinates of its own: (x1, y1) is the top-left corner and (x2, y2) the bottom-right one (y2 below y1 makes y go up). Scale alone goes back to pixels. ScaleX(width [, fromScale [, toScale]]) A width in fromScale converted to toScale (see Scales). ScaleY(height [, fromScale [, toScale]]) A height in fromScale converted to toScale. TextWidth(text) Width of the text in the scale's units. TextHeight(text) Height of a line of text in the scale's units. .endtable Without a colour, drawing uses ForeColor. Step makes a point relative to CurrentX, CurrentY, which every drawing method leaves at its last point. Coordinates, radii, CurrentX and CurrentY and PaintPicture's rectangles are in the scale's units (a radius in its horizontal units); DrawWidth is always in pixels. A colour or angle out of range stops the program with an error. .h2 Raster Operations PaintPicture's opcode says how each copied pixel is combined with the pixel already there (the destination) and with the FillColor (the pattern), as in Visual Basic. Leaving it out copies the picture (vbSrcCopy). .table Constant Value Result -------- ----- ------ vbSrcCopy &HCC0020 The picture vbSrcPaint &HEE0086 Picture OR destination vbSrcAnd &H8800C6 Picture AND destination vbSrcInvert &H660046 Picture XOR destination vbSrcErase &H440328 Picture AND NOT destination vbNotSrcCopy &H330008 NOT picture vbNotSrcErase &H1100A6 NOT (picture OR destination) vbMergeCopy &HC000CA Picture AND pattern vbMergePaint &HBB0226 NOT picture OR destination vbPatCopy &HF00021 The pattern vbPatPaint &HFB0A09 Pattern OR NOT picture OR destination vbPatInvert &H5A0049 Pattern XOR destination vbDstInvert &H550009 NOT destination .endtable Any of the 256 raster operations of Windows can be given by its number; the bits work on the pixel values, so with fewer than 32 bits a pixel the results follow the display's colour format. .code Picture1.PaintPicture Picture2, 0, 0, 32, 32, 0, 0, 32, 32, vbSrcInvert ' XOR the picture in Picture1.PaintPicture Picture2, 0, 0, 32, 32, 0, 0, 32, 32, vbSrcInvert ' and out again .endcode .h2 Scales ScaleMode picks the units: 0 user (set by Scale or the Scale properties), 1 twips (1440 an inch, 15 a pixel), 2 points (72 an inch), 3 pixels, 4 characters (120 twips across, 240 down), 5 inches, 6 millimetres, 7 centimetres. Unlike Visual Basic, whose default is twips, DVX starts every form and PictureBox in pixels (ScaleMode 3), and Scale without arguments goes back to pixels. Setting ScaleLeft, ScaleTop, ScaleWidth or ScaleHeight makes a user scale from the current one; ScaleWidth and ScaleHeight may not be 0. With a user scale the units stay fixed to the picture's edges when it is resized; other scale modes keep their unit size. The constants vbUser (0), vbTwips (1), vbPoints (2), vbPixels (3), vbCharacters (4), vbInches (5), vbMillimeters (6) and vbCentimeters (7) name the scale modes. The units assume a standard display of 96 pixels an inch (15 twips a pixel), whatever the screen really is, so an inch is always 96 pixels. ScaleX and ScaleY convert a width or a height from one scale to another, as in Visual Basic: fromScale is the scale the value is in, vbHimetric (8, hundredths of a millimetre, the unit of a Picture's Width and Height) when it is left out; toScale the scale wanted, the object's ScaleMode when left out. vbUser means the object's current scale. Visual Basic's vbContainerPosition and vbContainerSize are not available; any other scale number stops the program with an error. .code Picture1.Scale (0, 100)-(100, 0) ' 0..100 across, y going up Picture1.Line (0, 0)-(100, 100), RGB(255, 0, 0) Picture1.ScaleMode = 7 ' centimetres Picture1.Circle (2, 2), 1 Dim pic As Object Set pic = LoadPicture("logo.bmp") w = Me.ScaleX(pic.Width, vbHimetric, vbPixels) ' the picture's width in pixels .endcode .h2 AutoRedraw and the Paint Event A form or PictureBox fires its Paint event when it is shown, when the form is resized, when a PictureBox changes size (its Width or Height set to a new value, or its Resize method) while its form is showing, and when the program calls its Refresh method, so a program can draw everything in Paint as in Visual Basic. Unlike Visual Basic, DVX keeps what was drawn even with AutoRedraw False (the default), so drawing outside Paint also stays on the screen. With AutoRedraw = True, Paint does not fire. A program that sets AutoRedraw = False itself gets Visual Basic's behaviour exactly: the drawing is cleared to BackColor before each Paint. .code Sub Picture1_Paint () Picture1.Circle (50, 50), 40, RGB(0, 128, 0) End Sub .endcode .h2 Drawing Properties .table Property Type Default Description -------- ---- ------- ----------- ForeColor Long &H000000 Colour of drawing and printing. BackColor Long &HFFFFFF Colour Cls clears to. Setting it clears the drawing to the new colour. CurrentX Single 0 Where the next drawing or printing starts. CurrentY Single 0 DrawWidth Integer 1 Pen width in pixels. FillStyle Integer 1 How boxes (B) and circles are filled with FillColor: 0 solid, 1 (the default) not at all, 2 horizontal lines, 3 vertical lines, 4 upward diagonals, 5 downward diagonals, 6 a cross hatch, 7 a diagonal cross hatch (the lines 8 pixels apart, the gaps left as they are). Other values are an error. BF fills solid in the line's colour. FillColor Long &H000000 Colour boxes and circles are filled with. AutoRedraw Boolean False True: no Paint events (see above). ScaleMode Integer 3 Units of the coordinates (see Scales). ScaleLeft Single 0 Coordinate of the left edge. ScaleTop Single 0 Coordinate of the top edge. ScaleWidth Single (size) Width of the drawing in the scale's units. ScaleHeight Single (size) Height of the drawing in the scale's units. .endtable .h2 Example .code Sub Command1_Click () Picture1.Resize 200, 150 Picture1.BackColor = RGB(255, 255, 255) Picture1.DrawWidth = 2 Picture1.Line (10, 10)-(190, 140), RGB(0, 0, 255), B Picture1.FillStyle = 0 Picture1.FillColor = RGB(255, 255, 0) Picture1.Circle (100, 75), 40, RGB(255, 0, 0) Picture1.CurrentX = 70 Picture1.CurrentY = 120 Picture1.Print "Hello!" End Sub .endcode .link ctrl.picturebox PictureBox .link ctrl.form Form .topic ctrl.databinding .title Data Binding .toc 1 Data Binding .index Data Binding .index DataSource .index DataField .index Master-Detail .h1 Data Binding DVX BASIC provides VB3-style data binding through three properties that can be set on most controls: .table Property Set On Description ---------- ----------- ------------------------------------------- DataSource Any control Name of the Data control to bind to (e.g. "Data1"). DataField Any control Column name from the Data control's recordset to display. .endtable .h2 How It Works .list .item Place a Data control on the form and set its DatabaseName and RecordSource properties. .item Place one or more display/edit controls (TextBox, Label, etc.) and set their DataSource to the Data control's name and DataField to a column name. .item When the form loads, the Data control auto-refreshes: it opens the database, runs the query, and navigates to the first record. .item Bound controls are updated automatically each time the Data control repositions (the Reposition event fires, and the runtime pushes the current record's field values into all bound controls). .item When a bound control loses focus (LostFocus), its current text is written back to the Data control's record cache, and Update is called automatically to persist changes. .endlist .h2 Master-Detail Binding For hierarchical data (e.g. orders and order items), use two Data controls: .list .item A master Data control bound to the parent table. .item A detail Data control with its MasterSource set to the master's name, MasterField set to the key column in the master, and DetailField set to the foreign key column in the detail table. .endlist When the master record changes, the detail Data control automatically re-queries using the master's current value for filtering. All controls bound to the detail are refreshed. .h2 DBGrid Binding Set the DBGrid's DataSource to a Data control name. The grid auto-populates columns from the query results and refreshes whenever the Data control refreshes. .h2 Example .code VERSION DVX 1.00 Begin Form frmData Caption = "Data Binding Example" AutoSize = False Width = 400 Height = 280 Begin Data Data1 DatabaseName = "myapp.db" RecordSource = "customers" End Begin Label lblName Caption = "Name:" End Begin TextBox txtName DataSource = "Data1" DataField = "name" End Begin Label lblEmail Caption = "Email:" End Begin TextBox txtEmail DataSource = "Data1" DataField = "email" End End Sub Data1_Reposition () Print "Current record changed" End Sub Sub Data1_Validate (Cancel As Integer) If txtName.Text = "" Then MsgBox "Name cannot be empty!" Cancel = 1 End If End Sub .endcode .link ctrl.data Data .link ctrl.dbgrid DBGrid .topic ctrl.menus .title Menu System .toc 1 Menu System .index Menu .index Menu Bar .index Submenu .index Separator .h1 Menu System Menus are defined in the .frm file using Begin Menu blocks. Each menu item has a name, caption, and nesting level. Menu items fire Click events dispatched as MenuName_Click. .h2 FRM Syntax .code Begin Form Form1 Caption = "Menu Demo" Begin Menu mnuFile Caption = "&File" Begin Menu mnuOpen Caption = "&Open" End Begin Menu mnuSave Caption = "&Save" End Begin Menu mnuSep1 Caption = "-" End Begin Menu mnuExit Caption = "E&xit" End End Begin Menu mnuEdit Caption = "&Edit" Begin Menu mnuCopy Caption = "&Copy" End Begin Menu mnuPaste Caption = "&Paste" End End End .endcode .h2 Menu Item Properties In the .frm file a menu item takes these keys: .table Key Type Description ---------- ------- ------------------------------------------- Caption String The text displayed. Use & for accelerator key. Set to "-" for a separator. Checked Boolean Whether the menu item shows a checkmark. RadioCheck Boolean Show the check as a radio dot instead of a checkmark. Enabled Boolean Whether the menu item is enabled (default True). Visible Boolean On a top-level menu only: False makes it a popup menu (for ContextMenu) instead of a menu bar entry. .endtable At run time code can use only these properties of a menu item: .table Property Type R/W Description -------- ------- --- ------------------------------------------- Name String R The menu item's name. Checked Boolean R/W Whether the menu item shows a checkmark. Enabled Boolean R/W Whether the menu item is enabled. .endtable Caption, RadioCheck and Visible are design-time only: using them on a menu item in code is a compile error in the IDE and a runtime error (Unknown menu property) otherwise. .h2 Nesting Menu items are nested by placing Begin Menu blocks inside other Begin Menu blocks: .list .item Level 0: top-level menu bar headers (e.g. "File", "Edit"). .item Level 1: items within a top-level menu. .item Level 2+: submenu items. .endlist A level-0 menu that contains children becomes a top-level menu header. A non-level-0 menu that contains children becomes a submenu. .h2 Event Dispatch Each clickable menu item (not headers, not separators) receives a unique numeric ID at load time. When clicked, the form's onMenu handler maps the ID to the menu item's name and fires MenuName_Click. .code Sub mnuOpen_Click () MsgBox "Open was clicked" End Sub Sub mnuExit_Click () Unload Form1 End Sub .endcode .link ctrl.form Form .link ctrl.frm FRM File Format .topic ctrl.arrays .title Control Arrays .toc 1 Control Arrays .index Control Arrays .index Index Property .h1 Control Arrays DVX BASIC supports VB-style control arrays. Multiple controls can share the same name, differentiated by an Index property. When an event fires on a control array element, the element's index is passed as the first parameter. .h2 Defining Control Arrays in FRM .code Begin CommandButton Command1 Caption = "Button A" Index = 0 End Begin CommandButton Command1 Caption = "Button B" Index = 1 End Begin CommandButton Command1 Caption = "Button C" Index = 2 End .endcode .h2 Event Handler Convention When a control has an Index property (>= 0), the event handler receives Index As Integer as the first parameter, before any event-specific parameters. .code Sub Command1_Click (Index As Integer) Select Case Index Case 0 MsgBox "Button A clicked" Case 1 MsgBox "Button B clicked" Case 2 MsgBox "Button C clicked" End Select End Sub .endcode .h2 Accessing Array Elements in Code Use the indexed form ControlName(Index) to access a specific element: .code Command1(0).Caption = "New Text" Command1(1).Enabled = False .endcode .note info Control array elements share the same event handler Sub. The runtime prepends the Index argument automatically. If you define parameters on the Sub, Index comes first, followed by the event's own parameters (e.g. KeyPress would be Sub Ctrl1_KeyPress (Index As Integer, KeyAscii As Integer)). .endnote .link ctrl.common.props Common Properties, Events, and Methods .link ctrl.frm FRM File Format .topic ctrl.frm .title FRM File Format .toc 1 FRM File Format .index FRM .index .frm .index Form File .h1 FRM File Format The .frm file is a text file that describes a form's layout, controls, menus, and code. It follows a format compatible with VB3 .frm files, with DVX-specific extensions. .h2 Structure .code VERSION DVX 1.00 Begin Form FormName form-level properties... Begin Menu mnuFile Caption = "&File" Begin Menu mnuOpen Caption = "&Open" End End Begin TypeName ControlName property = value ... End Begin Frame Frame1 Caption = "Group" Begin TypeName ChildName ... End End End BASIC code follows... Sub FormName_Load () ... End Sub .endcode .h2 Rules .list .item The VERSION line is optional. VERSION DVX 1.00 marks a native DVX form. VB forms with version <= 2.0 are accepted for import. .item The form block begins with Begin Form Name and ends with End. .item Controls are nested with Begin TypeName Name / End. .item Container controls (Frame, VBox, HBox, Toolbar, TabStrip, ScrollPane, Splitter, WrapBox) can have child controls nested inside them. .item Properties are assigned as Key = Value. String values are optionally quoted. .item Everything after the form's closing End is BASIC source code. .item Comments in the form section use ' (single quote). .item Blank lines are ignored in the form section. .endlist .h2 Common FRM Properties .table Property Applies To Description ----------------------- --------------- ------------------------------------------- Caption Form, controls Display text or window title. Text TextBox, ComboBox Initial text content. MinWidth / Width Controls Minimum width. Both names are accepted. MinHeight / Height Controls Minimum height. Both names are accepted. MaxWidth Controls Maximum width (0 = no cap). MaxHeight Controls Maximum height (0 = no cap). Weight Controls Layout weight for flexible sizing. Left Form, controls X position (used by Form when Centered=False; informational for controls). Top Form, controls Y position. Index Controls Control array index (-1 or absent = not in array). Visible Controls Initial visibility. Enabled Controls Initial enabled state. Layout Form "VBox" or "HBox". AutoSize Form Auto-fit window to content. Resizable Form Allow runtime resizing. Centered Form Center window on screen. DatabaseName Data SQLite database file path. RecordSource Data Table name or SQL query. DataSource Bound controls Name of the Data control. DataField Bound controls Column name in the recordset. .endtable .link ctrl.form Form .link ctrl.common.props Common Properties, Events, and Methods .link ctrl.menus Menu System .link ctrl.arrays Control Arrays