Объекты 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
- Material
- Menu (но не MenuItem(), поскольку это не объект),
- Mesh
- Movie
- Music
- Network
- Node
- Particle
- RegularExpression
- SerialPort
- Sound
- Sound3D
- Sprite
- StatusBar
- Texture
- ToolBar
- Window
- Window3D
- XML