17.2 Anwendung von Komponenten
Komponenten lassen sich sowohl durch Programmierung einbinden als auch visuell mit Hilfe zahlreicher Bedienfelder verwenden und konfigurieren. Dies erlaubt es Programmiernovizen, dank Bindungen, Schemata und Verhalten schnell zu Ergebnissen zu gelangen.
Live-Vorschau
Einige Komponenten erlauben eine Vorschau in der Entwicklungsumgebung, die dem Erscheinungsbild in der Anwendung schon recht nahe kommt. Um die Vorschau für Komponenten zu aktivieren, wählen Sie Steuerung • Live-Vorschau aktivieren. Änderungen des Designs haben jedoch keinerlei Auswirkungen auf die Live-Vorschau. Denn Komponenten, die diese Vorschau anbieten, bedienen sich externer oder eingebetteter SWF-Dateien. Diese werden bei der grafischen Modifizierung von Komponenten nicht angepasst, außer es wird eine neue Vorschaudatei erzeugt.
Die Anwendung von Komponenten in Flash MX geschieht sehr aehnlich zu Flash MX 2004. Flash MX 2004 bietet jedoch in der Professional-Version noch einige Extras wie den Komponenten-Inspektor, der Bindungen und Schemata erlaubt. Die meisten dieser Zusaetze basieren jedoch auf der Architektur der Komponenten der 2. Generation, die einiges an weiterem ActionScript-Code im Hintergrund einbetten muessen. Fuer komplett selbst entwickelte Anwendungen sollte deshalb ueberprueft werden, ob ein Verzicht auf diese Funktionen nicht von Vorteil sein kann (siehe »Vorbehalte« auf Seite 439).
Um eine Komponente in ein Projekt einzubinden, öffnen Sie in Flash MX 2004 das Bedienfeld Komponenten über Fenster • Entwicklungs-Bedienfelder • Komponenten. Die für Sie nützliche Komponente müssen Sie jetzt nur noch mit gedrückter Maustaste aus dem Bedienfeld Komponenten in das Projekt ziehen.
Kompilierte Movieclips (SWC)
Vorgefertigte Komponenten liegen häufig in Form von kompilierten Movieclips (SWC) vor. Diese sind zwar nicht für die weitere Bearbeitung durch den Entwickler gedacht, mit etwas Handarbeit kann aber dennoch deren Inhalt analysiert werden. Gerade bei schlecht dokumentierten Komponenten ist dies nützlich. Damit Sie an den »Inhalt« eines kompilierten Symbols herankommen, benennen Sie die Endung von SWC in ZIP um. Der Inhalt lässt sich nun mit Programmen wie z.B. Winzip einfach entpacken, da es sich bei einer kompilierten Komponente um nichts anderes handelt als um eine ZIP-Datei, die eine SWF-Datei mit dem Bytecode der Komponente, Intrinsic-Klassen als ASI-Dateien zur Beschreibung der ActionScript-Schnittstellen (siehe »Intrinsic« ab Seite 424) und eine Konfigurationsdatei im XML-Format enthalten.
17.2.1 Komponenten einstellen
Hier klicken, um das Bild zu Vergrößern
Abbildung 17.3
Parameter im Eigenschafteninspektor
In den meisten Fällen konfigurieren Sie eine Komponente im Projekt, indem Sie die zugehörige Instanz auswählen und die Parameter in Eigenschafteninspektor festlegen.
Hier klicken, um das Bild zu Vergrößern
Abbildung 17.4
Komponenten-Inspektor_bei_ausgewaehlter_ComboBox-Komponente
Komponenten-Inspektor
Eine Neuerung ist der Komponenten-Inspektor (Fenster • Entwicklungs-Bedienfelder • Komponenten-Inspektor). Dieser bietet meist eine umfangreichere Liste mit Einstellungen als der Eigenschafteninspektor und erlaubt das Anlegen von Bindungen und Schemata.
17.2.2 Bindungen und Schemata
Meist handelt es sich bei den Daten in einer Anwendung nicht um native Flash-Datentypen, so wie die spaetere Verarbeitung in Flash es erfordert – insbesondere falls diese mit einer Datenquelle ueber XML oder aehnliche Formate ausgetauscht werden. Deshalb ist dann ein Schema zur Konvertierung erforderlich. Ein Schema legt die Datenstruktur fest, die anschliessend fuer Bindungen verwendet wird. Die Datenstruktur fuer das von einer Komponente gelieferte Ergebnis geben Sie innerhalb des Komponenten-Inspektors im Register Schema vor.
Hier klicken, um das Bild zu Vergrößern
Abbildung 17.5
Ein Schema legt fest, wie Flash die Strukturen einer Komponente in Datenstrukturen für Bindungen umwandelt.
Bindungen
Hier klicken, um das Bild zu Vergrößern
Abbildung 17.6
Bindungen erlauben es auf einfache Art und Weise, Daten zwischen Komponenten wie z.B. einer XML-Anbindung und einer Tabelle auszutauschen, ohne programmieren zu müssen.
Bei Bindungen handelt es sich um eine Möglichkeit, Komponenten über ihre Eigenschaften miteinander zu verbinden: Wenn sich die Eigenschaft X der Komponente A ändert, kopiert Flash automatisch den neuen Wert in die gebundene Eigenschaft Y der Komponente B. Bindungen erstellen Sie im Register Bindungen innerhalb des Komponenten-Inspektors.
17.2.3 Anpassung
Grundsätzlich können Sie sich andere Mechanismen für die Anpassung von Komponenten einfallen lassen als der von Macromedia mit der zweiten Generation in Flash MX 2004 eingeführten. Beispielsweise gibt es bereits seit Flash MX das Prinzip der Skins, das auch noch in Flash MX 2004 genutzt wird:
Skins
|
Skins (engl. für Haut) sind Grafik- oder Movieclip-Symbole. Komponenten verwenden diese Symbole zur Darstellung. In ihnen sind die Grafiken enthalten, die für das Aussehen der Komponente zuständig sind. Sie dürfen vorhandene Skins bearbeiten und neue Skins erstellen, um das Aussehen einer Komponente zu ändern. |
Themes
|
Sobald mehrere Komponenten auf einem festen Satz an Skins basieren, dann bezeichnet man diesen Satz als Theme (engl. für Thema). Um also alle Skins in einem Dokument durch neue Skins zu ersetzen, tauschen Sie das Thema aus. Das Standardthema für Flash MX 2004 und Flash MX Professional 2004 heißt übrigens Halo. |
CSS-basierte Stile
|
Die dritte Variante der Anpassung sind CSS-basierte Stile. Cascading Style Sheets (kurz CSS) und Komponenten funktionieren jedoch nur im Zusammenspiel mit dem Macromedia Framework für die Komponenten der zweiten Generation. Denn dort sind bereits alle notwendigen Methoden programmiert: |
_global.style.setStyle("fontFamily", "Tahoma");
_global.style.setStyle("fontSize", "10");
_global.style.setStyle("color", 0xFF0000);
_global.style.setStyle("themeColor", "haloOrange");
17.2.4 Programmierte Verwendung
Neben der eher visuellen Vorgehensweise bei dem Einsatz von Komponenten darf auch die Programmierung zur Erzeugung von Komponenten-Instanzen genutzt werden. Da es sich bei Komponenten im Kern um Movieclips handelt, kommen hier auch die gleichen Methoden wie bei Movieclips zum Einsatz.
Sobald ein Komponenten-Symbol in der Bibliothek mit einem Verknüpfungsnamen (engl. Linkage) versehen ist, kann die Komponente wie gewohnt über die Methode attachMovie dynamisch in einer Anwendung erzeugt werden:
// Symbol (Verknüpfungsname)
attachMovi.fla
var linkage:String = "Button";
// Instanzname
var instanceName:String = "button_mc";
// Tiefe
var depths:Number = 1;
// Erstelle Instanz
this.attachMovie(linkage, instanceName, depths);
Sobald Sie mit Komponenten der zweiten Generation arbeiten, stehen noch weitere Wege für die Erzeugung offen, sofern sich die Komponenten auch an Macromedias Architektur für die zweite Generation halten. Dies bedeutet, dass die Komponenten von der Klasse UIObject abgeleitet sein müssen – um genau zu sein von der Klasse mx.core.UIObject. Dann steht die Methode createObject zur Verfügung:
// Symbol (Verknüpfungsname)
createObject.fla
var linkage:String = "Button";
// Instanzname
var instanceName:String = "button_mc";
// Tiefe
var depths:Number = 1;
// Erstelle Instanz
this.createObject(linkage, instanceName, depths);
createClassObject
Noch einen kleinen Schritt weiter geht die Methode createClassObject der UIObject-Klasse. Diese benötigt nicht die Verknüpfung, sondern die Klasse als Angabe:
// Klasse
createClassObject.fla
var classObj:Function = mx.controls.Button;
// Instanzname
var instanceName:String = "button_mc";
// Tiefe
var depths:Number = 1;
// Erstelle Instanz
this.createClassObject(classObj, instanceName, depths);
createObject und createClassObject in Movieclips nutzen
Die beiden Methoden createObject und createClassObject stehen automatisch für alle Movieclips bereit, sobald eine Komponente der zweiten Generation verwendet wird. Es reicht aus, dass diese Komponente in der Bibliothek liegt.
17.2.5 Vorbehalte
Macromedia bietet mit dem in Flash integrierten Framework namens »Components V2« (Komponenten der zweiten Generation) bereits eine umfangreiche Plattform zur Entwicklung von Anwendungen und deren Oberflächen. Doch dieses Rahmensystem genügt den Anforderungen vieler Projekte nicht. Aus diesem Grund ist es immer eine Überlegung wert, ob nicht auf die vorhandenen Strukturen verzichtet werden kann.
Solange es sich um den Entwurf eines Prototypen handelt oder eher kleine Anwendungen benötigt werden, sind die Komponenten eine sehr gute Wahl, da diese schnell zu ansprechenden Ergebnissen führen. Doch sobald entweder eine umfangreiche Anpassung erforderlich oder schwachbrüstige Zielrechner vorhanden sind, verlieren die Komponenten der zweiten Generation ihren Charme.
Performance
Die Ergebnisse verschiedener Performance-Tests zeigen, dass mit steigender Anzahl der Oberflächenelemente die Geschwindigkeit einer Anwendung rapide abnimmt. Verglichen mit selbst erstellten Komponenten ohne Zuhilfenahme des Macromedia Frameworks sind Leistungssteigerungen zwischen 30 bis 70 Prozent möglich.
Speicherplatz
Der Speicherplatzbedarf ist dabei deutlich weniger dramatisch als oft gedacht. Zwar benötigt bereits eine einfache Komponente einen Großteil des Frameworks und katapultiert die Dateigröße schnell über 100 KByte. Doch in der Praxis werden ohnehin mehrere Komponenten gleichzeitig verwendet, so dass die einzelnen Bestandteile des Frameworks nicht mehr ins Gewicht fallen.
Anpassung und Erweiterung
Ein mühsamer und manchmal frustrierender Prozess ist die Anpassung und Erweiterung der Komponenten. Zwar hat Macromedia die Dokumentation dazu mit dem Update auf Version 7.2 auf einen vernünftigen Stand gebracht, doch wirklich leicht geht das auch so noch immer nicht von der Hand. In erster Linie liegt das an der angestrebten Mächtigkeit der Komponenten: Bereits das Ändern einer einzigen Farbe passt zur Laufzeit das komplette Erscheinungsbild an. Die daraus resultierende Komplexität der Komponenten hat zu einem schwer durchschaubaren Programmcode geführt. Durchsuchen Sie doch den Programmcode der mitgelieferten Komponenten nach schwer lesbarem, redundantem oder sogar fehlerhaftem Code. Sehr beliebt bei den Entwicklern der Komponenten sind beispielsweise Zugriffe auf Eigenschaften über die eckigen Klammern. Anstelle von s["selectedRadio"].setState(false); hätte der Entwickler nämlich genauso gut s.selectedRadio.setState(false); schreiben können. Auf die Performance scheint dies zwar keinen Einfluss zu haben, aber auf die Lesbarkeit und Typsicherheit. Manche Entwickler machen sich das sogar absichtlich zunutze. Das Codefragment holder["addEventListener"]
("cuePoint", listener); aus einer Komponente für CuePoints funktioniert nämlich nur so, da die dort angegebene Methode überhaupt nicht in der zugrunde liegenden Klasse deklariert ist. Hier würde es bei einer anderen Schreibweise ausnahmsweise einen Typfehler geben. Und an anderen Stellen mit ähnlichen Problemen verzichten viele Entwickler kurzerhand auf eine Typisierung – da nützt auch ActionScript 2.0 nichts.
Ausblick
Aus den genannten Gründen finden Sie im Folgenden eine Erklärung, wie Sie Komponenten in Flash ohne die von Macromedia gelieferten Klassen erzeugen und so vielleicht zu einem performanteren, schlankeren und leichter wartbaren System gelangen. Schließlich kennen Sie ja meist auch die Anforderungen an Ihr Projekt und können so unnötige Teile der Effizienz zuliebe wegrationalisieren!
Alternativen
Macromedia hat erkannt, dass das eigens für Anwendungsentwickler erstellte Framework hinsichtlich Performance und Bandbreitenbedarf vielen Anforderungen nicht genügt, und eine grundsätzliche Überarbeitung für die nächste Flash-Version angekündigt. Aber bereits jetzt stehen Alternativen zu Verfügung:
|
Der von Macromedia entwickelte Präsentationsserver Flex nutzt zur Darstellung ebenfalls Flash. Die Funktionalität des Flex Frameworks ist gegenüber den Components V2 deutlich erweitert worden, der umständliche Anpassungsprozess ist jedoch weiterhin kaum vermeidbar. Aufgrund der Lizenzkosten ab ca. € 14000 pro Server bietet sich Flex jedoch nur für große Projekte an! |
|
Der renommierte Entwickler Grant Skinner kündigte unter dem Namen GLIC (http://www.gskinner.com/glic/) ein eigenes Framework an, das die meisten Probleme mit Macromedias Framework ausmerzen und dennoch kompatibel zu diesem sein soll! |
|