Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-03-2004, 19:23   #1 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
[TUT] DateClass

Hey Folks,

heut will ich mich an meinem ersten Tutorial versuchen, und Euch mal was zum besten geben.

Ziel dieses Tutorials wird es sein, eine Klasse zu erstellen, die es ermöglicht, per include schnell und einfach die aktuellen Datums und Zeitinformationen in einem Textfeld darzustellen.

Stellen wir zu Anfang erst einmal einige Überlegungen an, was wir benötigen werden...

1. Eine Klasse
2. Ein Textfeld, in dem wir unsere Informationen ausgeben werden.
3. Eine function, die dafür sorgt, dass unsere Infos im Sekundeninterval angezeigt werden.
4. einige Hilfsfunktionen

Soweit so gut, fangen wir also an...
Dazu erstellen wir uns einen NameSpace, in dem wir unsere Klasse ablegen.

ActionScript:
  1. if( _global.de == undefined) _global.de = new Object();
  2. if( _global.de.egliman == undefined) _global.de.egliman = new Object();

Als nächstes benötigen wir unsere Klasse, die das Ziel-Textfeld als Parameter erwartet
und die init-Methode aufruft.

ActionScript:
  1. o = _global.de.egliman.DateClass = function(  poTarget) {
  2.     this.init.apply( this, arguments[0]);
  3. }

Erstellen eines Hilfs-Objectes, damit wir nicht immer den kompletten Klassennamen ausschreiben müssen

ActionScript:
  1. o = o.prototype;

In der init function überprüfen wir mit Hilfe der Methode isValidTarget(), ob ein gültiges Textfeld
als Parameter übergeben wurde.
Ist dass der Fall, wird true zurückgebeben, und eine Referenz auf unser Textfeld
in der Variable ref_date_txt gespeichert.
Falls nicht, ist die Rückgabe der Methode 'false', und die Variable ref_date_txt wird auf -1 gesetzt.

Als nächstes wird mit der Methode 'hasTarget()' überprüft, ob eine gültige Referenz erzeugt wurde.
Wenn ja, wird die Ausgabe gestartet, im anderen Fall eine Fehlermeldung ausgegeben.
Das könnte man sicherlich vereinfachen, ich lasse es aber der Übersicht halber einfach so

ActionScript:
  1. o.init = function( poTarget) {
  2.     this.ref_date_txt = this.isValidTarget( poTarget) ? poTarget : -1;
  3.    
  4.     if(! this.hasTarget()) {
  5.         trace('de.egliman.DateClass.init() : missing textField param')
  6.         return;
  7.     }
  8.    
  9.     trace('de.egliman.DateClass.init() : textfield passed as param ->' + this.ref_date_txt);
  10.     this.startOutput();
  11. }

Schauen wir uns als nächstes die beiden Methoden 'isValidTarget()' und 'hasTarget() an.
Sie gibt (wie oben erwähnt) true zurück, wenn unser Parameter ein Textfeld ist.

ActionScript:
  1. o.isValidTarget = function( poTarget) {
  2.     return ( poTarget instanceof TextField);
  3. }

Hier erfolgt ein simpler check, ob unsere ReferenzVariable ungleich -1 ist,
was gleichbedeutend mit der erfolgreichen Speicherung der Referenz ist.

ActionScript:
  1. o.hasTarget = function() {
  2.     return this.ref_date_txt != -1;
  3. }

Ist dieser Schritt erledigt, wir befinden uns geistig immer noch in der initFunction,
beginnt die Ausgabe unserer DatumsInformationen.

ActionScript:
  1. o.init = function( poTarget) {
  2.     this.startOutput();
  3. }

Soweit alles im grünen Bereicht ? Gut, dann gleich weiter zu unserer 'startOutput()'-Methode
Hier starten wir sozusagen unsere Ausgabe, indem wir uns eine schicke Variable definieren,
in der unser Interval abgelegt wird. Den benötigen wir ja, um auf dem zeitlich laufenden zu bleiben.

Als Function, die ausgeführt werden soll, geben wir die Methode 'updateDateText()' an,
gefolgt vom Wert für die Zeit, in unserem Beispiel 1000 millisekunden und dem Object selbst als Referenz.
ActionScript:
  1. o.startOutput = function () {
  2.     trace('de.egliman.DateClass.startOutput() : start displaying date informations');
  3.     this.id = setInterval( this.updateDateText, 1000, this);
  4. }

Nun kommen wir zum eigentlichen Herzstück unserer Klasse, der Methode 'updateDateText()'
Hier ermitteln wir unsere Informationen, die dargestellt werden sollen, mit Hilfe des Date-Objects,
speichern diese in lokalen Variablen und übergeben dann unseren formatierten String an
unsere Ausgaberoutine 'setDateText()'.

