Dynamische Buttons und Events

Mayday171

Erfahrenes Mitglied
Hallo,

Ich erste dynamisch Buttons in einer for Schleife. Möchte nun für jeden dieser Buttons ein OnRollOver Event festlegen. Klappt leider nicht so wie ich das vor hab, obwohl es doch so logischweiße funktionieren müsste.

PHP:
for(i=0;i<_root.haupt.length-1;i++) {	
		this.attachMovie("btn","btn"+i,1+i);
		this["btn"+i]._y=(i+1)*80;
		this["btn"+i].createTextField("btntext",i+3,10,12,180,32.8);
		this["btn"+i].btntext.embedFonts=true;
		//this["btn"+i].btntext.text=_root.haupt[i];
		this["btn"+i].btntext.setTextFormat(format);
		this["btn"+i].btntext.antiAliasType="advanced";
		this["btn"+i].onRollOver = function() {
			this["btn"+i].btntext.text="test";
		}
	}

weiß jemand einen Rat

Danke

MfG
 
Hi,

Code:
for(i=0;i<_root.haupt.length-1;i++) {    
        var but = this.attachMovie("btn", "btn"+i, 1+i);
        but._y=(i + 1) * 80;
        var tf = but.createTextField("btntext", 3, 10, 12,1 80, 32.8); // Du kannst das Textfeld
        // immer z.B. auf der Tiefe 3 erstellen, da es sich ja innerhalb des jeweiligen
        // Buttons befindet
        tf.embedFonts=true;
        tf.text=_root.haupt[i];
        tf.setTextFormat(format);
        tf.antiAliasType="advanced";
        but.onRollOver = function() {
            this["btntext"].text="test"; // Mit "this" greifst Du hier auf den jeweiligen
            // Button zu, da Du Dich innerhalb der onRollOver-Methode schon
            // auf dem Button befindest.
            // An dieser Stelle kannst Du auch Deinen Filter auf den Clip setzen
        }
}

Bitte erstelle keine Mehrfachpostings, wenn es sich fast um das selbe Problem handelt - danke!

Gruß
.
 
Hab ich schon gemacht! verwende nur eine externe Schriftart, die ich ordentlich eingebunden bzw. eingebettet habe. Im Anhang findest du nochmal die .fla

kompillieren kannst du sie leider nicht, weil ich mit php arbeite.

Kann es mir irgendwie nicht erklären....

Danke

MfG
 

Anhänge

Hi,

probiers mal so:
Code:
generieren =function() {
    for(i=0;i<_root.haupt.length-1;i++) {	
        var but = this.attachMovie("btn", "btn"+i, 1+i);
        but._y=(i + 1) * 80;
        var tf = but.createTextField("btntext", 3, 10, 12,180, 32.8); 
        tf.embedFonts=true;
        tf.setNewTextFormat(format);
        tf.text=_root.haupt[i];
        tf.antiAliasType="advanced";
        but.onRollOver = function() {
            this["btntext"].text = "test";
        }
    }
}
Erklärung: die Methode "setTextFormat" setzt das Textformat für den bisherigen Inhalt des Textfeldes. Änderst Du den Inhalt, wird das verwendete Format überschrieben. Du müsstest also entweder nach dem Ändern des Textes das Format erneut festlegen (mit einem erneuten "setTextFormat" innerhalb der onRollOver-Methode), oder - wie ich es hier gemacht habe - vor dem ersten Zuweisen eines Textes das Format für alle zukünftigen Änderung per "setNewTextFormat" festlegen.

Anmerkungen:

1. format.color=f000000; "f000000" ist keine Zahl und gibt "undefined" zurück. Hexadezimale Werte werden so angegeben: 0x000000

2. Du solltest den Font in der Größe verwenden, die Du im Fontobjekt angegeben hast, damit der Text nicht verzerrt wird. Ein Fontobjekt bettet die Schriftart immer nur in der angegebenen Größe ein - wenn Du eine andere verwendest, wird der Text einfach nur auf die gewünschten Maße gestreckt.

3. Eine konsistente Einrückung kann sich bezahlt machen. Dein Code ist zum Teil mit Tabstopps, zum Teil mit Leerzeichen eingerückt und auch etliche Leerräume (z.B. unterhalb Deiner Funktionen) sind mit Leerzeichen gefüllt ...

Gruß
.
 
Danke für die schnelle Antwort. klappt ohne Probleme. Wie stell ich das jetzt mit den Filtern an muss ich die Variablen usw. mit in den onRollOver packen?

PHP:
var myDropFilter = new flash.filters.GlowFilter(0x9bc9e1, 1, 3,5, 3, 20, false, false); 

but.onRollOver = function() {
			btntext.filters = myFilters;
			var myFilters:Array = tf.filters;
			myFilters.push(myDropFilter);

oder kann ich das ganze auserhalb lassen

PHP:
var myDropFilter = new flash.filters.GlowFilter(0x9bc9e1, 1, 3,5, 3, 20, false, false); 

        var myFilters:Array = tf.filters;
		myFilters.push(myDropFilter);
        but.onRollOver = function() {
			btntext.filters = myFilters;
        }
 
Hi,

wenn Du nur einen einzigen Filter auf dem Textfeld liegen hast, kannst Du ihn beim rollOver hinzufügen, und beim rollOut wieder entfernen:
Code:
generieren =function() {
    for(i=0;i<_root.haupt.length-1;i++) {	
        var but = this.attachMovie("btn", "btn"+i, 1+i);
        but._y=(i + 1) * 80;
        var tf = but.createTextField("btntext", 3, 10, 12,180, 32.8); 
        tf.embedFonts=true;
        tf.setNewTextFormat(format);
        but.orig = _root.haupt[i]; // Originaltext
        but.high = but.orig + " OVER"; // rollOver-Text
        tf.text = but.orig;
        tf.antiAliasType="advanced";
        but.onRollOver = function() {
            this["btntext"].text = this.high;
            this["btntext"].filters = new Array(myDropFilter);
        }
        but.onRollOut = but.onDragOut = function() {
            this["btntext"].text = this.orig;
            this["btntext"].filters = new Array();
        }
    }
}
Hast Du schon einen dauerhaften Filter auf dem Textfeld liegen, wirds komplizierter, da Du nur den neuen Filter hinzufügen und löschen musst, ohne den ursprünglichen anzurühren. Dazu könntest Du z.B. das filters-Array auf Übereinstimmung mit Deinem DropFilter überprüfen.

Gruß
.
 
Zurück