2009-06-06 8 views
0

Ich habe eine Bezeichnung in AS3, die ich auswählbar sein möchte (.selectable = true) UND ich möchte, dass die ZwischenablageMenu mit der rechten Maustaste auf ALONG mit benutzerdefinierten Menüelementen angezeigt wird.Benutzerdefiniertes Kontextmenü MIT auswählbar aktiviert in AS3

Wenn ich dies tun:

var label:Label = new Label(); 
label.text = "test"; 
label.selectable = false; 

var contextMenu = new ContextMenu(); 
contextMenu.clipboardMenu = true; 
contextMenu.clipboardItems.copy = true; 
contextMenu.clipboardItems.selectAll = true; 
contextMenu.addItem(new ContextMenuItem("Test Item")); 
contextMenu.addItem(new ContextMenuItem("Test Item 2")); 

label.contextMenu = contextMenu; 

thing.addChild(label); 

Diese fast funktioniert - dass, wenn ich mit der rechten klicken Sie auf das Etikett ich ein Menü, das die Zwischenablage Elemente und meine benutzerdefinierte Elemente hat .... JEDOCH die Text im Etikett ist aufgrund der .selectable = false NICHT auswählbar. Dies macht die Menüoptionen der Zwischenablage unbrauchbar.

Wenn ich die Zeile:

label.selectable = false; 

zu:

label.selectable = true; 

Das Label ist wählbar - aber nur die Zwischenablage Menüpunkte vorhanden sind.

Wie kann ich sowohl das Label auswählbar machen als auch ein Menü mit meinen benutzerdefinierten Elementen + Standard-Zwischenablage-Elementen haben?

Danke für Ihre Hilfe.

BTW - dies ist mit einer AIR-Anwendung mit dem 3.2 SDK.

Antwort

1

Versuchen Sie es mit UITextField von Etiketten insted:

var label:UITextField = new UITextField(); 
label.text = "test"; 
label.selectable = true; 

var contextMenu:ContextMenu = new ContextMenu(); 
contextMenu.clipboardMenu = true; 
contextMenu.clipboardItems.copy = true; 
contextMenu.clipboardItems.selectAll = true; 
contextMenu.customItems = [new ContextMenuItem("Test Item"), new ContextMenuItem("Test Item 2")]; 

label.contextMenu = contextMenu; 

addChild(label); 

Auch können Sie Etiketten erweitern, um Kontextmenü direkt auf die innere UITextField gelten (diese Lösung funktioniert nur in der Luft, wenn Sie ContextMenu istead von NativeMenu verwenden können, und es funktioniert sowohl in AIR und in Flash-Player):

package test 
{ 
import mx.controls.Label; 
import flash.display.NativeMenu; 
import mx.core.UITextField; 
import mx.core.mx_internal; 

use namespace mx_internal; 
public class LabelWithContextMenu extends Label 
{ 
    public function LabelWithContextMenu() 
    { 
     super(); 
    } 

    override public function get contextMenu():NativeMenu 
    { 
     if (textField is UITextField) 
      return UITextField(textField).contextMenu; 
     else 
      return super.contextMenu; 
    } 

    override public function set contextMenu(cm:NativeMenu):void 
    { 
     if (textField == null) 
      createTextField(-1); 
     if (textField is UITextField) 
      UITextField(textField).contextMenu = cm; 
     else 
      super.contextMenu = cm; 
    } 

} 
} 
+0

Sehr schönes Beispiel - großartige Lösung. Vielen Dank. +1 MIT dem Kontrollkästchen. Sehr geschätzt. – Gabriel