Komponente Flash 8

Ein Tipp von: http://www.pastorpixel.de
Action  
function meineFunktion () {
_root.ausgabe="ich habe den Button geklickt!";
}
meinButton.addEventListener ("click",meineFunktion);
 

In Flash 8 gibt es den changeHandler der Komponenten nicht mehr. Stattdessen werden EventListener eingesetzt. Hier wurde dem Button der Instanzname "meinButton" zugewiesen. Im ersten Bild wurde eine Funktion namens "meineFunktion" erstellt. Um einen Listener mit einem Broadcaster zu registrieren, rufen Sie die Methode addEventListener() vom Broadcaster auf. Verwende folgende Syntax:
componentInstance.addEventListener("eventName", listenerObjectOderFunction);
Welche eventNamen es gibt, bzw. welche Ereignisse die einzelnen Komponenten übertragen, kann man in der Referenz der jeweiligen Komponente nachschauen.
Die Syntax der Listener für Komponenten unterscheidet sich etwas von den anderen Ereignis Listenern. Mehr dazu später. Siehe Tipp listener.swf
Folgendermaßen wird der Listener entfernt.

meinButton.removeEventListener ("click", meineFunktion);

Auf der vorigen Seite wurde eine Funktion als Listener verwendet. Der Listener kann auch ein Objekt sein. Zum Verwenden eines Listener-Objekts gibt es drei Möglichkeiten:

1) das aktuelle Objekt mit dem Schlüsselwort this als Listener angeben (diese Seite)
2) ein bereits in der Anwendung vorhandenes Objekt verwenden (nächste Seite)
3) eine neues Objekt erstellen (übernächste Seite)
Wenn man das Objekt this verwendet, definiert man eine Funktion, die denselben Namen hat wie das zu verarbeitende Ereignis.
function eventName(evtObj:Object){
auszuführende Anweisungen/ Aktionen;
};
componentInstance.addEventListener("eventName", this);

evtObj:Object ist ein Objekt, das automatisch erstellt wird, wenn ein Ereignis ausgelöst und an die Rückruffunktion übergeben wird. Hiermit kann man Informationen über den Ereignistyp abrufen sowie über die Instanz, die das Ereignis per Broadcast gesendet hat.
Auf der übernächsten Seite befindet sich dazu ein Beispiel.

function click () {
_root.ausgabe="ich habe den Button geklickt!";
}
meinButton.addEventListener ("click",this);

 

   
existingObject.eventName = function(evtObj:Object){
// Auszuführnde Anweisungen/ Actions
};
componentInstance.addEventListener("eventName", listenerObject);
ein vorhandenes Objekt nutzen
quadrat_mc.click = function(){
this._alpha=50;
};
meinbutbut.addEventListener ("click",quadrat_mc);
 
 

Unterschiede der Listener in Komponenten und der "normalen" Listener

Bei der Verwendung von Komponenten nutzen Sie eine etwas andere Syntax für Ereignis-Listener. Der Hauptunterschied besteht darin, dass Sie die Methode addEventListener() verwenden müssen anstatt addListener() Außerdem müssen Sie nicht nur das Ereignis angeben, das überwacht werden soll, sondern auch das Objekt oder die Funktion für den Ereignis-Listener.

ein neues Listener Objekt erstellen  
var listenerObject:Object = new Object();
listenerObject.eventName = function(evtObj:Object){
// Auszuführnde Anweisungen/ Actions
};
componentInstance.addEventListener("eventName", listenerObject);
Dieser ActionScript-Code definiert das Listener-Objekt loaderListener, das zwei Ereignisse überwacht: progress und complete. Progress wird im Gegensatz zu complete eventuell öfter ausgelöst.
Das Beispiel wird in den livedocs von Adobe ausführlich erklärt.
http://livedocs.adobe.com/flash/8_de/
var loaderListener:Object = new Object ();
loaderListener.progress = function (evt_obj:Object):Void
{
anzeige =evt_obj.target.bytesLoaded + " of " + evt_obj.target.bytesTotal + " bytes loaded";
};
loaderListener.complete = function (evt_obj:Object):Void
{
anzeige += "\n" + evt_obj.type;
};
my_ldr.addEventListener ("progress", loaderListener);
my_ldr.addEventListener ("complete", loaderListener);
my_ldr.load ("logo.jpg");

Bestellformular

 
Actionscript PHP Code
function clicked () {
var lv = new LoadVars ();
lv.prediger = prediger.value;
lv.datum = datum.text;
lv.anzahl = anzahl.value;
lv.themabb = "";
for (i = 0; i < thema.selectedIndices.length; i++) {
lv.themabb += thema.getItemAt (thema.selectedIndices[i]).label + ", ";
}
lv.bemerkung = bemerkung.text;
lv.sendAndLoad ("form.php",lv,"POST");
}
button.addEventListener ("click",clicked);
<?
$empfaenger = "deine@EmailAdresse.de";
$betreff = "Neue Predigt Bestellung";
$from = "From: Bestellungs Center <mail@pastorpixel.de>";
$txt = "Prediger: ".utf8_decode($_POST['prediger'])."\n";
$txt .= "am: ".utf8_decode($_POST['datum'])."\n";
$txt .= "Dauer ".utf8_decode($_POST['anzahl'])." Minuten \n";
$txt .= "Thema: ".utf8_decode($_POST['themabb'])."\n";
$txt .= "Anmerkung: ".utf8_decode($_POST['bemerkung']);
mail($empfaenger, $betreff, $txt, $from);
?>

Das Ereignisobjekt

 
var myButton:mx.controls.Button;
var myText:mx.controls.TextInput;
function click (evt) {
myText.text =(evt.target);
}
myButton.addEventListener ("click",this);
Die Eigenschaft target des Ereignisobjekts ist ein Verweis auf die Instanz, die das Ereignis überträgt. Dieser Code zeigt den Wert der Eigenschaft target in der TextInput-Komponente an.
function ereignisPruefen (evt)
{
if (evt.type == "click")
{
anzeige = "Der Button wurde geklickt.";
} else if (evt.type == "change")
{
anzeige = "Eintrag im Textfeld";
}
}
meinButton.addEventListener ("click", ereignisPruefen);
meinText.addEventListener ("change", ereignisPruefen);
Mit der Eigenschaft type des Ereignisobjekts wird ein String mit dem Namen des Ereignisses übertragen. Hier wird auf "click" oder "change" geprüft und eine entsprechende Anweisung ausgeführt. Wenn ein Ereignis über zusätzliche Eigenschaften verfügt, werden sie im Eintrag des Ereignisses in der Komponentenreferenz aufgelistet.

Gültigkeitsbereiche

 
function esFunzt () {
this.scaleY=200;
}
box_mc.click=function(){
this._yscale=200;
}
derButton.addEventListener ("click",box_mc);
derButton.addEventListener("click",esFunzt);
Auf der ersten und zweiten Seite haben wir gelernt, dass man Funktionen oder Objekte beim Broadcaster registrieren kann.
Verwendet man das Schlüsselwort this, so bezieht es sich in Funktionen auf die Komponenteninstanz die den Broadcaster sendet, während es sich beim Listener Objekt auf den Listener bezieht.

Wenn man dagegen eine Funktion an addEventListener() übergibt, wird die Funktion im Gültigkeitsbereich der Komponenteninstanz aufgerufen, die addEventListener() aufruft.
Dies verursacht ein Problem, wenn man die Funktion in einer Klassendatei definiert.
Mehr dazu in den livedocs

Man kann auch die Ereignisprozdur on() verwenden. Man wählt die Komponenteninstanz auf der Bühne aus und vergibt im Aktionenbedienfeld die Aktion.
on(click){
trace(this);
}
Das sollte aber nur zu Testzwecken geschehen.

Akkordeon Komponente

 
In den Livedocs von Adobe gibt es ein Tutorial, wo es noch genauer erklärt wird und noch mehr Raffinessen verwendet wurden. Die hier benutzte Scrollleiste im vierten Feld ist die "UIScrollBar", die genauso wie in Flash MX eingesetzt wird.
Nehmen wir an, wir hätten in m1_mc eine Variable, namens meineVar. Über folgenden Pfad könnte man dann von hier aus darauf zugreifen:
child1.meineVar
 

Die ScrollPane Komponente.

 

on (release) {
anzeige=m1_sp.spContentHolder.meineVar;
}

In die ScrollPane Komponente wird ein verknüpfter Movieclip eingefügt. Sind die Abmessungen des MCs größer entstehen Scrollleisten.
Diese ScrollPane Komponente hat den Instanznamen m1_sp. Der Inhalt wird im MC scroll_sub_mc bestimmt. Darin habe ich eine Variable definiert mit dem Namen meineVar. Mit dem Button links greife ich auf diese Variable zu.

Stile der Komponenten style  
_global.style.setStyle("color", 0xCC6699);
_global.style.setStyle("themeColor", "haloBlue")
_global.style.setStyle("fontSize",12);
myButton.setStyle("color", 0x000099);
myButton.setStyle("fontFamily", "_serif");
myButton.setStyle("themeColor", "haloOrange");

Es gibt mehrere Möglichkeiten die Aussehen der Komponenten zu verändern. Einmal über Stile, die sich global, für einzelnen Instanzen oder auch für Gruppen festlegen lassen. Außerdem gibt es das Skinning und die Themen. Themen sind fla Dateien in denen Aussehen und Verhalten der Komponenten gespeichert sind. C:\Programme\Macromedia\Flash 8\de\Configuration\ComponentFLA
Um ein anderes Thema auf die Komponenten anzuwenden, öffne eine der dort enthaltenen fla Dateien über Datei/ Import/ externe Bibliothek öffnen und ziehe den Ordner aus der Bibliothek in die Bibliothek des Dokuments. Teste den Film.

Einiges lässt sich über Stile änderen, anderes nur über Skinning.
Es gibt Hierachien so lassen sich beispielsweise globale Stile für alle Instanzen festlegen, wobei die Stile für eine einzelne Instanz Vorrang vor den global festgelegten Stilen haben. Logo, sonst würde es ja nicht gehen
Hier nun einige globale Stile und einige Stile für die Buttoninstanz myButton.