Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-07-2004, 12:17   #1 (permalink)
MBA
 
Registriert seit: Apr 2003
Beiträge: 47
Question ComboBox aus eigener Hand | Anpassung an den Standard

Hi,

da mir die ComboBox-Komponente etwas zu dünn war, hab ich mir mal eine eigene gebaut um mehr Freiheit an Text, Smooth- etc. Effekten, Informationsverarbeitung usw. zu bekommen.

Nur bin ich doch an einer Stelle angekommen an der es happert bzw. weiss gerad' kein Rat weiter in ihrer Umsetzung:

Einzige, ausschließbare Lösung wäre der hitTest, nur läuft das hier auf den Rechnern nicht überall flüssig oder genau.

Es bestehen mehrere ComboBoxen.
ComboBoxN ist geöffnet.
Um die derzeit geöffnete ComboBox zu schließen,
falls man irgendwo oder auf einen Eintrag in der ComboBox, damit dieser noch seinen Sinn per press erfüllt, klickt,
nutze ich 'nen MouseUpListener.

Skriptanpassung: > Standardmässig werden allerdings onFunktion per release ausgeführen.

In dieser Struktur würde es heißen:
ComboBox schließt sich per MouseDownListener und Einträge führen sich bei release aus.

Nun entwickelt sich das Problem, daß der ausgewählte ComboBoxEintrag seine Funktion nicht mehr ausführt, weil er schon deaktiviert/unsichtbar/nicht mehr vorhanden/wegbewegt (auf jeden fall nicht da) ist.

Mhhh, hät da wer etwas?

Gruss

<- 'ne Idee ->

Was mir gerad' noch einfiel:
Die Einträge registrieren sich global bei RollOver und bei RollOut wird wieder alles auf null gesetzen.
Der Listener prüfts dann einfach und führt dann noch die zusätzliche Funktion durch den Eintrag aus.
Nach dem Listener wird zwar noch RollOut ausgeführt und die global auf null gesetzt, aber da ist eh schon alles geschehen und alles wieder sauber.
Mann, sieht das im Skript dämlich aus.

Geändert von Buzze (30-07-2004 um 12:49 Uhr)
Buzze ist offline   Mit Zitat antworten
Alt 31-07-2004, 06:10   #2 (permalink)
Gelegenheits-DAU
 
Benutzerbild von TOAOTC
 
Registriert seit: May 2003
Ort: Schwerin - come to where the Hecht beißt
Beiträge: 187
Wenn du das onRelease für die Eintrage benutzt, führt das wahrscheinlich zu folgendem Fehler:

Die Combobox schließt sich und aus dem onRelease wird ein onReleaseOutside.

Ich habe es so gelöst, dass ich alle Events onPress ausführen lasse und onMouseUp abfrage, ob das menü offen ist. wenn ja, wird es geschlossen.

Allerdings ist diue Variante mit den MouseListenern bei größeren Projekten echt lästig. Deshalb bin ich noch auf der suche nach ner eleganteren Lösung.

Mit HitTest haben die Standard-Komponenten übrigends so Ihre Probleme. In verschachtelten Instanzen funktionieren sie nicht richtig, da die Mouseposition falsch erkannt wird.
TOAOTC ist offline   Mit Zitat antworten
Alt 31-07-2004, 06:13   #3 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
Zitat:
Zitat von TOAOTC
Mit HitTest haben die Standard-Komponenten übrigends so Ihre Probleme. In verschachtelten Instanzen funktionieren sie nicht richtig, da die Mouseposition falsch erkannt wird.
wie fragst du die denn ab?...
ich kriege das mit dem hitTest eigentlich immer recht gut hin...egal wie verschachtetl da irgendwas ist...

Edit:
für diesen post war ich die ganze nacht wach^^

Geändert von pape (31-07-2004 um 06:14 Uhr)
pape ist offline   Mit Zitat antworten
Alt 31-07-2004, 07:12   #4 (permalink)
Gelegenheits-DAU
 
Benutzerbild von TOAOTC
 
Registriert seit: May 2003
Ort: Schwerin - come to where the Hecht beißt
Beiträge: 187
Ich meine die Implementierte HitTest innerhalb der Standard-Combobox.
Ich kann nen HitTest richtig setzen - Macromedia aber wohl nicht.
Ich beziehe mich dabei allerdings auch auf die alte Komponente aus MX. Vielleicht wurde das Problem bereits in den Komponenten von MX 2004 behoben.

Jedenfalls war das der Grund dafür, dass ich meine eigen Combo gebastelt habe.

Wenn Du die ganze nacht gewartet hast, soll sich das auch gelohnt haben:
http://www.4xx.de/argus/button.fla
TOAOTC ist offline   Mit Zitat antworten
Alt 31-07-2004, 07:22   #5 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
krass danke!

aber ich muss dir ehlrich gesagt gestehen, dass es mir im Moment noch zu früh ist dadurch zusteigen....ziemlich viel code...

gucke ich später mal in ruhe an.. hast du zufällig noch ne beschreibung dazu ?

egal.. ich krieg das schon hin

grz
pape ist offline   Mit Zitat antworten
Alt 31-07-2004, 07:26   #6 (permalink)
Gelegenheits-DAU
 
Benutzerbild von TOAOTC
 
Registriert seit: May 2003
Ort: Schwerin - come to where the Hecht beißt
Beiträge: 187
die bt_sb dürfte für dich interressant sein. Und daraus auch nur der MouseHandler in der Watcher-Ebene und evt. die listtoggle in der privfuncs-Ebene.

Ist bestimmt nicht der schönste Code - allerdings auch schon ein Jahr her. Da war ich mit AS noch nicht so gut drauf.

