[id] = MakeButton(id, #LAYERBUTTON, layerid, t[, userdata]) [id] = MakeButton(id, #SIMPLEBUTTON, x, y, width, height, t[, userdata])
[id] = MakeButton(id, #LAYERBUTTON, layerid, exactcoll, noautohide, t [, userdata]) (V2.5)
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:
#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:
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:
OnMouseOut:
OnMouseDown:
OnMouseUp:
OnRightMouseDown:
OnMouseDown
, aber mit der rechten Maustaste.
OnRightMouseUp:
OnMouseUp
, aber mit der rechten Maustaste.
OnMidMouseDown:
OnMouseDown
, aber mit der mittleren Maustaste. (V4.5)
OnMidMouseUp:
OnMouseUp
, aber mit der mittleren Maustaste. (V4.5)
PixelExact:
#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:
#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:
#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:
OnMouseUp
, OnMouseOver
oder
OnMouseOut
. Dieses Feld ist eine Zeichenkette!
ID:
X, Y, Width, Height:
Width
beinhaltet die Breite und Height
die Höhe.
MouseDown:
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:
MouseDown
, aber mit der rechten Maustaste.
MidMouseDown:
MouseDown
, aber mit der mittleren Maustaste. (V4.5)
Layer:
#LAYERBUTTON
gesetzt. (V4.5)
LayerName:
#LAYERBUTTON
gesetzt. (V4.5)
UserData:
userdata
beim Erstellen der Schaltfläche übergeben
haben.
Timestamp:
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().
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