From 3b4d97b0dc08591c837abd5ba68576842f8756af Mon Sep 17 00:00:00 2001 From: Scott Duensing Date: Thu, 5 Mar 2026 16:23:49 -0600 Subject: [PATCH] Reorganize Properties sections by control type Replaces the flat per-property layout in protocol.md and README.md with per-control subsections, each listing its supported properties. Co-Authored-By: Claude Opus 4.6 --- forms/README.md | 555 ++++++++++++++++++---------------------------- forms/protocol.md | 285 +++++++++++++++++------- 2 files changed, 428 insertions(+), 412 deletions(-) diff --git a/forms/README.md b/forms/README.md index c2d9ff5..5204ab1 100644 --- a/forms/README.md +++ b/forms/README.md @@ -372,414 +372,306 @@ CTRL.SET 1 3 Text="world" Enabled=0 ## Properties -### Caption +### Common Properties -- **Applies to:** Label, Button, CheckBox, GroupBox, RadioButton, Panel, MenuItem, RadioGroup, BitBtn, SpeedButton -- **Format:** Quoted string -- **Example:** `Caption="Submit"` +These properties apply to all or most controls: -The display text for labels, buttons, check boxes, group boxes, radio -buttons, panels, menu items, radio groups, and bitmap/speed buttons. +| Property | Format | Description | +|-----------|-------------------------------|-------------------------------| +| Enabled | `0` or `1` | Disable or enable the control | +| Visible | `0` or `1` | Hide or show the control | +| TabOrder | Integer | Keyboard tab order within the form (all windowed controls except Label and Image) | +| PopupMenu | Integer (ctrlId of PopupMenu) | Associates a right-click context menu with the control | -### Text +### Label, Button, GroupBox -- **Applies to:** Edit, ComboBox, Memo, MaskEdit -- **Format:** Quoted string -- **Example:** `Text="Hello world"` +| Property | Format | +|----------|---------------| +| Caption | Quoted string | -The editable text content. For Memo controls, use `\n` for line -breaks within the quoted string: +The display text for the control. -``` -CTRL.SET 1 5 Text="Line one\nLine two\nLine three" -``` +Example: `Caption="Submit"` -### Items +### Edit -- **Applies to:** ListBox, ComboBox, RadioGroup, TabSet, Notebook, TabbedNotebook, Outline, Header -- **Format:** Quoted string, items separated by `\n` -- **Example:** `Items="Red\nGreen\nBlue"` +| Property | Format | Description | +|-----------|---------------|------------------------------------| +| Text | Quoted string | Editable text content | +| MaxLength | Integer | Max characters (0 = no limit) | +| ReadOnly | `0` or `1` | Prevent user editing when enabled | + +Example: `Text="Hello world" MaxLength=50` + +### CheckBox, RadioButton + +| Property | Format | Description | +|----------|---------------|----------------------| +| Caption | Quoted string | Display text | +| Checked | `0` or `1` | Checked or unchecked | + +Example: `Caption="Accept terms" Checked=1` + +### ListBox + +| Property | Format | Description | +|-----------|-------------------------------------|---------------| +| Items | Quoted string (`\n`-delimited) | Item list | +| ItemIndex | Integer (-1 = none) | Selected item | Replaces the entire item list. The control is cleared before the new items are added. -### Checked +Example: `Items="Red\nGreen\nBlue" ItemIndex=0` -- **Applies to:** CheckBox, RadioButton, MenuItem -- **Format:** `0` (unchecked) or `1` (checked) -- **Example:** `Checked=1` +### ComboBox -### Enabled +| Property | Format | Description | +|-----------|-------------------------------------|-----------------| +| Text | Quoted string | Editable text | +| Items | Quoted string (`\n`-delimited) | Drop-down items | +| ItemIndex | Integer (-1 = none) | Selected item | -- **Applies to:** All control types -- **Format:** `0` (disabled) or `1` (enabled) -- **Example:** `Enabled=0` +Example: `Items="Red\nGreen\nBlue" ItemIndex=1` -### Visible +### Memo -- **Applies to:** All control types -- **Format:** `0` (hidden) or `1` (visible) -- **Example:** `Visible=0` +| Property | Format | Description | +|------------|--------------------------------------|------------------| +| Text | Quoted string (`\n` for line breaks) | Text content | +| ReadOnly | `0` or `1` | Prevent editing | +| ScrollBars | Integer 0-3 | Scroll bar style | -### MaxLength +ScrollBars values: +- `0` — ssNone (no scroll bars) +- `1` — ssHorizontal +- `2` — ssVertical +- `3` — ssBoth -- **Applies to:** Edit, MaskEdit -- **Format:** Integer (0 = no limit) -- **Example:** `MaxLength=50` +Example: -Maximum number of characters the user can type. +``` +CTRL.SET 1 5 Text="Line one\nLine two\nLine three" ScrollBars=2 +``` -### ReadOnly +### Image -- **Applies to:** Edit, Memo -- **Format:** `0` (editable) or `1` (read-only) -- **Example:** `ReadOnly=1` +| Property | Format | Description | +|-------------|--------------------------|--------------------------| +| Picture | Quoted string (filename) | BMP file to display | +| Stretch | `0` or `1` | Stretch to fill bounds | +| Center | `0` or `1` | Center within bounds | +| Transparent | `0` or `1` | Transparent background | -### ScrollBars +Picture path is resolved relative to the client's `BasePath` setting. +Subdirectories are allowed. Only BMP files are supported. -- **Applies to:** Memo -- **Format:** Integer 0-3 -- **Values:** - - `0` — ssNone (no scroll bars) - - `1` — ssHorizontal - - `2` — ssVertical - - `3` — ssBoth -- **Example:** `ScrollBars=2` - -### ItemIndex - -- **Applies to:** ListBox, ComboBox, RadioGroup, TabSet, Notebook, TabbedNotebook -- **Format:** Integer (-1 = no selection) -- **Example:** `ItemIndex=2` - -### TabOrder - -- **Applies to:** All windowed controls (all types except Label and Image) -- **Format:** Integer -- **Example:** `TabOrder=3` - -Controls the keyboard tab navigation order within the form. - -### Stretch - -- **Applies to:** Image -- **Format:** `0` (off) or `1` (on) -- **Example:** `Stretch=1` - -When enabled, the image is stretched to fill the control bounds. - -### Center - -- **Applies to:** Image -- **Format:** `0` (off) or `1` (on) -- **Example:** `Center=1` - -When enabled, the image is centered within the control bounds. - -### Transparent - -- **Applies to:** Image -- **Format:** `0` (off) or `1` (on) -- **Example:** `Transparent=1` - -When enabled, the image background is transparent. - -### Picture - -- **Applies to:** Image -- **Format:** Quoted string (filename) -- **Example:** `Picture="images\logo.bmp"` - -BMP file to display. The path is resolved relative to the client's -`BasePath` setting. Subdirectories are allowed. +Example: `Picture="images\logo.bmp" Stretch=1` **Note:** `dfm2form` does not emit Picture from DFM files because image data is stored as a binary blob in the DFM. Set Picture at runtime via `CTRL.SET` or by manually editing the `.form` file. -### BevelOuter +### Panel -- **Applies to:** Panel -- **Format:** Integer 0-2 -- **Values:** - - `0` — bvNone - - `1` — bvLowered - - `2` — bvRaised -- **Example:** `BevelOuter=2` +| Property | Format | Description | +|-------------|---------------|--------------| +| Caption | Quoted string | Display text | +| BevelOuter | Integer 0-2 | Outer bevel | +| BevelInner | Integer 0-2 | Inner bevel | +| BorderStyle | `0` or `1` | Border | -### BevelInner +Bevel values: `0` (bvNone), `1` (bvLowered), `2` (bvRaised). +BorderStyle values: `0` (bsNone), `1` (bsSingle). -- **Applies to:** Panel -- **Format:** Integer 0-2 -- **Values:** - - `0` — bvNone - - `1` — bvLowered - - `2` — bvRaised -- **Example:** `BevelInner=1` +Example: `BevelOuter=2 BevelInner=1 BorderStyle=0` -### BorderStyle (Panel) +### ScrollBar -- **Applies to:** Panel -- **Format:** `0` (bsNone) or `1` (bsSingle) -- **Example:** `BorderStyle=1` +| Property | Format | Description | +|-------------|---------|---------------------------------------| +| Kind | Integer | `0` (sbHorizontal), `1` (sbVertical) | +| Min | Integer | Minimum value | +| Max | Integer | Maximum value | +| Position | Integer | Current position | +| LargeChange | Integer | Change on track click | +| SmallChange | Integer | Change on arrow click | -### Kind +Example: `Kind=1 Min=0 Max=100 Position=50 LargeChange=10 SmallChange=1` -- **Applies to:** ScrollBar, BitBtn -- **Format:** Integer -- **Values (ScrollBar):** `0` (sbHorizontal), `1` (sbVertical) -- **Values (BitBtn):** `0` (bkCustom), `1` (bkOK), `2` (bkCancel), - `3` (bkHelp), `4` (bkYes), `5` (bkNo), `6` (bkClose), `7` (bkAbort), - `8` (bkRetry), `9` (bkIgnore), `10` (bkAll) -- **Example:** `Kind=1` +### MediaPlayer -### Min +| Property | Format | Description | +|------------|---------------|-----------------------------------| +| FileName | Quoted string | Media file path | +| DeviceType | Quoted string | MCI device type | +| AutoOpen | `0` or `1` | Open file automatically | +| Command | Quoted string | Pseudo-property (triggers method) | -- **Applies to:** ScrollBar -- **Format:** Integer -- **Example:** `Min=0` +FileName path is resolved relative to the client's `BasePath` setting. -### Max +DeviceType values: `dtAutoSelect`, `dtAVIVideo`, `dtCDAudio`, `dtDAT`, +`dtDigitalVideo`, `dtMMMovie`, `dtOther`, `dtOverlay`, `dtScanner`, +`dtSequencer`, `dtVCR`, `dtVideodisc`, `dtWaveAudio`. -- **Applies to:** ScrollBar -- **Format:** Integer -- **Example:** `Max=100` +Command triggers a method call instead of setting a value. Valid +commands: `Open`, `Play`, `Stop`, `Close`, `Pause`, `Resume`, +`Rewind`, `Next`, `Previous`. -### Position +Example: `FileName="sounds\intro.wav" DeviceType="dtWaveAudio" AutoOpen=1` -- **Applies to:** ScrollBar -- **Format:** Integer -- **Example:** `Position=50` +### MainMenu, PopupMenu -### LargeChange +No type-specific properties. One MainMenu per form (auto-attached). +PopupMenu is associated with any control via the common `PopupMenu` +property. -- **Applies to:** ScrollBar -- **Format:** Integer -- **Example:** `LargeChange=10` +### MenuItem -The amount the position changes when the user clicks the scroll bar -track. +| Property | Format | Description | +|----------|---------------|------------------------------| +| Caption | Quoted string | Menu item text | +| Parent | Integer | ctrlId of parent menu/item | +| Checked | `0` or `1` | Check mark | +| ShortCut | Integer | Delphi ShortCut value | -### SmallChange +ShortCut uses Delphi's encoding (virtual key + modifier flags). -- **Applies to:** ScrollBar -- **Format:** Integer -- **Example:** `SmallChange=1` +Example: `Caption="&Open" Parent=2 ShortCut=16463` -The amount the position changes when the user clicks an arrow button. +### RadioGroup -### FileName +| Property | Format | Description | +|-----------|--------------------------------|---------------------| +| Caption | Quoted string | Group label | +| Items | Quoted string (`\n`-delimited) | Radio button labels | +| ItemIndex | Integer (-1 = none) | Selected item | +| Columns | Integer | Column count | -- **Applies to:** MediaPlayer -- **Format:** Quoted string (file path) -- **Example:** `FileName="sounds\intro.wav"` +Example: `Caption="Color" Items="Red\nGreen\nBlue" Columns=2 ItemIndex=0` -Media file to open. The path is resolved relative to the client's -`BasePath` setting. +### BitBtn -### DeviceType +| Property | Format | Description | +|-----------|---------------|------------------------| +| Caption | Quoted string | Button text | +| Kind | Integer 0-10 | Predefined button kind | +| Layout | Integer 0-3 | Glyph position | +| NumGlyphs | Integer 1-4 | Glyph images in bitmap | -- **Applies to:** MediaPlayer -- **Format:** Quoted string -- **Example:** `DeviceType="dtWaveAudio"` +Kind values: `0` (bkCustom), `1` (bkOK), `2` (bkCancel), `3` (bkHelp), +`4` (bkYes), `5` (bkNo), `6` (bkClose), `7` (bkAbort), `8` (bkRetry), +`9` (bkIgnore), `10` (bkAll). -MCI device type. Valid values: `dtAutoSelect`, `dtAVIVideo`, -`dtCDAudio`, `dtDAT`, `dtDigitalVideo`, `dtMMMovie`, `dtOther`, -`dtOverlay`, `dtScanner`, `dtSequencer`, `dtVCR`, `dtVideodisc`, -`dtWaveAudio`. +Layout values: `0` (blGlyphLeft), `1` (blGlyphRight), `2` (blGlyphTop), +`3` (blGlyphBottom). -### AutoOpen +NumGlyphs: number of glyph images (up, disabled, clicked, down). -- **Applies to:** MediaPlayer -- **Format:** `0` (off) or `1` (on) -- **Example:** `AutoOpen=1` +Example: `Caption="OK" Kind=1 Layout=0 NumGlyphs=2` -When enabled, the media file is opened automatically when FileName -is set. +### SpeedButton -### Command +| Property | Format | Description | +|------------|---------------|-----------------------------| +| Caption | Quoted string | Button text | +| Layout | Integer 0-3 | Glyph position | +| NumGlyphs | Integer 1-4 | Glyph images in bitmap | +| GroupIndex | Integer | Radio group (0 = no group) | +| Down | `0` or `1` | Pressed state | +| AllowAllUp | `0` or `1` | Allow all buttons unpressed | -- **Applies to:** MediaPlayer -- **Format:** Quoted string -- **Example:** `Command="Play"` - -Pseudo-property that triggers a method call instead of setting a -value. Valid commands: `Open`, `Play`, `Stop`, `Close`, `Pause`, -`Resume`, `Rewind`, `Next`, `Previous`. - -### Parent - -- **Applies to:** MenuItem -- **Format:** Integer (ctrlId of parent menu or menu item) -- **Example:** `Parent=1` - -Specifies the parent for a menu item. The parent can be a MainMenu, -PopupMenu, or another MenuItem (for submenus). - -### Columns - -- **Applies to:** RadioGroup -- **Format:** Integer -- **Example:** `Columns=2` - -Number of columns for the radio button layout. - -### ShortCut - -- **Applies to:** MenuItem -- **Format:** Integer (Delphi ShortCut value) -- **Example:** `ShortCut=16467` - -Keyboard accelerator for the menu item. Uses Delphi's ShortCut -encoding (virtual key + modifier flags). - -### PopupMenu - -- **Applies to:** Any visual control -- **Format:** Integer (ctrlId of a PopupMenu) -- **Example:** `PopupMenu=2` - -Associates a PopupMenu with a control. When the user right-clicks -the control, the popup menu is displayed. - -### Layout - -- **Applies to:** BitBtn, SpeedButton -- **Format:** Integer 0-3 -- **Values:** - - `0` — blGlyphLeft - - `1` — blGlyphRight - - `2` — blGlyphTop - - `3` — blGlyphBottom -- **Example:** `Layout=2` - -Position of the glyph relative to the caption text. - -### NumGlyphs - -- **Applies to:** BitBtn, SpeedButton -- **Format:** Integer (1-4) -- **Example:** `NumGlyphs=2` - -Number of glyph images in the bitmap (up, disabled, clicked, down). - -### GroupIndex - -- **Applies to:** SpeedButton -- **Format:** Integer (0 = no group) -- **Example:** `GroupIndex=1` +Layout values: `0` (blGlyphLeft), `1` (blGlyphRight), `2` (blGlyphTop), +`3` (blGlyphBottom). Speed buttons with the same non-zero GroupIndex act as a radio group. +Down is only meaningful when GroupIndex is non-zero. -### Down +Example: `GroupIndex=1 Down=1 AllowAllUp=0` -- **Applies to:** SpeedButton -- **Format:** `0` (up) or `1` (down) -- **Example:** `Down=1` +### TabSet, Notebook, TabbedNotebook -Whether the speed button is pressed. Only meaningful when -GroupIndex is non-zero. +| Property | Format | Description | +|-----------|--------------------------------|-------------| +| Items | Quoted string (`\n`-delimited) | Tab/page list | +| ItemIndex | Integer (-1 = none) | Active tab | -### AllowAllUp +Example: `Items="General\nAdvanced\nAbout" ItemIndex=0` -- **Applies to:** SpeedButton -- **Format:** `0` (off) or `1` (on) -- **Example:** `AllowAllUp=1` +### MaskEdit -When enabled, all speed buttons in a group can be unpressed. +| Property | Format | Description | +|-----------|---------------|-----------------------------------| +| Text | Quoted string | Editable text content | +| MaxLength | Integer | Max characters (0 = no limit) | +| EditMask | Quoted string | Input mask (mask;save;blank char) | -### EditMask +Example: `EditMask="(999) 000-0000;1;_"` -- **Applies to:** MaskEdit -- **Format:** Quoted string -- **Example:** `EditMask="(999) 000-0000;1;_"` +### Outline -Input mask string (mask;save literals;blank char). +| Property | Format | Description | +|--------------|--------------------------------|---------------| +| Items | Quoted string (`\n`-delimited) | Tree items | +| OutlineStyle | Integer 0-6 | Display style | -### OutlineStyle +OutlineStyle values: +- `0` — osText +- `1` — osPlusMinusText +- `2` — osPlusMinus +- `3` — osPictureText +- `4` — osPicturePlusMinusText +- `5` — osTreeText +- `6` — osTreePictureText -- **Applies to:** Outline -- **Format:** Integer 0-6 -- **Values:** - - `0` — osText - - `1` — osPlusMinusText - - `2` — osPlusMinus - - `3` — osPictureText - - `4` — osPicturePlusMinusText - - `5` — osTreeText - - `6` — osTreePictureText -- **Example:** `OutlineStyle=5` +Example: `OutlineStyle=5` -### Shape +### Bevel -- **Applies to:** Bevel -- **Format:** Integer 0-5 -- **Values:** - - `0` — bsBox - - `1` — bsFrame - - `2` — bsTopLine - - `3` — bsBottomLine - - `4` — bsLeftLine - - `5` — bsRightLine -- **Example:** `Shape=2` +| Property | Format | Description | +|----------|-------------|----------------| +| Shape | Integer 0-5 | Bevel shape | +| Style | `0` or `1` | Lowered/raised | -### Style (Bevel) +Shape values: +- `0` — bsBox +- `1` — bsFrame +- `2` — bsTopLine +- `3` — bsBottomLine +- `4` — bsLeftLine +- `5` — bsRightLine -- **Applies to:** Bevel -- **Format:** `0` (bsLowered) or `1` (bsRaised) -- **Example:** `Style=1` +Style values: `0` (bsLowered), `1` (bsRaised). -### ColCount +Example: `Shape=2 Style=1` -- **Applies to:** StringGrid -- **Format:** Integer (default 5) -- **Example:** `ColCount=10` +### Header -Number of columns in the grid. +| Property | Format | Description | +|----------|--------------------------------|-----------------| +| Items | Quoted string (`\n`-delimited) | Section headers | -### RowCount +Example: `Items="Name\nAge\nCity"` -- **Applies to:** StringGrid -- **Format:** Integer (default 5) -- **Example:** `RowCount=20` +### ScrollBox -Number of rows in the grid. +No type-specific properties. -### FixedCols +### StringGrid -- **Applies to:** StringGrid -- **Format:** Integer (default 1) -- **Example:** `FixedCols=1` +| Property | Format | Description | +|------------------|---------------------------------------------------------|--------------------------| +| ColCount | Integer (default 5) | Number of columns | +| RowCount | Integer (default 5) | Number of rows | +| FixedCols | Integer (default 1) | Non-scrollable left cols | +| FixedRows | Integer (default 1) | Non-scrollable top rows | +| DefaultColWidth | Integer (pixels) | Default column width | +| DefaultRowHeight | Integer (pixels) | Default row height | +| Options | Integer (bitmask) | Grid options | +| Cells | Quoted string (tab-delimited cols, `\n`-delimited rows) | Bulk-load all cells | +| Cell | Quoted string (`col,row,value`) | Set a single cell | -Number of non-scrollable columns on the left. - -### FixedRows - -- **Applies to:** StringGrid -- **Format:** Integer (default 1) -- **Example:** `FixedRows=1` - -Number of non-scrollable rows at the top. - -### DefaultColWidth - -- **Applies to:** StringGrid -- **Format:** Integer (pixels) -- **Example:** `DefaultColWidth=80` - -### DefaultRowHeight - -- **Applies to:** StringGrid -- **Format:** Integer (pixels) -- **Example:** `DefaultRowHeight=20` - -### Options (StringGrid) - -- **Applies to:** StringGrid -- **Format:** Integer (bitmask) -- **Example:** `Options=1549` - -Bitmask of TGridOption values: +Options bitmask of TGridOption values: | Bit | Value | Option | Description | |-----|--------|---------------------|---------------------------| @@ -797,22 +689,13 @@ Bitmask of TGridOption values: | 11 | 0x0800 | goTabs | Tab between cells | | 12 | 0x1000 | goThumbTracking | Track scrollbar thumb | -### Cells - -- **Applies to:** StringGrid -- **Format:** Quoted string (tab-delimited columns, `\n`-delimited rows) -- **Example:** `Cells="Name\tAge\nAlice\t30\nBob\t25"` - -Bulk-loads all cell data. Columns are separated by tab characters, +Cells is a bulk-load property: columns are separated by tab characters, rows by newlines. Row 0 is the first row (typically fixed header). +Cell sets a single cell value: column and row are zero-based indices. -### Cell +Example: `Cells="Name\tAge\nAlice\t30\nBob\t25"` -- **Applies to:** StringGrid -- **Format:** Quoted string (`col,row,value`) -- **Example:** `Cell="1,2,Hello"` - -Sets a single cell value. Column and row are zero-based indices. +Example: `Cell="1,2,Hello"` ### BasePath diff --git a/forms/protocol.md b/forms/protocol.md index e78976f..aff3e8b 100644 --- a/forms/protocol.md +++ b/forms/protocol.md @@ -134,86 +134,219 @@ RadioGroup components do not support opt-in events. ## Properties -| Property | Applies To | Value Format | -|-------------|---------------------------------------------|-------------------------------------------| -| Caption | Label, Button, CheckBox, GroupBox, RadioButton, Panel, MenuItem, RadioGroup, BitBtn, SpeedButton | Quoted string | -| Text | Edit, ComboBox, Memo, MaskEdit | Quoted string (`\n` for line breaks) | -| Items | ListBox, ComboBox, RadioGroup, TabSet, Notebook, TabbedNotebook, Outline, Header | Quoted string (`\n`-delimited) | -| Checked | CheckBox, RadioButton, MenuItem | 0 or 1 | -| Enabled | All | 0 or 1 | -| Visible | All | 0 or 1 | -| MaxLength | Edit, MaskEdit | Integer | -| ReadOnly | Edit, Memo | 0 or 1 | -| ScrollBars | Memo | 0-3 (ssNone..ssBoth) | -| ItemIndex | ListBox, ComboBox, RadioGroup, TabSet, Notebook, TabbedNotebook | Integer (-1 = none) | -| TabOrder | All windowed controls | Integer | -| Stretch | Image | 0 or 1 | -| Center | Image | 0 or 1 | -| Transparent | Image | 0 or 1 | -| Picture | Image | Quoted string (filename, BMP only) | -| BevelOuter | Panel | 0-2 (bvNone, bvLowered, bvRaised) | -| BevelInner | Panel | 0-2 (bvNone, bvLowered, bvRaised) | -| BorderStyle | Panel | 0-1 (bsNone, bsSingle) | -| Kind | ScrollBar, BitBtn | Integer (see below) | -| Min | ScrollBar | Integer | -| Max | ScrollBar | Integer | -| Position | ScrollBar | Integer | -| LargeChange | ScrollBar | Integer | -| SmallChange | ScrollBar | Integer | -| FileName | MediaPlayer | Quoted string (media file path) | -| DeviceType | MediaPlayer | Quoted string (e.g., `dtWaveAudio`) | -| AutoOpen | MediaPlayer | 0 or 1 | -| Command | MediaPlayer | Quoted string (pseudo-property, see below)| -| Parent | MenuItem | Integer (ctrlId of parent menu/item) | -| Columns | RadioGroup | Integer (number of columns) | -| ShortCut | MenuItem | Integer (Delphi ShortCut value) | -| PopupMenu | Any TControl | Integer (ctrlId of PopupMenu) | -| Layout | BitBtn, SpeedButton | 0-3 (blGlyphLeft..blGlyphBottom) | -| NumGlyphs | BitBtn, SpeedButton | Integer (1-4) | -| GroupIndex | SpeedButton | Integer (0 = no group) | -| Down | SpeedButton | 0 or 1 | -| AllowAllUp | SpeedButton | 0 or 1 | -| EditMask | MaskEdit | Quoted string | -| OutlineStyle| Outline | 0-6 (osText..osTreePictureText) | -| Shape | Bevel | 0-5 (bsBox..bsRightLine) | -| Style | Bevel | 0-1 (bsLowered, bsRaised) | -| ColCount | StringGrid | Integer (default 5) | -| RowCount | StringGrid | Integer (default 5) | -| FixedCols | StringGrid | Integer (default 1) | -| FixedRows | StringGrid | Integer (default 1) | -| DefaultColWidth | StringGrid | Integer (pixels) | -| DefaultRowHeight| StringGrid | Integer (pixels) | -| Options | StringGrid | Integer (bitmask, see below) | -| Cells | StringGrid | Quoted string (tab-delimited cols, `\n`-delimited rows) | -| Cell | StringGrid | Quoted string (`col,row,value`) | +### Common Properties -File path properties (Picture, FileName) are resolved relative to the -client's `BasePath` setting. Subdirectories are allowed (e.g., -`Picture="images\logo.bmp"` with `BasePath=C:\MYAPP` resolves to -`C:\MYAPP\images\logo.bmp`). +| Property | Applies To | Format | +|-----------|--------------|-------------------------------| +| Enabled | All | 0 or 1 | +| Visible | All | 0 or 1 | +| TabOrder | All windowed | Integer | +| PopupMenu | Any TControl | Integer (ctrlId of PopupMenu) | -Command is a pseudo-property that triggers a method call on the -MediaPlayer rather than setting a value. Valid commands: `Open`, -`Play`, `Stop`, `Close`, `Pause`, `Resume`, `Rewind`, `Next`, -`Previous`. +### Label, Button, GroupBox -StringGrid Options is an integer bitmask of TGridOption values: +| Property | Format | +|----------|---------------| +| Caption | Quoted string | -| Bit | Value | Option | -|--------|--------|---------------------| -| 0 | 0x0001 | goFixedVertLine | -| 1 | 0x0002 | goFixedHorzLine | -| 2 | 0x0004 | goVertLine | -| 3 | 0x0008 | goHorzLine | -| 4 | 0x0010 | goRangeSelect | -| 5 | 0x0020 | goDrawFocusSelected | -| 6 | 0x0040 | goRowSizing | -| 7 | 0x0080 | goColSizing | -| 8 | 0x0100 | goRowMoving | -| 9 | 0x0200 | goColMoving | -| 10 | 0x0400 | goEditing | -| 11 | 0x0800 | goTabs | -| 12 | 0x1000 | goThumbTracking | +### Edit + +| Property | Format | +|-----------|---------------| +| Text | Quoted string | +| MaxLength | Integer | +| ReadOnly | 0 or 1 | + +### CheckBox, RadioButton + +| Property | Format | +|----------|---------------| +| Caption | Quoted string | +| Checked | 0 or 1 | + +### ListBox + +| Property | Format | +|-----------|--------------------------------| +| Items | Quoted string (`\n`-delimited) | +| ItemIndex | Integer (-1 = none) | + +### ComboBox + +| Property | Format | +|-----------|--------------------------------| +| Text | Quoted string | +| Items | Quoted string (`\n`-delimited) | +| ItemIndex | Integer (-1 = none) | + +### Memo + +| Property | Format | +|------------|--------------------------------------| +| Text | Quoted string (`\n` for line breaks) | +| ReadOnly | 0 or 1 | +| ScrollBars | 0-3 (ssNone..ssBoth) | + +### Image + +| Property | Format | +|-------------|------------------------------------| +| Picture | Quoted string (filename, BMP only) | +| Stretch | 0 or 1 | +| Center | 0 or 1 | +| Transparent | 0 or 1 | + +File path resolved relative to client's `BasePath` setting. + +### Panel + +| Property | Format | +|-------------|------------------------------------| +| Caption | Quoted string | +| BevelOuter | 0-2 (bvNone, bvLowered, bvRaised) | +| BevelInner | 0-2 (bvNone, bvLowered, bvRaised) | +| BorderStyle | 0-1 (bsNone, bsSingle) | + +### ScrollBar + +| Property | Format | +|-------------|-----------------------------------| +| Kind | 0 (sbHorizontal), 1 (sbVertical) | +| Min | Integer | +| Max | Integer | +| Position | Integer | +| LargeChange | Integer | +| SmallChange | Integer | + +### MediaPlayer + +| Property | Format | +|------------|-------------------------------------| +| FileName | Quoted string (media file path) | +| DeviceType | Quoted string (e.g., `dtWaveAudio`) | +| AutoOpen | 0 or 1 | +| Command | Quoted string (pseudo-property) | + +File path resolved relative to client's `BasePath` setting. + +Command triggers a method call rather than setting a value. Valid +commands: `Open`, `Play`, `Stop`, `Close`, `Pause`, `Resume`, +`Rewind`, `Next`, `Previous`. + +### MainMenu, PopupMenu + +No type-specific properties. One MainMenu per form (auto-attached). +PopupMenu is associated with controls via the common `PopupMenu` +property. + +### MenuItem + +| Property | Format | +|----------|--------------------------------------| +| Caption | Quoted string | +| Parent | Integer (ctrlId of parent menu/item) | +| Checked | 0 or 1 | +| ShortCut | Integer (Delphi ShortCut value) | + +### RadioGroup + +| Property | Format | +|-----------|--------------------------------| +| Caption | Quoted string | +| Items | Quoted string (`\n`-delimited) | +| ItemIndex | Integer (-1 = none) | +| Columns | Integer | + +### BitBtn + +| Property | Format | +|-----------|----------------------------------| +| Caption | Quoted string | +| Kind | 0-10 (bkCustom..bkAll) | +| Layout | 0-3 (blGlyphLeft..blGlyphBottom) | +| NumGlyphs | Integer (1-4) | + +### SpeedButton + +| Property | Format | +|------------|----------------------------------| +| Caption | Quoted string | +| Layout | 0-3 (blGlyphLeft..blGlyphBottom) | +| NumGlyphs | Integer (1-4) | +| GroupIndex | Integer (0 = no group) | +| Down | 0 or 1 | +| AllowAllUp | 0 or 1 | + +### TabSet, Notebook, TabbedNotebook + +| Property | Format | +|-----------|--------------------------------| +| Items | Quoted string (`\n`-delimited) | +| ItemIndex | Integer (-1 = none) | + +### MaskEdit + +| Property | Format | +|-----------|---------------| +| Text | Quoted string | +| MaxLength | Integer | +| EditMask | Quoted string | + +### Outline + +| Property | Format | +|--------------|---------------------------------| +| Items | Quoted string (`\n`-delimited) | +| OutlineStyle | 0-6 (osText..osTreePictureText) | + +### Bevel + +| Property | Format | +|----------|----------------------------| +| Shape | 0-5 (bsBox..bsRightLine) | +| Style | 0-1 (bsLowered, bsRaised) | + +### Header + +| Property | Format | +|----------|--------------------------------| +| Items | Quoted string (`\n`-delimited) | + +### ScrollBox + +No type-specific properties. + +### StringGrid + +| Property | Format | +|------------------|---------------------------------------------------------| +| ColCount | Integer (default 5) | +| RowCount | Integer (default 5) | +| FixedCols | Integer (default 1) | +| FixedRows | Integer (default 1) | +| DefaultColWidth | Integer (pixels) | +| DefaultRowHeight | Integer (pixels) | +| Options | Integer (bitmask, see below) | +| Cells | Quoted string (tab-delimited cols, `\n`-delimited rows) | +| Cell | Quoted string (`col,row,value`) | + +Options is an integer bitmask of TGridOption values: + +| Bit | Value | Option | +|-----|--------|---------------------| +| 0 | 0x0001 | goFixedVertLine | +| 1 | 0x0002 | goFixedHorzLine | +| 2 | 0x0004 | goVertLine | +| 3 | 0x0008 | goHorzLine | +| 4 | 0x0010 | goRangeSelect | +| 5 | 0x0020 | goDrawFocusSelected | +| 6 | 0x0040 | goRowSizing | +| 7 | 0x0080 | goColSizing | +| 8 | 0x0100 | goRowMoving | +| 9 | 0x0200 | goColMoving | +| 10 | 0x0400 | goEditing | +| 11 | 0x0800 | goTabs | +| 12 | 0x1000 | goThumbTracking | Cells is a bulk-load property: columns are tab-delimited, rows are `\n`-delimited. Cell is an individual update: `"col,row,value"`.