Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-06-2005, 15:50   #1 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Window class und Component?

Hallo!
Ich versuche ein Fenster zu erstellen.
PHP-Code:
mx.managers.PopUpManager.createPopUp(_rootmx.containers.Windowtrue); 
Das funktioniert aber nur wenn ich die Fenster-Komponente ("Window") in der Library des Films habe.
Wenn ich jetzt viele UI Komponenten verwenden will, muss ich jedes einzelne in meine Library ziehen?
thx
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 01-06-2005, 18:32   #2 (permalink)
Uncle Rico
 
Registriert seit: Aug 2003
Ort: Köln
Beiträge: 196
Jep !

Geändert von Karuma (01-06-2005 um 18:34 Uhr)
Karuma ist offline   Mit Zitat antworten
Alt 01-06-2005, 18:35   #3 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
ok... verstehe, irgendwie logisch!
noch ein problem:

Wenn ich ein Fenster-Object hab, wie kann ich den Inhalt dieses fensters ansprechen, und z.B. einen Button im Fenster erstellen?
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 01-06-2005, 18:51   #4 (permalink)
Uncle Rico
 
Registriert seit: Aug 2003
Ort: Köln
Beiträge: 196
Um generell in einem MovieClip oder einer Komponente (die ja letztendlich auch von MovieClip abgeleitet sind) irgendeine andere Komponente zu erstellen kannst du z.B. sowas hier machen

komponente.createClassObject(mx.controls.List, "nameDerKomponente", tiefe[, initObject]);

initObject ist optional, lohnt sich aber performacemässig, wenn du der neuen Komponente gleich zu Beginn irgendwelche Eigenschaften mitgeben willst (_width, _height, styles... ).

Steht ausführlich in der Hilfe unter "UIObject.createClassObject()" !!!

Geändert von Karuma (01-06-2005 um 18:53 Uhr)
Karuma ist offline   Mit Zitat antworten
Alt 01-06-2005, 18:59   #5 (permalink)
Uncle Rico
 
Registriert seit: Aug 2003
Ort: Köln
Beiträge: 196
Eins habe ich vergessen, das funktioniert nur dann, wenn du an irgendeiner Stelle den DepthManager mit drin hast. Dieser erweitert die Klasse MovieClip um zusätzliche Methoden (mehr in der Hilfe).

Da Du aber sowieso mit einer Komponente rumhantierst und auch den PopupManager verwendest kannst du dir sicher sein, dass der DepthManager "aktiv" ist.
Karuma ist offline   Mit Zitat antworten
Alt 01-06-2005, 20:18   #6 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Hey klappt ja wunderbar...
nur: wenn ich den Button an Position 0/0 erstelle, ist er genau unter/über der Titelleiste.
Ist das normal?
Müsste die Positionierung von Elementen in einem Fenster normal nicht beim Rahmen den Inhaltes den Nullpunkt haben?
wenn nicht, wie krieg ich die Position? (den Nullpunkt des Inhaltes)

und wofür ist dann die Window.content Eigenschaft?
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 01-06-2005, 21:12   #7 (permalink)
Uncle Rico
 
Registriert seit: Aug 2003
Ort: Köln
Beiträge: 196
Ja, der Nullpunkt ist oben links, das Problem kenne ich.

Wofür window.content ist ? Wie gesagt, ist lange her dass ich meine WindowManager Klasse gebaut habe und die Info mit window.content habe ich eben aus der Flash Hilfe gezogen. Laut Hilfe liefert das eine Referenz auf den Inhalt des Fensters. Ich werd's gleich mal ausprobieren.

Dann noch ein möglicher Weg wie du deinen Nullpunkt bzw. den Offset der Titelzeile bestimmen kannst:
Die Titelzeile liegt in einem eigenen MovieClip. Dieser heisst (wenn ich mich nicht irre) back_mc. Mit back_mc._height findest du dann raus, wo der eigentliche Contentbereich anfängt.

Noch ein meiner Meinung nach wichtiger Tip:
Schau dir das Admin Tool von John Grden an ! http://acmewebworks.typepad.com/admintool/

Das Teil funktioniert so: Du wirfst einen kleine Connector Komponente in dein Movie. Danach startest Du das Admin Tool (ist auch ein Flash Movie) und die beiden stellen dann über localConnection eine Verdindung her. Mit dem Admin Tool kannst du dann dein "host-Movie" sehr genau untersuchen. Das ist wirklich sehr nützlich, wenn du dich näher mit den MM Komponenten auseinandersetzen willst. Schau dir z.B. einfach mal an, wie so ein Window Object/MC aufgebaut ist.
Ich kann die Vorteile des Admin Tools schlecht alle aufzählen, wenn du dir Johns Demo Video reinziehst dann wirst du verstehen was ich meine.
Extrem wertvoll das Tool !
Karuma ist offline   Mit Zitat antworten
Alt 01-06-2005, 21:35   #8 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
Wow, das Admin tool ist beeindruckend!
danke nochmal für deine hilfe! hab jetzt mal was nach meinen Wünschen zusammengebracht.

Einfach in den ersten Frame kopieren:
Code:
windows = [];
_global.style.modalTransparency = 60;
this.createEmptyMovieClip("bg",0);
bg.loadMovie("mountain.jpg",0);
function addWindow(){
var win = mx.managers.PopUpManager.createPopUp(_root, mx.containers.Window, chkModal.value, {title:"Window",closeButton:true,_width:150});
win.createClassObject(mx.controls.Button, "btn", 0, {_y:50,_x:25,label:"Click Me"});
win.btn.addEventListener("click",{click:function(){
win._x += random(40)-20;
win._y += random(40)-20;
}});
return windows[windows.push(win)-1];
}
createClassObject(mx.controls.CheckBox, "chkModal", 1, {label:"Modal",_x:5,_y:0});
createClassObject(mx.controls.Button, "open", 2, {label:"Open Window",_x:5,_y:20});
open.addEventListener("click",{click:function(){
//??? createClassObject(mx.containers.Window, "win", 1, {title:"Window",closeButton:true});
var win = addWindow();
win.addEventListener("click",{click:function(){
win.deletePopUp();
}});
status.text = windows.toString();
}});
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 01-06-2005, 21:50   #9 (permalink)
Uncle Rico
 
Registriert seit: Aug 2003
Ort: Köln
Beiträge: 196
Sauber! Prinzip verstanden :-)

Also content ist wirklich eine Referenz auf den maskierten content Bereich. Habe ich mich nie drum gekümmert, ich habe immer direkt auf der Window Innstanz weitere Komponenten erstellt.

Aber: content ist erst nach einem Frame gesetzt, d.h. man müsste konsequenterweise erst dann die weiteren Komponenten reinsetzen. That sucks, was interssieren mich Frames. Von daher bleibe ich bei windowinstanz.createClassObject(...), auch wenn der Content Bereich dann nicht maskiert ist. Das merkt man spätestens dann, wenn die Komponenten ausserhalb des Fensterrahmens liegen. In deinem Beispiel eingach mal die y-Position des Click-Me Buttons auf 150 setzen und du siehst was ich meine.
Karuma ist offline   Mit Zitat antworten
Alt 01-06-2005, 22:13   #10 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
ja ich weiss... hab das schon bemerkt...
was ich nich "dumm" finde:
wenn ich auf den content eines fensters klicke springt es nicht in den vordergrund
und:
wenn ich auf einen freien bereich im fenster klicke, und im Hintergrund ist ein anderes Control-element, wird auch das angesprochen!
(z.B. Fenster über den Close-Button eines anderen schieben, dort hin klicken wo der close button im Hintergrund ist --> Fenster schließt sich!)
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 01-06-2005, 22:31   #11 (permalink)
Uncle Rico
 
Registriert seit: Aug 2003
Ort: Köln
Beiträge: 196
Oh ja, das habe ich seinerzeit irgendwie gelöst. Mist, hab jetzt meinen Code nicht da. Werde morgen auf der Arbeit mal nachschauen.

Aber wenn ich mich nicht täusche funktionierte das folgendermassen:

Auf's Fenster einen onPress Handler legen. In diesem dann startDragging() und sofort danach stopDragging() aufrufen.

Schau Dir mal den Code der Window Klasse an (mx.containers.window) und suche dort mal nach "function startDragging". Diese Funktion wird normalerweise dann aufgerufen, wenn die Titelzeile angeklickt wird. Darin siehst du auch was dann passiert: Eine BoundingBox (= neuer MovieClip) wird in der nächsthöheren Ebene(depth) erzeugt, dann tauscht das Fenster mit diesem Clip die Position und anschliessend wird die BoundingBox wieder gelöscht. Damit wird das Fenster also nach oben gehoben.

Schau mal, ob Du mit den Infos klarkommst, ansonsten sag nochmal Bescheid und ich helfe Dir dann morgen weiter !
Karuma ist offline   Mit Zitat antworten
Alt 02-06-2005, 18:36   #12 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
ja ok, danke!!
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 02-06-2005, 18:50   #13 (permalink)
Uncle Rico
 
Registriert seit: Aug 2003
Ort: Köln
Beiträge: 196
Code:
window.border_mc.onPress = function() {

this._parent.startDragging(); // just a workaround to place the parent window in front of all other windows

this._parent.stopDragging(); 
}

window.border_mc.useHandCursor = false;
So sah das damals aus... unschön, aber was besseres ist mir nicht eingefallen.
Karuma 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 13:38 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele