The problem seems to be that TextArea uses the "enabled" value to set the inner 
textField's selectable property value.

 protected function updateTextFieldType():void {
  textField.type = (enabled && _editable) ? TextFieldType.INPUT : 
TextFieldType.DYNAMIC;
  textField.selectable = enabled;
  textField.wordWrap = _wordWrap;
  textField.multiline = true;
 }

So each time the updateTextFieldType() method is called, no matter what you set TextArea.textField.selectable to, it will revert to the TextArea.enabled value.
That's why :

   details_ta.textField.selectable = false;

doesn't really work.

So it's not really a bug, just a (very) bad decision.
Why it was done that way, who knows..

To get the TextArea to work the way you want, you can extend it and override the updateTextFieldType() method and add a selectable property, like so:

package {

import fl.controls.TextArea;
import flash.text.TextFieldType;

public class TextArea2 extends TextArea {

 private var _selectable:Boolean = true;

 override protected function updateTextFieldType():void {
  textField.type = (enabled && _editable) ? TextFieldType.INPUT : 
TextFieldType.DYNAMIC;
  textField.selectable = _selectable;
  textField.wordWrap = _wordWrap;
  textField.multiline = true;
 }

 public function get selectable():Boolean {
  return _selectable;
 }
 public function set selectable(value:Boolean):void {
  _selectable = value;
  super.textField.selectable = value;
  updateTextFieldType()
 }

}
}


Tested with the code you provided earlier (normal TextArea on stage):

package {

import flash.display.Sprite;
import fl.controls.TextArea;
import flash.text.TextField;
import flash.events.Event;
import TextArea2;

public class TestTextArea extends Sprite {

 public var details_ta:TextArea;
 public var details2_ta:TextArea2;

 public function TestTextArea() {
  addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
  init();
 }

 private function init():void {
  trace("TestTextArea ::: init");
  details2_ta = new TextArea2();
  details2_ta.selectable = false;
  details2_ta.x = 220;
  details2_ta.y = 10;
  details2_ta.width = 200;
  details2_ta.height = 100;
  addChild(details2_ta);
 }

 private function addedToStageHandler(evt:Event):void {
  trace("TestTextArea ::: addedToStageHandler");
  var msg:String = "<b>Lorem ipsum dolor sit amet,</b> consectetuer adipiscing 
elit.";
  details_ta.htmlText = msg;
  details2_ta.htmlText = msg;
 }

}
}

regards,
Muzak

----- Original Message ----- From: "Keith Reinfeld" <[email protected]>
To: "'Flash Coders List'" <[email protected]>
Sent: Saturday, March 28, 2009 10:11 PM
Subject: RE: [Flashcoders] ?: how to prevent users to copy text from aTextArea?


Then again there is this:

package{
//imports
import fl.controls.TextArea;
import flash.text.TextField;

public class CustomTextArea extends TextArea{
//vars
private var internalTextField:TextField;

public function CustomTextArea(){
super();
internalTextField = TextField(this.textField);
}

public function set selectable(b:Boolean):void{
internalTextField.mouseEnabled = b;
this.editable = b;
}

public function get selectable():Boolean{
return internalTextField.mouseEnabled;
}
}
}

Example usage:

package{
//imports
import flash.display.MovieClip;
import CustomTextArea;

public class Application extends MovieClip{
//vars
private var customTA:CustomTextArea;

public function Application(){
init();
//addEventListener(KeyboardEvent.KEY_DOWN,
onUpArrow);
}

private function init():void{
customTA = new CustomTextArea();

addChild(customTA);
customTA.x = 0;
customTA.y = 0;
customTA.width = 150;
customTA.height = 90;
customTA.htmlText = "<font color='#0000FF'><b>Lorem
ipsum dolor sit amet,</b> consectetuer adipiscing elit.</font><font
color='#0000FF'><b>Lorem ipsum dolor sit amet,</b> consectetuer adipiscing
elit.</font><font color='#0000FF'><b>Lorem ipsum dolor sit amet,</b>
consectetuer adipiscing elit.</font><font color='#0000FF'><b>Lorem ipsum
dolor sit amet,</b> consectetuer adipiscing elit.</font>";

trace("customTA.selectable =",customTA.selectable);
customTA.selectable = false;
trace("customTA.selectable =",customTA.selectable);
}
}
}

HTH

Regards,

-Keith

_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to