Bezeichnung
MakeButton -- erstellt eine neue Schaltfläche (V2.0)
Übersicht
[id] = MakeButton(id, #LAYERBUTTON, layerid, t[, userdata])
[id] = MakeButton(id, #SIMPLEBUTTON, x, y, width, height, t[, userdata])
Frühere syntax
[id] = MakeButton(id, #LAYERBUTTON, layerid, exactcoll, noautohide, t
                      [, userdata]) (V2.5)
Beschreibung
Dieser Befehl erstellt eine neue Schaltfläche und fügt sie an das aktuelle BGPic an. Die Schaltfläche erhält den durch id angegebener Identifikator, oder wenn Sie Nil als id übergeben, wählt MakeButton() automatisch einen Identifikator für Sie aus. Das zweite Argument gibt den Typ der Schaltfläche an. Derzeit werden die folgenden Typen unterstützt:

#SIMPLEBUTTON:
Erstellt eine Standard-Schaltfläche. Beachten Sie, dass diese Schaltfläche nicht sichtbar ist. Sie müssen Grafiken in Ihrem BGPic verwenden, um den Benutzer zu zeigen, wo sich Ihre Schaltfläche befindet. Der Typ #SIMPLEBUTTON erfordert, dass Sie die Position und die Dimensionen für die Schaltfläche in Argument 3 bis 6 angeben. Das siebte Argument ist ein Tabellenargument, mit dem Sie die Callback-Funktionen angeben können, die aufgerufen werden sollen, wenn die Schaltfläche ein Ereignis empfängt (siehe unten).

#LAYERBUTTON:
Dieser Typ ist neu in Hollywood 2.5. Es wird eine dynamische Schaltfläche erstellt, die immer die Position und Größe der durch layerid angegebenen Ebene hat. Beachten Sie, dass Ebenenschaltflächen eng mit ihrer Ebene verbunden sind. Wenn die Ebene gelöscht wird, wird also auch die Schaltfläche gelöscht. Ebenenschaltflächen unterstützen auch einige zusätzliche Optionen im Tabellenargument, das von MakeButton() akzeptiert wird (siehe unten für Details).

Das Argument t muss eine Tabelle sein, die die Funktionen angibt, die aufgerufen werden sollen, wenn ein bestimmtes Ereignis eintritt. Es kann auch verwendet werden, um einige erweiterte Schaltflächenoptionen zu konfigurieren. Die Tabelle kann folgende Felder enthalten:

OnMouseOver:
Die hier angegebene Funktion wird aufgerufen, wenn der Benutzer die Maus über den Bereich der Schaltfläche bewegt.

OnMouseOut:
Die hier angegebene Funktion wird aufgerufen, wenn der Mauszeiger den Bereich der Schaltfläche verlässt.

OnMouseDown:
Die hier angegebene Funktion wird aufgerufen, wenn der Benutzer die linke Maustaste drückt, während sich der Mauszeiger über der Schaltfläche befindet.

OnMouseUp:
Die hier angegebene Funktion wird aufgerufen, wenn der Benutzer die linke Maustaste loslässt, während sich der Mauszeiger über der Schaltfläche befindet. Dieses Ereignis wird nur ausgelöst, wenn der Benutzer auch die linke Maustaste gedrückt hat, während sich der Mauszeiger über der Schaltfläche befand.

OnRightMouseDown:
Dasselbe wie OnMouseDown, aber mit der rechten Maustaste.

OnRightMouseUp:
Dasselbe wie OnMouseUp, aber mit der rechten Maustaste.

OnMidMouseDown:
Dasselbe wie OnMouseDown, aber mit der mittleren Maustaste. (V4.5)

OnMidMouseUp:
Dasselbe wie OnMouseUp, aber mit der mittleren Maustaste. (V4.5)

PixelExact:
Dies wird nur für #LAYERBUTTON unterstützt. Es gibt an, ob Ihre Schaltfläche pixelgenaue oder rechteckige Kollisionserkennung verwenden soll oder nicht. Wenn Sie hier True übergeben, werden Ereignisse nur bei einer pixelgenauen Kollision ausgelöst. Dies kann bei unregelmäßig geformten Schaltflächen nützlich sein. Die Voreinstellung ist False.

NoAutoHide:
Dies wird nur für #LAYERBUTTON unterstützt. Sie legt fest, ob die Schaltfläche automatisch ausgeblendet werden soll, wenn die Ebene ausgeblendet wird. Wenn Sie hier True angeben, wird die Schaltfläche nicht automatisch ausgeblendet, wenn Sie die Ebene ausblenden, mit der sie verbunden ist. Wenn NoAutoHide False ist, verschwindet die Schaltfläche, sobald Sie die Ebene ausblenden. Die Voreingestellung ist False.

ZOrder:
Dies wird nur für #LAYERBUTTON unterstützt. Es gibt an, ob die Z-Reihenfolge der Ebenen bei der Behandlung von Ereignissen überlappender Ebenenschaltflächen eingehalten werden soll oder nicht. In der Vergangenheit wurden Ereignisse von sich überlappenden Ebenenschaltflächen in der Reihenfolge ihrer Erstellung behandelt, d.h. wenn eine Ebenenschaltfläche vor einer anderen Ebenenschaltfläche erstellt wurde und sich beide Ebenen überlappten, erhielt die zuvor erstellte Ebenenschaltfläche die Ereignisse auch dann, wenn sie sich unter der anderen Ebenenschaltfläche befand. Indem Sie den Tag ZOrder auf True setzen, können Sie Hollywood zwingen, Ereignisse von überlappenden Ebenenschaltflächen in ihrer Stapelreihenfolge zu behandeln, d.h. Schaltflächen, die über einer anderen Ebene liegen, erhalten ihre Ereignisse zuerst. Aus Kompatibilitätsgründen wird dieser Tag standardmäßig auf False gesetzt. (V9.0)

Wenn Sie nur auf einen Mausklick auf einer Schaltfläche reagieren wollen, reicht es eine Callback-Funktion für den Ereiginistyp OnMouseUp zur Verfügung zu stellen. OnMouseDown ist nur erforderlich, wenn Sie die Schaltfläche in irgendeiner Weise hervorgehoben werden soll, während der Benutzer darauf klickt.

Ab Hollywood 3.1 gibt es ein optionales Argument namens userdata. Der Wert, den Sie hier angeben, wird der Callback-Funktion übergeben, wenn sie aufgerufen wird. Dies ist nützlich, wenn Sie die Arbeit mit globalen Variablen vermeiden. Mit Hilfe des userdata Argument können Sie ganz einfach Daten an Ihre Callback-Funktion übergeben. Sie können einen Wert eines beliebigen Typs wie Zahlen, Zeichenketten, Tabellen und sogar Funktionen angeben.

Die Callback-Funktionen, die Sie in der Ereignistabelle angegeben, wird von Hollywood mit einem Parameter aufgerufen. Dieser Parameter ist eine Nachrichten-Tabelle, die einige Informationen über das Ereignis beinhaltet. Folgende Felder stehen zur Verfügung:

Action:
Enthält den Namen des ausgelösten Ereignisses wie z.B. OnMouseUp, OnMouseOver oder OnMouseOut. Dieses Feld ist eine Zeichenkette!

ID:
Enthält den Identifikator der Schaltfläche, die dieses Ereignis ausgelöst hat. Dieses Feld ist eine Nummer!

X, Y, Width, Height:
Diese Felder tragen die Abmessungen der Schaltfläche, die dieses Ereignis ausgelöst hat. Width beinhaltet die Breite und Height die Höhe.

MouseDown:
Dieses Feld wird auf True gesetzt, wenn die linke Maustaste gerade gedrückt wird. Nützlich in Verbindung mit dem Ereignis OnMouseOver, so dass Sie ein hervorgehobene Version der Schaltfläche anzeigen können, wenn der Benutzer den Mauszeiger über die Schaltfläche bewegt, während die linke Maustaste gedrückt wird.

RightMouseDown:
Dasselbe wie MouseDown, aber mit der rechten Maustaste.

MidMouseDown:
Dasselbe wie MouseDown, aber mit der mittleren Maustaste. (V4.5)

Layer:
Der Identifikator der Ebene, an die diese Schaltfläche gebunden ist. Dies ist nur für Schaltflächen vom Typ #LAYERBUTTON gesetzt. (V4.5)

LayerName:
Der Name der Ebene, an die diese Schaltfläche gebunden ist. Dies ist nur für Schaltflächen vom Typ #LAYERBUTTON gesetzt. (V4.5)

UserData:
Enthält den Wert, den Sie dem Argument userdata beim Erstellen der Schaltfläche übergeben haben.

Timestamp:
Enthält eine Zeitangabe, die angibt, wann das Ereignis aufgetreten ist. Siehe GetTimestamp für Details. (V7.0)

Der Vorteil dieser Nachricht ist, dass Sie ein und die selbe Funktion für alle Schaltflächen und Ereignisse nutzen können. Mit den Feldern Action und ID finden Sie heraus, welche Schaltfläche das Ereignis ausgelöst hat.

Bitte beachten Sie: Die Schaltflächen sind immer an BGPics gebunden. Also wenn Sie MakeButton() aufrufen, während BGPic 1 auf dem Display angezeigt wird, wird die Schaltfläche an BGPic 1 gebunden. Wenn Sie BGPic 2 anzeigen, dann werden die Schaltflächen entfernt. Sobald Sie BGPic 1 wieder zurück auf das Display holen, werden die Schaltflächen wieder erscheinen.

Beachten Sie auch, dass Sie nur rechteckig geformte Schaltflächen mit #SIMPLEBUTTON erstellen können. Wenn Sie unregelmäßig geformte Schaltflächen haben möchten, erstellen Sie eine Ebene mit einer Transparenzeinstellung (maskierte oder alphakanalisierte Transparenz) und verwenden Sie dann #LAYERBUTTON, um eine Schaltfläche an diese Ebene zu binden.

Weitere Schaltflächenbefehle: DeleteButton(), DisableButton() und EnableButton().

Eingaben
id
Identifikator von der neuen Schaltfläche oder Nil für die automatische ID-Auswahl
type
Typ der neuen Schaltfläche
x
x-Position der neuen Schaltfläche
y
y-Position der neuen Schaltfläche
width
Breite der neuen Schaltfläche
height
Höhe der neuen Schaltfläche
t
Tabelle, die Callback-Funktionen enthält, die Hollywood aufrufen wird, wenn ein bestimmtes Ereignis eintritt und zusätzliche Argumente (siehe oben)
userdata
optional: Benutzerspezifische Daten, die an die Callback-Funktion übergeben werden (V3.1)
Rückgabewerte
id
optional: Identifikator der Schaltfläche; Wird nur zurückgegeben werden, wenn Sie Nil als Argument 1 angegeben haben (siehe oben)
Beispiel
Function p_MyFunc(msg)
  Switch msg.action
  Case "OnMouseUp":
    DebugPrint("User left-clicked button", msg.id)
  Case "OnMouseOver":
    DebugPrint("User moved mouse over button", msg.id)
  Case "OnRightMouseUp":
    DebugPrint("User right-clicked button", msg.id)
  EndSwitch
EndFunction

; zeichnet die Schaltfläche
Box(0, 0, 100, 100, #RED)
Box(200, 200, 100, 100, #BLUE)

; erstellt sie
evtmatch = {OnMouseUp = p_MyFunc, OnMouseOver = p_MyFunc,
            OnRightMouseUp = p_MyFunc}
MakeButton(1, #SIMPLEBUTTON, 0, 0, 100, 100, evtmatch)
MakeButton(2, #SIMPLEBUTTON, 200, 200, 100, 100, evtmatch)

Repeat
  WaitEvent
Forever

Navigation zeigen