ActionScript:
  1. o.updateDateText = function( poRef) {
  2.     this = poRef;
  3.    
  4.     var dateObj = new Date();
  5.     //
  6.     var day = this.zeroFill( dateObj.getDate());
  7.     var month = this.zeroFill( dateObj.getMonth());
  8.     var year = dateObj.getFullYear();
  9.  
  10.     var hour = this.zeroFill( dateObj.getHours());
  11.     var minu = this.zeroFill( dateObj.getMinutes());
  12.     var sec = this.zeroFill( dateObj.getSeconds());
  13.     //
  14.     var sTimeStamp =  ' '+ day +'/'+ month +'/'+ year +' - '+ hour +':'+ minu +':'+ sec;
  15.     //
  16.     this.setDateText( sTimeStamp);
  17. }

Allerdings werden die Angaben einstellig zurückgeben, was bei Zahlen, die kleiner als 10 sind,
nicht recht hübsch wirken will.

Also ? Genau, eine Methode gebastelt, die uns unsere Zahlen mit einer führenden Null bestückt.
Als Parameter wird unsere Zahl übergeben, die wir überprüfen wollen.

Da eine eine Zahl + 0 bekanntlich die Zahl selbst ergibt, müssen wir unsere zu füllende Zahl vor der Rückgabe
noch in einen String umwandeln.
ActionScript:
  1. o.zeroFill = function ( piDigit) {
  2.     var iFilled = ( piDigit <= 9) ? '0'+ piDigit.toString() : piDigit;
  3.     //
  4.     return iFilled;
  5. }

Nachdem wir nun unsere Informationen über Datum und Zeit gesammelt und
unseren Ausgabestring formatiert haben, bleibt uns eigentlich nur noch eine übrig,
dass setzen des Textes in unserem Textfeld.

Dazu benutzen wir die Methode 'setDateText()'
ActionScript:
  1. o.setDateText = function( psDateText) {
  2.     this.ref_date_txt.text = psDateText;
  3. }

und zu guter letzt, löschen wir unser Hilfs-Object.
ActionScript:
  1. delete o;

Um die ganze Geschichte nun auch zum laufen zu bringen,
erstellen wir per

ActionScript:
  1. #include "de.egliman.DateClass"
  2.  
  3. dateController = new _global.de.egliman.DateClass( targetTextfield);

eine neue Instanz unserer DateClass und übergeben unser ZielTextfeld.
Das war schon alles.

Ich hoffe, mein erstes Tutorial findet etwas Anklang und wird dem einen oder
anderen mal nützlich sein, etwas Arbeit abnehmen bzw. Zeit sparen.

Euch noch einen schönen Abend und Vielen Dank für Eure Aufmerksamkeit.

Gruss


download de.egliman.DateClass.as
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn

Geändert von the binary (20-03-2004 um 09:38 Uhr)
the binary ist offline   Mit Zitat antworten
Alt 22-03-2004, 20:51   #2 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
auf ein bisschen mehr resonanz hätte ich schon gehofft...

gibts verbesserungsvorschläge fürs nächste mal ?


gruss
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 24-03-2004, 00:35   #3 (permalink)
...
 
Benutzerbild von killerkarnickel
 
Registriert seit: Jul 2002
Ort: london
Beiträge: 174
Hallo the binary,

super Tutorial, danke !

Zwei Sachen sind für mich allerdings leider etwas zu hoch, vielleicht magst Du die ja ein bißchen näher erklären:

1) Wozu ist der Namespace gut ?
Kann man nicht genauso gut :
DateClass = function( poTarget) .....
schreiben und dann mit blabla=new DateClass (textfeld) ein neues Objekt erstellen ?

2) Die Zeile :
this.init.apply( this, arguments[0]);
ist mir auch nicht ganz klar.
Wo ist der Unterschied zu :
this.init(poTarget); ?


Viele Grüße
das killerkarnickel
killerkarnickel ist offline   Mit Zitat antworten
Alt 24-03-2004, 07:31   #4 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
ja, man könnte es auch so machen.
der simulierte namespace in flash sorgt lediglich dafür,
dass konflikte mit dem namen der klasse vermieden werden.

soll heissen, jede klasse bekommt ihren eigenen 'raum',
in dem sie existieren kann und sich klassen mit gleichem namen nicht gegenseitg
überschreiben können.

das apply benutze ich eigentlich der übersicht halber, ausserdem erspart auch dass ein wenig schreibarbeit, wenn man viele parameter hat, die mann sonst alle 'per hand' übergeben müsste.

so wird einfach ein parameter array übergeben..


gruss
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 24-03-2004, 14:07   #5 (permalink)
...
 
Benutzerbild von killerkarnickel
 
Registriert seit: Jul 2002
Ort: london
Beiträge: 174
Vielen Dank für die Erklärung, hat Licht ins Dunkel gebracht (und ich hab wieder was gelernt :-) ) .

killerkarnickel
killerkarnickel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele