PureBasic

CanvasGadget()

Синтаксис

Result = CanvasGadget(#Gadget , x , y , Width , Height [, Flags])

Описание


Создаёт Гаджет "Канвас" (Canvas Gadget) в текущем списке Гаджетов (Gadget List). Канвас означает - холст для рисования. Этот Гаджет предоставляет поверхность для вывода графики (без альфа-канала) и события для взаимодействия с мышью и клавиатурой, что позволяет использовать его для создания пользовательских интерфейсов.

Параметры

#Gadget Номер для идентификации нового Гаджета. В качестве этого параметра можно использовать значение #PB_Any, чтобы сгенерировать этот Номер автоматически.
x, y, Width, Height Позиция и размеры нового Гаджета (в пикселях). Максимальная ширина и высота - 16000 пикселей.
Flags (дополн.) Флаги, позволяющие изменить поведение Гаджета. Этот параметр может быть комбинацией следующих значение (с помощью оператора '|'):
  #PB_Canvas_Border   : Рисует рамку вокруг Гаджета.
  #PB_Canvas_ClipMouse: Ограничивает курсор мыши областью холста, если нажата кнопка мыши (не поддерживается в OSX и Linux Gtk3).
  #PB_Canvas_Keyboard : Позволяет Гаджету получать фокус клавиатуры и события клавиатуры.
  #PB_Canvas_DrawFocus: Рисует прямоугольник фокуса на Гаджете, если он имеет фокус клавиатуры.
  #PB_Canvas_Container: Включает поддержку контейнера, поэтому к нему можно добавить Гаджет. CloseGadgetList() должен быть вызван,
            чтобы вернуться к предыдущему списку Гаджетов, как и любой другой контейнерный Гаджет.
            В Windows прозрачность Гаджетов не работает, поэтому текст следующих Гаджетов будет отображаться на
            непрозрачном фоне: CheckBoxGadget, FrameGadget, HyperlinkGadget, OptionGadget, TextGadget and TrackBarGadget.
Флаг #PB_Canvas_Keyboard необходим для получения любых клавиатурных событий в Гаджете. Если вы включите этот флаг, вам следует проверить наличие событий #PB_EventType_Focus и #PB_EventType_LostFocus и нарисовать визуальную индикацию Гаджета, когда он имеет фокус, таким образом пользователю будет понятно, какой Гаджет в данный момент находится в фокусе. В качестве альтернативы можно включить флаг #PB_Canvas_DrawFocus, чтобы Гаджет рисовал стандартный прямоугольник фокуса всякий раз, когда он находится в фокусе.

Возвращаемое значение

Возвращает не нулевое значение в случае успешного создания Гаджета, в противном случае возвращает ноль. Если в качестве параметра #Gadget использовалось значение #PB_Any, то в случае успеха, возвращаемым значением будет сгенерированный Номер Гаджета.

Комментарии

CanvasGadget() не имеет альфа-канала, поэтому режимы #PB_2DDrawing_AlphaChannel функции DrawingMode() не будут действовать, а режим #PB_2DDrawing_AllChannels будет эквивалентен #PB_2DDrawing_Default.

Созданный CanvasGadget в начале имеет только белый фон. Используйте команды CanvasOutput() или CanvasVectorOutput(), для вывода графики на этот Гаджет. Всё что нарисовано на выводимой поверхности Гаджета, остаётся там постоянно, пока не будет стёрто другими командами рисования. Нет необходимости перерисовывать содержимое всякий раз, при получении события #PB_Event_Repaint.

Гаджет сообщает о следующих событиях. Функция EventType() сообщает о типе текущего события Гаджета:
  #PB_EventType_MouseEnter      : В Гаджет введен курсор мыши
  #PB_EventType_MouseLeave      : Курсор мыши покинул Гаджет
  #PB_EventType_MouseMove       : Перемещение курсора мыши
  #PB_EventType_MouseWheel      : Колесо мыши было перемещено
  #PB_EventType_LeftButtonDown  : Левая кнопка мыши была нажата
  #PB_EventType_LeftButtonUp    : Левая кнопка мыши была отпущена
  #PB_EventType_LeftClick       : Щелчок левой кнопкой мыши
  #PB_EventType_LeftDoubleClick : Двойной щелчок левой кнопкой мыши
  #PB_EventType_RightButtonDown : Правая кнопка мыши была нажата
  #PB_EventType_RightButtonUp   : Правая кнопка мыши была отпущена
  #PB_EventType_RightClick      : Щелчок правой кнопкой мыши
  #PB_EventType_RightDoubleClick: Двойной щелчок правой кнопкой мыши
  #PB_EventType_MiddleButtonDown: Средняя кнопка мыши была нажата
  #PB_EventType_MiddleButtonUp  : Средняя кнопка мыши была отпущена
  #PB_EventType_Focus           : Гаджет получил фокус клавиатуры
  #PB_EventType_LostFocus       : Гаджет потерял фокус клавиатуры
  #PB_EventType_KeyDown         : Нажата клавиша
  #PB_EventType_KeyUp           : Отпущена клавиша
  #PB_EventType_Input           : Был введён текст 
  #PB_EventType_Resize          : Размер Гаджета был изменен  
Обратите внимание на то, что события #PB_EventType_KeyDown, #PB_EventType_KeyUp и #PB_EventType_Input передаются только тогда, когда Гаджет имеет фокус клавиатуры. Это значит, что при создании Гаджета должен быть установлен флаг #PB_Canvas_Keyboard, если Вы хотите использовать события клавиатуры. В Windows событие #PB_EventType_MouseWheel также отображается, только если Гаджет имеет фокус клавиатуры. В другой ОС это событие сообщается Гаджету под курсором, независимо от фокуса клавиатуры.

Дополнительная информация о текущем событии может быть получена с помощью функции GetGadgetAttribute(). Эта информация доступна, только если текущее событие, полученное через WaitWindowEvent() или WindowEvent(), является событием ЭТОГО Гаджета. Могут использоваться следующие атрибуты:

#PB_Canvas_MouseX, #PB_Canvas_MouseY
Возвращает заданную координату мыши относительно области рисования Гаджета. Это возвращает местоположение мыши во время создания события, поэтому результат может отличаться от координат, предоставленных функциями WindowMouseX() и WindowMouseY(), которые возвращают текущее местоположение мыши независимо от состояния обработанных событий. Чтобы гарантировать, что координаты мыши синхронизированы с текущим событием для этого Гаджета, следует использовать координаты, возвращенные с помощью этих атрибутов.
#PB_Canvas_Buttons
Возвращает состояние кнопок мыши для события. Результатом является комбинация (с использованием операции '|') следующих значений:
  #PB_Canvas_LeftButton  : Левая кнопка в данный момент недоступна.
  #PB_Canvas_RightButton : Правая кнопка в данный момент недоступна.
  #PB_Canvas_MiddleButton: Средняя кнопка в данный момент недоступна.
#PB_Canvas_Modifiers
Возвращает состояние модификаторов клавиатуры для события. Результатом является комбинация (с использованием операции '|') следующих значений:
  #PB_Canvas_Shift  : В данный момент нажата клавиша 'shift'.
  #PB_Canvas_Alt    : В данный момент нажата клавиша 'alt'.
  #PB_Canvas_Control: В данный момент нажата клавиша 'Control'.
  #PB_Canvas_Command: В данный момент нажата клавиша 'command' (или "apple"). (Только для Mac OSX)
#PB_Canvas_WheelDelta
Возвращает перемещение колеса мыши в текущем событии, в виде значений: 1 или -1. Положительное значение указывает, что колесо было перемещено вверх (от пользователя), а отрицательное значение указывает, что колесо было перемещено вниз (по направлению к пользователю). Этот атрибут равен 0, если текущее событие не является событием #PB_EventType_MouseWheel.
#PB_Canvas_Key
Возвращает клавишу, которая была нажата или отпущена в событии #PB_EventType_KeyDown или #PB_EventType_KeyUp. Возвращаемое значение - одно из значений #PB_Shortcut_... используемых функцией AddKeyboardShortcut(). Этот атрибут возвращает необработанные нажатия клавиш. Для текста, набираемого в CanvasGadget, предпочтительнее отслеживать событие #PB_EventType_Input и использовать атрибут #PB_Canvas_Input, поскольку это позволяет вводить символы, для которых требуется сочетание нескольких клавиш, таких как 'shift' и других не отображаемых клавиши.
#PB_Canvas_Input
Возвращает входной символ, который был сгенерирован одним или более нажатиями клавиш. Этот атрибут присутствует только после события #PB_EventType_Input. Возвращаемое значение может быть преобразовано в строку с помощью функции Chr().
Помимо этой информации о событиях, GetGadgetAttribute() также может использоваться для чтения следующих атрибутов:

#PB_Canvas_Image
Возвращает значение, представляющее собой ImageID изображения с текущим содержимым CanvasGadget. Это значение может использоваться для отображения содержимого Гаджета на другой поверхности вывода (экран, окно и тд.) с помощью функции DrawImage().

Примечание. Возвращаемое значение действует только до появления изменений в Гаджете, такие как изменение размера или содержимого, поэтому его следует использовать непосредственно в команде типа DrawImage(), а не сохранять для дальнейшего использования.
#PB_Canvas_Clip
Возвращает не нулевое значение, если передвижения курсора мыши в данный момент ограничены областью холста, в противном случае равно нулю.
#PB_Canvas_Cursor
Возвращает курсор, который в данный момент используется в Гаджете. Ниже перечислены возможные значения. Если Гаджет использует специальный курсор, возвращаемое значение равно -1.
#PB_Canvas_CustomCursor
Возвращает дескриптор настраиваемого курсора, который был установлен с помощью команды SetGadgetAttribute(). Если Гаджет использует стандартный курсор, возвращаемое значение равно 0.
Функция SetGadgetAttribute() может использоваться для изменения следующих атрибутов Гаджета:

#PB_Canvas_Image
Применяет указанный ImageID к CanvasGadget. Гаджет делает копию входящего изображения, так что оно может быть удалено или использовано повторно. Установка этого атрибута эквивалентна использованию функций StartDrawing(), CanvasOutput() и DrawImage(), для вывода изображения в CanvasGadget.
#PB_Canvas_Clip
Если значение установлено в не нулевое значение, курсор мыши будет ограничен областью холста. Установка нулевого значения отменяет ограничение.

Примечание: Ограничение мыши областью холста должно выполняться только в результате взаимодействия пользователя с Гаджетами, такого как щелчок мыши, и необходимо позаботится о том, чтобы правильно снимать ограничение мыши, иначе мышь пользователя снова окажется внутри Гаджета. Флаг Гаджета #PB_Canvas_ClipMouse может использоваться, чтобы автоматически наложить/снять ограничение на мышь областью холста, когда пользователь нажимает или отпускает кнопку мыши в Гаджете.
#PB_Canvas_Cursor
Изменяет курсор, который отображается, когда мышь находится над Гаджетом. Возможны следующие значения:
  #PB_Cursor_Default        : Стрелка курсора по умолчанию
  #PB_Cursor_Cross          : Курсор в виде перекрестия
  #PB_Cursor_IBeam          : I-курсор, используемый для выбора текста
  #PB_Cursor_Hand           : Курсор в виде руки
  #PB_Cursor_Busy           : Курсор часы или песочные часы
  #PB_Cursor_Denied         : Запрещающий знак или X курсор 
  #PB_Cursor_Arrows         : Стрелки во всех направлениях (недоступен в Mac OSX)
  #PB_Cursor_LeftRight      : Стрелки влево и вправо
  #PB_Cursor_UpDown         : Стрелки вверх и вниз
  #PB_Cursor_LeftUpRightDown: Диагональные стрелки (только для Windows)
  #PB_Cursor_LeftDownRightUp: Диагональные стрелки (только для Windows)
  #PB_Cursor_Invisible      : Скрывает курсор
#PB_Canvas_CustomCursor
Изменяет курсор, отображаемый при наведении указателя мыши на Гаджет, на дескриптор настраиваемого курсора, созданный с использованием соответствующего API-интерфейса ОС. Этот атрибут ожидает ввода следующего вида:
Windows: дескриптор HCURSOR
Linux: указатель GtkCursor
MAC OSX: указатель на структуру Курсора.
Вы можете добавить 'Всплывающую мини-подсказку' к этому Гаджету с помощью функции GadgetToolTip().

Пример

If OpenWindow(0, 0, 0, 220, 220, "Гаджет Канвас (Холст)", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CanvasGadget(0, 10, 10, 200, 200)

    Repeat
        Event = WaitWindowEvent()

        If Event = #PB_Event_Gadget And EventGadget() = 0
            If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
                If StartDrawing(CanvasOutput(0))
                    x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
                    y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
                    Circle(x, y, 10, RGB(Random(255), Random(255), Random(255)))
                    StopDrawing()
                EndIf
            EndIf
        EndIf

    Until Event = #PB_Event_CloseWindow
EndIf

Пример: Канвас контейнер

If OpenWindow(0, 0, 0, 220, 220, "Пример Канвас контейнер", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

    CanvasGadget(0, 10, 10, 200, 200, #PB_Canvas_Container)
    ButtonGadget(1, 10, 10, 80, 30, "Очистить")
    CloseGadgetList()

    Repeat
        Event = WaitWindowEvent()

        If Event = #PB_Event_Gadget
            Select EventGadget()
                Case 0
                    If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
                        If StartDrawing(CanvasOutput(0))
                            x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
                            y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
                            Circle(x, y, 10, RGB(Random(255), Random(255), Random(255)))
                            StopDrawing()
                        EndIf
                    EndIf

                Case 1
                    If StartDrawing(CanvasOutput(0))
                        Box(0, 0, 200, 200, #White)
                        StopDrawing()
                    EndIf
            EndSelect
        EndIf

    Until Event = #PB_Event_CloseWindow
EndIf

Пример

CanvasGadget .pb

См. также

CanvasOutput(), GetGadgetAttribute(), SetGadgetAttribute(), EventType(), StartDrawing()

Поддерживаемые OS

Все

<- CalendarGadget() - Оглавление Gadget - CanvasOutput()->