Widget frmParty(Container) Widget cmdAddMember(Button) Set .Rectangle = F2Rect(10, 10, 100, 20, False) .Text = "Add" End Widget Widget cmdRemoveMember(Button) Set .Rectangle = F2Rect(120, 10, 100, 20, False) .Text = "Remove" End Widget Widget lstMembers(ListBox) End Widget Widget fraMember(Window) .Text = "Selected Member" ' This block generates a textbox for all of the editable variables a party member has ' You can add/remove/modify the variables by changing the list of names in the () Widgets $var(Name Level HP MP Strength Agility Intelligence Sprite) Widget txtMember$var(TextField) .Label = "$var:" End Widget End Widgets Widget lstActions(ListBox) .Label = "Actions:" End Widget Widget cmdAddAction(Button) .Text = "Add" End Widget Widget cmdRemoveAction(Button) .Text = "Remove" End Widget End Widget End Widget Public Party Public Editor Public Sub Form_Initialize() Refresh End Sub Public Sub Editor_Initialize() On Error Resume Next Editor.SetTabs Array("Party Members") Editor.EnableProperties = False Refresh End Sub Public Sub Editor_TabSelected(Tab) End Sub Public Sub lstMembers_Select(Item) On Error Resume Next RefreshItem End Sub Public Sub frmParty_Resize() On Error Resume Next Dim TheCtl, X, Y, XSpace, W, H Set lstMembers.Rectangle = F2Rect(10, 40, This.Rectangle.Width - 20, 100, False) Set fraMember.Rectangle = F2Rect(lstMembers.Rectangle.Left, lstMembers.Rectangle.Bottom + 10, lstMembers.Rectangle.Width, This.Rectangle.Height - lstMembers.Rectangle.Bottom - 20, False) Y = 18 XSpace = 70 X = 0 For Each TheCtl In fraMember.Children If TypeName(TheCtl) = "TextField" Then If (X > 0) Then Y = Y + H + 7 X = 0 H = 15 Set TheCtl.Rectangle = F2Rect(5 + X + XSpace, Y, fraMember.Rectangle.Width - XSpace - 10, H, False) Y = Y + H + 7 ElseIf TypeName(TheCtl) = "ListBox" Then If (X > 0) Then Y = Y + H + 7 X = 0 H = 15 * 5 Set TheCtl.Rectangle = F2Rect(5 + X + XSpace, Y, fraMember.Rectangle.Width - XSpace - 10, H, False) Y = Y + H + 7 ElseIf TypeName(TheCtl) = "Button" Then H = 17 W = 80 Set TheCtl.Rectangle = F2Rect(5 + X + XSpace, Y, W, H, False) X = X + W + 12 End If Next End Sub Public Sub cmdAddMember_Click() On Error Resume Next Dim NewMember Set NewMember = Party.CreateMember() NewMember.Name = "New Member" Party.Members.Add NewMember lstMembers.Items.AddItem NewMember.Name lstMembers.SelectedItem = lstMembers.Items.Count RefreshItem End Sub Public Sub cmdRemoveMember_Click() On Error Resume Next Dim I I = lstMembers.SelectedItem Party.Members.Remove lstMembers.SelectedItem lstMembers.Items.Remove lstMembers.SelectedItem lstMembers.SelectedItem = ClipInteger(I, 1, lstMembers.Items.Count) RefreshItem End Sub Public Sub cmdAddAction_Click() On Error Resume Next Dim ActionName, Arr ActionName = InputBox("Name:", "Add Action") If Len(Trim(CStr(ActionName))) = 0 Then Exit Sub With Party.Members(lstMembers.SelectedItem) Arr = .Actions ArrayInsert Arr, ActionName, lstActions.SelectedItem - 1 .Actions = Arr End With RefreshItem End Sub Public Sub cmdRemoveAction_Click() On Error Resume Next Dim Arr With Party.Members(lstMembers.SelectedItem) Arr = .Actions ArrayRemove Arr, lstActions.SelectedItem - 1 .Actions = Arr End With RefreshItem End Sub Public Sub txtMemberName_Change() On Error Resume Next With Party.Members(lstMembers.SelectedItem) .Name = txtMemberName.Text lstMembers.Items(lstMembers.SelectedItem).Text = .Name End With End Sub Public Sub txtMemberLevel_Change() On Error Resume Next With Party.Members(lstMembers.SelectedItem) .Level = CLng(txtMemberLevel.Text) End With End Sub Public Sub txtMemberHP_Change() On Error Resume Next With Party.Members(lstMembers.SelectedItem) .MaxHP = CSng(txtMemberHP.Text) .HP = .MaxHP End With End Sub Public Sub txtMemberMP_Change() On Error Resume Next With Party.Members(lstMembers.SelectedItem) .MaxMP = CSng(txtMemberMP.Text) .MP = .MaxMP End With End Sub Public Sub txtMemberStrength_Change() On Error Resume Next With Party.Members(lstMembers.SelectedItem) .Strength = CSng(txtMemberStrength.Text) End With End Sub Public Sub txtMemberAgility_Change() On Error Resume Next With Party.Members(lstMembers.SelectedItem) .Agility = CSng(txtMemberAgility.Text) End With End Sub Public Sub txtMemberIntelligence_Change() On Error Resume Next With Party.Members(lstMembers.SelectedItem) .Intelligence = CSng(txtMemberIntelligence.Text) End With End Sub Public Sub txtMemberSprite_Change() On Error Resume Next With Party.Members(lstMembers.SelectedItem) .SpriteFilename = txtMemberSprite.Text End With End Sub Public Sub Refresh() On Error Resume Next Dim Member, I I = lstMembers.SelectedItem lstMembers.Items.Clear For Each Member In Party lstMembers.Items.AddItem Member.Name Next lstMembers.SelectedItem = ClipInteger(I, 1, lstMembers.Items.Count) RefreshItem End Sub Public Sub RefreshItem() On Error Resume Next Dim Action With Party.Members(lstMembers.SelectedItem) txtMemberName.Text = .Name txtMemberLevel.Text = .Level txtMemberHP.Text = .MaxHP txtMemberMP.Text = .MaxMP txtMemberStrength.Text = .Strength txtMemberIntelligence.Text = .Intelligence txtMemberAgility.Text = .Agility txtMemberSprite.Text = .SpriteFilename lstActions.Items.Clear For Each Action In .Actions lstActions.Items.AddItem Action Next End With End Sub