| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Freizeitflasher Registriert seit: Jun 2004 Ort: Niederösterreich
Beiträge: 615
| Window class und Component?
Hallo! Ich versuche ein Fenster zu erstellen. PHP-Code: Wenn ich jetzt viele UI Komponenten verwenden will, muss ich jedes einzelne in meine Library ziehen? thx
__________________ Some Flash Worx |
| | |
| | #3 (permalink) |
| Freizeitflasher 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 |
| | |
| | #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) |
| | |
| | #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. |
| | |
| | #6 (permalink) |
| Freizeitflasher 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 |
| | |
| | #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 ! |
| | |
| | #8 (permalink) |
| Freizeitflasher 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 |
| | |
| | #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. |
| | |
| | #10 (permalink) |
| Freizeitflasher 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 |
| | |
| | #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 ! |
| | |
| | #12 (permalink) |
| Freizeitflasher Registriert seit: Jun 2004 Ort: Niederösterreich
Beiträge: 615
|
ja ok, danke!!
__________________ Some Flash Worx |
| | |
| | #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; |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |