PureBasic

Объекты PureBasic

Краткое описание функций:
Индексная нумерация Объектов Динамическая нумерация Объектов Объекты PureBasic

Введение

Назначение этого раздела описать поведение, создание и использование объектов в PureBasic. Для демонстрации мы используем объект Image, но та же логика применима ко всем другим объектам PureBasic. Создать объект Image мы можем двумя способами: индексным и динамическим.

I. Индексная нумерация Объектов

Индексный (статический) способ используется для ссылки на объект, по заранее заданному числовому значению. Оно должно быть от 0 до максимального числа, которое будет зависеть от типа объекта (обычно максимум от 5000 до 64000). Это значит, что если вы используете Номер 0 и затем Номер 1000, будет занят 1001 индекс и из них 999 (от 1 до 999) будут не использованы, что не очень эффективно. По этой причине следует как можно чаще использовать последовательное индексирование, начиная с 0. Если вам нужен более гибкий метод, используйте динамический способ создания объектов, как описано в разделе II. Индексный способ предоставляет несколько преимуществ:

- Более простая обработка, так как не требуются никаких переменных или массивов.
- 'Групповая' обработка, без необходимости использовать промежуточный массив.
- Использование объекта в процедурах, без объявления чего-либо с ключевым словом global (если используется константа или Номер).
- Объект, который связан с индексом, автоматически удаляется при повторном использовании этого индекса.
Настоятельно рекомендуется использовать Перечисления если вы собираетесь использовать последовательные константы для идентификации объектов (что также рекомендуется).

Пример

CreateImage(0, 640, 480) ; Создайте изображение, №0
ResizeImage(0, 320, 240) ; Измените размеры изображения №0

Пример

CreateImage(2, 640, 480) ; Создайте изображение, №2
ResizeImage(2, 320, 240) ; Измените размеры изображения №2
CreateImage(2, 800, 800) ; Создайте новое изображение с индексом №2, старое - автоматически удаляется.

Пример

For k = 0 To 9
    CreateImage(k, 640, 480) ; Создайте 10 различных изображений, пронумерованных от 0 до 9
    ResizeImage(k, 320, 240) ; Измените размеры изображения с указанном индексом, старое изображение будет заменено новым.
Next

Пример

  #ImageBackground = 0
  #ImageButton     = 1

  CreateImage(#ImageBackground, 640, 480) ; Создайте изображение (№0)
  ResizeImage(#ImageBackground, 320, 240) ; Измените размеры фонового изображения
  CreateImage(#ImageButton    , 800, 800) ; Создайте изображение (№1)

II. Динамическая нумерация Объектов

Иногда индексная (статическая) нумерация не очень удобна для работы в динамических ситуациях, когда нам нужно иметь дело с неизвестным количеством объектов. PureBasic предоставляет простой дополнительный способ создавать объекты в динамическом стиле. Оба метода (индексный и динамический) можно использовать вместе без какого-либо конфликта. Чтобы создать динамический объект, достаточно указать константу #PB_Any вместо Номера индекса, и в качестве результата функции будет возвращён динамический Номер. После этого просто используйте этот Номер с другими объектными функциями там, где вы использовали бы индексный Номер (исключая создание нового объекта). Этот способ работы с объектами может быть очень полезен при использовании в сочетании со Связным списком, который также является динамическим средством управления данными.

Пример

DynamicImage1 = CreateImage(#PB_Any, 640, 480) ; Создайте динамическое изображение
ResizeImage(DynamicImage1, 320, 240) ; Измените размеры DynamicImage1

Полный пример динамических объектов и связных списков может быть найден здесь:

Пример

MDI_ImageViewer.pb

Дальнейшее описание и пример динамически нумеруемых множества окон и Гаджетов могут быть найдены в связанной с этой темой главе 'Для новичков'.

Обзор объектов PureBasic

Различные объекты PureBasic (окна, Гаджеты, спрайты, и т.д.) могут использовать одинаковые индексные Номера из диапазона объектных индексных чисел, если объекты отличаются типом. Таким образом, для каждого типа объектов есть своя нумерация начинающаяся с 0 (или другого заданного значения) и PureBasic отличает их по Номерам и их типам:
- Database
- Dialog
- Entity
- File
- FTP
- Gadget (включая ScintillaGadget())
- Gadget3D
- Image
- Library
- Light
- Mail
- Material
- Menu (но не MenuItem(), поскольку это не объект),
- Mesh
- Movie
- Music
- Network
- Node
- Particle
- RegularExpression
- SerialPort
- Sound
- Sound3D
- Sprite
- StatusBar
- Texture
- ToolBar
- Window
- Window3D
- XML
:��C�/