• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-06-2003, 16:58   #1 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
Question eigenen event-handler :onRightPress:

ich habe mir hier einen onRightPress (Maus) event Handler gebaut der ansich auch super läuft
hätte nun aber gerne gewusst ob es eine bessere lösung gibt, mir kommt das alles so umständlich vor
ActionScript:
  1. Stage.showMenu = false;
  2. // prototype zum überwachen ob rechte maus geklickt wird
  3. MovieClip.prototype.setControll = function()
  4. {
  5.     var bKlick = false;
  6.     this.onEnterFrame = function()
  7.     {
  8.         if (ASNative(800, 2)(2))
  9.         {
  10.             if(!bKlick)
  11.             {
  12.                 this.onRightPress();
  13.                 bKlick = true;
  14.             }
  15.         }
  16.         else bKlick = false;
  17.     };
  18. };
  19. // ::: prototype zum löschen des clipEvents enterFrame (welches von setControll
  20. //     erzeugt wird) mit einer verzögerung von 200 ms
  21. MovieClip.prototype.clearControll = function()
  22. {
  23.     var deleteEnterFrame = function(t)
  24.         {
  25.             delete t.onEnterFrame;
  26.             clearInterval(sid);
  27.         };
  28.     var sid = setInterval(deleteEnterFrame, 200, this);
  29. };
  30. // :::
  31. MovieClip.prototype.createButton = function(argX)
  32. {
  33.     this._x = argX;
  34.     this.beginFill(0xff0000);
  35.         this.lineTo(0, 50);
  36.         this.lineTo(50, 50);
  37.         this.lineTo(50, 0);
  38.     this.endFill();
  39.  
  40.     // ::: startet die überwachung setControll, sprich nur bei einem rollOver wird im
  41.     //     ClipEvent geprüft ob die rechte Maus geklickt wurde
  42.     this.onRollOver = function() { this.setControll(); };
  43.  
  44.     // ::: stoppt die Überwachung, das setzen des delete this.onEnterFrame; direkt ist
  45.     //     hier nicht möglich da Flash einen Rechtsklick auch als RollOut interpretiert
  46.     //     daher eine function mit einer 200 ms verzögerung damit setControll ASNative true
  47.     //     überhaupt noch aktiv werden kann.
  48.     this.onRollOut  = function() { this.clearControll();};
  49. };
  50.  
  51. // #################################### nun der test
  52. // :::: zwei test buttons anlegen :::
  53.  
  54. _root.createEmptyMovieClip("mcButton1", 1).createButton(0);
  55. // ::: button 1
  56. mcButton1.onPress = function()
  57. {
  58.     trace('left mouse down, '+this) 
  59. };
  60. mcButton1.onRightPress = function()
  61. {
  62.     trace('right mouse down, '+this)   
  63. };
  64.  
  65. _root.createEmptyMovieClip("mcButton2", 2).createButton(100);
  66. // ::: button 2
  67. mcButton2.onPress = function()
  68. {
  69.     trace('left mouse down, '+this) 
  70. };
  71. mcButton2.onRightPress = function()
  72. {
  73.     trace('right mouse down, '+this)   
  74. };
was mich an der sache ein wenig stört ist das ich extra
this.onRollOver = function() { this.setControll(); }; und this.onRollOut = function() { this.clearControll();};
auf jeden button anwenden muss damit mcButton1.onRightPress = function() {}
überhaupt funktionieren kann... gibt es da nicht eine bessere lösung?

mir ist schon k.. wenn ich ein zentrales onEnterFrame mache und nicht mit rollOver/Out
als auslöser bzw beendiger Arbeite ich mir das sparen könnte.. nur dann geht es halt
mörder auf die performance? da die Prüfung immer Arbeiten würde....
Oder gehe ich überhaupt die sache ganz falsch an?

broadcastMessage und listener bringen mich da auch nicht wirklich weiter denn letzt endlich
brauche ich immer eine schleife die prüft ob ASNative(800, 2)(2) = true ist....

Wie arbeiten denn die vorhandenen event handler?
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Alt 28-06-2003, 17:30   #2 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
habe es nun ein wenig umgebaut...
jetzt wäre es schon ein weniger freundlicher in der anwendung....
ActionScript:
  1. MovieClip.prototype.registerEventHandler = function()
  2. {
  3.     var $this = this;
  4.     var bKlick = false;
  5.     var setControll = function ()
  6.     {
  7.         $this.onEnterFrame = function()
  8.         {
  9.             if (ASNative(800, 2)(2))
  10.             {
  11.                 if (!bKlick)
  12.                 {
  13.                     $this.onRightPress();
  14.                     bKlick = true;
  15.                 }
  16.             }
  17.             else bKlick = false;
  18.         };
  19.     };
  20.     var clearControll = function ()
  21.     {
  22.         var deleteEnterFrame = function (t)
  23.             {
  24.                 delete t.onEnterFrame;
  25.                 clearInterval(sid);
  26.             };
  27.         var sid = setInterval(deleteEnterFrame, 200, $this);
  28.     };
  29.     this.onRollOut  = function(){ clearControll(); };
  30.     this.onRollOver = function(){ setControll(); };
  31. };
  32.  
  33.  
  34. // das ganze testen
  35. Stage.showMenu = false;
  36.  
  37. MovieClip.prototype.createButton = function(argX)
  38. {
  39.     this._x = argX;
  40.     this.beginFill(0xff0000);
  41.     this.lineTo(0, 50);
  42.     this.lineTo(50, 50);
  43.     this.lineTo(50, 0);
  44.     this.endFill();
  45. };
  46.  
  47. // ::: button 1
  48. _root.createEmptyMovieClip("mcButton1", 1).createButton(0);
  49. mcButton1.onRightPress = function()
  50. {
  51.     trace('right mouse down, '+this);
  52. };
  53. mcButton1.registerEventHandler();
  54.  
  55. // ::: ---------->
  56.  
  57. // ::: button 2
  58. _root.createEmptyMovieClip("mcButton2", 2).createButton(100);
  59. mcButton2.onRightPress = function()
  60. {
  61.     trace('right mouse down, '+this);
  62. };
  63. mcButton2.registerEventHandler();

aber meine frage ist noch immer aktiv
kann man da noch mehr raus holen.... oder ist die art der lösung eh ganz ok?
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)

Geändert von Scrawer (28-06-2003 um 17:32 Uhr)
Scrawer ist offline   Mit Zitat antworten
Alt 28-06-2003, 18:08   #3 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Bei mir zeigt sich beim Rechtsklick immer das Menue. Das macht die ganze Sache ziemlich witzlos, oder ?

mfgr .
bokel ist offline   Mit Zitat antworten
Alt 28-06-2003, 18:27   #4 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
ich finde, dass kann man so nicht sagen, du hast zwar immer noch ein menu, dennoch ist dieses um einifges kleiner un unauffälliger als normal.
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 28-06-2003, 18:56   #5 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
vergesst das menü.... um das geht es hier ja nicht
das ist mir auch k.. das dies noch da ist...
ich hätte das event genau so für die mittel maus machen können oder sonst was...
es geht hier um den Event Handler als solches...

ich bin grad auf was ganz anderes gestossen... grml...
das mit dem registerEventHandler kann ich mir schenken... da ich
onRollOut und onRollOver sperren würde... was auch logisch ist... man kann einem
object immer nur einmal den selben zuweisen...
somit müsste ich jedes mal clearControll und setControll manuell setzen....
wie macht ihr den sowas? kann ja nicht sein das es da keine bessere lösung gibt.

oder muss ich nun mit hitTest arbeiten und mir ein eigenes rollOver/out erstellen?

eigentlich möchte ich nur wissen ob die art wie ich einen event handler erstelle so richtig ist?
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)

Geändert von Scrawer (28-06-2003 um 19:08 Uhr)
Scrawer ist offline   Mit Zitat antworten
Alt 28-06-2003, 19:08   #6 (permalink)
Flash-Wüstling
 
Benutzerbild von pheidrias
 
Registriert seit: Dec 2001
Ort: Halle/Saale
Beiträge: 4.300
tja...ich hatte da auch schon mal erfolglos drüber nachgedacht .

@bokel : Wo man's brauchen kann ? Nun --> wenn man zum Beispiel abfangen will, daß jemand etwas unbemerkt in ein Textfeld kopiert (also statt STRG-V --> ist ja gut abfangbar) via rechteMaustaste, "Einfügen".
Ich sitze ja immer noch an meinen HTML-Textfeldern...

tanti saluti,
pheidrias
__________________
Ehrlich währt am LÄNGSTEN !
pheidrias ist offline   Mit Zitat antworten
Alt 28-06-2003, 19:14   #7 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
das mit hitTest kann auch nicht gehen... grrr..... dann hätte ich erst ein clipEvent das immer läuft... genau das will ich aber nicht... grml...

ich meinem fall möchte ich unter dem browser menü noch ein eigenes einblenden... bzw möchte ich mal in die richtung testen...
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Alt 28-06-2003, 19:31   #8 (permalink)
◘ ◘
 
Benutzerbild von beachmeat
 
Registriert seit: Dec 2001
Ort: Amsterdam
Beiträge: 6.126
wegen rollout usw. sperren - speicher die doch, udn ruf sie danach auf.
__________________
jeden Tag frisch
beachmeat ist offline   Mit Zitat antworten
Alt 28-06-2003, 19:37   #9 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
versteh nicht? wie meinst speichern...
wenn ich mache
ActionScript:
  1. this.onRollOver = function()
  2. {
  3.     trace('rollOver 1');
  4. };
  5. this.onRollOver = function()
  6. {
  7.     trace('rollOver 2');
  8. };
wird der erste durch den zweiten wieder überschrieben und immer nur 'rollOver 2' rauskommen

natürlich könnte ich ganz einfach setContoll und clearControll manuell bei jedem button rein nehmen und alles ist perfekt....

nur das möchte ich nicht
ich möchte einfach per include den handler wenn nötig in ein projekt reinladen und nur noch sagen registerEventHandler und dann schon mit onMyEvent.... weiterarbeiten.....
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)

Geändert von Scrawer (28-06-2003 um 19:38 Uhr)
Scrawer ist offline   Mit Zitat antworten
Alt 28-06-2003, 20:00   #10 (permalink)
◘ ◘
 
Benutzerbild von beachmeat
 
Registriert seit: Dec 2001
Ort: Amsterdam
Beiträge: 6.126
ich meine sowas wie:

this.oldOnPress = this.button.onPress
this.onPress = function()
{
// blabla
this.oldOnPress()

}
__________________
jeden Tag frisch
beachmeat ist offline   Mit Zitat antworten
Alt 28-06-2003, 20:08   #11 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
hm... das wird so auch nicht gehen... bzw... müsste ich immer noch jedes mal this.oldOnPress() mit rein nehmen.. genau das möchte ich verhindern...

aber du hast mir grad einen gedanken anstoß gegeben... gleich mal testen

[edit] getestet.... geht aber nicht.... ich werd das ganze nochmal von vorne angehen..
bin irgendwie in einer sackgasse
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)

Geändert von Scrawer (28-06-2003 um 20:33 Uhr)
Scrawer ist offline   Mit Zitat antworten
Alt 23-08-2004, 17:40   #12 (permalink)
ICD-Developer
 
Registriert seit: Jul 2003
Ort: AZ
Beiträge: 40
Muss man bei deinem Code noch irgendwas beachten? Denn irgendwie passiert bei mir nix!!! Das "trace(...)" wird bei mir nur bei einem links-klick und nie bei einem rechts-klick ausgeführt.

Gruß

IceCube-D
icecube-d ist offline   Mit Zitat antworten
Alt 23-08-2004, 22:16   #13 (permalink)
Duftbäumchen
 
Benutzerbild von derDan
 
Registriert seit: Jan 2004
Beiträge: 213
Hier was ich gefunden hab:

PHP-Code:
if (Key.isDown(1))
   
trace("linke Maus-Taste")
if (
Key.isDown(2))
   
trace("rechte Maus-Taste")
if (
Key.isDown(4))
   
trace("mittlere Maus-Taste")
if (
Key.isDown(5))
   
trace("linke seitliche Extra-Maus-Taste"
Leider loesen die den Key Event-handler NICHT aus. Aus was fuer gruenden auch immer. Du musst also wieder abfragen.
Naja zumindest vermeidest du ASNative...

derDan
derDan 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 06:35 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele