Динамічне створення і видалення об'єктів

Динамічне створення і видалення об'єктів

Звичайно, завжди можна було заздалегідь створити всі необхідні об'єкти, приховати їх від користувача і потім відобразити в потрібний момент. Але це було не дуже зручним рішенням, особливо для ігор або проектів зі складним кодом. Ось ми і підійшли до головного. Починаючи з версії 4.9.8, ви можете динамічно створювати більшість основних об'єктів і навіть видаляти їх (в цілях економії пам'яті) за допомогою команди DeleteObject. Для зміни властивостей динамічно створених об'єктів використовуйте команду SetObjectParam.

Ось список команд, що дозволяють вам динамічно створювати об'єкти:
  • Створення кнопки - CreateTextButton ( "inlabel", "outlabel $, x, y, w, h, text")
  • Створення текстового об'єкта - CreateText ( "inlabel", "outlabel $, x, y, text")
  • Створення тексту з смугою прокрутки - CreateParagraph ( "inlabel", "outlabel $, x, y, w, h, text")
  • Створення кола - CreateCircle ( "inlabel", "outlabel $, x, y, w, h, r, g, b")
  • Створення прямокутника - CreateRectangle ( "inlabel", "outlabel $, x, y, w, h, r, g, b")
  • Створення лінії (відносне позиціонування) - CreateLine ( "inlabel", "outlabel $, x, y, w, h, r, g, b")
  • Створення прямокутника (абсолютне позиціонування) - CreateLineAB ( "inlabel", "outlabel $, x1, y1, x2, y2, r, g, b")
  • Створення активної області - CreateHotSpot ( "inlabel", "outlabel $, x, y, w, h")
  • Створення скрипта - CreateScript ( "inlabel", "outlabel $")
Де.
x - координата об'єкта по осі x
y - координата об'єкта по осі y
w - ширина об'єкта
h - висота об'єкта
r. g. b - колір об'єкта в системі RGB (значення від 0 до 255)
text - текст об'єкта
inlabel - призначене для користувача ім'я об'єкта, припустимо, Text. Якщо в проекті вже присутній об'єкт з таким ім'ям, то до призначеного для користувача імені буде приєднано число і вийшло ім'я буде передано в вихідну змінну outlabel $. Як ви можливо знаєте, на одній сторінці не може бути два об'єкта з однаковим ім'ям.

Одним словом, якщо об'єкт вже існує (скажімо, Text), то буде використано перше з можливих імен, заснованих на призначеному для користувача імені (наприклад, Text13). Це ім'я буде передано в змінну outlabel $ і буде використовуватися MMB. Якщо вам буде потрібно видалити або приховати цей об'єкт, то ви повинні будете використовувати змінну outlabel $ у відповідній команді.

Всі параметри є вхідними (за винятком outlabel $) і можуть бути задані за допомогою числових або строкових змінних.

Всі параметри необов'язкові, але рекомендується вказувати хоча б текст / координати;)

Якщо параметр inlabel не вказано, то функція буде використовувати імена за замовчуванням (наприклад, TextBTN, Circle.). Якщо розміри / координати не вказані, то об'єкт буде створений в точці 0,0 і мати розмір за замовчуванням.

Ви можете пропустити деякі параметри, але ви як і раніше повинні використовувати відповідне число ком як роздільники параметрів. Наприклад, ви хочете створити кнопку з певною написом в заданій точці, а розмір кнопки залишити на розсуд MMB. Код повинен виглядати так.

За допомогою команд CreateLine і CreateLineAB ви можете створити лінію.

Можливі параметри для команди CreateLine.
призначене для користувача ім'я, вихідна змінна
x. y - координати x, y
w. h - ширина і висота
r. g. b - колір

Можливі параметри для команди CreateLineAB.
призначене для користувача ім'я, вихідна змінна
x1. y1 - координати початкової точки
x2. y2 - координати кінцевої точки
r. g. b - колір

У той час як лінія, створена за допомогою команди CreateLineAB. має абсолютні координати початкової і кінцевої точок у вікні проекту, положення лінії, створеної за допомогою CreateLine визначається довжиною / висотою обмежує її прямокутника. Іншими словами, дві команди з абсолютно однаковими значеннями дадуть різні результати, оскільки вони по-різному інтерпретують задані значення.

Будь ласка, погляньте на ілюстрацію:


Ось код, який був використаний при створенні цього малюнка:

CreateLine ( "LINE", "outlabel $, 20,20,280,200,255,0,0")
CreateLineAB ( "LINE", "outlabel $, 20,20,280,200,0,0,255")

Як ви можливо знаєте, координати більшості об'єктів MMB визначаються положенням лівого верхнього кута, а також довжиною і висотою об'єкта, що фактично є координатами правого нижнього кута. Те ж стосується і команди CreateLine. Незважаючи на те, що це здається марним (вказувати довжину і висоту лінії), це дуже зручно у випадках, коли вам необхідно створити кілька ліній з відносним позиціонуванням.

** У цьому прикладі показано, як створити галерею зображень з розрахунком максимального числа зображень, що вміщаються в вікні проекту
pw = PubWidth ()
ph = PubHeight ()
** відстань між зображеннями
coef = 10
w = 50
h = 50
** число зображень для поточної ширини вікна
n_imgs_w = pw / (w + coef)
RoundNum1 = INT (n_imgs_w)
RoundNum2 = n_imgs_w-RoundNum1
If (RoundNum2> = 0. 5) Then
n_imgs_w = RoundNum1 + 1
End
** число стовпців
n_imgs_w = n_imgs_w- 1
** число зображень для поточної висоти вікна
n_imgs_h = ph / (h + coef)
RoundNum1 = INT (n_imgs_h)
RoundNum2 = n_imgs_h-RoundNum1
If (RoundNum2> = 0. 5) Then
n_imgs_h = RoundNum1 + 1
End
** число рядків
n_imgs_h = n_imgs_h- 1
********************
x = coef
y = coef
For j = 1 To n_imgs_h

For i = 1 To n_imgs_w

Pause ( "50")
CreateHotSpot ( "HSpot", "object [i] $, x, y, w, h")
** нова координата x (для стовпця)
x = x + w + coef
** додамо код для активної області
script $ = 'CurObj $ = CurrentObject ()' + CHR (13) + CHR (10)
script $ = script $ + 'Message ( "SelectedObject", "CurObj $")' + CHR (13) + CHR (10)
SetObjectParam ( "object [i] $", "MOUSEUPSCRIPT: 1 = script $")
/ * Задамо повторення зображень. Якщо у вас в каталозі тільки 3
зображення, а число активних областей більше, то вам доведеться
повторювати зображення. У нашому прикладі в каталозі всього лише 3 файлу,
тому, якщо число областей більше або дорівнює 3,
виконуємо скидання лічильника зображень * /
If (ni> = 3) Then

** інакше збільшуємо значення лічильника
ni = ni + 1

End
imgpath $ = '\ Images \\ '+ CHAR (ni) +' .jpg '
** завантаження зображення в активну область
ReplaceImage ( "object [i] $", "imgpath $")
** перемещаем об'єкт на задній план
ReorderObject ( "object [i] $", "BACK")
Refresh ( "")

Next i
** скидання координати x (для стовпця)
x = coef
** нова координата y (для рядка)
y = y + h + coef

За допомогою цієї команди ви можете створити скрипт.

Можливі параметри:
призначене для користувача ім'я, вихідна змінна

Об'єкт-скрипт це маленький жовтий квадратик, який містить скрипти, які можна викликати за допомогою команд RunScript і ScriptTimer. Це щось на зразок процедури, яка може бути викликана з іншої виконується (за допомогою RunScript) частини вашого проекту, або запущена паралельно (через ScriptTimer). Зазвичай об'єкти-скрипти створюються в процесі розробки проекту. Але тепер завдяки команді CreateScript ви можете створити новий об'єкт-скрипт і під час виконання програми та зіставити йому певний код за допомогою команди SetObjectParam. яка дозволяє (починаючи з версії 4.9.8) замінювати поточний скрипт об'єкта новим. Код скрипта може бути згенерований в іншому скрипті, завантажений з файлу або просто набраний в едітбоксе;)

** створення скрипта з ім'ям "SCRIPT"
CreateScript ( "SCRIPT", "outlabel $")
** призначення нового коду
ScriptParam $ = 'SCRIPT: 1 =' + 'Message ( "Привіт!", "")'
SetObjectParam ( "outlabel $", "ScriptParam $")
** виконання створеного скрипта
RunScript ( "outlabel $")

** створення скрипта з ім'ям "SCRIPT", на цей раз з кількома рядками коду
CreateScript ( "SCRIPT", "outlabel $")
** призначення нового коду
script $ = 'SCRIPT: 1 =' + 'For i = 1 To 10' + CHR (13) + CHR (10)
script $ = script $ + 'loop $ = CHAR (i)' + CHR (13) + CHR (10)
script $ = script $ + 'Message ( "Loop:", "loop $")' + CHR (13) + CHR (10)
script $ = script $ + 'Next i'
SetObjectParam ( "outlabel $", "script $")
** виконання створеного скрипта
RunScript ( "outlabel $")

** видалення об'єкта "TextBTN"
DeleteObject ( "TextBTN")

** видалення всіх кнопок з TextBTN1 до TextBTN10
For i = 1 To 10
DeleteObject ( "TextBTN [i]")
Next i