Antworten auf deine Fragen:
Neues Thema erstellen

AS3 - Einzelne SWF-Fenster schließen

Angus_MacGyver

Noch nicht viel geschrieben

Hallo!

Ich arbeite derzeit an einem Userinterface für einen Touch-Screen, das im Vollbildmodus des Flashplayers läuft. Einfach gesagt, handelt es sich dabei um ein Start-Menü.

Das Ganze sieht so aus: es gibt ein Main-SWF mit verschiebbaren Buttons und Textflächen. Die Buttons rufen je eine externe, eigenständige Flash-Anwendung auf. Diese öffnet sich im Vollbildmodus und kann dann bedient werden. Die gestartete Anwendung legt sich also über das SWF mit dem Menü, das im Hintergrund weiter aktiv bleibt.

Die Anwendungen werden so gestartet:
Code:
game_btn.buttonMode = true;
game_btn.addEventListener(MouseEvent.CLICK, function_game_btn);

function function_game_btn(evt:MouseEvent):void {

    var request_game:URLRequest=new URLRequest("/Anwendungen/Game/game_fullscreen.swf");
    navigateToURL(request_game);
}
Ich würde nun gerne in jede der Anwendungen einen Close-Button einbauen, der die Anwendung wieder schließt. Das Main-SWF mit dem Menü soll dabei geöffnet bleiben. Man kehrt also zum Menü zurück.

Derzeit gibt es in jeder Anwendung einen Button, der den Vollbildmodus beendet. Dann muss mit einem weiteren Klick das Fenster geschlossen werden und man hat wieder das Main-SWF mit dem Auswahlmenü vor sich.

Diesen einen zusätzlichen Klick würde ich gerne umgehen. Er ist umständlich und man sollte im Optimalfall nie die Fenster als solche wahrnehmen. Von einem Vollbild zum anderen zu kommen, wäre schön.

Mit fscommand("quit"); beende ich ja leider nicht nur die externe Anwendung, sondern das Main-SWF gleich mit.

Gibt es überhaupt eine Möglichkeit nur einzelne Fenster zu schließen? Oder hat jemand andere Ideen?

Dass die Sache nicht wirklich sauber gelöst ist, ist mir klar. Leider bin ich alles andere als ein Programmierer und die externen Anwendungen sind bereits alle fertig vorhanden. Außerdem sind sie sehr unterschiedlich (Eine ist AS2, die anderen AS3. Alle greifen wiederum auf jede Menge externe Dateien zu).

Ich habe Alternativen ausprobiert. Das Laden und Entladen der Anwendungen in einen leeren Platzhalter-Movieclip im Main-SWF wäre sauberer und klappt zwar, aber die Pfade zu den Unterfiles der Anwendungen stimmen dann nicht mehr (weil sie dann von der Main-SWF ausgehen). Und da es extrem viele Pfade sind, wäre der Aufwand, das zu ändern, viel zu groß.

Unterm Strich bin ich mit meinem Latein am Ende. Wenn es also eine Lösung gibt, um einzelne Fenster im Flash-Player zu schließen, wäre das optimal. Ich bin aber auch für jede andere Idee dankbar! :)
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Mir ist da etwas eingefallen, weiß aber nicht, ob es diese Möglichkeit gibt.

Im Flash-Player wäre "Schließen" über die Tastenkombination Strg+W (bzw. Command+W am Mac) erreichbar. Gibt es eine Möglichkeit, diese Tastenkombination mit einem Klick auf einen Button zu simulieren? In etwa so: wenn auf "button_mc" geklickt wird, führe "Strg+W" aus.
 

ssandner

Nicht mehr Newbie

AW: AS3 - Einzelne SWF-Fenster schließen

Mal, ob ich das Problem richtig verstanden habe.
Ich habe schon mehrfach einen Flashfilm erstellt , der als Auswahlmenü dient und andere Flashfilme nachlädt. Die nachgeladenen Flashfilme erhalten bei mir einen "Zurück"-Button per script mit denen ich wieder zum Hauptfilm (Auswahlmenü) zurückkomme. Wenn es das ist, was du suchst hier meine Lösung:

Anm.: Auf meiner "Startseite" habe ich vier Button platziert mit den Instanznamen "Seite1_btn", "Seite2_btn", "Seite3_btn", "Seite4_btn".
Meine nachzuladenen Flashfilme heissen bei mir "Seite1.swf", "Seite2.swf", "Seite3.swf" und "Seite4.swf".

Code:
var imageLoader:Loader = new Loader();
var myButton:Button = new Button();
myButton.label="Zurück"; //Beschriftung des Button
myButton.width=60; //Breite des Button
myButton.x=960; //X-Position des ButTon
myButton.y=35; //Y-Position des Button

var imageRequest_1:URLRequest=new URLRequest("Seite1.swf");
var imageRequest_2:URLRequest=new URLRequest("Seite2.swf");
var imageRequest_3:URLRequest=new URLRequest("Seite3.swf");
var imageRequest_4:URLRequest=new URLRequest("Seite4.swf");
this.Seite1_btn.addEventListener(MouseEvent.CLICK,buttonClickHandler);
this.Seite2_btn.addEventListener(MouseEvent.CLICK,buttonClickHandler);
this.Seite3_btn.addEventListener(MouseEvent.CLICK,buttonClickHandler);
this.Seite4_btn.addEventListener(MouseEvent.CLICK,buttonClickHandler);


function buttonClickHandler(event:MouseEvent)
{
	switch (event.currentTarget)
	{
		
		case Seite1_btn :
			imageLoader.load(imageRequest_1);
			addChild(imageLoader);
			addChild(myButton);
			this.myButton.addEventListener(MouseEvent.CLICK,back);
			break;

		case Seite2_btn :
			imageLoader.load(imageRequest_2);
			addChild(imageLoader);
			addChild(myButton);
			this.myButton.addEventListener(MouseEvent.CLICK,back);
			break;
			
		case Seite3_btn :
			imageLoader.load(imageRequest_3);
			addChild(imageLoader);
			addChild(myButton);
			this.myButton.addEventListener(MouseEvent.CLICK,back);
			break;
			
			
		case Seite4_btn :
			imageLoader.load(imageRequest_4);
			addChild(imageLoader);
			addChild(myButton);
			this.myButton.addEventListener(MouseEvent.CLICK,back);
			break;
	}
}

function back(event:MouseEvent)
{
	removeChild(imageLoader);
	removeChild(myButton);
}
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Danke für die Antwort!

So weit ich dein Script verstehe, werden die externen SWFs in Platzhalter geladen, die im Haupt-SWF generiert werden.

Mein Problem ist, dass die externen SWFs komplett eigenständig geöffnet werden. Das Haupt-SWF ruft diese Dateien auf und diese öffnen sich dann. Aber in einem eigenen Fenster und nicht in einem Platzhalter des Haupt-SWFs.

Es sind also zwei eigentlich unabhängige Dateien im Flashplayer geöffnet. Und eine davon möchte ich per Button schließen können, die andere soll aber geöffnet bleiben. fscommand("quit"); schließt den kompletten Player, also beide darin geöffneten Dateien. Es soll aber nur die Datei mit dem Schließen-Button geschlossen werden und das Haupt-SWF nicht.

Leider konnte ich nicht wirklich was dazu finden und bezweifle fast, dass das überhaupt direkt möglich ist. Aber vielleicht gibt es ja doch irgend einen Lösungsweg. Wenn ich den Flashplayer-Shortcut für "Fenster schließen" (Strg+W) mit einem Buttonklick simulieren könnte, wäre das eventuell ein Weg. Nur weiß ich auch da nicht, ob oder wie das geht.

