DVX BASIC is a Visual BASIC development environment for the DVX GUI System. It provides a VB3-style integrated development environment with a code editor, form designer, project system, and a full interactive debugger -- all running natively on DOS under the DVX windowing system.
This guide covers every feature of the IDE: menus, toolbar, editor, form designer, project management, debugger, and auxiliary windows.
The DVX BASIC IDE is modeled after Visual Basic 3.0. It consists of several floating windows arranged on the DVX desktop:
The IDE compiles BASIC source into bytecode and runs it in an integrated virtual machine (VM). Programs execute in cooperative slices (10,000 VM steps per slice), yielding to the DVX event loop between slices so the GUI remains responsive.
| Menu Item | Shortcut | Description |
|---|---|---|
| New Project... | Create a new DVX BASIC project. | |
| Open Project... | Open an existing .dbp project file. | |
| Save Project | Save the current project file to disk. | |
| Close Project | Close the current project (prompts to save unsaved changes). | |
| Project Properties... | Edit project metadata (name, author, version, startup form, icon, etc.). | |
| Add File... | Ctrl+O | Add a .bas or .frm file to the project. If no project is open, creates an implicit project from the file. |
| Save File | Ctrl+S | Save the active file to disk. |
| Save All | Save all modified files in the project. | |
| Remove File | Remove the selected file from the project (prompts to save if modified). | |
| Exit | Close the IDE (prompts to save unsaved changes). | |
| Menu Item | Shortcut | Description |
|---|---|---|
| Cut | Ctrl+X | Cut selected text to the clipboard. |
| Copy | Ctrl+C | Copy selected text to the clipboard. |
| Paste | Ctrl+V | Paste text from the clipboard. |
| Select All | Ctrl+A | Select all text in the active editor. |
| Delete | Del | Delete the selected text or control (in the form designer). |
| Find... | Ctrl+F | Open the Find/Replace dialog. |
| Find Next | F3 | Find the next occurrence of the search text. |
| Replace... | Ctrl+H | Open the Find/Replace dialog with replace enabled. |
| Menu Item | Shortcut | Description |
|---|---|---|
| Run | F5 | Compile and run the program. If paused at a breakpoint, resumes execution with debugging disabled (runs free). |
| Debug | Shift+F5 | Compile and run with the debugger active. Breakpoints are active but execution does not pause at the first statement. If paused, resumes to the next breakpoint. |
| Run Without Recompile | Ctrl+F5 | Re-run the last compiled module without recompiling. |
| Stop | Esc | Stop the running program immediately. |
| Step Into | F8 | Execute one statement, stepping into SUB/FUNCTION calls. If idle, starts a debug session and breaks at the first statement. |
| Step Over | Shift+F8 | Execute one statement, stepping over SUB/FUNCTION calls. |
| Step Out | Ctrl+Shift+F8 | Run until the current SUB/FUNCTION returns. |
| Run to Cursor | Ctrl+F8 | Run until execution reaches the line where the cursor is positioned. |
| Toggle Breakpoint | F9 | Toggle a breakpoint on the current editor line. |
| Clear Output | Clear the Output window. | |
| Save on Run | Checkbox: when enabled, all modified files are saved automatically before compiling. Persisted in preferences. | |
| Menu Item | Shortcut | Description |
|---|---|---|
| Code | F7 | Switch to Code view for the active file (or the file selected in the Project Explorer). |
| Designer | Shift+F7 | Switch to Design view for the active form file. |
| Toolbar | Checkbox: show or hide the toolbar. Persisted in preferences. | |
| Status Bar | Checkbox: show or hide the status bar. Persisted in preferences. | |
| Menu Editor... | Ctrl+E | Open the Menu Editor dialog for the active form. Allows designing menu bars with captions, names, levels, checked state, and enabled state. |
| Menu Item | Description |
|---|---|
| Code Editor | Show or raise the Code Editor window. |
| Output | Show or raise the Output window. |
| Immediate | Show or raise the Immediate window. |
| Locals | Show or raise the Locals debug window. |
| Call Stack | Show or raise the Call Stack debug window. |
| Watch | Show or raise the Watch debug window. |
| Breakpoints | Show or raise the Breakpoints window. |
| Project Explorer | Show or raise the Project Explorer window. |
| Toolbox | Show or raise the Toolbox window. |
| Properties | Show or raise the Properties panel. |
| Menu Item | Description |
|---|---|
| Preferences... | Open the Preferences dialog (editor settings and project defaults). |
| Debug Layout | Checkbox: toggle a debug overlay that shows widget layout boundaries. Useful for diagnosing widget layout issues. |
| Menu Item | Description |
|---|---|
| About DVX BASIC... | Show the About dialog with version and copyright information. |
The toolbar is organized into four groups separated by vertical dividers. Each button has a tooltip showing its name and keyboard shortcut.
| Button | Shortcut | Action |
|---|---|---|
| Open | Ctrl+O | Add a file to the project (same as File > Add File). |
| Save | Ctrl+S | Save the active file. |
| Button | Shortcut | Action |
|---|---|---|
| Run | F5 | Compile and run the program. |
| Stop | Esc | Stop the running program. |
| Button | Shortcut | Action |
|---|---|---|
| Debug | Shift+F5 | Start or resume a debug session. |
| Step Into | F8 | Step into the next statement. |
| Step Over | Shift+F8 | Step over the next statement. |
| Step Out | Ctrl+Shift+F8 | Step out of the current procedure. |
| Run to Cursor | Ctrl+F8 | Run to the cursor position. |
| Button | Shortcut | Action |
|---|---|---|
| Code | F7 | Switch to Code view. |
| Design | Shift+F7 | Switch to Design view. |
The Code Editor is the primary editing window for BASIC source code. It occupies the center of the screen, below the toolbar and above the Output and Immediate windows.
At the top of the Code Editor are two dropdown lists:
(General) plus all objects
(form name, control names, menu item names). Selecting an object filters
the Function dropdown.[Click]).
Selecting an unimplemented event creates a new event handler stub.
The editor shows one procedure at a time. Each procedure has its own buffer,
and switching between them is instantaneous. The (General) section
contains module-level declarations and code.
The editor applies real-time syntax coloring as you type. The following categories are highlighted in distinct colors:
| Category | Examples |
|---|---|
| Keywords | IF, THEN, FOR, NEXT, SUB, FUNCTION, DIM, PRINT, SELECT, CASE, DO, LOOP, WHILE, WEND, END, EXIT, CALL, GOSUB, GOTO, RETURN, DECLARE, CONST, TYPE, AND, OR, NOT, XOR, MOD, etc. |
| Type names | INTEGER, LONG, SINGLE, DOUBLE, STRING, BOOLEAN, BYTE, TRUE, FALSE |
| String literals | "Hello, World!" |
| Comments | ' This is a comment, REM This is a comment |
| Numbers | 42, 3.14 |
| Operators | =, <, >, +, -, *, /, \, & |
The Form Designer provides a visual design surface for editing .frm files. Switch to it with Shift+F7 or the Design toolbar button. It opens in a separate window showing a WYSIWYG preview of the form.
DSGN_GRID_SIZE) when placed or resized.Command1, Command2). Clicking the same
tool again deselects it (toggles back to pointer mode).Forms have the following design-time properties: Name, Caption, Width, Height, Left, Top, Layout (VBox or HBox), Centered, AutoSize, and Resizable.
A DVX BASIC project is stored as a .dbp file (DVX BASIC Project).
The project file records:
When the project is compiled, all files are concatenated into a single source
stream. A source map tracks which lines belong to which file, enabling accurate
error reporting and debugger navigation across multiple files. For .frm files,
an injected BEGINFORM directive is prepended to the code section.
| Operation | Description |
|---|---|
| New Project | Creates a blank project with a name and directory. A default .frm file is added automatically. |
| Open Project | Opens a .dbp file and loads all referenced files into memory. |
| Save Project | Writes the .dbp file to disk. |
| Close Project | Closes the project, prompting to save unsaved changes. |
| Add File | Adds a .bas or .frm file to the project. Opening a file without a project auto-creates an implicit project. |
| Remove File | Removes a file from the project (prompts to save if modified). |
| Project Properties | Opens a dialog for editing project metadata (name, author, company, version, copyright, description, icon, startup form). |
The Project Explorer is a tree view window listing all project files. Double-click a file to open it: .bas files open in Code view, .frm files open in Design view. The selected file in the Project Explorer determines the target for View > Code and View > Designer commands.
The Properties panel (Window > Properties) has two sections:
Each control type exposes different properties (e.g., Caption, Text, Width, Height, MaxWidth, MaxHeight, Weight, Alignment, Enabled, Visible, and type-specific properties like DataSource and DataField for data-bound controls).
The Toolbox (Window > Toolbox) is a floating palette of
buttons, one for each available control type. Controls are loaded dynamically
from the widget plugin registry -- any widget DXE that provides a
basName appears in the toolbox.
Click a tool to select it (the active tool name is stored in the designer state), then click on the form to place a new instance. Click the same tool again to deselect it and return to pointer mode.
| VB Name | Description |
|---|---|
| CommandButton | Push button that triggers a Click event. |
| Label | Static text label. |
| TextBox | Single-line text input field. |
| TextArea | Multi-line text editor. |
| CheckBox | On/off checkbox. |
| OptionButton | Radio button (mutually exclusive within a group). |
| ListBox | Scrollable list of items. |
| ComboBox | Drop-down combo box. |
| DropDown | Simple drop-down list. |
| PictureBox | Canvas for drawing and images. |
| Image | Static image display. |
| ImageButton | Clickable image button. |
| Frame | Grouping container with a labeled border. |
| VBox | Vertical layout container. |
| HBox | Horizontal layout container. |
| WrapBox | Flow layout container that wraps items to the next row. |
| Splitter | Resizable split between two child panes. |
| ScrollPane | Scrollable container for large content. |
| TabStrip | Tabbed container with multiple pages. |
| ListView | Multi-column list with headers. |
| TreeView | Hierarchical tree control. |
| ProgressBar | Progress indicator bar. |
| HScrollBar | Horizontal slider/scrollbar. |
| SpinButton | Numeric up/down spinner. |
| Line | Horizontal or vertical separator line. |
| Spacer | Invisible spacing element for layout. |
| Timer | Non-visual timer that fires periodic events. |
| Toolbar | Toolbar container for buttons. |
| StatusBar | Status bar at the bottom of a form. |
| Terminal | ANSI terminal emulator control. |
| Data | Data control for binding to a database. |
| DBGrid | Data-bound grid for displaying database query results. |
The DVX BASIC IDE includes a full interactive debugger. The debugger operates as a state machine with three states:
| State | Description |
|---|---|
DBG_IDLE | No program loaded or running. |
DBG_RUNNING | Program is executing (VM running in slices). |
DBG_PAUSED | Execution is paused at a breakpoint or step point. The IDE GUI is fully interactive. |
Not every line can have a breakpoint. The IDE validates the line content and silently refuses to set breakpoints on:
' or REM)SUB and FUNCTION declaration linesEND SUB and END FUNCTION lines
Each breakpoint records the project file index, the code line number within the
file, the procedure index, and the procedure name (as Object.Event).
When the project is compiled, breakpoints are converted to concatenated source
line numbers that match the VM's OP_LINE opcodes.
When lines are added or removed in the editor, breakpoints below the edit point are automatically shifted to stay on the correct line.
| Action | Shortcut | Behavior |
|---|---|---|
| Step Into | F8 | Execute one statement. If the statement is a SUB/FUNCTION call, step into it. |
| Step Over | Shift+F8 | Execute one statement. If the statement is a SUB/FUNCTION call, execute the entire call and break at the next line in the current scope. |
| Step Out | Ctrl+Shift+F8 | Run until the current SUB/FUNCTION returns to its caller. |
| Run to Cursor | Ctrl+F8 | Run until execution reaches the line under the cursor. |
When a program is running in debug mode, the IDE enters a cooperative loop:
BAS_VM_BREAKPOINT), the state
transitions to DBG_PAUSED. The IDE navigates the code editor
to the breakpoint line, highlights it in yellow, auto-opens the Locals
and Call Stack windows, and updates all debug windows.dvxUpdate() continuously,
keeping the GUI responsive. The user can inspect variables, modify them
in the Immediate window, step, continue, or stop.DBG_RUNNING and the loop continues.
Press Esc or click the Stop toolbar button at any time to halt execution.
The VM is destroyed, debug state resets to DBG_IDLE, and the IDE
restores the designer windows that were hidden at run start.
When the debugger pauses, the Locals and Call Stack windows are auto-opened (if not already visible). The Watch and Breakpoints windows can be opened manually from the Window menu.
Shows variables for the current execution scope. Displayed as a three-column ListView:
| Column | Content |
|---|---|
| Name | Variable name (internal mangled names like static variable placeholders are filtered out). |
| Type | Data type: Integer, Long, Single, Double, String, Boolean, Array, UDT. Array types show the element type (e.g., Integer()). |
| Value | Current value. Strings are shown in quotes. Booleans as True/False. Arrays show bounds and element count (e.g., Integer(0 To 9) [10]). Uninitialized arrays show (uninitialized). |
The Locals window displays:
Up to 64 variables are displayed. The window is resizable.
Shows the current call chain as a two-column ListView:
| Column | Content |
|---|---|
| Procedure | Procedure name (or (module) for module-level code). |
| Line | Line number where execution is paused (shown for the topmost frame). |
The current location is shown first, followed by each caller in the call stack (walking from the deepest frame back to the module entry point). Up to 32 frames are displayed.
Allows monitoring arbitrary expressions while debugging. The window has a text input at the top and a two-column ListView below:
| Column | Content |
|---|---|
| Expression | The watch expression text. |
| Value | Evaluated result (or <error> if evaluation fails). Blank when not paused. |
Type an expression in the text input and press Enter. Up to 16 watch expressions can be active at once.
Watch expressions support:
x, countarr(5), matrix(2, 3)player.nameitems(i).pricex + y * 2, Len(name$)Lists all set breakpoints as a three-column ListView:
| Column | Content |
|---|---|
| File | Project file path. |
| Procedure | Procedure name (Object.Event format, or (General)). |
| Line | Code line number within the file. |
The Immediate window is an interactive REPL at the bottom-right of the screen. Type a line of BASIC and press Enter to evaluate it. Results appear inline below your input.
If the input is not a recognized statement keyword, it is automatically wrapped
in a PRINT statement. For example, typing 2 + 2
evaluates as PRINT 2 + 2 and displays 4.
You can also type full statements:
PRINT x * 2 -- evaluate and print an expression.DIM tmp As Integer -- declare a temporary variable.LET x = 42 -- explicit assignment (see below).
Parse or runtime errors are displayed inline with an Error: prefix.
When the debugger is paused at a breakpoint, the Immediate window has access
to the running VM's state. Global variable values are copied into the evaluation
VM, so expressions like count or name$ & " test"
display live values.
When paused, you can modify variables in the running program directly from the Immediate window using assignment syntax:
variableName = newValue
The optional LET keyword is also accepted:
LET variableName = newValue
Assignment works for:
x = 42, name$ = "test"arr(5) = 100, matrix(2, 3) = 7.5player.score = 1000items(0).price = 9.99The new value is written directly into the VM's live variable slot (local, global, or form scope). A confirmation message is displayed, and the Locals and Watch windows update automatically to reflect the change.
If the assignment target cannot be resolved (unknown variable, out-of-bounds index, wrong type), an error message is displayed.
The Output window is a read-only TextArea at the bottom-left of the screen. It displays:
PRINT statement output from
the running program is appended here.Error on line N: prefix.The output buffer holds up to 32,768 characters. Use Run > Clear Output to clear it.
INPUT statements prompt the user via a modal InputBox dialog; the
prompt text is also echoed to the Output window.
Open with Ctrl+F (Find) or Ctrl+H (Replace). The Find/Replace dialog is modeless -- it stays open while you continue editing.
| Control | Description |
|---|---|
| Find input | The text to search for. |
| Replace checkbox + input | Enable replacement mode and enter replacement text. |
| Scope | Radio group: Function, Object, File, or Project. Default is Project. |
| Direction | Radio group: Forward or Backward. |
| Match Case | Checkbox: case-sensitive search. |
| Button | Action |
|---|---|
| Find Next | Find the next occurrence. Wraps across procedures, files, and the entire project depending on the scope setting. |
| Replace | Replace the current match and find the next one. |
| Replace All | Replace all occurrences within the selected scope. |
| Close | Close the dialog. |
F3 repeats the last search (Find Next) without opening the dialog.
Open via Tools > Preferences. Settings are saved to
dvxbasic.ini in the app's config directory.
| Setting | Description | Default |
|---|---|---|
| Skip comments/strings when renaming | When renaming a control or form, skip occurrences inside comments and string literals. | On |
| Require variable declaration (OPTION EXPLICIT) | When enabled, variables must be declared with DIM before use. | Off |
| Tab width | Number of spaces per tab stop (1-8). | 3 |
| Insert spaces instead of tabs | When enabled, pressing Tab inserts spaces. When disabled, inserts a real tab character. | On |
These fields set the default values for new project metadata:
| Field | Description | Default |
|---|---|---|
| Author | Default author name. | (empty) |
| Company | Default company name. | (empty) |
| Version | Default version string. | 1.0 |
| Copyright | Default copyright notice. | (empty) |
| Description | Default project description (multi-line). | (empty) |
| Shortcut | Action |
|---|---|
| Ctrl+O | Add File |
| Ctrl+S | Save File |
| Ctrl+A | Select All |
| Ctrl+X | Cut |
| Ctrl+C | Copy |
| Ctrl+V | Paste |
| Ctrl+F | Find |
| Ctrl+H | Replace |
| Ctrl+E | Menu Editor |
| F3 | Find Next |
| F5 | Run |
| Shift+F5 | Debug |
| Ctrl+F5 | Run Without Recompile |
| Esc | Stop |
| F7 | Code View |
| Shift+F7 | Design View |
| F8 | Step Into |
| Shift+F8 | Step Over |
| Ctrl+Shift+F8 | Step Out |
| Ctrl+F8 | Run to Cursor |
| F9 | Toggle Breakpoint |
| Del | Delete |
DVX BASIC 1.0 -- Copyright 2026 Scott Duensing