McBasic™Get McBasic™ ↗
Build 881
Hands-on tutorial · Media & graphics

Manage a shared image collection

Declare reusable images independently from the controls that display them.

1 Form / control designs1 complete BASIC filesGuided sample project

A shared list avoids embedding the same image configuration in every consumer. Resource names are project identities; they are not arbitrary absolute file paths. Preserve the declared assets when copying or packaging the project.

Step 1Prepare a safe practice project#

Extract the archive into a new writable folder, separate from your own application. Open ImageList.mcbproj in McBasic™. Keep every declared source, layout, resource and migration file together.

To reconstruct it yourself, create a DesktopApp project and add the files declared below. In the complete project, follow these steps as a guided rebuild: replace each named source file once and Check after all its procedures are present.

Exact project configuration
project.mcproj
{
  "schemaVersion": 1,
  "projectId": "52cc3a4e-18d8-4e1c-b6ea-548d746ac151",
  "name": "ImageListSample",
  "kind": "DesktopApp",
  "ai": {
    "storeChatsInProject": false
  },
  "language": {
    "dialect": "McBasic1",
    "requireExplicit": true,
    "compare": "Binary",
    "defaultArrayBase": 0
  },
  "application": {
    "bundleIdentifier": "com.mcbasic.samples.imagelist",
    "version": "0.1.0",
    "buildNumber": "1",
    "startupFormId": "form-main",
    "shutdownMode": "OnStartupFormClosed"
  },
  "forms": [
    {
      "id": "form-main",
      "typeName": "frmMain",
      "layout": "Forms/frmMain.form.json",
      "code": "Forms/frmMain.bas"
    }
  ],
  "modules": [],
  "classes": [],
  "tests": [],
  "references": [],
  "resources": [
    {
      "name": "Logo",
      "path": "Resources/logo.png"
    }
  ],
  "targets": [
    "osx-arm64"
  ],
  "capabilities": []
}

Step 2Build the Form and set its properties#

frmMain

Select the Form first and set its properties. Add containers before their children. These are initial Designer values, not statements to paste into a procedure.

Form propertyValue
Caption"ImageList — McBasic"
Width480
Height210
MinWidth400
MinHeight180
TypeNameParent
LabellblStatusForm
CommandButtoncmdCloseForm
ImageListimgListMainComponent tray
lblStatus · exact Inspector values
PropertyValue
Left30
Top35
Width420
Height70
Caption"Loading ImageList…"
WordWrapTrue
Anchor edgesLeft, Top, Right
cmdClose · exact Inspector values
PropertyValue
Left30
Top125
Width120
Height36
Caption"Close"
TabIndex0
Anchor edgesLeft, Bottom
imgListMain · exact Inspector values
PropertyValue
Images"Logo=Logo\nSecondary=Logo"

Step 3Connect the events explicitly#

frmMain

ObjectEventProcedureParameters
cmdCloseClickcmdClose_ClickClick()
FormLoadForm_Load()

Step 4Enter the complete behavior#

Open the named source file. Enter declarations first, then every procedure. Expand a procedure for its full body, or copy the complete file. Helpers are required: do not stop after entering the first Click handler.

Forms/frmMain.bas

Enter these declarations at file scope, before the procedures.

Forms/frmMain.bas · declarations
Option Explicit
Private Sub Form_Load()

Initialize state before enabling dependent actions. Keep the shared declarations and startup dependencies with this procedure.

Forms/frmMain.bas · Form_Load
Private Sub Form_Load()
    If imgListMain.Count = 2 And imgListMain.Error = "" Then
        If imgListMain.Images.Item("Logo") = Resources.Logo Then
            lblStatus.Caption = "2 images loaded. Named and one-based lookup are available."
        End If
    Else
        lblStatus.Caption = imgListMain.Error
    End If
End Sub
Private Sub cmdClose_Click()

Enter the complete action, including its input checks and calls to helper procedures.

Forms/frmMain.bas · cmdClose_Click
Private Sub cmdClose_Click()
    Unload Me
End Sub
Copy the complete Forms/frmMain.bas file

Replace the file once; do not append duplicate procedures.

Forms/frmMain.bas
Option Explicit

Private Sub Form_Load()
    If imgListMain.Count = 2 And imgListMain.Error = "" Then
        If imgListMain.Images.Item("Logo") = Resources.Logo Then
            lblStatus.Caption = "2 images loaded. Named and one-based lookup are available."
        End If
    Else
        lblStatus.Caption = imgListMain.Error
    End If
End Sub

Private Sub cmdClose_Click()
    Unload Me
End Sub

Step 5Keep resources and storage reproducible#

Keep the following files at their declared relative paths. Apply migrations before the first query. Media and report resources must travel with the build.

FilePurpose
Resources/logo.pngBundled asset / license

Step 6Check, run and test the result#

Save all files and run Check. Resolve diagnostics before Run. Developer CLI users can work from the extracted folder:

Developer CLI
mcbasic check ImageList.mcbproj
mcbasic run ImageList.mcbproj

Acceptance checklist

  • Open the project with its resource files present.
  • Run and verify the image collection status.
  • Inspect the collection’s keys and consumers in the Designer.

Step 7Make one change and repeat the tests#

Reference the same image list from an additional compatible control.

Save a working Git checkpoint first. Change one behavior, Check again and repeat the acceptance checklist. Compare with the downloaded solution if a regression appears.

Source baseline 20f4bfed6b · Build manifest