Trotzdem erst mal danke für die Hilfe! :)
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Ich habe jetzt bei meiner Recherche etwas Interessantes gefunden. Es wurde in einem Forum ein Code gepostet, der per Mausklick einen Tastendruck simuliert:
Code:
    cmd_btn.charCode = 0;
    cmd_btn.keyCode = 17;
     
    cmd_btn.addEventListener(MouseEvent.CLICK, setCmdKeyDown);
     
    function setCmdKeyDown(event:MouseEvent) {
        var cmd_keyEvent:KeyboardEvent = new KeyboardEvent(KeyboardEvent.KEY_DOWN, true, false, event.target.charCode, event.target.charCode);
        event.target.addEventListener(KeyboardEvent.KEY_DOWN, cmd_keyHandler);
       
        event.target.dispatchEvent(cmd_keyEvent);
    }
     
    function cmd_keyHandler(event:KeyboardEvent):void {
        event.target.removeEventListener(KeyboardEvent.KEY_DOWN, cmd_keyHandler);
        trace("keyCode: " + event.target.keyCode);
    }
Ich habe ihn schon mal für die Cmd-Taste am Mac umgebaut. Kann mir eventuell jemand dabei helfen, den Code so umzuschreiben, dass beim Klick auf den Button die Tastenkombination "Cmd+W" simuliert wird? Irgendwie hab ich gerade einen Knoten im Hirn und komme nicht weiter. :muede:

Cmd-Taste:
CharCode = 0
KeyCode = 17

W-Taste
CharCode = 119
KeyCode = 87

Ich tue mir leider echt schwer, Code selbst umzufunktionieren. Wenn ich einen fertig sehe, kann ich ungefähr nachvollziehen, was er macht, aber selbst komme ich nur sehr langsam voran. Wenn mir jemand weiterhelfen könnte, wäre das total super!
 
Zuletzt bearbeitet:

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Ich habe es jetzt mit einer ziemlich umständlichen "MacGyver-Methode" :p geschafft, mit einem Mausklick auf einen Button, eine Tastenkombination (eben cmd+w am Mac) zu simulieren.

Ich habe zwei unsichtbare Buttons, die jeweils eine der beiden Tasten simulieren. Ein dritter (sichtbarer) Button simuliert wiederum den Klick auf die beiden unsichtbaren Buttons. Und so wir mit einem einzigen Mausklick cmd+w gedrückt.

Code:
    import flash.events.MouseEvent;
    
    cmd_btn.buttonMode = true;
    w_btn.buttonMode = true;
    
    cmd_btn.visible = false;
    w_btn.visible = false;
    
    
    
    cmd_btn.charCode = 0;
    cmd_btn.keyCode = 17;
     
    cmd_btn.addEventListener(MouseEvent.CLICK, setCmdKeyDown);
     
    function setCmdKeyDown(event:MouseEvent) {
        var cmd_keyEvent:KeyboardEvent = new KeyboardEvent(KeyboardEvent.KEY_DOWN, true, false, event.target.charCode, event.target.keyCode);
        event.target.addEventListener(KeyboardEvent.KEY_DOWN, cmd_keyHandler);
       
        event.target.dispatchEvent(cmd_keyEvent);
    }
     
    function cmd_keyHandler(event:KeyboardEvent):void {
        event.target.removeEventListener(KeyboardEvent.KEY_DOWN, cmd_keyHandler);
        trace("keyCode: " + event.target.keyCode);
        
    } 
    


    w_btn.charCode = 119;
    w_btn.keyCode = 87;
     
    w_btn.addEventListener(MouseEvent.CLICK, setwKeyDown);
     
    function setwKeyDown(event:MouseEvent) {
        var w_keyEvent:KeyboardEvent = new KeyboardEvent(KeyboardEvent.KEY_DOWN, true, false, event.target.charCode, event.target.keyCode);
        event.target.addEventListener(KeyboardEvent.KEY_DOWN, w_keyHandler);
       
        event.target.dispatchEvent(w_keyEvent);
    }
     
    function w_keyHandler(event:KeyboardEvent):void {
        event.target.removeEventListener(KeyboardEvent.KEY_DOWN, w_keyHandler);
        trace("keyCode: " + event.target.keyCode);
        
    } 
    
    
    
    cmd_w_btn.addEventListener(MouseEvent.CLICK, function_cmd_w);
    cmd_w_btn.buttonMode = true;


    function function_cmd_w(evt:MouseEvent):void {
        cmd_btn.dispatchEvent(new MouseEvent("click"));
        w_btn.dispatchEvent(new MouseEvent("click"));
}
War nur ein Test, um festzustellen, ob meine Idee funktioniert. Tut sie leider nicht. Das Fenster wird nicht geschlossen.

Damit bin ich leider keinen Schritt weiter gekommen. Sieht so aus, als würde sich das Problem nicht lösen lassen. :'(
 

keul3

3dsMax | 3D-Contest

AW: AS3 - Einzelne SWF-Fenster schließen

wie du bereits erwähnt hast, wäre es besser die swfs in die Haupt-swf zu laden.

Wie genau öffnest du die neuen swfs? Im Browser oder FlashPlayer(Standalone)?
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Hallo!

Die Files werden im Standalone Flash-Player geöffnet. Die SWFs laufen offline auf einem Präsentations-Rechner, der an einem großen Touch-Screen hängt.

Wie gesagt - das Laden in das Main-SWF geht nicht wirklich, da die einzelnen Anwendungen wiederum jede Menge externe Dateien laden und diese Pfade dann nicht mehr funktionieren.
 

keul3

3dsMax | 3D-Contest

AW: AS3 - Einzelne SWF-Fenster schließen

dann sollte fscommand("quit") eigentlich funtkionieren, und auch nur die jeweils angesprochene swf schliessen.
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

fscommand("quit") schließt den kompletten Flashplayer, also auch alle geöffneten Fenster. Bis jetzt hab ich noch keine Möglichkeit gefunden, die das tut, was ich bräuchte.
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Falls jemand einmal vor einem ähnlichen Problem stehen sollte - ich habe jetzt endlich eine Lösung gefunden, die für mich funktioniert.

Ich habe noch sehr ausführlich recherchiert - es ist scheinbar wirklich unmöglich, nur ein einzelnes SWF im Flash Player zu schließen. Aber der Befehl fscommand("quit") funktioniert, wenn ich statt SWF-Files Projektor-Dateien aufrufe.

Ich habe also aus den einzelnen Anwendungen je einen Flash-Projektor erstellt (da mein Zielgerät ein Mac ist, .app-Files) und rufe die nun anstatt der SWFs mit URLRequest auf.

Ein Beispiel:
Code:
game_btn.addEventListener(MouseEvent.CLICK, function_game_btn);
game_btn.buttonMode = true;

function function_game_btn(evt:MouseEvent):void {

    var request_game:URLRequest=new URLRequest("Info/Anwendungen/Game/game_fullscreen.app");
    navigateToURL(request_game);
}
In jeder der Anwendungen ist nun ein Close-Button untergebracht, der bei Klick fscommand("quit"); ausführt - und dabei wird immer nur der Projektor mit eben diesem Button geschlossen.
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Hallo!

Ein neues Problem ist aufgetreten:

Bisher war es ja so: ich habe einen Haupt-Projektor (Mac, Flash 10) mit dem Auswahlmenü, der über navigateToURL andere Projektoren mit verschiedenen Anwendungen aufrufen konnte.

Ich habe nun den Standalone Flash Player 11 installiert und mit der neuen Version ein Projektor-File erstellt. Nun kann ich die über navigateToURL aufgerufenen externen Projektoren nicht mehr starten - es öffnet sich stattdessen Firefox und zeigt mir den Pfad zur externen .app-Datei an, die mit Flash Player 10 problemlos über navigateToURL gestartet werden konnte!

Was ist da los? Ist das ein Bug oder schon wieder irgendeine neue Sicherheitssperre? Die Performance des Flash 11-Projektors ist wesentlich besser, als die des Flash-10-Projektors. Ich würde deswegen nur sehr ungern wieder den alten Player zum erstellen benutzen müssen.

Gibt es da eine Lösung? Kurz gesagt muss ich aus dem Haupt-Projektor andere Projektoren aufrufen.
 
Zuletzt bearbeitet:

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Gerade hab ich bemerkt, das das Problem gar nicht die Projektor-Files sind. Auch wenn ich über navigateToURL ein SWF aufrufe, wird es in Firefox geöffnet und nicht im Standalone-Player. Das muss man doch einstellen können, oder?
 
Zuletzt bearbeitet:
A

ad86

Guest

AW: AS3 - Einzelne SWF-Fenster schließen

Hi,

Du kannst eine neue Projektordatei auch mit

Code:
fscommand("exec","YourApp.app");

starten.

MFg ad86
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Danke für die Antwort, aber leider funktioniert fscommand am Mac nicht. Ist laut Aussagen im Internet wohl irgendeine Sicherheitsbestimmung, die eingeführt wurde. Externe .app-Dateien können so nicht aufgerufen werden.
 
A

ad86

Guest

AW: AS3 - Einzelne SWF-Fenster schließen

Hi,

Danke für die Antwort, aber leider funktioniert fscommand am Mac nicht. Ist laut Aussagen im Internet wohl irgendeine Sicherheitsbestimmung, die eingeführt wurde. Externe .app-Dateien können so nicht aufgerufen werden.

ich hab es gerade selbst noch einmal probiert. Unter MacOs Snow Leopard im Flashplayer 10, erstellt mit CS4. Ich habe die Haupt-App gestartet und (in meinem Fall) mit dem Wort ad1 die externe app-Datei gestartet. Wichtig: Es funktioniert nur im Flashplayer, also nicht im Browser UND die anderen Anwendungen müssen im Unterordner fscommand liegen.
Ich hab nur .app-Dateien getestet. Swf-Datei sollten im Flashplayer auch funktionieren.

Mfg ad86
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Hm, das ist eigenartig. Ich werde es nochmals probieren, aber eigentlich ist alles so, wie es sein sollte. Die Anwendung läuft als Standalone ohne Browser, die Files liegen im Ordner fscommand... Werde noch einen Versuch starten.

Danke für deine Mühe, ich melde mich wieder, wenn ich das getestet habe. :)
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Nein, es klappt nicht. Ich habe auch versucht - so wie in einigen Forenbeiträgen vorgeschlagen - den fscommand-Folder innerhalb der .app-Datei unter "Contents" und "MacOS" zu platzieren. Kein Erfolg - es tut sich überhaubt nichts, wenn ich auf den Button klicke, der eigentlich den Befehl ausführen sollte.

Ich fürchte, die einzige Variante, die das tut, was ich will, ist navigateToURL mit Flash Player 10-Projektoren.

Ich würde nur gerne wissen, warum der neue Player 11 da anders reagiert und die externen Projektoren nicht mehr ausführt, sondern sie im Browser öffnet.
 

Angus_MacGyver

Noch nicht viel geschrieben

AW: AS3 - Einzelne SWF-Fenster schließen

Ich bin gerade auf die LocalConnection-Klasse gestoßen. So ganz kapiert hab ich aber nicht, was damit machbar ist. Anscheinend können mehrere Flash-Instanzen miteinander kommunizieren. Aber kann ich über LocalConnection auch eine externe Datei ausführen bzw. fscommand dadurch irgendwie ersetzen?
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.620
Beiträge
1.538.374
Mitglieder
67.544
Neuestes Mitglied
janusbarman
Oben