Zum Testen brauchst du noch das hier:
PHP-Code:
Math.linearTween = function (tbcd) {
    return 
c*t/b;
};
//
ASSetPropFlags(Math"linearTween"1);

MovieClip.prototype._motionprops = {};
ASSetPropFlags(MovieClip.prototype"_motionprops"1);

MovieClip.prototype._motion = function(destinationpropertydurationaftereventmotiontypemotionkindamplitudeperiod) {
    if(
this._motionprops[property] == undefined) {
        var 
1;
        for(var 
a in this._motionprops) ++i;
        
this._motionprops[property] = i;
    }
//    this.removeMovieClip(this["motioner"+property]);
    
this.createEmptyMovieClip("motioner"+propertythis._motionprops[property]+1000000);
    
this["motioner"+property].0;
    
this["motioner"+property].this[property];
    
this["motioner"+property].destination this[property];
    
this["motioner"+property].duration;
    
this["motioner"+property].amplitude;
    
this["motioner"+property].period;
    
this["motioner" property].onEnterFrame = function() {
        
this._parent[property] = Math.linearTween(this.t+=1this.bthis.cthis.d);
        if(
this.== this.d) {
            
removeMovieClip(this);
            if(
afterevent != nullafterevent();
        }
    }
}; 

Geändert von TOAOTC (31-07-2004 um 07:45 Uhr)
TOAOTC ist offline   Mit Zitat antworten
Alt 31-07-2004, 07:40   #7 (permalink)
Gelegenheits-DAU
 
Benutzerbild von TOAOTC
 
Registriert seit: May 2003
Ort: Schwerin - come to where the Hecht beißt
Beiträge: 187
Hab gerade noch nen Fehler aus dem obigen Script gefischt.
TOAOTC ist offline   Mit Zitat antworten
Alt 31-07-2004, 09:39   #8 (permalink)
MBA
 
Registriert seit: Apr 2003
Beiträge: 47
@TOAOTC
joo, hättest du die button.fla nochmal auch für mich? (war gerad' schon vom Server runter) Bzw. was war da eigentlich drin?

Genau, dieser HitTest in der StandartCombo war nicht wirklich dolle.
Hast es also trotzdem mit hitTest gelöst, mhh, bei mir läuft das wie halbswegs erwähnt auf 400mhz Rechnern nicht so klasse.
Und da sollte es laufen, kenn' genug Firmen mit solchen Rechnern.
Klasse war auch der nette Nebeneffekt in der StandartComboBox, daß bei einem RollOver eines Eintrags und dem danach folgenden sofortigen Schliessen der Box, beim Wiederöffnen der zuletzt ausgewählte Eintrag per RollOver hervorgehoben wird und nicht welcher sich in der eigentlichen Auswahl der Box befindet.

zum onRelease (erster Post): den gibt es gar nicht.
Die sogenannte, optisch dämliche Idee:
Bei MouseDown wird immer die gesicherte ComboBox geschlossen (MouseDown löscht sich von selbst).
Beim Öffnen einer ComboBox (vorher lief MouseDown) wird MouseDown wieder aktiviert und die ausgewählte ComboBox gesichert.
Bei RollOver eines Eintrags wird ein Wert global gesichert, ob er die Funktion eines Eintrags (einheitliche Funktion) ausführen soll, d.h. der jetzige Klick kann nur auf einem Eintrag sein, außer man rollt auf den nächsten Eintrag, welcher gesichert wird.
Beim RollOut wird der gobale Wert wieder auf null gesetzt und jeder Klick der dann folgt liegt sowieso ausserhalb.
Der RollOut wird selbstverständlich vor dem RollOver eines anderen Eintrags ausgeführt.
(Um welchen Eintrag bzw. welcher Index und welche Combo es sich handelt wird ebenfalls gespeichert.)

Geändert von Buzze (31-07-2004 um 09:56 Uhr)
Buzze ist offline   Mit Zitat antworten
Alt 31-07-2004, 11:07   #9 (permalink)
Gelegenheits-DAU
 
Benutzerbild von TOAOTC
 
Registriert seit: May 2003
Ort: Schwerin - come to where the Hecht beißt
Beiträge: 187
button.fla ist wieder oben. Da sind ein paar selbstgebastelte Komponenten drin.
TOAOTC ist offline   Mit Zitat antworten
Alt 31-07-2004, 11:36   #10 (permalink)
MBA
 
Registriert seit: Apr 2003
Beiträge: 47
danke

Mhhh, irgendwie läuft der bt_sb nicht, seine Funktionen bleiben unausgeführt.

Geändert von Buzze (31-07-2004 um 12:04 Uhr)
Buzze ist offline   Mit Zitat antworten
Alt 02-08-2004, 00:29   #11 (permalink)
Gelegenheits-DAU
 
Benutzerbild von TOAOTC
 
Registriert seit: May 2003
Ort: Schwerin - come to where the Hecht beißt
Beiträge: 187
@Buzze

ich habe weiter oben drei prototypen gepostet. die musst dur einbinden.
Und danach am besten gleich das hier:
PHP-Code:
init_val setInterval(function() {
    for(var 
i=0i<10i++) {
        
sb_test.add_item("wert" ii);
    }
    
clearInterval(init_val);
}, 
100); 
TOAOTC ist offline   Mit Zitat antworten
Alt 02-08-2004, 16:44   #12 (permalink)
MBA
 
Registriert seit: Apr 2003
Beiträge: 47
Joo, danke. Funktioniert.
Eigentlich hatte ich auch nix anderes gemacht. Egal.

Sieht nett aus.

Geändert von Buzze (02-08-2004 um 16:46 Uhr)
Buzze 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 01:04 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele