CanvasGadget()

Syntax

Ergebnis = CanvasGadget(#Gadget, x, y, Breite, Höhe [, Flags])
Beschreibung
Erstellt ein Canvas-Gadget (auch "Leinwand-Gadget") innerhalb der aktuellen Gadgetliste. Dieses Gadget bietet eine Zeichen-Oberfläche (englisch "drawing surface") ohne Alpha-Kanal und Ereignisse für die Maus- und Tastatur-Interaktion, um einfach benutzerdefinierte Ansichten ("custom views") zu erstellen.

Parameter

#Gadget Eine Nummer, um das neue Gadget zu identifizieren. #PB_Any kann verwendet werden, um diese Nummer automatisch zu generieren.
x, y, Breite, Höhe Die Position und die Abmessungen des neuen Gadgets (in Pixel). Die maximale Breite und Höhe ist 16000 Pixel.
Flags (optional) Flags zum Verändern des Gadget-Verhaltens. Dies kann eine Kombination (verknüpft mit dem bitweisen '|' OR-Operator) der folgenden Konstanten sein:
  #PB_Canvas_Border   : Zeichnet einen Rand rund um das Gadget.
  #PB_Canvas_ClipMouse: Begrenzt die Maus auf das Gadget während eine Maus-Taste gedrückt ist. (Nicht auf MacOS und Linux Gtk3 unterstützt)
  #PB_Canvas_Keyboard : Ermöglicht dem Gadget den "Keyboard-Fokus" und Tastatur-Ereignisse zu erhalten.
  #PB_Canvas_DrawFocus: Zeichnet ein Fokus-Rechteck auf das Gadget, wenn es den "Keyboard-Fokus" hat.
  #PB_Canvas_Container: Aktiviert die "Container-Unterstützung", damit Gadgets hinzugefügt werden können. CloseGadgetList() muss aufgerufen
                        werden, um zur vorherigen Gadgetliste zurückzukehren (wie bei jedem anderen Container-Gadget). 
Unter Windows funktioniert die Transparenz der Gadgets nicht, daher wird der Text der folgenden Gadgets auf einem undurchsichtigen Hintergrund angezeigt: CheckBoxGadget(), FrameGadget(), HyperLinkGadget(), OptionGadget(), TextGadget() und TrackBarGadget().
Das #PB_Canvas_Keyboard Flag wird benötigt, um jegliche Tastatur-Ereignisse im Gadget zu empfangen. Wenn Sie dieses Flag verwenden, sollten Sie die #PB_EventType_Focus und #PB_EventType_LostFocus Ereignisse überprüfen, und einen sichtbaren Hinweis (Rahmen etc.) auf das Gadget zeichnen, wenn es den Fokus hat, damit dem Anwender klar ist, welches Gadget aktuell den Fokus hat. Alternativ kann das #PB_Canvas_DrawFocus Flag angegeben werden, damit das Gadget ein standardmäßiges Fokus-Rechteck zeichnet, wann immer es den Fokus hat.

Rückgabewert

Gibt bei Erfolg einen Wert ungleich Null zurück, oder Null bei einem Fehler. Wenn #PB_Any als #Gadget Parameter verwendet wurde, dann beinhaltet der Rückgabewert bei Erfolg die automatisch generierte Gadget-Nummer.

Anmerkungen

Das CanvasGadget() hat keinen Alpha-Kanal, daher wird der #PB_2DDrawing_AlphaChannel Modus der DrawingMode() Funktion keinen Effekt haben, und der #PB_2DDrawing_AllChannels Modus verhält sich analog zu #PB_2DDrawing_Default.

Das erstellte Gadget startet mit einfachem weißen Hintergrund. Verwenden Sie die CanvasOutput() oder CanvasVectorOutput() Befehle, um auf dem Gadget zu zeichnen. Der gezeichnete Inhalt bleibt erhalten, bis er durch weitere Zeichen-Operationen gelöscht wird. Es ist nicht erforderlich, den Inhalt jedes Mal neu zu zeichnen, wenn ein #PB_Event_Repaint Ereignis empfangen wird.

Die folgenden Ereignisse werden vom Gadget gemeldet. Die Funktion EventType() meldet den Typ des aktuellen Gadget-Ereignisses:
  #PB_EventType_MouseEnter      : Der Maus-Cursor "betrat" das Gadget
  #PB_EventType_MouseLeave      : Der Maus-Cursor verließ das Gadget
  #PB_EventType_MouseMove       : Der Maus-Cursor bewegte sich
  #PB_EventType_MouseWheel      : Das Maus-Rad wurde bewegt
  #PB_EventType_LeftButtonDown  : Der linke Maus-Knopf wurde gedrückt
  #PB_EventType_LeftButtonUp    : Der linke Maus-Knopf wurde los gelassen
  #PB_EventType_LeftClick       : Ein Klick mit der linken Maus-Taste
  #PB_EventType_LeftDoubleClick : Ein Doppelklick mit der linken Maus-Taste
  #PB_EventType_RightButtonDown : Der rechte Maus-Knopf wurde gedrückt
  #PB_EventType_RightButtonUp   : Der rechte Maus-Knopf wurde los gelassen
  #PB_EventType_RightClick      : Ein Klick mit der rechten Maus-Taste
  #PB_EventType_RightDoubleClick: Ein Doppelklick mit der rechten Maus-Taste
  #PB_EventType_MiddleButtonDown: Der mittlere Maus-Knopf wurde gedrückt
  #PB_EventType_MiddleButtonUp  : Der mittlere Maus-Knopf wurde los gelassen
  #PB_EventType_Focus           : Das Gadget erhielt den Tastatur-Fokus
  #PB_EventType_LostFocus       : Das Gadget verlor den Tastatur-Fokus
  #PB_EventType_KeyDown         : Eine Taste wurde gedrückt
  #PB_EventType_KeyUp           : Eine Taste wurde los gelassen
  #PB_EventType_Input           : Text-Eingabe wurde generiert
  #PB_EventType_Resize          : Das Gadget wurde in der Größe verändert
Beachten Sie bitte, dass die Ereignisse #PB_EventType_KeyDown, #PB_EventType_KeyUp und #PB_EventType_Input nur gemeldet werden, wenn das Gadget den Tastatur-Fokus hat. Dies bedeutet, dass das #PB_Canvas_Keyboard Flag bei der Erstellung des Gadgets gesetzt werden muss, um Tastatur-Ereignisse zu erlauben. Auf Windows wird das #PB_EventType_MouseWheel Ereignis auch nur gemeldet, wenn das Gadget den Tastatur-Fokus hat. Auf den anderen OS wird dieses Ereignis dem Gadget unter dem Maus-Pfeil gemeldet, unabhängig vom Tastatur-Fokus.

Weitere Informationen über das aktuelle Ereignis können mit der Funktion GetGadgetAttribute() empfangen werden. Diese Information ist nur verfügbar, wenn das aktuelle Ereignis (empfangen von WaitWindowEvent() bzw. WindowEvent()) ein Ereignis für dieses Gadget ist. Die folgenden Attribute können verwendet werden:

#PB_Canvas_MouseX, #PB_Canvas_MouseY
Gibt die angegebenen Maus-Koordinaten relativ zum Zeichen-Bereich des Gadgets zurück. Die Maus-Position wird zu dem Zeitpunkt zurückgegeben, zu dem das Ereignis generiert wurde. Dadurch kann das Ergebnis von den durch WindowMouseX() und WindowMouseY() gemeldeten Koordinaten abweichen, welche die aktuelle Maus-Position unabhängig vom Status der verarbeiteten Ereignisse zurückmelden. Die mit Hilfe dieser Attribute zurückgegebenen Koordinaten sollten für dieses Gadget verwendet werden, um sicher zu gehen, dass die Maus-Koordinaten mit dem aktuellen Ereignis zusammenpassen.
#PB_Canvas_Buttons
Gibt den Status der Maus-Knöpfe für das Ereignis zurück, Das Ergebnis ist eine Kombination (verknüpft mit dem bitweisen '|' OR-Operator) der folgenden Konstanten:
  #PB_Canvas_LeftButton  : Der linke Maus-Knopf ist aktuell gedrückt.
  #PB_Canvas_RightButton : Der rechte Maus-Knopf ist aktuell gedrückt.
  #PB_Canvas_MiddleButton: Der mittlere Maus-Knopf ist aktuell gedrückt.
#PB_Canvas_Modifiers
Gibt den Status der Tastatur-"Modifier" für das Ereignis zurück. Das Ergebnis ist eine Kombination (verknüpft mit dem bitweisen '|' OR-Operator) der folgenden Konstanten:
  #PB_Canvas_Shift  : Die 'Shift' (Umschalt-) Taste ist aktuell gedrückt.
  #PB_Canvas_Alt    : Die 'Alt' Taste ist aktuell gedrückt.
  #PB_Canvas_Control: Die 'Control' Taste ist aktuell gedrückt.
  #PB_Canvas_Command: Die 'Command' (oder "Apple") Taste ist aktuell gedrückt. (nur auf Mac OSX)
#PB_Canvas_WheelDelta
Gibt die Bewegung des Maus-Rades für das aktuelle Ereignis in Mehrfachen von 1 bzw. -1 zurück. Ein positiver Wert sagt aus, dass das Rad nach oben (weg vom Anwender) bewegt wurde, und ein negativer Wert sagt aus, dass das Rad nach unten (hin zum Anwender) bewegt wurde. Dieses Attribut ist 0, wenn das aktuelle Ereignis kein #PB_EventType_MouseWheel Ereignis ist.
#PB_Canvas_Key
Gibt die Taste zurück, die bei einem #PB_EventType_KeyDown oder #PB_EventType_KeyUp Ereignis gedrückt oder los gelassen wurde. Der zurückgegebene Wert ist einer der #PB_Shortcut_... Werte, welche von der Funktion AddKeyboardShortcut() verwendet werden. Dieses Attribut gibt "rohe" (raw) Tastendrücke zurück. Um eine Texteingabe für das Gadget zu erhalten, ist es besser nach dem #PB_EventType_Input Ereignis zu schauen und das #PB_Canvas_Input Attribut zu verwenden, weil dieses die Texteingabe von mehreren Tastendrücken wie Shift- und ähnlichen Tasten kombiniert beinhaltet.
#PB_Canvas_Input
Gibt das eingegebene Zeichen (Character) zurück, welches durch ein oder mehrere Tastendrücke generiert wurde. Dieses Attribut ist nur verfügbar nach einem #PB_EventType_Input Ereignis. Der zurückgebene Zeichen-Wert kann mit Hilfe der Chr() Funktion in einen String konvertiert werden.
Ergänzend zu dieser Ereignis-Information kann GetGadgetAttribute() auch verwendet werden, um die folgenden Attribute zu lesen:

#PB_Canvas_Image
Gibt einen ImageID Wert zurück, welcher ein Bild mit dem aktuellen Inhalt des CanvasGadgets repräsentiert. Dieser Wert kann verwendet werden, um den Inhalt des Gadgets mit Hilfe der Funktion DrawImage() auf eine andere Ausgabe zu zeichnen.

Hinweis: Der zurückgegebene Wert ist nur solange gültig, bis am Gadget Veränderungen durch Größenänderung oder darauf Zeichnen vorgenommen werden. Daher sollte er nur direkt mit einem Befehl wie DrawImage() verwendet werden, und nicht für die spätere Verwendung gespeichert werden.
#PB_Canvas_Clip
Gibt einen Wert ungleich Null zurück, wenn die Maus aktuell auf den Gadget-Bereich begrenzt ("clipped") ist, oder Null wenn nicht.
#PB_Canvas_Cursor
Gibt den Maus-Pfeil (Cursor) zurück, welcher aktuell im Gadget verwendet wird. Schauen Sie weiter unten für eine Liste der möglichen Werte. Wenn das Gadget ein benutzerdefiniertes ("custom") Cursor-Handle verwendet, ist der Rückgabewert gleich -1.
#PB_Canvas_CustomCursor
Gibt das benutzerdefinierte ("custom") Cursor-Handle zurück, welches mittels SetGadgetAttribute() gesetzt wurde. Verwendet das Gadget einen Standard-Mauspfeil (Cursor), ist der Rückgabewert gleich 0.
Die Funktion SetGadgetAttribute() kann verwendet werden, um die folgenden Gadget-Attribute zu verändern:

#PB_Canvas_Image
Weist dem CanvasGadget die angegebene ImageID zu. Das Gadget macht eine Kopie des Ausgangsbildes, weshalb dieses nach diesem Aufruf freigegeben oder anderweitig verwendet werden kann. Das Setzen dieses Attributes entspricht dem Gleichen wie die Verwendung von StartDrawing(), CanvasOutput() und DrawImage(), um das Bild auf das CanvasGadget zu zeichnen.
#PB_Canvas_Clip
Wenn dieser Wert auf einen Wert ungleich Null gesetzt wird, dann wird der Mauspfeil auf den Bereich des Canvas-Gadgets begrenzt. Das Setzen des Wertes auf Null entfernt die Begrenzung (das "Clipping").

Hinweis: Die Maus-Begrenung (Clipping) sollte nur als direkte Folge von Anwender-Interaktion mit dem Gadget (wie z.B. einem Maus-Klick) erfolgen, und es muss sorgfältig darauf geachtet werden, das Clipping wieder richtig zu entfernen, da andernfalls des Anwenders Maus innerhalb des Gadgets gefangen bleibt. Das #PB_Canvas_ClipMouse Gadget-Flag kann verwendet werden, um automatisch die Maus zu begrenzen/nicht mehr zu begrenzen (clip/unclip), wenn der Anwender eine Maustaste im Gadget drückt oder los lässt.
#PB_Canvas_Cursor
Ändert den Maus-Pfeil (Cursor), welcher angezeigt wird, wenn sich die Maus über dem Gadget befindet. Die folgenden Werte sind möglich:
  #PB_Cursor_Default        : Standard Pfeil-Cursor
  #PB_Cursor_Cross          : Kreuz-Cursor
  #PB_Cursor_IBeam          : I-Cursor, verwendet für die Textauswahl
  #PB_Cursor_Hand           : Hand-Cursor
  #PB_Cursor_Busy           : Stundenglass oder Uhren-Cursor
  #PB_Cursor_Denied         : durchgestrichener Kreis oder X-Cursor ("Stop" oder "Verboten"-Hinweis)
  #PB_Cursor_Arrows         : Pfeile in alle Richtungen (nicht verfügbar auf Mac OSX)
  #PB_Cursor_LeftRight      : links und rechts Pfeile
  #PB_Cursor_UpDown         : hoch und runter Pfeile
  #PB_Cursor_LeftUpRightDown: diagonale Pfeile (nur auf Windows)
  #PB_Cursor_LeftDownRightUp: diagonale Pfeile (nur auf Windows)
  #PB_Cursor_Invisible      : versteckt den Cursor
#PB_Canvas_CustomCursor
Ändert den Mauspfeil (Cursor), welcher dargestellt wird, wenn sich die Maus über dem Gadget befindet, in ein benutzerdefiniertes (custom) Cursor-Handle, welches mit der entsprechenden OS API erstellt wurde. Dieses Attribut erwartet die folgende Art an Eingaben:
Windows: ein HCURSOR Handle
Linux: ein GtkCursor Pointer (Zeiger)
Mac OSX: ein Pointer (Zeiger) auf eine Cursor Structure
Zu diesem Gadget kann mittels GadgetToolTip() eine 'Mini-Hilfe' hinzugefügt werden.

Beispiel

  If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #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

Beispiel: Canvas Container

  If OpenWindow(0, 0, 0, 220, 220, "Canvas container example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
    CanvasGadget(0, 10, 10, 200, 200, #PB_Canvas_Container)
    ButtonGadget(1, 10, 10, 80, 30, "Clean up")
    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

Beispiel

CanvasGadget.pb

Siehe auch

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

Unterstützte OS

Alle

<- CalendarGadget() - Gadget Inhaltsverzeichnis - CanvasOutput() ->