Manual · Reference

# The form objects — all 26

Everything a window is made of. Three rules hold for every kind: a caption belongs to the object (a captioned field is simply a taller field), a rule about a kind lives on the kind (which is why the inspector never lies about what an object can do), and the canvas and the running window are two drawings of one object — what you arrange is what runs.

The designer — the canvas and the window are two drawings of one object.
Twelve kinds in one window, all of them from this list: text and number fields, a popup, a record picker with its two buttons, a stepper, a checkbox, a text area, an image well, a file well that says what a file keeps — and a barcode.

###
Text Field textField

One line of text, bound to a field. Written into the record as the person types; saved when they leave it — that is the whole Model A. A caption is a property of the field, not a second object.

Events: `onChanged` · `onValidate` · `onGainingFocus` · `onLosingFocus`

###
Password Field passwordField

Dots instead of letters — and it refuses to be bound to a column, because bound it would store the typed password where the hash belongs. Read its value in a script, hash it with `security.hashPassword`, store the hash.

Events: `onChanged`

###
Text Area textArea

Many lines — notes, letters, anything that wraps.

Events: `onChanged` · `onValidate`

###
Number Field numberField

Numbers with the field's own decimals, right-aligned when it should be. On an Amount field it shows money — with the field's currency, wherever it is drawn.

Events: `onChanged` · `onValidate`

###
Date Field dateField

A date, readable and retypeable: what the cell draws, a person can type back — `18.3.2025` is accepted because it is shown.

Events: `onChanged` · `onValidate`

###
Checkbox checkbox

A Yes/No field. One click is the whole edit, so the write-through happens on the click.

Events: `onChanged`

###
Popup Menu popupMenu

One choice from a fixed list — the choices live in the inspector or come from a script.

Events: `onChanged`

###
Record Field recordField

How a record chooses a related record — never a bare popup over four thousand rows. It counts the other table and picks its face: a menu for a few, a search for many, a chooser window for everything else. A button beside it opens the chosen record.

Events: `onChanged`

###
Label label

Text that is not edited — bind it to a field (a computed total keeps itself current there) or let a script set its `value`.

###
Image Well image

A picture in the record. Drop one in, or use its menu — Open · Save as… · Replace… · Delete. The bytes live in the sibling attachment store and are read only when shown. It can also show a picture the *project* ships instead of one from the record — a logo, a letterhead: **Choose Picture…** in the inspector browses everything in the project's assets folder, folders included, and can copy a new one in. Whatever a Mac can draw is fair game — PNG, JPEG, HEIC, TIFF, WebP, and PDF or SVG, which stay sharp at any size.

Events: `onChanged`

###
File Well fileWell

A document in the record — shown as name, kind and size (\u{201C}Vertrag.pdf · 2,4 MB\u{201D}) without reading the bytes. Same menu as the image well; Image and File are two kinds on purpose.

Events: `onChanged`

###
Button button

Runs its `onClick`. The event fires one turn after the click, so the window has settled when your script runs.

Events: `onClick`

###
List list

The list — a table or a relationship, row actions (New · Duplicate · Delete plus Find · Sort · Print · Import · Export, none written by hand), editable columns, a footer that totals the whole set, drag-reordering into a position field. A script hands it records with `show(query)`.

Events: `onSelectionChange` · `onRowDoubleClick` · `onRowsChanged` · `onCellChanged`

###
Box box

A frame that groups — visually and for the Tab order, whose membership is stated, not derived.

###
Tabs tabs

Pages inside a window. Objects state which page they belong to; a script can switch, hide or disable pages.

Events: `onChanged`

###
Radio Group radioGroup

One choice, all options visible — for three to five options where the popup would hide them.

Events: `onChanged`

###
Segmented Control segmented

The compact face of the same idea — filters above a list (\u{201C}Latest · Unpaid\u{201D}).

Events: `onChanged`

###
Progress Bar progress

How far along something is — bind it or drive it from a script. For blocking work, `messages.showProgress` with its working Cancel is usually the better tool.

###
Timer timer

Fires its script on an interval — the dashboard that refreshes itself. Start and stop it from scripts (`form.myTimer.enabled`).

Events: `onTick`

###
Separator separator

A hairline that structures a window.

###
Slider slider

A number chosen by feel, within the bounds you set.

Events: `onChanged`

###
Stepper stepper

A number nudged in steps — beside a number field, sharing its binding.

Events: `onChanged`

###
Search Field searchField

A search box. Full-text search over a searchable table (`SearchIndex`) — which is real search, not `contains`.

Events: `onChanged`

###
Chart chart

Bars, lines, donuts over your data — grouped by the database, so four thousand rows are never loaded to draw five bars. Takes computed values, and a script can hand it series with `show([{ category, value }])`.

###
Card card

One object that is a whole tile — the coloured header band of the examples is a card, not four objects lying on top of each other. Symbol, big line, small line, gradient.

Events: `onClick`

###
Sparkline sparkline

A tiny curve where a whole chart would shout — the last twelve months in the corner of a card.