• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-12-2007, 10:38   #1 (permalink)
Neuer User
 
Benutzerbild von stern1001
 
Registriert seit: Jun 2007
Beiträge: 93
Sprungfunktion für buttons...

Hallo zusammen,

ich habe mir eine Linkliste in einer ScrolBox gebaut. Die Links werden aus einer XML-Datei geholt und in Buttons gewandelt. Ich suche nun nach einer Möglichkeit, wie ich über eine Art Navigator von einem Button in der Linkliste zum nächsten Springen kann.

Leider hab ich keine Ahnung, wie ich das am besten angehe. Würde mich sehr freuen, wenn mir da jemand mal kurz auf die Sprünge helfen könnte.

Hie mein Code:
PHP-Code:
meinXML = new XML();
meinXML.ignoreWhite true;
meinXML.load("pilotnavigation.xml");
meinXML.onLoad = function(status) {
    if (
status) {
        
xmlpfad this.firstChild.childNodes;
        
createEmptyMovieClip("label_mc"1);
        for (var 
0xmlpfad.lengthi++) {
            
label xmlpfad[i].firstChild.firstChild;
            
label_mc.attachMovie("LClip""LClip" ii);
            
label_mc["LClip" i].label.autoSize "left";
            
label_mc["LClip" i].label.htmlText label;
            
label_mc["LClip" i]._y label_mc["LClip" i]._height 1.1;
            
label_mc["LClip" i].daten xmlpfad[i].firstChild.nextSibling;
            
label_mc["LClip" i].onRelease = function() {
                
getURL(this.datenxmlpfad[i].firstChild.nextSibling.nextSibling);
            };
        }
        
box_sp.setScrollContent(label_mc);
    }
};
/////////////////////////////////////////////////////////////////////////////////// 
Die XML sieht so aus:
PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<linkliste>
  <param>
    <name>testone</name>
    <href>http://www.google.de</href>
    <target></target>
  </param>
  <param>
    <name>testtwo</name>
    <href>http://www.google.de</href>
    <target>_blank</target>
  </param>
  <param>
    <name>testthree</name>
    <href>http://www.google.de</href>
    <target></target>
  </param>
  <param>
    <name>testfour</name>
    <href>http://www.google.de</href>
    <target></target>
  </param>
  <param>
    <name>test five</name>
    <href>http://www.google.de</href>
    <target></target>
  </param>
</linkliste>

Liebe Grüße und danke für die Hilfe
Steffi
stern1001 ist offline   Mit Zitat antworten
Alt 18-12-2007, 11:41   #2 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
hi,

ich versteh leider nicht 100% was du vor hast...
was soll denn diese zeile hier?
PHP-Code:
getURL(this.datenxmlpfad[i].firstChild.nextSibling.nextSibling); 
da einfach i zu schreiben ist quatsch. denn i kennt er so an dieser stelle nicht.. kannste mit einem einfachen trace überprüfen. i mußte also zwischenspeichern..
PHP-Code:
label_mc["LClip" i].id 
und dann im onRelease:
PHP-Code:
getURL(this.datenxmlpfad[this.id].firstChild.nextSibling.nextSibling); 
aber die zeile code ist trotzdem merkwürdig..
vielleicht probierst du nochmal genauer zu erklären was genau passieren soll wenn man einen dieser buttons anklickt?!

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 18-12-2007, 11:57   #3 (permalink)
Neuer User
 
Benutzerbild von stern1001
 
Registriert seit: Jun 2007
Beiträge: 93
Ok, das mit dem i sehe ich ein, totaler Quatsch. Nun, ich versuche das Ganze nochmal genauer zu erklären:

Ich habe ein Scrollpane mit einer, aus XML generierten Linkliste drin. Nun möchte ich, dass der erste Link (bzw. Button) in irgendeiner Weise aktiv ist, zum Beipiel mit einem Rollover.

Außerhalb des Scrollpanes sollen nun drei weitere Buttons eine Art Navigator bilden.

Vor: Springt zum nächsten Link im scrollpane -> Rollover
Zurück: Springt zum vorherigen Link im scrollpane -> Rollover
Enter: führt einen Klick auf den anktiven Button aus.

Ist das einigermaßen verständlich? Vielleicht sollte ich auch einfach diese Linkliste von H.G. Seib, die wohl um einiges besser ist als meine, nehmen...
Thread

Ist es nun verständlicher geworden?

Liebe Grüße
Steffi
stern1001 ist offline   Mit Zitat antworten
Alt 18-12-2007, 12:59   #4 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
jo, verstanden
hier mal ein ansatz.. ich push die buttons einfach alle in ein array... dann kannste die buttons einfach über das array ansprechen!

PHP-Code:
meinArray = new Array();
meinStart 0;//0 weil ein array immer bei 0 anfängt und nicht bei 1

meinXML = new XML();
meinXML.ignoreWhite true;
meinXML.load("pilotnavigation.xml");
meinXML.onLoad = function(status) {
    if (
status) {
        
xmlpfad this.firstChild.childNodes;
        
createEmptyMovieClip("label_mc"1);
        for (var 
0xmlpfad.lengthi++) {
            
label xmlpfad[i].firstChild.firstChild;
            
label_mc.attachMovie("LClip""LClip" ii);
            
label_mc["LClip" i].id i;
            
label_mc["LClip" i].label.autoSize "left";
            
label_mc["LClip" i].label.htmlText label;
            
label_mc["LClip" i]._y label_mc["LClip" i]._height 1.1;
            
label_mc["LClip" i].daten xmlpfad[i].firstChild.nextSibling;
            
label_mc["LClip" i].onRelease = function() {
                
getURL(this.datenxmlpfad[this.id].firstChild.nextSibling.nextSibling);
            };
            
            
meinArray.push(label_mc["LClip" i]);
        }
        
box_sp.setScrollContent(label_mc);
    }
}; 

deinBtUp.onRelease = function() {
    
    if(
meinStart 0) {
        
        
meinStart--;
        
        
trace(meinArray[meinStart]);
        
        
//meinArray[meinStart].onRelease();
        
    
}
    
}

deinBtDown.onRelease = function() {
    
    if(
meinStart meinArray.length 1) {
        
        
meinStart++;
        
        
trace(meinArray[meinStart]);
        
        
//meinArray[meinStart].onRelease();
        
    
}
    

also
meinArray[0] ist der erste button
meinArray[1] ist der zweite button usw. usw.

ich hab einfach mal eine variable meinStart angelegt die zu begin 0 ist... also dein erster button.. mit den buttons deinBtUp und deinBtDown zählst du diese var einfach hoch und runter und kannst so auf deine buttons und deren infos zugreifen

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 18-12-2007, 13:21   #5 (permalink)
Neuer User
 
Benutzerbild von stern1001
 
Registriert seit: Jun 2007
Beiträge: 93
Hallo salazar,

das ist toll!!! ;-) genauso sollte das funktionieren.
Ich hab meine Liste nun nochmal etwas abgeändert und versucht deinen Vorschlag darauf anzuwenden...Leider funktioniert das mit den Buttons noch nicht so ganz, wie ich möchte. Allerdings denke ich, dass ich das Array noch falsch befülle. Es kommt auf die Art, wie ioch es versuche nicht wirklich viel an... KAnnst du mir vielleicht nochmal nen Tipp geben, wie ich hier den push machen muss?

PHP-Code:
meinArray = new Array();
meinStart 0;//0 weil ein array immer bei 0 anfängt und nicht bei 1 

meinXML = new XML();
meinXML.ignoreWhite true;
meinXML.sp myScrollPane;
meinXML.load("pilotnavigation.xml");
meinXML.onLoad = function(status) {
    if (
status) {
        var 
vGetURL = new Object();
        
vGetURL.click = function(evt) {
            
//trace(evt.target.url);
            //trace(evt.target.target);
             
getURL(evt.target.url,evt.target.target);
        };
        
//
        
var vRand=2;
        var 
vBtnHoch=40;
        var 
vBtnBreit=145;
        var 
xmlinhalt meinXML.firstChild.childNodes;
        
        for (var 
i in xmlinhalt) {
            var 
vName "link_btn"+i;
            
meinXML.sp.content.attachMovie("Button"vNamei);
            var 
vBtn meinXML.sp.content[vName];
            
vBtn.label.autoSize "left";
            
vBtn.label.htmlText label;
            
vBtn.setSize(vBtnBreit-2*vRandvBtnHoch-vRand);
            
vBtn.move(2*vRandi*vBtnHoch+vRand);
            var 
tempxml xmlinhalt[i].childNodes;
            
vBtn.label tempxml[0].childNodes;
            
vBtn.url tempxml[1].childNodes;
            
vBtn.target tempxml[2].childNodes;
            
vBtn.addEventListener("click"vGetURL);
        }
        
meinArray.push(["link_btn"+i]);
        
trace(meinArray);
               
//Ich denke hier liegt noch mein Problem..Flasches Push, oder?
        
meinXML.sp.redraw(true);
    }
};

