Hilfedokument zum TreeView-Menüclip
Transcription
Hilfedokument zum TreeView-Menüclip
Flash-MX-ActionScript [KlappMenuExtern.swf] Autor: Daniel Deckensattl 10.08.2015 / Seite 1 / 5 Hilfedokument zum TreeView-Menüclip Diese kleine Dokumentation zeigt, wie man mit Flash ein Klappmenü (TreeView) programmieren kann. Dieser nur 26 KB grosse MovieClip wird extern konfiguriert und kann beliebig viele Menüs und Untermenüs verwalten. Die anzuzeigenden MovieClips sind auch extern vorhanden und werden bei Bedarf hinzugeladen. http://deckensattl.goip.de/ddflashpage/ Flash-MX-ActionScript [KlappMenuExtern.swf] Autor: Daniel Deckensattl 10.08.2015 / Seite 2 / 5 ActionScript 1.0 Flash MX Sehen wir uns aber nun den ActionScript-Code etwas genauer an. Der gesamte ActionScript-Code im ersten Schlüsselbild des Klappmenu-MovieClips. Die Konfigurationsdatei KlappMenuExtern.txt wird eingelesen und die Menüs in Arrays verpackt. Hier der Beispielinhalt der Konfigurationsdatei: &Hauptmenus=Menu1:Hilfebox1.swf,Menu2:Hilfebox2.swf,Menu3:Hilfebox3.swf &Untermenus=Test1:Hilfe1Unterbox1.swf,Test2:Hilfe1Unterbox2.swf,Test3: Hilfe1Unterbox3.swf,Test4:Hilfe1Unterbox4.swf £Test5:Hilfe2Unterbox1.swf,Test6:Hilfe2Unterbox2.swf,Test7:Hilfe2Unterbox3.swf £Test8:Hilfe3Unterbox1.swf,Test9:Hilfe3Unterbox2.swf,Test10:Hilfe3Unterbox3.swf &HilfePosX=150&HilfePosY=30&MenuPosX=20&MenuPosY=10& Die Hauptmenus sind mit Kommas getrennt und enthalten jeweils den anzuzeigenden Menüeintrag und den SWF-MovieClipname der auf Knopfdruck hinzugeladen wird. Wird auf das Ordnersymbol eines der Hauptmenüs geklickt, wird automatisch der dazugehörige MC (MovieClip) geladen und angezeigt. Erst ein Klick auf das Plus oder Minus-Zeichen klappt das Hauptmenu auf oder zu. Die Untermenus sind nach dem selben Prinzip in der Konfigurationsdatei hinterlegt, zuerst der anzuzeigenden Submenünamen gefolgt vom MC der dazu angezeigt werden soll (anstatt SWF-Datei können auch JPG-Dateien [No-Progress] verwendet werden). Die Untermenüeinträge sind dann mit einem £-Zeichen voneinander getrennt. Und zum Schluss werden die X- und Y-Positionen des Menüs (MenuPosX und MenuPosY) und der Hilfeclipdatei (HilfePosX und HilfePosY) angegeben. Wird dieser Clip in einem anderen FlashClip eingesetzt, müssen nur die Ordner Klappmenuordner zusammen mit dem Flash UI Components-Ordner und dem KlappMenu-Clip in die neue Bibliothek kopiert werden und schon steht das Hilfe-TreeView-Menü zur Verfügung. Einzig der Konfigurationsdateiname erhält dann denselben Namen wie der Ziel-MC, sodass dieser geladen werden kann. Der ActionScript-Code ist in diesem Fall sehr kurz und Bedarf keiner grossen Erklärung, da hier nur die in Arrays verpackten Menüs aufklappbar angezeigt werden. Hier nun der komplette ActionScript 1.0-Code (aus Flash MX): /* Autor: Daniel Deckensattl Erstellt: 10.08.2015 Update: 10.08.2015 TreeView-Menü welches extern konfiguriert wird. Die Hilfe-MovieClips müssen extern erstellt werden. */ // -- Aktiviert deutsche Umlautzeichen bei Import der TXT/HTML-Dateien ------------------------------System.useCodepage = true; var var var var iHilfePosX = 150; iHilfePosY = 30; iMenuPosX = 20; iMenuPosY = 10; // -- enthält den Namen der Konfigurations-Datei var strCFGAktuell = SWFName(false); var strCFGAktuell = SWFName(true) + "/" + strCFGAktuell+".txt"; aHauptMenus = new Array(); aUnterMenus = new Array(); aHauptMenuStatus = new Array(); function MenuInit() { iOrdnerStatus = 1; iMnuX = iMenuPosX; iMnuY = iMenuPosY; http://deckensattl.goip.de/ddflashpage/ Flash-MX-ActionScript [KlappMenuExtern.swf] Autor: Daniel Deckensattl for(u=0;u<aHauptMenus.length;u++) { iMnuY = iMnuY+16; MCName = "Menu"+(u+1); attachMovie("KlappHauptMenu", MCName, 10+u); eval(MCName)._x = iMnuX; eval(MCName)._y = iMnuY; eval(MCName).Menuname = MCName; aMenuInhalt = aHauptMenus[u].split(":"); eval(MCName).HilfeMC = aMenuInhalt[1]; eval(MCName).tfLabel = aMenuInhalt[0]; eval(MCName).onPress = function() { MenuAktivität(this._name); } //-- Erste Hauptmenu-Hilfe anzeigen if(u==0) { sMCPath = SWFName(true) + "/" + aMenuInhalt[1]; loadMovie(sMCPath, "HilfeBox"); eval("HilfeBox")._x = iHilfePosX; eval("HilfeBox")._y = iHilfePosY; } } } function MenuSubAktivität(sSubMenu) { //Untermenu: Menu1Sub3 aSubMenuInhalt = sSubMenu.split("Sub"); iSubMenuArray = int(aSubMenuInhalt[0].substr(4,3)); iSubMenuIndex = int(aSubMenuInhalt[1])-1; trace("Untermenu: "+sSubMenu + " Hauptmenu: "+iSubMenuArray); aSubOrdner = aUnterMenus[iSubMenuArray-1]; sSubTemp = aSubOrdner[iSubMenuIndex].split(":"); trace(sSubMenuInhalt); sHilfeBox = sSubTemp[1]; sMCPath = SWFName(true) + "/" + sSubTemp[1]; loadMovie(sMCPath, "HilfeBox"); eval("HilfeBox")._x = iHilfePosX; eval("HilfeBox")._y = iHilfePosY; } function MenuAktivität(sMenu) { iMnuIndex = int(sMenu.substr(4,3)); trace("sMenu: "+sMenu+" Index: "+iMnuIndex); if(eval(sHauptMenu)._xmouse < 15) { aHauptMenuStatus[iMnuIndex-1] = (aHauptMenuStatus[iMnuIndex-1] == 0) ? 1: 0; } iStartY = eval("Menu1")._y; iStartX = eval("Menu1")._x; for(w=0;w<aHauptMenuStatus.length;w++) { sHauptMenu = "Menu"+(w+1); iMnuIndex = (w+1); if(eval(sHauptMenu)._xmouse < 15) { eval(sHauptMenu)._y = iStartY; } aMenuInhalt = aHauptMenus[w].split(":"); http://deckensattl.goip.de/ddflashpage/ 10.08.2015 / Seite 3 / 5 Flash-MX-ActionScript [KlappMenuExtern.swf] Autor: Daniel Deckensattl if(sMenu == sHauptMenu) { sMCPath = SWFName(true) + "/" + aMenuInhalt[1]; loadMovie(sMCPath, "HilfeBox"); eval("HilfeBox")._x = iHilfePosX; eval("HilfeBox")._y = iHilfePosY; } trace("x: "+eval(sHauptMenu)._xmouse+" y: "+eval(sHauptMenu)._ymouse); //-- 0 = offen / 1 = zu if(eval(sHauptMenu)._xmouse < 15) { aSubOrdner = new Array(); aSubOrdner = aUnterMenus[w]; trace("Subordner-Länge: "+aSubOrdner.length); if(aHauptMenuStatus[w] == 0) { //-- Untermenüs zeigen eval(sHauptMenu).OrdnerStatus.gotoAndStop("plus"); eval(sHauptMenu).Ordner.gotoAndStop("zu"); for(i=0;i<aSubOrdner.length;i++) { eval("Menu"+iMnuIndex+"Sub"+(i+1)).removeMovieClip(); } iStartY = iStartY+16; } else { //-- Untermenüs öffnen eval(sHauptMenu).OrdnerStatus.gotoAndStop("min"); eval(sHauptMenu).Ordner.gotoAndStop("offen"); //aHauptMenuStatus[w] = 0; trace("Subordner-Länge: "+aSubOrdner.length); //trace("Name: "+"Menu"+iMnuIndex+"Submenu"+" Wert: "+eval("Menu"+iMnuIndex+"Submenu").length); for(i=0;i<aSubOrdner.length;i++) { iStartY = iStartY+16; attachMovie("KlappUntermenu", "Menu"+iMnuIndex+"Sub"+(i+1), (iMnuIndex*100)+i); trace("Name: "+"Menu"+iMnuIndex+"Sub"+(i+1)); eval("Menu"+iMnuIndex+"Sub"+(i+1))._x = iStartX; eval("Menu"+iMnuIndex+"Sub"+(i+1))._y = iStartY; sSubMenuInhalt = aSubOrdner[i]; aSubMenuInhalt = sSubMenuInhalt.split(":"); eval("Menu"+iMnuIndex+"Sub"+(i+1)).tfLabel = aSubMenuInhalt[0]; eval("Menu"+iMnuIndex+"Sub"+(i+1)).onPress = function() { MenuSubAktivität(this._name); } } iStartY = iStartY+16; } } } } /* ------------------------------------------------------------------------------------------------------// -- Liefert entweder den eigenen aktuellen SWF-Dateipfad (false/nothing) oder nur den SWF-Pfad (true)! ¦ // -- Befindet sich Clip in einem anderen Clip kann die Parentebene als Ganzzahl angegeben werden in der ¦ // -- sich der ParentClip befindet (2. Arg.) es wird dann der Parnet-Clip-URL-Name zurückgegeben. ¦ // -- so kann zB. ein Menuclip (immer dieselbe Datei > cachespeed) verschieden konfig. werden ¦ // ------------------------------------------------------------------------------------------------------*/ function SWFName(bolMitPfad, parentEbene) { var bolPath = (typeof (bolMitPfad) != "undefined") ? bolMitPfad : false; var bolParentExist = (typeof (_parent._x) != "undefined") ? true : false; var pEbene = (typeof (parentEbene) != "undefined") ? parentEbene : 0; var intNameStart = 0; var strDateiname = new String(); var strThisUrl = new String(); var strPrntUrl = new String(); // -- Parent-URL wenn nötig ermitteln var strThisUrl = this._url; http://deckensattl.goip.de/ddflashpage/ 10.08.2015 / Seite 4 / 5 Flash-MX-ActionScript [KlappMenuExtern.swf] Autor: Daniel Deckensattl var strPrntUrl = this._url; var strPEbene = ""; if (pEbene != 0) { for (i=1; i<parentEbene; i++) { strPEbene &= "_parent"; } strPrntUrl = eval(strPEbene)._url; } // -- Wenn kein Parentclip vorhanden ist normale URL nehmen var strNewURL = ((bolParentExist == true) && (pEbene>0)) ? strPrntUrl : strThisUrl; intNameStart = strNewURL.lastIndexOf("/"); strDateiname = strNewURL.slice(intNameStart+1, strNewURL.length-4); if (bolPath == true) { strDateiname = strNewURL.slice(0, intNameStart); } return strDateiname; } //-- Ermöglicht das Doppelklicken auf einen MovieClip movieclip.prototype.doubleClick = function(speed) { if ( getTimer()-oldTime <= speed ) return(true); oldTime=getTimer(); clickcount=0; } /* ----------------------------------------------------------------------------------------------------------------Mögliche Start-TXT-Datei mit Vorgabe-Textwerten auslesen und sofort anzeigen ----------------------------------------------------------------------------------------------------------------*/ var myCFGLoadVars = new LoadVars(); myCFGLoadVars.onLoad = function(onSuccess) { if (onSuccess) { //-- hier werden Initialparameter eingelesen, momentan nur this.ProgrammPfad //&Hauptmenus=Menu1:Hilfebox1,Menu2:Hilfebox2,Menu3:Hilfebox3& //-- zuerst alle Hauptmenüs einsammeln aHauptMenus = this.Hauptmenus.split(","); for(r=0;r<aHauptMenus.length;r++) { aHauptMenuStatus.push(0); } //-- Dann die Untermenüs aUnterMnu = this.Untermenus.split("£"); for(r=0;r<aUnterMnu.length;r++) { aSubMenus = aUnterMnu[r].split(","); aUnterMenus.push(aSubMenus); } for(x=0;x<aUnterMenus.length;x++) { trace(aUnterMenus[x]); } iHilfePosX iHilfePosY iMenuPosX iMenuPosY //-- Jetzt die Menu- und Hilfeclip-Positionen einlesen = int(this.HilfePosX); = int(this.HilfePosY); = int(this.MenuPosX); = int(this.MenuPosY); //-- Menu nun aufbauen MenuInit(); } else { trace("Fehler: Datei nicht gefunden"); } }; //-- Jetzt gleichnamige (wie unser Clip selbst) txt-CFG-Datei einlesen myCFGLoadVars.load(strCFGAktuell); stop(); http://deckensattl.goip.de/ddflashpage/ 10.08.2015 / Seite 5 / 5