In this situation I agree with you, that rolling your own would be pretty easy and could prove to be less of a hassle; however, he does present a nice solution to the problem at hand.

Cor wrote:
Just interested.
Is all this worth the hassle?
I mean instead using a TextArea, I would go for a normal TextField and a
custom scrollbar all in 1 movieclip.
And set the needs.

Cor.


-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Muzak
Sent: zondag 29 maart 2009 1:20
To: Flash Coders List
Subject: Re: [Flashcoders] ?: how to prevent users to copy text from
aTextArea?


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
No virus found in this incoming message.
Checked by AVG - www.avg.com Version: 8.5.278 / Virus Database: 270.11.31/2028 - Release Date: 03/28/09
07:16:00

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

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

Reply via email to