///////////////////////////////////////////////////////////////////////////////////    

Up.onRelease = function() {
    
    if(
meinStart 0) {
        
        
meinStart--;
        
        
trace(meinArray[meinStart]);
        
        
//meinArray[meinStart].onRelease();
        
    
}
    
}

Down.onRelease = function() {
    
    if(
meinStart meinArray.length 1) {
        
        
meinStart++;
        
        
trace(meinArray[meinStart]);
        
        
//meinArray[meinStart].onRelease();
        
    
}
    

Liebe Grüße
Steffi
stern1001 ist offline   Mit Zitat antworten
Alt 18-12-2007, 13:34   #6 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.888
Darf ich auch? push() gehört auf jeden Fall mit in die Schleife. Die "click" Funktion dafür eher nicht.
PHP-Code:
var vGetURL = new Object();
vGetURL.click = function(evt) {
    
//trace(evt.target.url);
    //trace(evt.target.target);
    
getURL(evt.target.urlevt.target.target);
};
//
meinXML.onLoad = function(status) {
    if (
status) {
        var 
vRand 2;
        var 
vBtnHoch 40;
        var 
vBtnBreit 145;
        var 
xmlinhalt meinXML.firstChild.childNodes;
        for (var 
i in xmlinhalt) {
            var 
vName "link_btn"+i;
            
meinXML.sp.content.attachMovie("Button"vNamei);
            var 
vBtn meinXML.sp.content[vName];
            
vBtn.label.autoSize "left";
            
vBtn.label.htmlText label;
            
vBtn.setSize(vBtnBreit-2*vRandvBtnHoch-vRand);
            
vBtn.move(2*vRandi*vBtnHoch+vRand);
            var 
tempxml xmlinhalt[i].childNodes;
            
vBtn.label tempxml[0].childNodes;
            
vBtn.url tempxml[1].childNodes;
            
vBtn.target tempxml[2].childNodes;
            
vBtn.addEventListener("click"vGetURL);
            
meinArray.push(vBtn);
        }
        
trace(meinArray);
        
meinXML.sp.redraw(true);
    }
}; 
Musst mal gucken, ob's so klappt.

Greets @ sal...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 18-12-2007, 13:35   #7 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
hi,
hm.. ist dann jetzt vBtn der bezeichner für deine buttons oder wie jetzt? dann sollte das wie folgt aussehen:
PHP-Code:
meinArray.push(vBtn); 
und natürlich gehört diese code zeile wieder mit in die for schleife rein...

cheers, sal

edit:
grüße zurück Frager
warste wieder einmal schneller als icke
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 18-12-2007, 14:11   #8 (permalink)
Neuer User
 
Benutzerbild von stern1001
 
Registriert seit: Jun 2007
Beiträge: 93
Ihr seid einfach genial! Es funktioniert. Ich bekomme jetzt immer die Position des aktiven Button in der Ausgabe angezeigt. Ich hoffe ich bin nicht zu unverschämt, wenn ich jetzt mal noch nach der Möglichkeit für den Rollover frage...

Hab ich nun auch die Möglichkeit, dem aktiven Button (übrigens einer aus den Komponenten) zu sagen, dass er eine andere Farbe annehmen soll?

Liebe Grüße
Steffi
stern1001 ist offline   Mit Zitat antworten
Alt 18-12-2007, 14:15   #9 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
mc's lassen sich über setRGB einfärben..
oder was soll nun wieder genau passieren?!

cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 18-12-2007, 14:19   #10 (permalink)
Neuer User
 
Benutzerbild von stern1001
 
Registriert seit: Jun 2007
Beiträge: 93
Mann, bin ich kompliziert...

Genau, der momentan aktive Button (also der mit der Nummer, die ich in der Ausgabe habe), soll eine andere Hintergrundfarbe bekommen...

Liebe Grüße
Steffi
stern1001 ist offline   Mit Zitat antworten
Alt 18-12-2007, 15:13   #11 (permalink)
Neuer User
 
Benutzerbild von stern1001
 
Registriert seit: Jun 2007
Beiträge: 93
Da bin ich wohl nochmal... Also wenn ich das Ganze richtig verstehe, muss zum einen bei meinStart = 0 ein mal setRGB für den Button ausgeführt werden und zum anderen jedesmal wenn ich einen Klick auf meine Navi-Buttons ausführe...

Nun, ich habe versucht das ganze mit meinArray[meinStart].setRGB hinzubekommen, allerdings funtioniert das nicht. Liegt es daran, dass meine Buttons von der Komponente Button abstammen?

Wie kann ich also am Besten die Farbe des Buttons ändern?

Danke euch vielmals...
Liebe Grüße
Steffi
stern1001 ist offline   Mit Zitat antworten
Alt 19-12-2007, 09:37   #12 (permalink)
Neuer User
 
Benutzerbild von stern1001
 
Registriert seit: Jun 2007
Beiträge: 93
Also ich bin mit meiner Highlight-Funktion immer noch nicht weiter. Ich schaffe es einfach nicht, dem akuellen Button eine andere Schriftfarbe oder dergleichen zu verpassen...

Ich kann das Ganze zwar global machen:
PHP-Code:
_global.styles.Button = new mx.styles.CSSStyleDeclaration();
_global.styles.Button.setStyle("fontFamily""verdana");
_global.styles.Button.setStyle("fontSize",10);
_global.styles.Button.setStyle("color""0x000000");
_global.styles.Button.setStyle("themeColor""0x000000"); 
aber dann hab ich ne andere Farbe für ALLLE Buttons. das will ich ja nicht...
Vielleicht fällt da noch jemand etwas ein. Wäre schön.

Liebe Grüße
Steffi
stern1001 ist offline   Mit Zitat antworten
Alt 19-12-2007, 12:35   #13 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
hi,
warum mußtest du auch eine komponente benutzen.. ich hasse die dinger!

ich glaub das problem bei dir ist jetzt folgendes. dadurch das du die komponente attached kannst du nicht mit setStyle korrekt drauf zugreifen
PHP-Code:
meinXML.sp.content.attachMovie("Button"vNamei); 
schau dir mal createClassObject genauer an!
das würde dann bei dir so in etwa aussehen:
PHP-Code:
meinXML.sp.content.createClassObject(ButtonvNamei, {label:vName}); 
also das attachMovie raus und diese zeile rein..

auf diese weise kannste dann auch mit setStyle drauf zugreifen..

hier ein bsp.. mußt den code nur einfügen und veröffentlichen. das funktioniert:
(und natürlich muß der button in der bibliothek liegen..)
PHP-Code:
import mx.controls.Button;

//standart mäßig kriegen alle buttons ein anderes themeColor
_global.style.setStyle("themeColor"0xFF0000);

//erstellt einen holder/container movieclip
var testHolder:MovieClip this.createEmptyMovieClip("test"this.getNextHighestDepth());
    
testHolder._y 200;
    
//die buttons werden erstellt
testHolder.createClassObject(Button"button1"test.getNextHighestDepth(), {label:"button1"});
testHolder.createClassObject(Button"button2"test.getNextHighestDepth(), {label:"button2"});
testHolder.createClassObject(Button"button3"test.getNextHighestDepth(), {label:"button3"});

//posizionen der buttons
testHolder.button1._x 100;
testHolder.button2._x 250;
testHolder.button3._x 400;

//2 der buttons erhalten andere themeColor's als der standart
testHolder.button1.setStyle("themeColor"0x000000);
testHolder.button3.setStyle("themeColor"0x0073DE);

//einer der buttons sieht komplett anders aus als die anderen
testHolder.button3.setStyle("color"0xFF0000);
testHolder.button3.setStyle("fontSize"15);
testHolder.button3.setStyle("fontFamily""verdana"); 
cheers, sal

ps. bitte keine pm's mehr!
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!

Geändert von salazar (19-12-2007 um 13:13 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 19-12-2007, 15:26   #14 (permalink)
Neuer User
 
Benutzerbild von stern1001
 
Registriert seit: Jun 2007
Beiträge: 93
sorry für pm...

Nun, dann werd ich mir mal noch createClassObject näher anschauen, da ich ja schon irgendwie anzeigen muss, welcher Button gerade aktiv ist. Nochmal eine Frage dazu... Wenn ich veröffentliche und den Button anklicke:

PHP-Code:
Buttonname.onRelease = function() {
    if(
meinStart 0) {
        
meinStart--;
        
trace(meinArray[meinStart]);
    }  

bekomme ich den Namen des letzten Buttons im Trace...Wie müsste ich denn das Array "umschreiben", wenn ich hier den ersten Namen des ersten button haben möchte???

Danke vielmals.

Liebe Grüße
Steffi
stern1001 ist offline   Mit Zitat antworten
Alt 19-12-2007, 15:29   #15 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.305
dazu würde ich initial das array nachdem es fertig gefüttert worden ist einfach umkehren?!

PHP-Code:
meinArray.reverse(); 
cheers, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar 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 23:08 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele